STM32---TIM

1.
在编辑定时器代码时,发现刚配置完定时器即使没有使能定时器也会进入一次定时器中断

后来才发现原来在TIM_TimeBaseInit()函数中会产生一次更新事件

/* Generate an update event to reload the Prescaler and the Repetition counter 
     values immediately */  
  TIMx->EGR = TIM_PSCReloadMode_Immediate;

会加载重计数器,因此在刚配置完定时器后需要手动清除一次标识

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

while(TIM_GetFlagStatus(TIM3, TIM_IT_Update) == RESET);//等待软件更新数据  
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清中断 

2.
COM事件
是用手动产生的,库里面有个TIM_EventSource函数,用这个函数可产生COM事件。预先将CCXE,CCXNE,OCXM配置好,然后调这个函数产生COM事件。我看到的实例是用SYSTICK定时器产生中断,在这个中断函数中调用TIM_EventSource函数。
正好这个有玩过,控制过电机,对这个深有体会,我打个比方说:
比如无刷电机换向时,一般是三相要同时换向的,但是你在软里设置换向时肯定是一次只能设置一相,这就达不到三相同时换向了不。其实简单的办法就是启用 STM32的COM事件,你先逐个设置好每相的换向(注意:此时虽然设置了,但实际上并不会进行换向),然后再调用COM事件,此时,三相将同时换向,就 这么来的。

你可能感兴趣的:(ARM,STM,stm32,TIM)