最近在做STM32定時器輸出PWM波時,碰到一個問題記錄一下。
由於要輸出 2Hz 的PWM波形,PWM引腳使用定時器 TIM1輸出波形,TIM1定時器設定爲0分頻,查看函數傳參爲32位數據,查看定時器溢出寄存器ARR爲32位寄存器,因此計算所得溢出值可以滿足要求,ARR的值應該爲83999999。
圖1 32位的數據參數
圖2 32位的寄存器
但是設置後,通過示波器測量的PWM頻率並不是2Hz,而是達到了3K左右。
添加了調試信息,如下:
測試時, 得到如下調試信息:
這就已經很明顯了,我設置的參數爲41999999,而實際ARR寄存器的值爲56959;設置的參數值爲83999999,實際ARR的值爲48383,。最有可能的就是ARR寄存器的值捨棄了高16位數據,通過計算器可以看出:
通過計算器可以看出,ARR寄存器的值,僅僅只有16位的數據,而STM32上函數傳參32位,寄存器標註32位,實際只有16位。
查看手冊,定時器確實只有16位,因此大家使用時一定要注意,別像我這樣犯這種低級的錯誤。