当前位置: 首页 > article >正文

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

使用到的蓝牙模块为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.kler.cn/a/535483.html

相关文章:

  • 京准:NTP卫星时钟服务器对于DeepSeek安全的重要性
  • langchain教程-3.OutputParser/输出解析
  • 【llm对话系统】大模型 Llama 源码分析之并行训练方案
  • 深度整理总结MySQL——SQL的执行顺序和流程
  • ZooKeeper单节点详细部署流程
  • 代码随想录算法训练营| 二叉树总结
  • 【华为OD-E卷 - 108 最大矩阵和 100分(python、java、c++、js、c)】
  • crewai框架第三方API使用官方RAG工具(pdf,csv,json)
  • 高斯溅射和GIS融合之路- 将splat文件切片成3dtiles
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tasks.py
  • E4982A,keysight是德科技台式LCR表
  • 通义灵码在跨领域应用拓展之物联网篇
  • OSPF基础(1):工作过程、状态机、更新
  • Web 音视频(四)在浏览器中处理音频
  • 基于docker部署kafka-3.8.0版本,并开启SASL认证模式
  • C语言:深入了解指针3
  • C# 异常处理全解析
  • 3.【BUUCTF】XSS-Lab1
  • python 小游戏:扫雷
  • JVM与Java体系结构
  • 【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(四)
  • VUE小技能:通过 Prop 向子组件传递数据
  • 【游戏设计】游戏中的玩法与规则
  • 虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!
  • 深度学习-103-RAG技术之通过分块技术提升RAG的效果
  • 从零开始:OpenCV 图像处理快速入门教程