概述
本章STM32CUBEMX配置STM32F103,測試串口發送接收函數。 最近在弄ST和GD的課程,需要樣片的可以加群申請:615061293。
生成例程
使用STM32CUBEMX生成例程,這里使用NUCLEO-F103RB開發板
查看原理圖,PA2和PA3設置為開發板的串口。
配置串口。
開啟中斷。
開啟DMA讀取和接收。 其中Word = 32bit,Half word = 16bit,Byte = 8bit
STM32CUBEIDE配置
若需要打印浮點型,需要勾選下面的選項。
串口重定向
在main.c中,添加頭文件,若不添加會出現 identifier "FILE" is undefined報錯。
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */
函數聲明和串口重定向:
/* USER CODE BEGIN PFP */
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END PFP */
串口發送接收函數
一般情況下,串口發送接收函數有如下所示。
● HAL_UART_Transmit();串口輪詢模式發送,使用超時管理機制。
● HAL_UART_Receive();串口輪詢模式接收,使用超時管理機制。
● HAL_UART_Transmit_IT();串口中斷模式發送
● HAL_UART_Receive_IT();串口中斷模式接收
● HAL_UART_Transmit_DMA();串口DMA模式發送
● HAL_UART_Receive_DMA();串口DMA模式接收
HAL_UART_Transmit_DMA()發送
測試代碼如下。 定義需要發送的數據。
/* USER CODE BEGIN PV */
uint8_t TxData[] = "
**** Hello,World!' ***
";
/* USER CODE END PV */
HAL_UART_Transmit_DMA()發送代碼。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_UART_Transmit_DMA(&huart2, (uint8_t *)TxData, sizeof(TxData)-1);
HAL_Delay(1000);
}
/* USER CODE END 3 */
DMA有normal和circular兩種模式。 Normal表單次傳輸,傳輸一次后終止傳輸,所以需要傳輸幾次就需要開啟幾次,Circular表示循環傳輸,傳輸完成后又重新開始繼續傳輸,開啟一次后會一直傳輸。 normal傳輸打印如下所示,傳輸完成就關閉。
circular傳輸打印如下所示,一直傳輸,不會停止。
HAL_UART_Receive_DMA()發送
測試代碼如下。 定義需要接受存放數組。
/* USER CODE BEGIN PV */
uint8_t RxData[255];
/* USER CODE END PV */
開啟HAL_UART_Receive_DMA()接受代碼。
/* USER CODE BEGIN 2 */
HAL_UART_Receive_DMA(&huart2, RxData, 10); // 這里加這個函數,接收數據
/* USER CODE END 2 */
重寫讀取回調函數,將接受的數據發送出去在開啟接收。
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit(&huart2, (uint8_t *)"text:", 5,0xffff);//輪詢發送,不然可能發送不出去
HAL_UART_Transmit_DMA(&huart2, (uint8_t *)RxData, 10);//發送接受的數據
HAL_UART_Receive_DMA(&huart2, RxData, 10); // 這里加這個函數,接收數據
}
/* USER CODE END 4 */
DMA有normal和circular兩種模式。 Normal表單次接收,接收一次后終止接收,所以需要接收幾次就需要開啟幾次,Circular表示循環接收,接收完成后又重新頭開始繼續接收,開啟一次后會一直接收。 normal傳輸打印如下所示,傳輸完成就關閉。 演示效果如下所示。
circular接收打印如下所示,當發送數據大于接收長度時候,會進行循環接收。
審核編輯:湯梓紅
-
STM32
+關注
關注
2270文章
10906瀏覽量
356484 -
串口
+關注
關注
14文章
1555瀏覽量
76631 -
dma
+關注
關注
3文章
563瀏覽量
100642 -
USART
+關注
關注
1文章
195瀏覽量
30892 -
stm32cubemx
+關注
關注
5文章
283瀏覽量
14830
發布評論請先 登錄
相關推薦
評論