0%

HAL库 - UART通讯

CubeMX会自动生成串口的句柄,包含串口的全部数据,比如:UART_HandleTypeDef huart1;

串口发送数据

常用函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
作用:通过串口向外发送数据
参数huart:填写串口的句柄,比如&huart1
参数pData:填写要发送数据的指针
参数Size:填写要发送数据的数量,单位字节
参数Timeout:超时时间,单位ms,比如HAL_MAX_DELAY无限期等待
返回值:返回数据发送的结果。比如HAL_OK(成功)、HAL_ERROR(发送出错)、HAL_BUSY(串口忙)、HAL_TIMEOUT(发送超时)

示例:串口发送数据

1
2
3
4
5
6
7
8
9
10
11
 /* USER CODE BEGIN 2 */
uint8_t byteNumber = 0x5a;
uint8_t byteArray[] = {1,2,3,4,5};
char ch = 'a';
char *str = "Hello World";

HAL_UART_Transmit(&huart1, &byteNumber, 1, HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1, byteArray, 5, HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
/* USER CODE END 2 */

串口接收数据

常用函数

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
作用:通过串口接收数据
参数huart:填写串口的句柄,比如&huart1
参数pData:填写要接收数据的指针
参数Size:填写要接收数据的数量,单位字节
参数Timeout:超时时间,单位ms,比如HAL_MAX_DELAY无限期等待
返回值:返回数据发送的结果。比如HAL_OK(成功)、HAL_ERROR(发送出错)、HAL_BUSY(串口忙)、HAL_TIMEOUT(发送超时)

示例:串口接收数据控制LED灯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* USER CODE BEGIN WHILE */
while (1)
{
uint8_t dataReceive;
HAL_UART_Receive(&huart1, &dataReceive, 1, HAL_MAX_DELAY);

if(dataReceive == '1')
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
}
else if(dataReceive == '0')
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
}

/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}