有人利用STM32H743系列芯片做開發,他想使用片內BDMA將GPIO的數據讀到內存,并通過LPTIM觸發DMA傳輸時卻遇到點麻煩,發現總是實現不了。這里我簡單介紹下實現過程,并做些提醒。
STM32H7系列的時鐘系統以及內部總線、功能框架相比其它M3/M4內核的STM32芯片要負責不少。整個芯片根據運行時鐘高低及總線架構大致分為3個區域,其中BDMA位于區域3即D3域。
在STM32H7系列參考手冊中有下面的一副系統功能框圖:
我們在上圖的右下角可以看到BDMA,而且BDMA只能訪問AHB4APB4總線上的外設和SRAM4及備份SRAM. 另外,我們還可以從手冊上進一步了解到,GPIO外設都是掛在AHB4總線上的。
結合上面介紹可知,現在既然使用BDMA,內存RAM就不能選擇SRAM4和備份RAM以外的區域,否則BDMA鞭長莫及而訪問不到他們。這是要注意的地方。
另外,這里需要用到LPTIM2的輸出事件來觸發DMA請求,要使用DMAMUX并完成相關配置。
配置LPTIM2讓它可以產生周期性輸出事件即可,實際參數視具體應用而擬定。
現在對BDMA做些配置,如下圖示。LPTIM2的每次輸出事件申請一個DMA請求。
另外,我還配置了GPIOC的幾個管腳,以便做測試。這里就不貼配置截圖了。
把時鐘系統配置完后就可以基于STM32CubeIDE和STM32Cube庫的工程。
再添加幾行用戶代碼就可以著手測試。添加的函數代碼分別是關于開啟DMAmux、啟動DMA傳輸和啟動LPTIM2的操作。
LPTIM_HandleTypeDefhlptim2;
DMA_HandleTypeDefhdma_bdma_generator0;
這里我把GPIO_INData[]數組地址指定到了BDMA可以訪問到的SRAM4.,它對應STM32CubeIDE鏈接文件里的RAM_D3。
最后驗證結果,我們可以看到BDMA從GPIOC端口讀到的數據。
整體來講,實現起來比較簡單,重點注意BDMA可以訪問哪些地方弄清楚,在指定內存地址這個地方不同IDE環境操作上略有差異。再就是要用到LPTIM周期性事件申請DMA請求來實現傳輸。
審核編輯:郭婷
-
芯片
+關注
關注
458文章
51419瀏覽量
428699 -
總線
+關注
關注
10文章
2910瀏覽量
88540
原文標題:STM32H7 BDMA應用示例
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論