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事件,此时,三相将同时换向,就 这么来的。