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

6-蓝牙模块与数据包解析

蓝牙模块与数据包解析

在这里插入图片描述

蓝牙连接中有主机和从机,在建立通信连接前,从机要向外广播自己的信息,然后主机扫描到附近正在广播的蓝牙设备(子机)后就发起连接,连接建立后,双方就可以通过约定好的协议进行通信了。

蓝牙分为普通蓝牙,和低功耗蓝牙

低功耗蓝牙,包括诸多协议,如GAP广播协议,GATT协议,Service Characteristic等众多知识点。

连接步骤

1.更改波特率:

​ 图形界面-> Connectivity -> 将与蓝牙模块连接的USART3开启为异步模式 -> 参数设置,将Baud Rate 改为蓝牙模块的默认波特率9600

2.开启NVIC 中断

​ 在NVICSettings 中开启中断

3.添加DMA通道

​ DMA_Setting -> add 添加Rx和Tx 通道

保存后其串口为huart3

接着编写案列与5.1相同

数据包解析

发送数据包时,如何判断设备正确发送以及接收方是否接收到了正确的数据呢

在这里插入图片描述

就需要对数据包进行解析了,如规定,第一位起始位(包头)必须为0xAA 第二位必须为整串数据包的长度,后面为发送的数据包的信息,最后一位为前面整个数据的加和,这样就能保证数据的正确性。

在这里插入图片描述

有这样一个需求:发送格式为小灯编号+亮灭控制信号(重复)来进行发送来控制三盏小灯的亮灭

在这里插入图片描述

表示:红灯熄灭。

在这里插入图片描述

表示红灯熄灭,蓝灯开启

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){if (huart == &huart3) {HAL_UART_Transmit_DMA(&huart3, 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 (message[Size-1]==sum) {for (int i = 2;  i < Size -1 ;  i+=2) {GPIO_PinState state = GPIO_PIN_RESET;if (message[i+1]==0xFF) {state = GPIO_PIN_SET;}if (message[i]  == 0x01) {HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, state);}else if (message[i]  == 0x02) {HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, state);}else if (message[i]  == 0x03) {HAL_GPIO_WritePin(LED_BULE_GPIO_Port, LED_BULE_Pin, state);}}}}}HAL_UARTEx_ReceiveToIdle_DMA(&huart3, message, sizeof(message));__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);}
}

http://www.mrgr.cn/news/48886.html

相关文章:

  • Java分布式锁
  • Python从入门到高手6.3节-字符串操作方法
  • 聚类分析 | NRBO-GMM聚类优化算法
  • JDK 1.4主要特性
  • 【C#生态园】完整解读C#网络通信库:从基础到实战应用
  • 《DATE: Domain Adaptive Product Seeker for E-commerce》中文校对版
  • 嵌入式数据结构中顺序栈用法
  • 设计模式(学习笔记)
  • 二进制转十六进制
  • echarts 入门
  • 为什么很多人宁愿加钱买港版,也不愿买国行 iPhone 16
  • python爬虫 - 进阶正则表达式
  • 郑光荣参加老年春节联欢晚会团长会议现场采访
  • 初知C++:AVL树
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • 简单粗暴理解GNN、GCN、GAT
  • 【单机游戏】【烛火地牢2:猫咪的诅咒】烛火地牢2:猫咪的诅咒介绍
  • Vue2中如何使用从父组件中使用子组件中的数据
  • leetcode哈希表(一)-有效的字母异位词
  • C语言题目练习2