基于STM32CubMX和HAL库的外设开发
第五讲 串口通信
串口的重要性
串口作为单片机的重要外部接口,也是软件开发的重要调试手段。使用cubeMX大大简化了串口的配置,不需要懂寄存器的操作,只需要根据所需配置好串口的参数,eg.波特率,奇偶校验,数据位数,停止位数,采样率。
此讲我们介绍如何使用cubeMX配置串口使开发板通过USB串口与电脑通信
cubeMX工程中串口的参数配置
编写代码
串口相关的常用函数
1、串口发送
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
//huart:串口句柄,表示由哪个串口输出
//pData:要发送数据的头指针,即起始地址
//Size:要发送的字节数
//Timeout:等待数据发送的最长时间,若使用HAL_MAX_DELAY表示无限等待下去,直到发送完为止
//使用示例
HAL_UART_Transmit(&huart1,(uint8_t *)"hello world\r\n",20,50);
2、串口接收
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
//huart:串口句柄,表示由哪个串口输出
//pData:要接收数据的头指针,即起始地址
//Size:要接收的字节数
//Timeout:等待数据发送的最长时间,若使用HAL_MAX_DELAY表示无限等待下去,直到接收完为止
//使用示例
HAL_UART_Receive(&huart1,(uint8_t *)"hello world\r\n",20,50);
应用功能实现
串口调试助手的使用
单片机下载好程序之后,配置好串口参数,点击打开串口即可接收
示例1:向串口发送确定字符
代码:
HAL_UART_Transmit(&huart1,(uint8_t *)"hello w\r\n",20,50);
结果
示例2:串口收发
代码
/* USER CODE BEGIN PV */
unsigned char revBuff[64];
/* USER CODE END PV */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//串口收发
HAL_UART_Receive(&huart1,revBuff,2,HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1,revBuff,2,HAL_MAX_DELAY);
}
结果
示例3:串口发送命令控制led灯的亮灭
(参考上一篇按键示例)
/* USER CODE BEGIN WHILE */
HAL_UART_Transmit(&huart1,(uint8_t*)"I am ready\r\n",sizeof("I am ready\r\n"),HAL_MAX_DELAY);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//串口控制led
HAL_UART_Receive(&huart1,&revByte,1,HAL_MAX_DELAY);//
if(revByte=='N')
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
if(revByte=='F')
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
}