<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>