STM32串列埠 DMA使用1

2021-08-20 08:57:22 字數 2135 閱讀 2102

stm32串列埠+dma使用

stm32有5個串列埠資源(usart1,usart2,usart3及uart4,uart5)。其中3個usart(通用同步/非同步收/髮器universalsynchronous asynchronous receiver and transmitter);2個uart(通用非同步收/髮器universalasynchronous receiver and transmitter);至於usart與uart的區別,如果只是拿來做串列埠用,沒什麼區別,在車載專案裡,我們拿來做串列埠用,usart與uart在程式設計上並沒有區別。

其中usart1,usart2,usart3,uart4支援dma方式,uart5不支援dma。(詳見資料手冊stm32f105&107_datesheet_english的p18/2.3.17)。

dma(derect memoryacess直接儲存器訪問),stm32有2個dma,dma1有7個通道,dma2有5和通道,每個通道對應不同的外設(詳見資料手冊p272/13.3.7)。

1.時鐘rcc配置:

串列埠時鐘 + dma時鐘 + io時鐘

static void rcc_configuration(void)

2.gpio配置:

uart4的tx為pc10腳,傳送端配置為復用推挽輸出模式(gpio_mode_af_pp)

uart4的rx為pc11腳,接收端配置為浮空輸入模式(gpio_mode_in_floating)

static void gpio_configuration(void)

3.中斷nvic配置:

配置兩個dma通道中斷:

uart4的rx的dma通道為dma2的通道3;

uart4的tx的dma通道為dma2的通道5;

static void nvic_configuration(void)

4.串列埠配置:

即填充串列埠配置結構體

static void uart4_configuration(void)

5.dma配置:

dma可以把資料從外設轉移到記憶體(如串列埠接收的時候),也可以從記憶體轉移到外設(如串列埠傳送的時候);不同方向的資料轉移要各做相應的配置

串列埠接收:

void uart4_start_dma_recv(void * recvbuf, uint32_t buflen)

串列埠傳送:

void uart4_start_dma_send(void * sendbuf, uint32_t buflen)

6.dma中斷函式:

串列埠接收或傳送的時候,dma資料傳輸完成後會產生中斷,在相應中斷函式編寫**(注意中斷函式名一定要與啟動檔案中斷向量表一致)

dma串列埠接收完成中斷:

void dma2_channel3_irqhandler(void)//接收完成中斷

else

}else if(1 == dmarecivestate)

else

}else if(2 == dmarecivestate)

memcpy(pmsgbuffer,uart4_dma_headbuf, sizeof(host_msg_header_t));//把陣列資料(startcode+cmdtype+bodylen)拷貝到記憶體塊

pmcumsgheader = (host_msg_header_t*)pmsgbuffer;//指標型別轉換

uart4_start_dma_recv((void*)(pmsgbuffer +sizeof(host_msg_header_t)), pmcumsgheader->bodylen + crc_len);//再讀取後面資料(data+crc)到記憶體塊

}else if(3 == dmarecivestate)}}

osintexit();//ucos退出中斷服務函式

}dma串列埠傳送完成中斷:

void dma2_channel5_irqhandler(void)//傳送完成中斷

osintexit();

}

附:dma

常用庫函式:

文章標籤:

stm32

uart

dma

STM32 串列埠DMA(一)

今天調usart,資料在晶元內部用dma傳到串列埠快取,發現dma真的很好,很快,而且不消耗系統資源。只是在傳輸完的時候中斷的標誌置位。下面解釋一下程式。void dma configuration void 再弄幾個重要的語句。這裡是開始dma傳輸前的一些準備工作,將usart1模組設定成dma方...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...