8.8 串口项目4:蓝牙接收数据控制LED灯亮灭

# 8.8 串口项目4:蓝牙接收数据控制LED灯亮灭

本实验基于8.7节实验三(中断方式)扩展为蓝牙无线通信,通过USART3连接蓝牙模块实现远程控制LED。主要差异:

  • 通信方式:有线(USART1) → 无线(USART3+蓝牙模块JDY-31)
  • 适用场景:移动端/远程控制
  • 硬件调整:USART3引脚PB10/PB11替代USART1的PA9/PA10

实验目标:通过手机蓝牙串口助手发送指令(R/G/B/O),STM32中断接收并控制LED亮灭。


# 8.8.1 蓝牙硬件电路设计

硬件接口

  • JDY-31蓝牙模块需连接:VCC(3.3V~6V)、GND、TXD(接STM32的PB11/USART3_RX)、RXD(接PB10/USART3_TX)
  • 状态指示
    • 未连接:绿色LED以1Hz闪烁(待机)
    • 已连接:LED常亮(链路建立)
    • 数据传输:LED快速闪烁(通信活动)
JDY-31蓝牙模块 蓝牙模块电路图

# 8.8.2 STM32CubeMx配置

# 1. 配置USART3

  1. 进入Pinout & ConfigurationConnectivity → 启用USART3异步模式。
  2. 参数设置(与蓝牙模块一致):
    • 波特率:9600
    • 数据位:8 bits
    • 校验位:None
    • 停止位:1
启用USART3
配置USART参数

# 2. 启用USART3中断

  • 导航至System CoreNVIC → 勾选USART3 global interrupt
启用USART3中断

# 8.8.3 串口项目4软件设置

# 1. 启动中断接收

修改USART1为USART3:

/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart3, &rx_char, 1);  // 启动USART3中断接收
/* USER CODE END 2 */
1
2
3

# 2. 中断回调函数

仅响应USART3中断,并重启接收:

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  if (huart->Instance == USART3) {
    switch (rx_char) {
      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 '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;
    }
    HAL_UART_Receive_IT(&huart3, &rx_char, 1);  // 重启中断接收
  }
}
/* USER CODE END 4 */
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

# 8.8.4 串口项目4下载验证

  1. 蓝牙配对

    • 手机搜索设备"JDY-31-SPP",配对密码1234
    • 连接成功后,蓝牙模块绿灯常亮。
    手机连接蓝牙
  2. 发送指令

    • 使用蓝牙调试助手发送R/B/O指令,LED立即响应。
    • 发送O时整机电流从25mA降至15mA(低功耗模式)。
    调试助手主界面
    调试界面
  3. 硬件结果

    • LED切换无抖动,引脚电平变化正确。
    硬件实现结果