【STM32】蓝牙模块数据包解析

devtools/2025/2/8 18:20:24/

使用到的蓝牙模块为DX-BT24,他可以将串口转蓝牙,实现与手机蓝牙的通信,本次实现使用手机蓝牙发送数据包来控制单片机LED的亮灭,规则如下:
AA 05 01 FF AF 该数据包表示包头为AA,05表示该数据包的大小,01表示蓝灯 FF表示亮 AF为校验和,是前面数据相加后的后两位用来检验数据传输的准确性
在这里插入图片描述
AA 05 02 00 B1 表示绿灯灭
在这里插入图片描述

也就是 包头 +数据大小+哪个灯+灯状态+校验和,
因为可以同时设置所有灯的状态如下:
AA 09 01 FF 02 FF 03 00 B7
在这里插入图片描述
所以不确定数据包大小就可以用不定长数据接收
在这里插入图片描述
按照电路图接线,然后使用串口3来进行通信,rx接tx,tx接rx

代码实现:
在这里插入图片描述

在这里插入图片描述

解析数据包代码实现:
在这里插入图片描述

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart==&huart3){HAL_UART_Transmit_DMA(&huart3,(uint8_t*)message, Size);// 解析数据包代码if(message[0]==0XAA)//包头检验{if(message[1]==Size)//数据个数检验{uint8_t sum=0;for(int i=0;i<Size-1;i++){sum+=message[i];}if(sum==message[Size-1])//校验和检验{for(int i=2;i<Size-2;i+=2){GPIO_PinState  state=GPIO_PIN_RESET;if(message[i+1]==0XFF){state=GPIO_PIN_SET;}if(message[i]==0X01){HAL_GPIO_WritePin(BLUE_LED_GPIO_Port,BLUE_LED_Pin, state);}else if(message[i]==0X02){HAL_GPIO_WritePin(GREEN_LED_GPIO_Port,GREEN_LED_Pin, state);}else if(message[i]==0X03){HAL_GPIO_WritePin(RED_LED_GPIO_Port,RED_LED_Pin, state);}}}}}HAL_UARTEx_ReceiveToIdle_DMA(&huart3, (uint8_t*)message,sizeof(message));__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);}}

手机下载一个蓝牙助手
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/157146.html

相关文章

3步打造C# API安全密盾

引言&#xff1a;API 安全的重要性 在数字化浪潮中&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为不同软件系统之间通信和数据交互的关键桥梁。无论是企业内部的微服务架构&#xff0c;还是面向外部用户的在线服务&#xff0c;API 都承担着数据传输和业务逻辑…

unity学习31:Video Player 视频播放相关基础

目录 1 新增Video Player的 component 2 导入视频到Asset里 3 拖入到 video player的 video clip里去即可 4 渲染模式 4.1 多种渲染模式 4.2 如果选择 Render Texture模式 4.3 然后把Render Texture 拖到游戏里的 gameObject上面 5 在UI上显示 5.1 创建UI 5.2 在UI上…

机器学习day8

自定义数据集 &#xff0c;使用朴素贝叶斯对其进行分类 代码 import numpy as np import matplotlib.pyplot as pltclass1_points np.array([[2.1, 2.2], [2.4, 2.5], [2.2, 2.0], [2.0, 2.1], [2.3, 2.3], [2.6, 2.4], [2.5, 2.1]]) class2_points np.array([[4.0, 3.5], …

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中&#xff0c;对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像&#xff0c;每个像素点上的BGR值为三个整数&#xff0c;因为是三通道图像&#xff1b;对于灰度图像&#xff0c;各个像素上的BGR值是一个整数&#xff0c;因为这是单通…

Spring boot整合quartz方法

目录 1.定时任务 1.quartz说明 2.Quartz提供了不同的数据存储策略以管理作业调度信息&#xff1a; 1.Quartz引入依赖 2.开发定时任务 &#xff08;1&#xff09;更新定时任务 &#xff08;2&#xff09;停止定时任务 &#xff08;3&#xff09;唤醒定时任务 &#xff…

Windows图形界面(GUI)-QT-C/C++ - QT Tab Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 1.1 什么是 QTabWidget&#xff1f; 1.2 使用场景 二、常见样式 2.1 选项卡式界面 2.2 动态添加和删除选项卡 2.3 自定义选项卡标题和图标 三、属性设置 3.1 添加页面&…

CS 与 BS 架构的差异

在数字化的今天&#xff0c;选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式&#xff0c;了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现&#xff0c;当时用户直接从主机获取数据。随着客户端和服务端…

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个…