stm32暫存器版學習筆記 DMA

2022-09-09 05:27:15 字數 2381 閱讀 8385

dma(direct memory access),直接儲存器訪問。dma傳輸方式無需cpu直接控制傳輸,通過硬體為ram與i/o裝置開闢一條直接傳送資料的通路,使cpu效率大大提高。stm32f103有2個dma控制器,dma1有7個通道,dma2有5個通道,專門用來管理來自外設對儲存器的訪問請求,還有乙個仲裁器來協調各個dma請求的優先權。

一:dma各通道請求

從外設產生的dma請求通過邏輯"或"輸入到dma控制器,這就意味著同時只能有乙個請求有效。

例如,串列埠1傳送的dma,就要用到dma1的通道4(也就是說通道與各通訊口是相互對應的)

參考手冊

二.dma1通道4(串列埠1傳送)配置步驟

①設定外設位址

dma通道x外設位址暫存器(dma_cparx)(x = 1…7)

或   dma_chx->cpar=&usart1_dr;

②設定儲存器位址

儲存器位址通過dma1_cmar設定

③設定傳輸資料量

dma通道x傳輸數量暫存器(dma_***trx)(x = 1…7)

eg:dma_chx->***tr=***tr;     //dma1,傳輸資料量

④設定通道4的配置資訊

若有多個通道,則要設定優先順序,編號越小優先順序越高。

dma通道x配置暫存器(dma_ccrx)(x = 1…7)

⑤使能dma1通道4,啟動傳輸

dmax_ccrx 最低位開啟dma傳輸。

注意要設定usart1的使能dma傳輸位,通過usart1->cr3的第七位設定,這樣就可以啟動一次usart1的dma傳輸了。

dma中斷狀態顯示及清除

dma中斷狀態暫存器(dma_isr)

dma中斷標誌清除暫存器(dma_ifcr)

eg:if(dma1->isr&(1<<13))//等待通道4傳輸完成

三:示例程式

dma1通道4(串列埠1傳送)應用

1 u16 dma1_mem_len;//儲存

dma每次資料傳送的長度             

2 //dma1的各通道配置

3 //這裡的傳輸形式是固定的

,這點要根據不同的情況來修改

4 //從儲存器

->

外設模式

/8位資料寬度

/儲存器增量模式

5 //dma_chx:dma通道

chx6 //cpar:外設位址

7 //cmar:儲存器位址

8 //***tr:資料傳輸量  

9 void mydma_config(dma_channel_typedef*dma_chx,u32 cpar,u32 cmar,u16 ***tr)

10  

27 //開啟一次

dma傳輸

28 void mydma_enable(dma_channel_typedef*dma_chx)

29   

STM32學習 SPI筆記 暫存器版

1.介紹 2.模擬spi 3.硬體spi 一 介紹簡述 1 通常 spi 通訊要求 4 根線,分別是 mosi 主機輸出從機輸入 miso 主機輸入從機輸出 clk 時鐘線 cs 片選線 2 當傳送和接受資料的工作都準備好了,只要有時鐘 clk,就傳送資料,沒有時鐘就不傳送,而且乙個時鐘週期傳送一位...

STM32蜂鳴器 暫存器

這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...

STM32暫存器對映

1.對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,2.各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到 3.想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能 4.stm32底層實際是先定義出外設基位址,然...