使用STM32的單個普通定時器產生4路不同頻率的方波

STM32的普通定時器有四路輸出:TIMx_CH1、TIMx_CH2、TIMx_CH3和TIMx_CH4,可以使用輸出比較的方法產生不同頻率的方波輸出,簡單的方法是:

1)設置計數器爲向上計數模式,將自動重裝載寄存器設置爲0xFFFF;這樣計數器會循環計數。

2)每個定時器通道設置爲輸出比較模式,並設置比較匹配時對應的輸出管腳翻轉輸出。

3)按照輸出波形的半波週期計算出一個數值稱作Half_Cyc。例如:定時器的時鐘頻率是72MHz,需要產生3456Hz的方波,則Half_Cyc = 72M/(3456*2) = 41667;如需要產生200kHz的方波,則Half_Cyc = 72M/(200k*2) = 180。

4)設置每個通道在輸出比較匹配時產生中斷,在中斷中將比較寄存器的數值讀出並加上Half_Cyc的數值,如果計算出的數值超過16位則捨棄超出的部分,再把這個新的數值寫回相應的比較寄存器;這樣下次比較成功將剛好發生在一個半波週期之後,對應的管腳將被翻轉。
上述方法在要求頻率不高時十分有效,但如果頻率較高時會有頻繁的中斷產生,這時可以使用DMA加以改善。

 

上述方法的基礎是通過不斷改變輸出比較的匹配點進而產生管腳翻轉輸出,我們可以事先計算好這些比較匹配點,並通過DMA在每次匹配時逐次更新比較寄存器的內容:

方法一、使用兩個DMA緩衝區,在DMA控制器操作一個緩衝區時,程序計算好另一個緩衝區的數據,然後在DMA傳輸結束的中斷處理中切換DMA操作的緩衝區。

方法二、使用一個大的DMA緩衝區,先計算好半個緩衝區的內容,啓動DMA爲循環模式並設置它在DMA傳送一半和完成時均產生中斷;啓動DMA後繼續計算好另外半個緩衝區的內容,當發生DMA中斷時表示有一半緩衝區變空,這時在中斷處理中計算好這半個緩衝區。

只要DMA緩衝區開的足夠大,方法二可以保證CPU有充足的時間進行數據處理,並且保證不斷地輸出波形。

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