本例程同样是设置PB0、PB1为TIM1_CH2N、TIM1_CH2,控制两个LED交替闪动。与上个例程最大的区别就是使用TIM_ForcedOC1Config
函数设置pwm的输出使能。当设置PWM输出为0%占空比时,禁止PWM输出,当设置PWM输出为100%占空比时,使能PWM输出。
通过TIM_SetCompare2
可以直接修改占空比。
1 PWM占空比设置函数
void SetTim1PWMduty0(void)
{
TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_Active);
}
void SetTim1PWMduty100(void)
{
TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_InActive);
}
unsigned int formode = 0;
void SetTim1PWMduty(uint32_t duty)
{
u32 PMWpluse = 0;
// duty = 600;
if((duty > 0) && (duty < 1000)) {
if(formode == 1) {
formode = 0;
TIM_ForcedOC1Config(TIM1, TIM_OCMode_PWM1);
}
//PMWpluse = (3000 * duty)/1000;
PMWpluse = (30000 * duty) / 1000;
TIM_SetCompare2(TIM1, PMWpluse);
} else if(duty == 0) {
if(formode == 0) {
formode = 1;
}
SetTim1PWMduty0();
} else {
if(formode == 0) {
formode = 1;
}
SetTim1PWMduty100();
}
}
2 main函数流程
int main(void)
{
uint32_t duty = 0;
SystemInit();
initGPIO_Timer1();
initTIM1(479, 29999, 10000); //config TIM to PWM output
initNVIC_TIM1();
OnTIM1(); //enable TIM;
while(1) {
duty = 500;
SetTim1PWMduty(duty);
}
}
官方例程的修正已基本完成,需要程序的同学可以到百度网盘下载。
提取码:0o5i