• 正文
  • 相关推荐
申请入驻 产业图谱

STM32和蓝牙的完美融合:从广播数据到特性通知的完整解析

10/13 10:35
1282
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前段时间我们使用CubeMX快速配置了一个STM32WBA系列的BLE蓝牙程序,利用BLE蓝牙助手,成功搜索到了BLE蓝牙。

同时我们介绍了如何在STM32WBA中创建服务和特性来传输我们的数据,实现了数据的上传和通知。

但是当时的使用方式非常的粗糙,通过这段时间的学习,本期我们来详细介绍一下STM32WBA的BLE中数据通知的一些内容。

1、广播数据结构体

低功耗蓝牙的工作频段覆盖2.402GHZ到2.480GHZ每2MHZ一个信道共计40个信道。其中三个信道作为广播信道用以传输BLE蓝牙的基本信息。

每个广播数据包最高37个字节,其中前6个字节作为固定的MAC地址不可修改,后最多31位作为用户数据传递设备的基本信息。

用户数据可以由若干个广播数据结构体组成,每个广播数据结构体包含着 头 和 有效负载,头由长度和类型两个字节组成,因此留给我们使用的有效负载总共剩下29个字节:

在STM32CubeMX中配置BLE的广播属性,配置广播数据内容,系统会自行计算有效负载长度。

可以看到对ad_data length的描述是不能超过29,这是由有效负载的最大长度决定的。

在广播属性中,值得强调是的AD_TYPE_16_BITXXXX这个选项,他决定是否将UUID代码加入我们的广播,可以让其他设备快速了解这个BLE设备的大体功能。

在了解UUID之前我们需要先了解一下服务和特性。

2、服务和特性

BLE蓝牙可以包含多个服务,每个服务可以包含多个特性,每个特性都可以设置其读/写/通知权限,我们可以通过读取某个特性来获取BLE设备上传的值。

为了区分各个服务以及特性的功能,蓝牙组织能够区分各个服务特性的功能,规定使用长度为128bit的UUID来进行标识区分。

用户也可以通过16位的UUID和112位基地址拼接成128位的UUID。蓝牙联盟规定了常用的UUID代码,我们在CubeMX中也可以看到相关选项:

例如这里我选择Alert Notification对应的UUID为08 11,通过规定好的UUID,我们连接蓝牙设备的时候就可以识别到我们的服务名称:

当然BLE蓝牙也允许我们自定义UUID ,甚至是自定义128位的UUID:

只不过自定义的UUID不在蓝牙联盟的规定范围之中,会导致无法识别类型显示UnKonwn。

3、特性的三大权限

特性的核心是:读(Read)、写(Write)和通知(Notify)三大功能。

主机可以通过(读)向设备读取指定特性所包含的数据,也可以通过(写)更改特性的数据。

通知则是可以不用主机发起问询,特性值发生更新后,设备可以主动向主机发送通知并上传特性值,实现数据的交互。

下一期我们介绍STM32WBA如何使用stm32的rtos实现订阅通知后定期上传数据

相关推荐