GD32E230串列埠DMA傳送接收

2021-10-07 06:57:37 字數 1301 閱讀 5379

串列埠使用dma可以節省mcu執行的時間,節省效率,把微控制器內部資源用到最優化。串列埠dma就是配置好初始化後,呼叫串列埠傳送程式時先把要傳送的資料儲存到dma快取,然後使能dma傳送,接下來串列埠就由硬體自動傳送資料,軟體可以繼續處理其他功能。

串列埠初始化分一下幾個階段:

·gpio初始化

·串列埠初始化

·中斷使能初始化

·dma初始化

void

uart_init

(void

)

void

com_gpio_init

(void

)//以串列埠0為例,gpio為pa9 pa10

void

com_usart_init

(void

)//串列埠初始化

void nvic_config(void)

void

txrx_dma_config

(void

)//dma傳送接收初始化

```c

void

use_dma_sendtx1_data

(uint8_t *buffter, uint8_t writelen)

dma_channel_disable

(dma_ch1)

;dma_memory_address_config

(dma_ch1,

(uint32)txbuffer)

;dma_transfer_number_config

(dma_ch1,

(uint32_t)writelen)

;/* enable dma channel1 */

dma_channel_enable

(dma_ch1)

;/* usart dma enable for transmission */

usart_dma_transmit_config

(usart0, usart_dent_enable)

;}

void

dma_channel1_2_irqhandler

(void

)//傳送接收通道中斷處理

if(reset !=

dma_interrupt_flag_get

(dma_ch2, dma_int_flag_ftf)

)}

持續更新編碼get到的新知識,新技能,持續分享心得體會。

GD32E230串列埠DMA通訊

void usart dma init void void mydma send uint8 t buffer,uint16 t size 為了加快 執行速度,我沒有使用庫函式方法,直接操作暫存器。在傳送dma時需要先失能dma,之後設定傳送的陣列的位址和要傳送的資料位元組數,再使能dma。void...

GD32 DMA串列埠接收傳送

簡介 gd32其實跟stm32差不多,有些程式簡直可以在兩個微控制器上直接執行,但用gd32的庫函式貌似比stm32的庫函式比較複雜 可能是因為剛接觸所以很多都沒了解到,不熟悉 最近用到了串列埠dma傳送,但看官方的demo又沒寫得很仔細,就上網搜尋了一下並記錄下來。由於只用到的串列埠的dma傳送,...

STM32 串列埠DMA(一)

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