現(xiàn)在有人有這樣一個需求,他使用STM32F429芯片做開發(fā),其中用到32位的TIM2實現(xiàn)3路PWM輸出。
另外有上位機跟STM32的UART接口相連,上位機可能不定期地需要通過UART接口給STM32發(fā)送新的占空比參數(shù),而且每次都發(fā)送3個比較輸出通道的參數(shù)【12個字節(jié)】。
如何快捷地實現(xiàn)這個功能呢?要求收到數(shù)據(jù)后盡快修改3個比較通道的參數(shù)。
前一篇重點介紹了利用DMAFIFO和UART接收事件觸發(fā)DMA傳輸實現(xiàn)了3個CCR寄存器的批量修改。
我們不妨就該話題稍作拓展,不再局限于某個STM32系列,而是從整個STM32的資源上考慮當前需求。上次提到3種實現(xiàn)方案,我想借此機會再給大家介紹另外一種實現(xiàn)方案,以拓寬未來解決類似問題的思路。
STM32 家族里有些系列是內(nèi)置DMAMUX模塊的,即DMA路由器,利用DMAMUX可以實現(xiàn)DMA請求與DMA傳輸通道的靈活配置;可以將一些通常不能直接產(chǎn)生DMA請求的事件通過它后而可以產(chǎn)生DMA請求;或者基于部分DMA完成事件產(chǎn)生新的DMA請求發(fā)起新的傳輸。目前,STM32家族中內(nèi)置DMAMUX模塊的系列有下面這些:
那么 我這里就利用DMAMUX的其中一個特性,即通過它可以讓部分DMA完成事件產(chǎn)生新的DMA請求從而發(fā)起新的DMA傳輸。具體到這里,我們讓UART 的DMA接收完成事件映射到DMAMUX的DMA generator,再申請新的DMA請求,讓DMA將UART 接收到的數(shù)據(jù)從內(nèi)存搬運到定時器的3個CCR寄存器,形成一個級聯(lián)模式。大致流程是:
上位機數(shù)據(jù) 經(jīng)UARTRX+DMA 接收到內(nèi)存, 然后DMA 接收完成事件 經(jīng)DMAMUX申請的新的DMA請求和 DMA通道,再將內(nèi)存數(shù)據(jù)寫到定時器的3個比較寄存器控制占空比。
下面我使用STM32G4系列芯片重點演示下實現(xiàn)過程,配置是關鍵。至于原理細節(jié)還請閱讀相關手冊。
我還是用UART1自發(fā)自收來模擬上位機發(fā)送新的CCR數(shù)據(jù)。
TIM2使用3個通道做PWM輸出,使用CubeMx工具的參考配置如下:
我同樣開啟USART1的TX/RX事件的DMA傳輸功能。參考配置如下【注意UART RX DMA的配置與前一篇的差別】:
注意上圖中的事件使能及DMA請求配置。接著看看下面關于DMA generator的相關配置:
請關注上圖中所有配置。其中,DMAMUX生成的DMA請求由DMA2_CH2響應,工作在Circular模式。
我依然使用32位TxData【3】數(shù)組存放待傳輸?shù)?個CCR值,用RxData[3]存放接收的數(shù)據(jù)。使用CubeMx配置完成后,添加相關用戶代碼?!净贖AL庫組織代碼】
我在UARTDMA接收完成中斷的回調(diào)函數(shù)里對接收到新數(shù)據(jù)事件做標志更新。
為了便于演示,我依然在主程序里循環(huán)模擬遠程命令,動態(tài)修改CCR寄存器的值。參考代碼如下截圖:
稍作調(diào)試我們就可以查看輸出結(jié)果【借助斷點實時查看內(nèi)存和寄存器的數(shù)據(jù)】:
從上面貼圖不難看出,從UART的發(fā)送數(shù)據(jù)、接收到的內(nèi)存數(shù)據(jù)、寄存器的數(shù)據(jù)都在保持同步更新。
在上面演示過程中,我是將DMAMUX生成的新DMA請求申請的 DMA通道配置為Circular模式來著手測試的,如果配置為Normal模式也應該是可以的,只是需將Generator生成的新的DMA配置以及用戶代碼稍微做些調(diào)整,有興趣的話可以自行測試驗證。
-
STM32
+關注
關注
2291文章
11022瀏覽量
363446 -
占空比
+關注
關注
0文章
112瀏覽量
29517 -
uart
+關注
關注
22文章
1275瀏覽量
103577
原文標題:遠程修改STM32 TIMER占空比的方案續(xù)1
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32 TIMER+DMA輸出PWM異常案例的問題解析

利用TIMER測量信號周期及占空比的精度

STM32F103 timer8配置PWM輸出中間出現(xiàn)無法輸出PWM現(xiàn)象
教你一手 基于STM32Cube庫的Timer捕獲應用
CC2530 Timer3 P1_3做為PWM輸出,可以修改輸出頻率,無法修改占空比,請問怎么辦?
STM32產(chǎn)生固定頻率和占空比可變的PWM

stm32捕獲占空比_「話說定時器系列」之七:STM32定時器比較輸出話題

通過STM32 UART及DMA修改TIMER占空比示例
STM32G4 Advanced Timer Break功能詳解

評論