STM32CubeMx——串口使用DMA收發數據


用到的是DMA發送數據,DMA接收,在中斷回調里發送出去。

一.代碼生成

1.按以前的方法設置好時鍾和調試方式,這里就不多說了。

 

 2.設置串口1。

 

3.在DMA Setting里點擊Add添加USART1_TX,Mode有兩種模式,一種是普通模式,使用一次發送語句就發一次,另一種是循環模式,使用一次發送會一直發送。這里發送我選擇普通模式,接收選擇循環模式。

 

 

 

 

 

 

4.在中斷設置里打開串口1的中斷。

 

 5.時鍾和文件路徑等設置好,然后點生成代碼。

 

 

二.代碼編寫

1.先定義發送和接收的數組。

/* USER CODE BEGIN 0 */
uint8_t aRxBuffer[1];
uint8_t aTxBuffer[]="ok";
/* USER CODE END 0 */

2.打開串口DMA的發送使能,while循環可以放一些LED的閃爍。

/* USER CODE BEGIN 2 */
  HAL_UART_Receive_DMA(&huart1,aRxBuffer,1);
  HAL_UART_Transmit_DMA(&huart1,aTxBuffer,sizeof(aTxBuffer));
  /* USER CODE END 2 */

3.最后加上一個串口接收函數的回調函數,把接收到的數據再發出去。

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
    HAL_UART_Transmit(&huart1,aRxBuffer,1,0);
}
/* USER CODE END 4 */

現象:

上電之后,電腦的串口會收到“OK”,然后從電腦發送給芯片任意字符,芯片再發回來。

 

 

總結:使用DMA做發送處理,接收數據后用串口發出去。為什么接收到數據后不用HAL_UART_Transmit_DMA發送出去呢?使用這個發現丟包情況,因為這里只是測試DMA接收數據情況,接收到之后一般是作運算處理的,所以用一般串口發送驗證接收的數據正確。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM