STM32CUBEMX開發(fā)GD32F303(9)----USART通過DMA收發(fā)
概述?
本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時通過GD32303C_START開發(fā)板內(nèi)進(jìn)行驗證。 本章主要配置串口進(jìn)行DMA收發(fā)。 需要GD樣片的可以加Q_QUN申請:615061293。
查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。?

視頻教學(xué)
https://www.bilibili.com/video/BV1zv4y1M7EM/

csdn課程
課程更加詳細(xì)。?https://download.csdn.net/course/detail/37152
樣品申請
https://www.wjx.top/vm/mB2IKus.aspx
硬件準(zhǔn)備
這里準(zhǔn)備了GD32303C_START開發(fā)板進(jìn)行驗證。?

STM32CUBEMX配置

?勾選中斷。?

?開啟DMA讀取和接收。 其中Word = 32bit,Half word = 16bit,Byte = 8bit?


keil配置
microlib 進(jìn)行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫少,并且根本不具備某些 ISO C 特性。 某些庫函數(shù)的運(yùn)行速度也比較慢,如果要使用printf(),必須開啟。?

串口重定向
在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。
函數(shù)聲明和串口重定向:
串口接收發(fā)送函數(shù)
一般情況下,串口接收發(fā)送函數(shù)有如下所示。?
● HAL_UART_Transmit();串口輪詢模式發(fā)送,使用超時管理機(jī)制。?
● HAL_UART_Receive();串口輪詢模式發(fā)送,使用超時管理機(jī)制。?
● HAL_UART_Transmit_IT();串口中斷模式發(fā)送
● HAL_UART_Receive_IT();串口中斷模式接收?
● HAL_UART_Transmit_DMA();串口DMA模式發(fā)送?
● HAL_UART_Receive_DMA();串口DMA模式接收
HAL_UART_Transmit_DMA()發(fā)送
測試代碼如下。 定義需要發(fā)送的數(shù)據(jù)。
HAL_UART_Transmit_DMA()發(fā)送代碼。
DMA有normal和circular兩種模式。 Normal表單次傳輸,傳輸一次后終止傳輸,所以需要傳輸幾次就需要開啟幾次,Circular表示循環(huán)傳輸,傳輸完成后又重新開始繼續(xù)傳輸,開啟一次后會一直傳輸。 normal傳輸打印如下所示,傳輸完成就關(guān)閉。?

?circular傳輸打印如下所示,一直傳輸,不會停止。?

最后
以上的代碼會在Q_qun里分享。Q_qun:615061293。 或者關(guān)注『記帖』,持續(xù)更新文章和學(xué)習(xí)資料!?

HAL_UART_Receive_DMA()發(fā)送
測試代碼如下。 定義需要接受存放數(shù)組。
開啟HAL_UART_Receive_DMA()接受代碼。
重寫讀取回調(diào)函數(shù),將接受的數(shù)據(jù)發(fā)送出去在開啟接收。
DMA有normal和circular兩種模式。 Normal表單次接收,接收一次后終止接收,所以需要接收幾次就需要開啟幾次,Circular表示循環(huán)接收,接收完成后又重新頭開始繼續(xù)接收,開啟一次后會一直接收。 normal傳輸打印如下所示,傳輸完成就關(guān)閉。 演示效果如下所示。?

circular接收打印如下所示,當(dāng)發(fā)送數(shù)據(jù)大于接收長度時候,會進(jìn)行循環(huán)接收。
