PWM 輸入與輸出,昨晚在寫程序的時(shí)候我遇到一個(gè)BUG莺葫,我怎么也沒調(diào)出來匪凉,那個(gè)時(shí)候才有點(diǎn)絕望。
問題
寫的是PA1單通道輸入捕獲捺檬,PA6單通道輸出再层,我寫好配置之后我測(cè)量都是正確的,再往后寫上改變輸出頻率之后在進(jìn)行測(cè)量堡纬,立馬錯(cuò)誤聂受,完全錯(cuò)亂,和我預(yù)想的全然不同烤镐;
我一直以為是我在輸入捕獲時(shí)出了錯(cuò)蛋济,當(dāng)時(shí)想了很多很多,方向都落在了輸入捕獲上炮叶,從未從輸出上想問題碗旅。
在早上我通過示波器看輸出波形的時(shí)候,看到了1Hz的波形不是1Hz镜悉,7Hz以后的波形都是正確的祟辟,沒有問題;然后就想怎么輸出1Hz的波形侣肄,突然明白旧困,我通過Toggle進(jìn)行輸出PWM波,但是分頻是72分頻茫孔,然后計(jì)數(shù)叮喳,周期最大是65.536*2ms左右被芳,達(dá)不到1s缰贝,輸出波形自然不是我計(jì)算的頻率,輸入捕獲自然錯(cuò)亂畔濒。
收獲:
- 明白輸入捕獲中斷的新寫法剩晴,學(xué)習(xí)網(wǎng)上的寫法,突然發(fā)現(xiàn)侵状,突然發(fā)現(xiàn)原來如此簡(jiǎn)單赞弥;
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;
}
- 寫程序時(shí)要一開始在腦海里計(jì)劃處大概的程序走向,要不然很不好寫
- 在程序運(yùn)行時(shí)有些代碼只需要執(zhí)行一次趣兄,我想就不讓它執(zhí)行兩次绽左,最好一次解決問題就完事,這樣騰出來的時(shí)間就很多了艇潭,在功能之間相互影響就不會(huì)很大拼窥;就打簡(jiǎn)單的比方:寫數(shù)據(jù)進(jìn)入E2PROM戏蔑,很多數(shù)據(jù)就得馬上寫入,一個(gè)寫語(yǔ)句就得延時(shí)5ms鲁纠,多了時(shí)間就多了总棵;并且寫多次也沒有意義;