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(发送超时)

示例:串口发送数据

1234567891011
 /* 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灯

123456789101112131415161718
/* 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 */}
🔍 ×