STM32WBA支持低功耗蓝牙(BLE)5.3应用所需的性能、效率和安全性,特性包括:
BLE_DataThroughput_Server例程演示了如何作为GATT服务器实现点对点的通信,支持一个数据传输服务和支持通知的传输特征值。基于该例程修改我们很容易开发自己的蓝牙通信程序。通过官方提供的手册,可以了解基本的蓝牙应用构成:
从图中可以看出,ST将蓝牙应用分为3层,最底层为蓝牙协议栈,中间层为GATT管理模块,提供蓝牙服务,上层为GAP管理模块,包含用户应用。
GAP(Generic Access Profile)用来控制设备连接和广播,GAP 使设备被其他设备可见,并决定了设备是否可以或者怎样与其它设备进行交互。GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)和中心设备(Central)。
外围设备:这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。
中心设备:中心设备相对比较强大,用来连接其他外围设备。
在 GAP 中外围设备通过两种方式向外广播数据:广播数据和扫描回复。广播数据是必需的,因为外设必需不停的向外广播,让中心设备知道它的存在。扫描回复是可选的,中心设备可以向外设请求扫描回复,这里包含一些设备额外的信息,例如设备的名字。
GATT(Generic Attribute Profile)定义两个 BLE 设备通过叫做 Service 和 Characteristic 的东西进行通信。GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见。当设备断开,它又开始广播。
中心设备和外设需要双向通信的话,唯一的方式就是建立 GATT 连接。GATT事务是建立在嵌套的Profiles,Services和Characteristics之上的,
每个Service有一个UUID唯一标识。UUID有16bit的,或者128bit的。
Characteristic是最小的逻辑数据单元,每个Characteristic用16bit或者128bit的UUID唯一标识。
官方提供的通过STM32CubeMX生成的程序都具有下图所示的结构:用户不需要关系底层的蓝牙协议是如何实现的,只需要开发自己的特征值和服务应用即可。
串口打印日志,上电后开启广播,手机连接后就停止广播,并提供特征值的访问:
连接后可以看到特征值和服务:
通知开启和关闭: