不废话,直接上代码
// FUNCMCON2
#define G1 (1)
#define G2 (2)
#define G3 (3)
#define TIMER3 (8)
#define TIMER4 (12)
#define TIMER5 (16)
#define T3G1 (G1<<TIMER3)
#define T3G2 (G2<<TIMER3)
#define T3G3 (G3<<TIMER3)
#define T4G1 (G1<<TIMER4)
#define T4G2 (G2<<TIMER4)
#define T4G3 (G3<<TIMER4)
#define T5G1 (G1<<TIMER5)
#define T5G2 (G2<<TIMER5)
#define T5G3 (G3<<TIMER5)
// TMRXCON X= 3,4,5
#define PWM0EN BIT(9)
#define PWM1EN BIT(10)
#define PWM2EN BIT(11)
#define TIMER_ENABLE BIT(0)
void user_pwm_init(void)
{
GPIOBDIR &= ~BIT(2); //output,
GPIOBDE |= BIT(2); //digital io,
GPIOBFEN |= BIT(2); //function io enable ;
GPIOEDIR &= ~(BIT(6)|BIT(7)); //output,
GPIOEDE |= (BIT(6)|BIT(7)); //digital io,
GPIOEFEN |= (BIT(6)|BIT(7)); //function io enable ;
FUNCMCON2 = (T3G1 | T4G1);
TMR3CON = 0X00;//时钟源默认为系统时钟 24M
TMR3CNT = 0;
TMR3PR = PWM_DUTY + 1; // //例如为 24M 时, 频率为 24M/(12000*4) = 500HZ, 即周期为0.002S. //U32
//TMR3DUTY0 = 0;// 负占空比,此时为全亮
//TMR3DUTY1 = 12000 - 1;// 25%
TMR3DUTY2 = PWM_DUTY;//12000*2-1;// 50%
TMR3CON |= (PWM2EN);
TMR3CON |= TIMER_ENABLE;
TMR4CON = 0X00;//时钟源默认为系统时钟 24M
TMR4CNT = 0;
TMR4PR = PWM_DUTY + 1; // //例如为 24M 时, 频率为 24M/(12000*4) = 500HZ, 即周期为0.002S. //U32
//TMR4DUTY0 = 0;// 负占空比,此时为全亮
TMR4DUTY1 = 0;// 负占空比,此时为全亮
TMR4DUTY2 = 0;// 负占空比,此时为全亮
TMR4CON |= (PWM1EN|PWM2EN);
TMR4CON |= TIMER_ENABLE;
}