STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都內(nèi)置了DMAMUX模塊。有了它一方面使得DMA請求與DMA控制器之間的映射關(guān)系更為靈活方便,同時也大大拓展了DMA請求事件,不再局限于外設(shè)事件,比方可以基于GPIO的外部中斷事件、或者DMA事件本身來觸發(fā)DMA傳輸。另外,DMA傳輸?shù)膶崿F(xiàn)還可以基于其它觸發(fā)事件來同步其操作,即DMA傳輸?shù)膶崿F(xiàn)需要借助其它同步事件來真正啟動。
本文就基于STM32G4芯片簡單介紹下該話題,這里要實現(xiàn)的功能大致是這樣的:片內(nèi)低功耗定時器LPTIM1的定時輸出作為DMAMUX的DMA同步輸入事件,該同步事件觸發(fā)UART的DMA傳輸,通過UART輸出一段字符。
本演示例程基于STM32G4系列的Nucleo板進行。低功耗定時器LPTIM工作在PWM輸出模式,DMAMUX基于LPTIM每次的定時輸出事件為UART2申請一定數(shù)目的DMA請求,然后DMA將數(shù)據(jù)從內(nèi)存送到UART的數(shù)據(jù)寄存器并最終將內(nèi)容顯示在PC串口終端。
下面就直接使用STM32CubeMx進入配置過程。
通過CubeMx神器做基本的初始化配置【RCC配置此處就省略了】。
LPTIM1的參考配置如下,具體應(yīng)用時請結(jié)合實際情況來定,這里只需能產(chǎn)生周期性定時輸出即可。
UART2外設(shè)沒有什么特別要提醒的,這里就不貼截圖了。我們重點看看有關(guān)UART TX的DMA傳輸?shù)南嚓P(guān)配置。
上圖中藍色圈里的勾選框?qū)τ诒緫?yīng)用演示不是必須勾選的,勾選了也沒關(guān)系,不會對本演示產(chǎn)生影響。DMA請求數(shù)設(shè)置為21,表示每檢測到1個同步事件后DMAMUX為UART傳輸申請21個DMA請求,以批量傳輸21個字符“STM32 DMA SYNCDEMO ”。
完成圖形化配置后,生成初始化代碼并添加必要的用戶代碼。
#definePeriodValue (1000)
#define PulseValue (500)
#define Size (21)
uint8_tpData[Size]={‘S’,‘T’,‘M’,‘3’,‘2’,‘ ’,‘D’,‘M’,‘A’,‘ ’,
‘S’,‘Y’,‘N’,‘C’,‘’,‘D’,‘E’,‘M’,‘O’,‘ ’,‘ ’};
HAL_LPTIM_PWM_Start(&hlptim1, PeriodValue, PulseValue) ;
HAL_UART_Transmit_DMA(&huart2, pData, Size);
編譯運行,驗證結(jié)果。
代碼運行后,可以通過示波器看到LPTIM的周期性PWM輸出,同時PC端也可以看到如上面截圖所示的周期性呈現(xiàn)的字符串。
OK,本次基于DMAMUX同步事件的應(yīng)用演示就介紹到這里,供君參考,更多細節(jié)還請閱讀STM32相關(guān)技術(shù)手冊。
編輯:jq
-
示波器
+關(guān)注
關(guān)注
113文章
6164瀏覽量
184317 -
PWM
+關(guān)注
關(guān)注
114文章
5118瀏覽量
213170 -
PC
+關(guān)注
關(guān)注
9文章
2056瀏覽量
153936 -
代碼
+關(guān)注
關(guān)注
30文章
4723瀏覽量
68236
原文標(biāo)題:基于STM32 DMAMUX DMA同步事件的應(yīng)用示例
文章出處:【微信號:aidanpianji,微信公眾號:單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論