STM32Cube 直接儲存器訪問(DMA)

2021-08-27 16:12:25 字數 1717 閱讀 8958

在usart章節講解了串列埠的輪詢和中斷模式,這一章介紹一下通過dma模式控制串列埠傳輸。

直接儲存器訪問 (dma) 用於在外設與儲存器之間以及儲存器與儲存器之間提供高速資料傳輸。可以在無需任何 cpu 操作的情況下通過 dma 快速移動資料。這樣節省的 cpu 資源可供其它操作使用。說白了dma就是乙個搬運工,將資料從乙個地方搬到另乙個地方而不需要cpu處理。

作為乙個搬運工,要他正常工作必須要確定幾個重要的引數。

1.傳輸模式:資料從**搬到**。三種可能的傳輸方向:儲存器到外設、外設到儲存器或儲存器到儲存器。

2.通道選擇:就是資料傳輸的是走那條道路

3.仲裁器:多個dma傳輸是優先順序高的優先傳輸。

4.資料長度:每次傳輸的資料長度,可以乙個位元組,兩個位元組(半字),四個位元組(字)

開啟stm32cubemx重新建工程,配置和上一章配置一樣。只是這個工程中,在dma設定欄新增uasart傳送tx和接收rx的dma。傳送選擇 dma1 channel 4通道,方向從儲存器到外設。優先順序為低。接收選擇dma1 channel 5通道,方向外設到儲存器,優先順序為低。mode為normal,data width選擇byte。

其中mode設定可以選擇normal表單次傳輸,傳輸一次後終止傳輸,circular表示迴圈傳輸,傳輸完成後又重新開始繼續傳輸,不斷迴圈永不停止。此處選擇單次傳輸。

increment address表示位址指標遞增。串列埠傳送資料是將資料不斷存進串列埠的傳送資料暫存器(usartx_tdr)。所以外接的位址是不遞增。而記憶體儲器儲存的是要傳送的資料,所以位址指標要遞增才能將所以的資料傳送出去。

串列埠資料傳送暫存器只能儲存8bit,每次傳送乙個位元組,所以資料長度選擇byte。

另外要注意的一點,必須要開啟串列埠中斷。dma1中斷已預設開啟。

生成報告以及**,編譯程式。在usart.c檔案中,可以找到剛才的dma設定。

在main函式前面新增傳送的資料。

在main()函式的while(1)迴圈中新增應用程式,通過dma將資料傳送出去。

這是只測試傳送,至於接收可以看usart章節後面有講解

這章文件總結:

注意:如果不開啟串列埠中斷,則程式只能傳送一次資料,程式不能判斷dma傳輸是否完成,usart一直處於busy狀態。

STM32cube學習筆記(1)

1 偶然的機會接觸到了stm32cubemx與stm32cubefx 詳細了解相關的資料之後感覺相當實用。2 程序建立 osthreaddef defaulttask,startdefaulttask,osprioritynormal,0,128 定義乙個結構體 defaulttaskhandle ...

STM32Cube庫的使用

stm32cubemx 軟體的使用 stm32cubemx使用詳解 這是st的論壇,在這裡基本滿足了大多開發者的使用需求。stm32cubemx使用方法及功能介紹 embedddeveloper部落格 ybhuangfugui 可謂是緊跟隨stm32應用的神仙級行業領軍人物 st入門高階學習必讀,太...

STM32Cube擴充套件包開發指南

本文翻譯於st官網文件,development guidelines for stm32cube expansion packages 4.包裝要求 5.新的中介軟體整合 6.軟體質量要求 介紹stmcube 是意法半導體的一項原始計畫,旨在通過以下方式使開發人員的生活更輕鬆。減少開發工作量,時間和...