8.6 串口项目2:轮询方式接收数据控制LED亮灭

# 8.6 串口项目2:轮询方式接收数据控制LED亮灭

本实验通过STM32的USART1模块,采用轮询方式接收串口指令(R/G/B/O),控制RGB三色LED的亮灭。
核心对比

  • 轮询方式:CPU持续查询数据,代码简单但占用资源。
  • 适用场景:低频指令控制,学习基础串口通信原理。

# 8.6.1 STM32CubeMX配置

# 1. 新建工程

  • 工程名称:08 USART_2
  • 芯片型号:STM32F103C8T6
设置工程名称

# 2. 配置LED引脚

  • 引脚分配
    • PA7 → LED_BLUE(蓝色LED)
    • PB0 → LED_RED(红色LED)
    • PB1 → LED_GREEN(绿色LED)
  • 模式:GPIO_Output
引脚配置图

# 8.6.2 串口项目2软件设计

# 轮询接收逻辑

main()while循环中,通过HAL_UART_Receive轮询接收数据,控制LED状态:

while (1) {
  uint8_t rx_buffer[1];  // 接收缓冲区(单字节)
  // 接收1字节,超时10ms
  if (HAL_UART_Receive(&huart1, rx_buffer, 1, 10) == HAL_OK) {
    switch (rx_buffer[0]) {
      case 'R':  // 红色LED亮
        HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);
        break;
      case 'G':  // 绿色LED亮
        HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);
        break;
      case 'B':  // 蓝色LED亮
        HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET);
        break;
      case 'O':  // 关闭所有LED
        HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);
        break;
      default: break;
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 8.6.3 串口项目2下载验证

# 步骤与现象

  1. 烧录程序:通过ST-LINK连接SWD接口,下载代码至STM32。
  2. 串口调试
    • 打开串口调试助手,设置波特率115200。
    • 发送R/G/B/O指令,观察LED状态变化:
      • R:红色亮,其他灭
      • G:绿色亮,其他灭
      • B:蓝色亮,其他灭
      • O:所有LED关闭
发送控制指令

关键说明

  • LED阳极接GPIO,高电平点亮,低电平关闭。
  • 轮询方式适用于简单场景,但需注意超时时间设置(避免CPU资源过度占用)。