首页 > 其他分享 >6-蓝牙模块与数据包解析

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

时间:2024-10-12 21:49:26浏览次数:9  
标签:DMA HAL 蓝牙 模块 GPIO message 数据包

蓝牙模块与数据包解析

在这里插入图片描述

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

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

低功耗蓝牙,包括诸多协议,如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);
	}
}

标签:DMA,HAL,蓝牙,模块,GPIO,message,数据包
From: https://blog.csdn.net/m0_57852920/article/details/142887543

相关文章

  • Windows系统主机连接蓝牙耳机没有声音
    前期准备如果蓝牙耳机已经连接了电脑并识别到了,只是没有声音,直接看连接蓝牙项确认蓝牙硬件能被系统识别到右击开始菜单(win+x)-设备管理器(M)-找蓝牙没找到或者看不懂没关系我也看不懂...安装蓝牙驱动浏览器搜索Windows蓝牙驱动,官网直接下载点我......
  • 【python-日期和时间处理】datetime模块基本使用
    1.获取datetime对象获取当前datetime对象方法:datetime.now(cls,tz=None)->datetime参数说明:tz:时区信息,不传该参数时,默认使用当地时区示例代码:now=datetime.now()print(now)#2023-01-0509:38:43.084062print(type(now))#datetime.datetime如果需......
  • 【python日期和时间处理】time模块基本使用
    1.time模块中三种时间格式时间戳time模块获取各种精度的时间戳importtimetimestamp=time.time()timestamp_s=int(time.time())#s精度timestamp_ms=int(time.time()*1000)#ms精度timestamp_us=int(time.time()*1000_000)#μs精度timestamp_ns=t......
  • linux内核文件系统模块管理
    Linux内核的文件系统模块是操作系统的重要组成部分,负责管理存储设备上的数据,提供文件的创建、读写、删除等操作接口。文件系统模块包括虚拟文件系统(VFS)、具体文件系统驱动、缓存管理、块设备层、权限管理等多个层次。下面详细介绍其管理细节。1.虚拟文件系统(VFS,VirtualF......
  • 蓝牙定位的MATLAB程序,四个锚点、三维空间
       目录程序描述运行结果 程序描述这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关......
  • FMC160-两路14位400Msps AD,两路16位400Msps DA FMC子卡模块
     一、概述 该板卡可实现2路14bit400MspsAD和2路16bit400MspsDA功能,遵循VITA57标准,北京太速科技板卡可以直接与VME/VXS/AMC/VPX/PCI-EFPGA载板连接使用,用于模拟信号、中频信号采集,信号发出等应用,是xilinx开发板设计的标准板卡。  二、 性能指标板卡功能......
  • Need BLUETOOTH PRIVILEGED permission以及requestMtu导致蓝牙断连问题
    在部分Android手机上,当连接上GATTService后直接requestMtu有可能会造成蓝牙连接中断,随后继续重新连接会报错NeedBLUETOOTHPRIVILEGEDpermission1//扫描成功后连接gatt2BluetoothDevicemRemoteDevice=mBluetoothAdapter.getRemoteDevice(result.getDevice().getAddress(......
  • RepVGGBlock+GSConv+Bifpn+c2fca(模块融合)改进yolo5
    参考论文:ExploringtheClose-RangeDetectionofUAV-BasedImagesonPineWiltDiseasebyanImprovedDeepLearningMethod 首先我们来介绍一下该文章使用的改进模块接着再来实现它 我们查看论文提出的repvggblock1和repvggblock2有什么区别: 可以看到只是一个bn层......
  • [转]一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码
    本文转自:一文讲透为PowerAutomateforDesktop(PAD)实现自定义模块-附完整代码-陈希章-博客园(cnblogs.com) 概述PowerAutomateforDesktop(以下简称PAD)是微软推出的一款针对Windows桌面端的免费RPA(机器人流程自动化)工具,它目前默认会随着Windows11安装,但也可以......
  • 软件结构设计中的模块类型
    这道题考查的是软件结构设计中的模块类型知识点。在软件结构设计中,通常会将软件系统划分为不同的模块,每个模块承担特定的功能。主要的模块类型有传入模块、传出模块、变换模块和协调模块。一、传入模块功能:向系统提供数据。例如,从外部文件读取数据并传入系统进行处理的模块就......