STM32 物联网蓝牙通信

发布时间:2026/10/16 2:59:49
STM32 物联网蓝牙通信
一.技术类型蓝牙协议包含两种技术BRBasic Rate、LELow Energy。两者都包含搜索管理、连接管理等机制但相互独立、不能共通。若要确保跟所有蓝牙设备互通则要同时实现两种技术。1.1 经典蓝牙BP/EDR/AMPBR最早期的蓝牙技术理论速率721.2kbpsEDR使用EDR的蓝牙理论速率达到了2.1MbpsAMP理论速率54Mbps向wifi技术靠拢蓝牙自身物理层和AMP技术差异明显不能与上述两者共用即BR/EDR与AMP二选一。1.2 低功耗蓝牙BLEBLE与经典蓝牙相同都使用2.4GHz无线电频率所以双模设备可共用一根天线可同时与BR、BLE通信的设备叫双模设备。这两种技术差异非常大只是凑巧同时加了“蓝牙”前缀而已。1.3 常见的蓝牙架构1-3-1 SOC 单芯片解决方案bluetooth controller包含偏底层物理层、电路层的协议、定义/射频的定义bluetooth Host包含上层协议可以放在另外一个蓝牙主机。而单芯片解决方案集成上述两者一个蓝牙芯片即可解决所有蓝牙问题。这类芯片本身可直接作为MCU使用集成度很高外部连接外设做简单扩展。1-3-2 SOC蓝牙MCU方案蓝牙芯片不烧写应用逻辑通过特定接口UART居多由MCU主机进行控制AT指令。此部分应用多将蓝牙作为外设用于远程通信例如常见的蓝牙串口。1-3-3 蓝牙hostcontroller分开当需要蓝牙的功能增多涉及到的蓝牙协议也增多需要将host和controller分开集成更多的蓝牙协议。例如手机的蓝牙复杂应用。二.BLE 低功耗蓝牙2.1 BLE协议栈BLE协议栈主要用来对应用数据进行层层包装生成一个满足BLE协议的数据包即 把应用数据包裹在帧头和帧尾中。蓝牙协议分两个部分蓝牙核心协议Core、蓝牙应用层协议Application2-1-1 蓝牙核心协议物理层physical layer射频Radio、无线电连接层link layer负责创建、修改、删除数据链路类似于网络架构TCP连接层某些操作控制状态机准备、广播、监听/扫描、发起连接、已连接记录蓝牙连接状态接口层host controller interfacea.封装入控制器controller因为一个蓝牙芯片中可以通过多个controller一个host实现多模系统不同的controller配置不同就需要不同的接口层host统一调用b.此层可以由软件api实现/硬件UART、SPI、USB实现。host向上为应用层提供更方便的接口向下封装底层逻辑链路控制和自适应协议层L2CAP负责对交换数据进行协议复用功能、分段和重组操作安全管理层SM生成和管理、存储 身份密钥 和 加密密钥可以生成随机地址并将其解析为已知设备身份。通用访问配置文件层GAPGAP层代表所有蓝牙设备通用的基本功能传输、协议、应用程序配置文件使用的模式、访问程序GAP服务包括设备发现、连接模式、安全、身份验证、关联模型、服务发现。属性协议层ATT用来定义用户命令和用户操作的数据比如 某数据的属性为仅可读通用属性配置文件GATT表示属性服务器服务端/客户端和可选的属性客户端的功能作为两种角色时分别提供什么功能提供用于发现、读取、写入和指示服务特性和属性的接口。2.2 角色划分ESP32-C3同时支持wifi和蓝牙不用改写芯片设置直接通过AT指令操作蓝牙。协议栈不同层级有不同角色划分且互不影响。LL设备分为从机和主机从机广播主机发起连接类似wifi联网功能GAP根据状态定义四种角色广播者、观察者、外围设备和中心设备编程过程中不涉及GATT设备分为服务端和客户端。2.3 BLE的地址分为公共地址和随机地址。2-3-1 公共地址公共地址是唯一且不可改变的类似于网卡的硬件地址mac需向公司统一购买。总长度为6个字节共48位与mac地址相同高位为分配的公司id低位为公司内部流水线分配id。2-3-2 随机地址随机地址提供额外的隐私保护分为静态地址、私有地址通过地址的最高两位做区分。静态地址最高位为0b11剩下的46位不能全部为0或全部为1在每次上电或复位后随机生成直到下次复位前都不改变。相当于动态IP私有地址最高位是0即0b00/0b01剩下的46位不能全部为0或全部为1定时更新改变一般是15分钟一次。最高位00不可解析私有地址。最高位01可解析私有地址前24位包括01是随机数后24位为哈希值。与公共地址/静态地址配合使用。定义一个密钥IRK客户端通过密钥和这个私有地址计算出设备的公共地址/静态地址。2.3 广播扫描和通讯2-3-1 广播广播即从机/服务器经过一段时间间隔发送一次广播数据包只有在广播状态时主机/客户端才能发现从机/服务器每个广播事件广播包在37、38、39三个信道依次广播可选择例如esp32中可选择依次广播/在某一特定信道广播广播数据包一般包括可读的设备名称设备是否可连接等信息。2-3-2 扫描扫描即主机监听从机广播数据包和发送扫描请求的过程主机通过扫描能获取到从机的广播包以及扫描回应数据包主机可以对已扫描的设备发出连接请求从而连接从机设备并通信。2-3-3 通讯主从通信由GATT中的profile完成从机作为GATT的server端定义和存储profile主机作为client端发现和获取从机的serve和characteristic从而实现主从通信profile包含多个serve每个serve包含多个characteristiccharacteristic是最小单位。服务端可以有多个service和characteristic每个服务和特征值都有唯一标识UUID蓝牙协议中一般采用16位即两个字节的UUID。特征值属性read、write、notify、indicateread用的很少服务器先发请求用户端才返回数据指示indicate需要回复通知notify不需要回复若客户端向服务器发数据则选择write类型若服务器向客户端发数据则选择indicate/notify类型。三.蓝牙通讯案例蓝牙透传3.1 概念esp32工作模式命令模式、数据模式默认工作模式为命令模式。