【STM32笔记】STM32的串口数据收发基础(二)(USART轮询模式)

本文详细介绍了在STM32中使用轮询模式通过HAL库进行串口通信的过程,包括设置波特率、数据长度和停止位,以及使用HAL_UART_Transmit和HAL_UART_Receive函数进行数据发送和接收的示例。
摘要由CSDN通过智能技术生成


  在STM32中编写串口通信数据收发有三种方式:轮询模式(阻塞方式),中断模式(非阻塞方式)以及DMA模式

一. 串口通信(轮询模式)

  打开STM32CubeMX创建工程,选择STM32F103C8芯片。
  设置RCC,设置高速外部时钟HSE 为外部时钟源。
在这里插入图片描述

  配置时钟。
在这里插入图片描述

  开始配置串口。(这里暂时不使用中断以及DMA模式就先不去配置)
在这里插入图片描述
在这里插入图片描述

  Baud Rate可以设置的波特率有:9600、19200、38400、57600、115200 Bit/s等。
  传输数据长度可以设置为:8 / 9 Bit
  停止位可以设置为:1 / 2 Bit
设置好之后,设置存储路径,选择所用IDE,然后点击GENERATE CODE创建工程,open project打开工程进行全局编译。

二. HAL库中串口收发的重要函数(轮询模式)

1. HAL_UART_Transmit();
HAL库中串口发送函数,使用超时管理机制,如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

@参数  huart,串口实例的指针。 指向UART_HandleTypeDef结构体的指针,该结构体包含指定UART模块的配置信息。
@参数  pData,待发送数据缓冲区的指针。
@参数  Size,待发送数据的字节数。
@参数  Timeout,超时时间值。
@返回值 函数执行状态

2. HAL_UART_Receive();
HAL库中串口接收函数,使用超时管理机制,如果超时没接收完成,则不再接收,返回超时标志(HAL_TIMEOUT)

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

@参数  huart,串口实例的指针。 指向UART_HandleTypeDef结构体的指针,该结构体包含指定UART模块的配置信息。
@参数  pData,数据接收据缓冲区的指针。
@参数  Size,待接收数据的字节数。
@参数  Timeout,超时时间值。
@返回值 函数执行状态

以上两个函数均在stm32f1xx_hal_uart.c中,在该文件中找到
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
在这里插入图片描述
在这里插入图片描述

三. 实现串口收发通信(轮询模式)

  在main.c文件中main函数while中写入

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_UART_Transmit(&huart1,txbuff,sizeof(txbuff),1000);
	  HAL_Delay(1000);
	  HAL_UART_Receive(&huart1,&rxbuff,sizeof(rxbuff),1000);
	  if(rxbuff == 0xaa){
		  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET); // LED小灯熄灭
	  }else{
		  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET); // LED小灯点亮
	  }
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

  在Private variables区域下USER CODE BEGIN PV注释对中写入

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
unsigned char txbuff[] = "hello world\r\n";
unsigned char rxbuff = 0;
/* USER CODE END PV */

将开发板通过USB转TTL模块连接到电脑上,在电脑上打开串口调试软件,选择串口号,设置串口通讯波特率为115200Bit/s,数据位为8,停止位为1,打开串口。连接通后,可以发现数据以每一秒正常被发送到了串口调试助手中,以HEX模式发送aa数据给开发板,开发板上的灯也被熄灭了,说明开发板也可以接收到串口调试助手发送来的数据。

在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值