Files
100_STC_PWM/main.c

87 lines
2.7 KiB
C
Raw Normal View History

#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;
}