蓝牙发展到今天,有太多新特性了,去年年底( 2019/12/31 )推出的蓝牙 5.2 再一次更新了 HCI 物理特性,包括多重串流音频、低功耗音频解码器 LC3 、广播音频等等新特性,各家厂商也未停下创新的脚步,手头上的 MM32W373 就是集成了巨微集成电路的蓝牙射频方案的 Cortex –M3 内核主控的 BLE SoC 。由于是方案集成,加之刚入局,所以一些东西在蓝牙这块有待整理,规格书全文都少提蓝牙规格,都是在讲 MCU 那块, BLE 方面的 SDK 也是没有,只是放出一个乱七八糟的例程: 1. 接口混乱,比如蓝牙接口居然有两个版本,但却同时存在,具体 app_hogo.c 和 app.c 定义重复,前者是新版本 5.3.1 ,后者是 2.0.1 旧版本。还有一些 ATT 属性句柄明显访问不到,定义失误,比如 softwareRevision(0x2a28) 。 2. 写的非蓝牙部分也是混乱,比如 uart.c 里 uart_initwBaudRate 函数惨传进来的参数没有用到,但使用的时候又偏偏传进来了一个无用的参数。 3. 文档也是混乱 MiniBoard 和 eMiniBoard ,又是 MM373W 和 MMW373L 。也是待整理。 言归正传,由于蓝牙都是基于 service 来处理,而恰巧有一个 LED Service ,就来点灯看看,所有的 API 都放在 mg_api.h (进一步实锤是 MacroGiga 巨微写的 API ),实现全部开放,做成静态库 .lib (有 OTA 、连接、 dtm 检测定频 3 个库)分别对应 mg_BLEOTA_lib_m3.lib 、 mg_BLEpair_lib_m3.lib 、 mg_TEST_Lib.lib ,可供使用的 API 也只能修改广播类型( ble_set_adv_type )、广播间隔( ble_set_interval )、广播名称( ble_set_name )等,涉及到广播角色、连接参数、信号确认、连接状态机等很多关键过程全都没有,所以只能等待后续更新了。主框架是 3 个函数: 1) SetBleIntRunningMode :设置中断 SVC 和协议栈通信 2) radio_initBle :设置默认发射功率和 MAC 3) ble_run_interrupt_start :中断方式开启协议栈广播工作 看不到任何 GATT 、 GAP 初始化设置等等步骤,但 service 、 att 的声明也有,所以可以去添加自己的特征值,具体文件 app_hogo.c 里数组 AttCharList 就是所有服务、特征的声明,比如 0x2a29 对应 Manufactuer Name , 0x2a26 对应 Firmware Revision , 0x2a28 对应 0x2a28 : 因为是写属性,干脆就以第二个特征属性来操作,它的 properties 就有写和无回复写,修改句柄范围为 0x16 到 0x17 ,然后在写回调 ser_write_rsp 里添加操作内容: 实际操作如下(操作 LD2 绿灯,对应 PC10 ) , 开灯 : 关灯 其他修改名称、间隔、 MAC 、发射功率也都可以改,比如改名字( URL 编码): 也可 AT 指令动态修改: 不过时机不对会让协议栈工作不正常。高级特性 mesh 暂时官方没更新, OTA 还没试,暂且这样。