87 lines
2.7 KiB
C
87 lines
2.7 KiB
C
|
|
#include "stc32g.h"
|
|||
|
|
#include "intrins.h"
|
|||
|
|
|
|||
|
|
#define MAIN_Fosc 24000000L // <20><>ʱ<EFBFBD><CAB1>24MHz
|
|||
|
|
typedef unsigned char u8;
|
|||
|
|
typedef unsigned int u16;
|
|||
|
|
typedef unsigned long u32;
|
|||
|
|
|
|||
|
|
/**************************** <20>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD> 400Hz PWM ****************************/
|
|||
|
|
//#define PWM_FREQ 400 // Ŀ<><C4BF>Ƶ<EFBFBD><C6B5>
|
|||
|
|
//#define PERIOD 59999 // 24MHz<48><7A> 400Hz <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ֵ
|
|||
|
|
//#define DUTY 18000 // 30%ռ<>ձ<EFBFBD> (PERIOD/2)
|
|||
|
|
|
|||
|
|
/**************************** <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>50Hz / 30%ռ<>ձ<EFBFBD> ****************************/
|
|||
|
|
#define PWM_FREQ 50
|
|||
|
|
#define PSC_VAL 239 // Ԥ<><D4A4>Ƶֵ<C6B5><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define PERIOD 1999 // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>16λ<36>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ65535<33><35><EFBFBD>Ϲ棩
|
|||
|
|
#define DUTY 600 // 30%ռ<>ձ<EFBFBD> (1999*0.3=600)
|
|||
|
|
|
|||
|
|
/**************************** <20>ٷ<EFBFBD><D9B7>궨<EFBFBD><EAB6A8> <20><><EFBFBD><EFBFBD> ****************************/
|
|||
|
|
#define PWM1_0 0x00 //P:P1.0 N:P1.1
|
|||
|
|
#define PWM1_1 0x01 //P:P2.0 N:P2.1
|
|||
|
|
#define PWM1_2 0x02 //P:P6.0 N:P6.1 ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ENO1P 0x01
|
|||
|
|
|
|||
|
|
/*****************************************************************************/
|
|||
|
|
void UpdatePwm(void);
|
|||
|
|
|
|||
|
|
/******************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************/
|
|||
|
|
void main(void)
|
|||
|
|
{
|
|||
|
|
WTST = 0;
|
|||
|
|
EAXFR = 1; // <20><>չ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
CKCON = 0;
|
|||
|
|
|
|||
|
|
// IO<49>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
P0M1 = 0x00; P0M0 = 0x00;
|
|||
|
|
P1M1 = 0x00; P1M0 = 0x00;
|
|||
|
|
P2M1 = 0x00; P2M0 = 0x00;
|
|||
|
|
P3M1 = 0x00; P3M0 = 0x00;
|
|||
|
|
P4M1 = 0x00; P4M0 = 0x00;
|
|||
|
|
P5M1 = 0x00; P5M0 = 0x00;
|
|||
|
|
P6M1 = 0x00; P6M0 = 0x00;
|
|||
|
|
P7M1 = 0x00; P7M0 = 0x00;
|
|||
|
|
|
|||
|
|
// ===================== PWM Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =====================
|
|||
|
|
PWMA_ENO = 0x00;
|
|||
|
|
PWMA_ENO |= ENO1P; // ʹ<><CAB9>PWM1ͨ<31><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
PWMA_CCER1 = 0x00;
|
|||
|
|
PWMA_CCMR1 = 0x68; // PWMģʽ1<CABD><31><EFBFBD><EFBFBD>
|
|||
|
|
PWMA_CCER1 = 0x01; // <20>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
PWMA_PS = 0x00;
|
|||
|
|
PWMA_PS |= PWM1_2; // ? ѡ<><D1A1>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>P6.0 <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// ========== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֮ǰȱʧ<C8B1><CAA7><EFBFBD><EFBFBD> ==========
|
|||
|
|
PWMA_PSCRH = (u8)(PSC_VAL >> 8);
|
|||
|
|
PWMA_PSCRL = (u8)PSC_VAL;
|
|||
|
|
|
|||
|
|
UpdatePwm(); // <20><><EFBFBD><EFBFBD>400Hz/50%ռ<>ձȲ<D5B1><C8B2><EFBFBD>
|
|||
|
|
|
|||
|
|
PWMA_BKR = 0x80; // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
|
|||
|
|
PWMA_CR1 = 0x81; // <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD>رյ<D8B1><D5B5><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM
|
|||
|
|
|
|||
|
|
EA = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
|
|||
|
|
|
|||
|
|
while (1)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>κβ<CEBA><CEB2><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>400Hz PWM
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//========================================================================
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: UpdatePwm(void)
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: <20>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD> 400Hz + 50%ռ<>ձ<EFBFBD>
|
|||
|
|
//========================================================================
|
|||
|
|
void UpdatePwm(void)
|
|||
|
|
{
|
|||
|
|
// <20>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>ڣ<EFBFBD>59999 <20><> 400Hz
|
|||
|
|
PWMA_ARRH = (u8)(PERIOD >> 8);
|
|||
|
|
PWMA_ARRL = (u8)PERIOD;
|
|||
|
|
|
|||
|
|
// <20>̶<EFBFBD>ռ<EFBFBD>ձȣ<D5B1>29999 <20><> 50%
|
|||
|
|
PWMA_CCR1H = (u8)(DUTY >> 8);
|
|||
|
|
PWMA_CCR1L = (u8)DUTY;
|
|||
|
|
}
|