8.6 串口接收项目1:轮询方式控制LED灯

# 8.6 串口接收项目1:轮询方式控制LED灯

需通过STM32F103的USART1接收PC端指令(R/G/B/O),轮询解析字符后控制RGB LED对应亮灭,初始化115200波特率串口及GPIO,循环接收时添加消抖并清除缓存,实现基础串口指令控制功能。

# 下载源码 点击查看PDF文档

# 8.6.1 STM32CubeMX配置

# 1. 建立新工程

① 建立一个新的STM32工程;
② 选择芯片“STM32F103C8T6”;
③ 设置工程的名称为“08 USART_2”;
④ 选择SWD调试方式; ⑤ 开启外部高速时钟源并修改主频为72MHz。

设置工程名称

# 2. 配置LED引脚

在芯片引脚图中分别右击PA7、PB0和PB1,均选择“GPIO_Output”,并设置用户标签分别为“LED_BLUE”、“LED_RED”和“LED_GREEN”。

引脚配置图

# 3. 生成代码

勾选生成单独外设文件,保存生成工程代码。


# 8.6.2 串口接收项目1软件设计

# 轮询接收逻辑

使用轮询方式实现串口数据接收功能的软件编程分析如下:在main( )函数的while(1)循环中,通过HAL_UART_Receive函数轮询接收串口数据。接收到指令后,根据字符内容控制对应GPIO引脚的电平状态。由于LED阳极通过限流电阻连接至GPIO引脚,输出高电平点亮LED,输出低电平关闭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 串口接收项目1下载验证

# 1.下载步骤

ST-LINK下载器连接嵌入式学习板的烧录接口和电脑端,点击STM32CubeIDE软件开发界面中的“Run”按钮,一键完成代码程序的编译下载。

# 2.验证步骤

打开串口调试助手,选择正确的COM口与波特率(115200)。

在串口调试助手的数据发送区依次发送控制指令。开发板上LED灯的实验现象如下所示:

  • 发送字符“R”,红色LED灯点亮,其他LED熄灭。
  • 发送字符“G”,绿色LED灯点亮,其他LED熄灭。
  • 发送字符“B”,蓝色LED灯点亮,其他LED熄灭。
  • 发送字符“O”,所有LED灯均熄灭。
发送控制指令