TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
编写中断服务函数
在输出比较中断中,唯一要做的事情就是把当前CNT的值取出,加上脉冲长度X,写入输出比较寄存器。 当计数器达到0XFFFF(之前设定的重装载值)后,再加一会自动变为0. 例如,当前CNT值为0XFFFF,脉冲长度为5,很明显,输出比较寄存器应设置为0X0004才可触发下一次中断,而不是0X10004,这样会造成溢出。 因此将CNT的值与脉冲长度相加后,需要取0XFFFF的余数后,再写入输出比较寄存器。 int t_m=5;//低电平和高电平的长度void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { TIM_SetCompare1(TIM2,(TIM2->CNT+t_m)%0XFFFF); TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); }}
动态调整中断服务函数中的变量t_m,即可达到修改PWM频率的效果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!