新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 使用STM32的單個(gè)普通定時(shí)器產(chǎn)生4路不同頻率的方波

使用STM32的單個(gè)普通定時(shí)器產(chǎn)生4路不同頻率的方波

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
STM32普通定時(shí)器有四路輸出:TIMx_CH1、TIMx_CH2、TIMx_CH3和TIMx_CH4,可以使用輸出比較的方法產(chǎn)生不同頻率方波輸出,簡單的方法是:
1)設(shè)置計(jì)數(shù)器為向上計(jì)數(shù)模式,將自動重裝載寄存器設(shè)置為0xFFFF;這樣計(jì)數(shù)器會循環(huán)計(jì)數(shù)。
2)每個(gè)定時(shí)器通道設(shè)置為輸出比較模式,并設(shè)置比較匹配時(shí)對應(yīng)的輸出管腳翻轉(zhuǎn)輸出。
3)按照輸出波形的半波周期計(jì)算出一個(gè)數(shù)值稱作Half_Cyc。例如:定時(shí)器的時(shí)鐘頻率是72MHz,需要產(chǎn)生3456Hz的方波,則Half_Cyc = 72M/(3456*2) = 41667;如需要產(chǎn)生200kHz的方波,則Half_Cyc = 72M/(200k*2) = 180。
4)設(shè)置每個(gè)通道在輸出比較匹配時(shí)產(chǎn)生中斷,在中斷中將比較寄存器的數(shù)值讀出并加上Half_Cyc的數(shù)值,如果計(jì)算出的數(shù)值超過16位則舍棄超出的部分,再把這個(gè)新的數(shù)值寫回相應(yīng)的比較寄存器;這樣下次比較成功將剛好發(fā)生在一個(gè)半波周期之后,對應(yīng)的管腳將被翻轉(zhuǎn)。
上述方法在要求頻率不高時(shí)十分有效,但如果頻率較高時(shí)會有頻繁的中斷產(chǎn)生,這時(shí)可以使用DMA加以改善。
上述方法的基礎(chǔ)是通過不斷改變輸出比較的匹配點(diǎn)進(jìn)而產(chǎn)生管腳翻轉(zhuǎn)輸出,我們可以事先計(jì)算好這些比較匹配點(diǎn),并通過DMA在每次匹配時(shí)逐次更新比較寄存器的內(nèi)容:
方法一、使用兩個(gè)DMA緩沖區(qū),在DMA控制器操作一個(gè)緩沖區(qū)時(shí),程序計(jì)算好另一個(gè)緩沖區(qū)的數(shù)據(jù),然后在DMA傳輸結(jié)束的中斷處理中切換DMA操作的緩沖區(qū)。
方法二、使用一個(gè)大的DMA緩沖區(qū),先計(jì)算好半個(gè)緩沖區(qū)的內(nèi)容,啟動DMA為循環(huán)模式并設(shè)置它在DMA傳送一半和完成時(shí)均產(chǎn)生中斷;啟動DMA后繼續(xù)計(jì)算好另外半個(gè)緩沖區(qū)的內(nèi)容,當(dāng)發(fā)生DMA中斷時(shí)表示有一半緩沖區(qū)變空,這時(shí)在中斷處理中計(jì)算好這半個(gè)緩沖區(qū)。
只要DMA緩沖區(qū)開的足夠大,方法二可以保證CPU有充足的時(shí)間進(jìn)行數(shù)據(jù)處理,并且保證不斷地輸出波形。
聲明:以上說明沒有經(jīng)過實(shí)際驗(yàn)證,只是一個(gè)原理說明,也許還有沒考慮周全的地方。


評論


技術(shù)專區(qū)

關(guān)閉