串列埠使用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方...