現在有人有這樣一個需求,他使用STM32F429芯片做開發,其中用到32位的TIM2實現3路PWM輸出。
另外有上位機跟STM32的UART接口相連,上位機可能不定期地需要通過UART接口給STM32發送新的占空比參數,而且每次都發送3個比較輸出通道的參數【12個字節】。
如何快捷地實現這個功能呢?要求收到數據后盡快修改3個比較通道的參數。
前一篇重點介紹了利用DMAFIFO和UART接收事件觸發DMA傳輸實現了3個CCR寄存器的批量修改。
我們不妨就該話題稍作拓展,不再局限于某個STM32系列,而是從整個STM32的資源上考慮當前需求。上次提到3種實現方案,我想借此機會再給大家介紹另外一種實現方案,以拓寬未來解決類似問題的思路。
STM32 家族里有些系列是內置DMAMUX模塊的,即DMA路由器,利用DMAMUX可以實現DMA請求與DMA傳輸通道的靈活配置;可以將一些通常不能直接產生DMA請求的事件通過它后而可以產生DMA請求;或者基于部分DMA完成事件產生新的DMA請求發起新的傳輸。目前,STM32家族中內置DMAMUX模塊的系列有下面這些:
那么 我這里就利用DMAMUX的其中一個特性,即通過它可以讓部分DMA完成事件產生新的DMA請求從而發起新的DMA傳輸。具體到這里,我們讓UART 的DMA接收完成事件映射到DMAMUX的DMA generator,再申請新的DMA請求,讓DMA將UART 接收到的數據從內存搬運到定時器的3個CCR寄存器,形成一個級聯模式。大致流程是:
上位機數據 經UARTRX+DMA 接收到內存, 然后DMA 接收完成事件 經DMAMUX申請的新的DMA請求和 DMA通道,再將內存數據寫到定時器的3個比較寄存器控制占空比。
下面我使用STM32G4系列芯片重點演示下實現過程,配置是關鍵。至于原理細節還請閱讀相關手冊。
我還是用UART1自發自收來模擬上位機發送新的CCR數據。
TIM2使用3個通道做PWM輸出,使用CubeMx工具的參考配置如下:
我同樣開啟USART1的TX/RX事件的DMA傳輸功能。參考配置如下【注意UART RX DMA的配置與前一篇的差別】:
注意上圖中的事件使能及DMA請求配置。接著看看下面關于DMA generator的相關配置:
請關注上圖中所有配置。其中,DMAMUX生成的DMA請求由DMA2_CH2響應,工作在Circular模式。
我依然使用32位TxData【3】數組存放待傳輸的3個CCR值,用RxData[3]存放接收的數據。使用CubeMx配置完成后,添加相關用戶代碼。【基于HAL庫組織代碼】
我在UARTDMA接收完成中斷的回調函數里對接收到新數據事件做標志更新。
為了便于演示,我依然在主程序里循環模擬遠程命令,動態修改CCR寄存器的值。參考代碼如下截圖:
稍作調試我們就可以查看輸出結果【借助斷點實時查看內存和寄存器的數據】:
從上面貼圖不難看出,從UART的發送數據、接收到的內存數據、寄存器的數據都在保持同步更新。
在上面演示過程中,我是將DMAMUX生成的新DMA請求申請的 DMA通道配置為Circular模式來著手測試的,如果配置為Normal模式也應該是可以的,只是需將Generator生成的新的DMA配置以及用戶代碼稍微做些調整,有興趣的話可以自行測試驗證。
-
STM32
+關注
關注
2272文章
10923瀏覽量
357573 -
占空比
+關注
關注
0文章
109瀏覽量
29160 -
uart
+關注
關注
22文章
1243瀏覽量
101770
原文標題:遠程修改STM32 TIMER占空比的方案續1
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
STM32 TIMER+DMA輸出PWM異常案例的問題解析
![<b class='flag-5'>STM32</b> <b class='flag-5'>TIMER</b>+DMA輸出PWM異常案例的問題解析](https://file1.elecfans.com/web2/M00/A6/66/wKgaomUU0biALwGUAAAJjDD4ECY024.png)
利用TIMER測量信號周期及占空比的精度
![利用<b class='flag-5'>TIMER</b>測量信號周期及<b class='flag-5'>占空比</b>的精度](https://file1.elecfans.com/web2/M00/C1/D1/wKgaomXaofuAD3lTAAAjKQo43Io756.png)
STM32F103 timer8配置PWM輸出中間出現無法輸出PWM現象
教你一手 基于STM32Cube庫的Timer捕獲應用
CC2530 Timer3 P1_3做為PWM輸出,可以修改輸出頻率,無法修改占空比,請問怎么辦?
STM32產生固定頻率和占空比可變的PWM
![<b class='flag-5'>STM32</b>產生固定頻率和<b class='flag-5'>占空比</b>可變的PWM](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32捕獲占空比_「話說定時器系列」之七:STM32定時器比較輸出話題
![<b class='flag-5'>stm32</b>捕獲<b class='flag-5'>占空比</b>_「話說定時器系列」之七:<b class='flag-5'>STM32</b>定時器比較輸出話題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
通過STM32 UART及DMA修改TIMER占空比示例
STM32G4 Advanced Timer Break功能詳解
![<b class='flag-5'>STM32</b>G4 Advanced <b class='flag-5'>Timer</b> Break功能詳解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論