PWM 输入与输出,昨晚在写程序的时候我遇到一个BUG,我怎么也没调出来,那个时候才有点绝望。
问题
写的是PA1单通道输入捕获,PA6单通道输出,我写好配置之后我测量都是正确的,再往后写上改变输出频率之后在进行测量,立马错误,完全错乱,和我预想的全然不同;
-
我一直以为是我在输入捕获时出了错,当时想了很多很多,方向都落在了输入捕获上,从未从输出上想问题。
-
在早上我通过示波器看输出波形的时候,看到了1Hz的波形不是1Hz,7Hz以后的波形都是正确的,没有问题;然后就想怎么输出1Hz的波形,突然明白,我通过Toggle进行输出PWM波,但是分频是72分频,然后计数,周期最大是65.536*2ms左右,达不到1s,输出波形自然不是我计算的频率,输入捕获自然错乱。
收获:
- 明白输入捕获中断的新写法,学习网上的写法,突然发现,突然发现原来如此简单;
if(TIM_GetITStatus(TIM2, TIM_IT_CC2) == SET)
{
/* Clear TIM3 Capture compare interrupt pending bit */
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
cnt = TIM2->CCR2 - cnt_old + num*65536;
cnt_old = TIM2->CCR2;
}
- 写程序时要一开始在脑海里计划处大概的程序走向,要不然很不好写
- 在程序运行时有些代码只需要执行一次,我想就不让它执行两次,最好一次解决问题就完事,这样腾出来的时间就很多了,在功能之间相互影响就不会很大;就打简单的比方:写数据进入E2PROM,很多数据就得马上写入,一个写语句就得延时5ms,多了时间就多了;并且写多次也没有意义;
网友评论