stm32定時器級聯 TIM級聯 組成32位定時器

某些低成本版stm32芯片(比如F1系列)不具有32位計時器,自帶的TIM均爲16位。當你需要進行某些同時需要精度與時長的計時內容時,16位計時器並不夠用(72M頻率不分頻直接計數,那麼計滿16位定時器只需要910us,如果是32位呢,需要59.6s,對於某些毫秒級高精度計時來說,使用32位定時器還是很有必要的。

甚至,你還可以繼續級聯,用3個計時器組成48位計時器,當然我只測試到了48位,只用到32位,更多級聯有待測試。

測試效果: TIM1由72M系統時鐘直接驅動,TIM2由TIM1計滿產生的信號驅動,TIM3由TIM2計滿產生信號驅動。

參數設置:使用cubemx+hal庫完成設置,

主計時器(TIM1)參數設置如下:

除紅圈外內容都和平時的TIM使用設置一致,另外就是注意下counter period與auto-reload preload兩個參數,auto-reload應當打開,不然一個週期之後計數會停止;

解釋下:

        MSM bit應爲輸出級聯信號的配置寄存器,使能該選項可以使計時器輸出觸發信號。主計時器應使能該選項。

        trigger event selection是觸發信號選項,我這裏只嘗試了兩個:enable(cnt_en)是同步計數,也就是主計時器每次被觸發都會輸出信號,適合於多計時器聯動輸出的情況;update event是更新輸出,也就是該計時器計滿的時候才輸出信號,適合於多計時器聯動組成一個更寬範圍計時器的情況,比如16位TIM + 16位TIM = 32位TIM... 

從計時器(TIM2)設置如下:

解釋下:

1,參數1必須設爲external clock mode1,即由輸入觸發信號驅動計時器工作;

2,參數2爲計時器觸發信號的輸入源。請參考這張圖表:

舉個栗子:我的從定時器爲TIM2,那麼slave TIM爲TIM2,看這一行,TIM1對應ITR0,那麼cubemx中trigger source參數就是ITR0;我的第二個從定時器爲TIM3,第三行中TIM2對應ITR1,那麼cubemx中tim3的trigger source參數應該爲ITR1。

3,參數3與是否進行下一級級聯有關。如果你還要繼續級聯定時器,那麼請參考上文中TIM1該位置的參數設置;如果你定時器級聯到此爲止,那麼按cubemx默認來就可以。

另外,級聯定時器可以作爲普通定時器、輸入捕獲定時器使用,能不能作爲PWM輸出使用我沒有嘗試,感覺需要進一步設置,歡迎用過的朋友前來交流。

總結:32位單片機不給32位定時器,真摳!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章