STM32 CubeIDE 使用蓝牙模块实现手机控制LED灯

开启UART3异步模式,配置波特率9600。

开启USART3中断,添加DMA 通道。

将蓝牙模块连接到开发板上注意引脚对应

数据回显

复制代码
if(huart == &huart3){
    HAL_UART_Transmit_DMA(&huart3, receiveData, Size);
}
 当确认是串口3的回调事件后,立即通过DMA将接收到的数据原封不动发回

帧头与长度校验

复制代码
if(receiveData[0] == 0xAA){
    if(receiveData[1] == Size){
 
 协议约定帧头为  0xAA ,并通过  receiveData[1]  存储的预期长度,和实际接收长度  Size  做比对。

和校验验证

复制代码
uint8_t sum = 0;
for(int i = 0; i < Size - 1; i++){
    sum += receiveData[i];
}
if(sum == receiveData[Size-1]){
 
计算除最后一个字节外所有数据的累加和,再与最后一个字节(校验位)比对。

LED控制

复制代码
for(int i=2; i<Size-1; i+=2){
    GPIO_PinState state = GPIO_PIN_SET;
    if(receiveData[i+1] == 0x00){
        state = GPIO_PIN_RESET;
    }
    if(receiveData[i] == 0x01){
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, state);
    }else if(receiveData[i] == 0x02){
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, state);
    }else if(receiveData[i] == 0x03){
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, state);
    }
}
( receiveData[i] ):指定LED通道( 0x01 =红、 0x02 =绿、 0x03 =蓝)。
( receiveData[i+1] ):指定LED状态( 0x00 =熄灭、非0=点亮)。
 这种"通道+状态"的指令格式,支持同时控制多个LED。

HAL_UARTEx_ReceiveToIdle_DMA(&huart3, receiveData, sizeof(receiveData));
HAL_DMA_DISABLE_IT(&hdma_usart3_rx, DMA_IT_HT);
重新开启下一轮的空闲帧DMA接收,保证串口通信的连续性。
关闭DMA的半传输中断( DMA_IT_HT ),避免半满时触发不必要的中断,仅保留空闲中断触发回调。

相关推荐
fie888915 小时前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
bu_shuo15 小时前
嵌入式硬件工程师VS单板硬件工程师
嵌入式硬件·电子工程师·单板硬件
llilian_1615 小时前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq1302086968216 小时前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
爱分享的阿Q16 小时前
STM32现代化AI开发环境搭建:从Keil到VSCode+AI的范式转移
人工智能·vscode·stm32
爱吃程序猿的喵16 小时前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
独小乐16 小时前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
XINVRY-FPGA17 小时前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
bubiyoushang88819 小时前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
cmpxr_19 小时前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式