1、定时器改周期值在定时中断函数里改不行,只能是在中断中加标志位,然后在主循环中检测标志位修改周期。
2、定时器输出pwm时关闭需注意,不能直接用 TIM_Cmd(TIM1, DISABLE);要保证关闭后是低电平,今天试的一种方法:因为明确知道一个周期内哪个时间段是低电平,设置一个CCR2,中断函数里关闭定时器。
要关闭定时器时先用标志位s_Timer_per.tim1_stop_flag =1; 再在中断函数中检测:
void TIM1_CC_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_CC2 );
if(s_Timer_per.tim1_stop_flag==1)
{
TIM_Cmd(TIM1, DISABLE);
s_Timer_per.tim1_stop_flag=0;
}
}
注:定时器1的更新中断和捕获比较中断用的中断函数不同,定义时也不同,TIM1_BRK_UP_TRG_COM_IRQn和TIM1_CC_IRQn
下面是更新中断函数:
void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update );
}
}
3、 在主从定时器中,主定时器的触发条件设置:
TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update);//更新产生触发输出
TIM_TRGOSource_Update是定时更新时触发
TIM_TRGOSource_OC1Ref是设的CCR1到时触发
4、stm32定时器--通道pwm输出参数TIM_OCInitStructure如何配置
6、STM32的定时器 TIM_ARRPreloadConfig开与不开到底有什么影响