定时器开溢出中断,在中断函数中关闭定时器。。
前提是PWM波形是一个周期内先低后高,
可以设成
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
模式1,低电平有效,这样就是先低后高。
具体看链接:
https://blog.csdn.net/qq_41976419/article/details/106840092
更新:
以上并没有保证关闭定时器时是低电平,所以又改了。
先将占空比调到0,也就是全都是低电平,然后在溢出中断中先执行一个周期,下一周期关闭定时器。
change_pulse(0);//先将占空比调为0 全部为低电平
s_Timer_per.tim15_stop_flag=1;
void TIM15_IRQHandler(void)
{
if(TIM_GetITStatus(TIM15, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM15, TIM_IT_Update );
if(s_Timer_per.tim15_stop_flag==1)//修改占空比后先执行一个周期
{
s_Timer_per.tim15_stop_flag=2;
}
else if(s_Timer_per.tim15_stop_flag==2)关闭定时器
{
TIM_Cmd(TIM15, DISABLE);
s_Timer_per.tim15_stop_flag =0;
}
}
}