
0 前言 在使用了APP建立了一个基本的连接,如heartrate的应用。 1 ![]() 我们需要去逐步认清里面的连接。 1 Heart Rate 功能概述Heart Rate的应用可以用下面的一个图来简单概括: 2 ![]() 图片来源AN5259 我主要关注的是外设。它有一个包含两个server,以及相应的characteristics。 3 Heart Rate 初始化流程 软件的初始化,和对应的函数如下: 1. 初始化设备(HAL,重启设备、时钟、功率模式) 2 初始化一些外围 3 初始化话BLE设备的公共地址(如果需要) aci_hal_write_config_data()API 4 设置发射功率 aci_hal_set_tx_power_level()API 5 初始化GATT aci_gatt_init() API 6 初始化GAP aci_gap_init(“role”)API 7 设置设备安全 aci_gap_set_io_capability()and aci_gap_set_authentication_requirement()APIs 8 设置一些服务 aci_gatt_add_service(),aci_gatt_add_char(),aci_gatt_add_char_desc() APIs 9 使用sequencer去管理任务和低功耗模式 ( k4 K7 o1 F5 w4 N. ~; g* {( G这些STM的项目工程和相关的文档 都提供了相应的说明,我们只需要理解其中的函数,合理的调用。这个就需要一定的对BLE的理解和相关API的解读。 4 需要理解的几个API 类别4.1 Sequencer 顺序控制器,我喜欢把它我队列相比较理解,将需要执行的事件注册成一个task,需要的时候调用Task就行。需要注意的是要有UTIL_SEQ_RegTask,UTIL_SEQ_Run这两个,其他根据情况使用。 4.2 Timer server 我的理解是一个分时调用的功能,它可以让你需要的功能周期性操作。 4.3 Low power manager ST已经写好了相关的APIs,需要针对使用。 4.4 GAP 和GATT 通过和GAP和GATT相关APIs的使用,可以反过来熟悉,GAPperipheral/central,GATT server/client。 这些概念和实际的阶段是紧密相关的,通过实际的阶段,去理解概念会弄得更明白,不然就是一团雾水。 首先划分,设备是哪个阶段,要做什么,选择相应的API。比如,heart rate的蓝牙。 1 heart rate sensor 需要被发现了,所以其首先广播,作为外围设备是 GAP peripheral 2 被连接上之后,就是提供数据,是服务器(和TCP类似),因此是GATTservice。 对比来看,与之通讯的设备就在对立面。 & M, `( a" z6 c; \0 u% X5运行流程 3 ![]() & u5 l3 A, T8 S7 x 图片来源AN5259 从运行的框图,我们可以看到SVCCTL_UserEvtRX整个函数很重要,承担着接受事件的分解和处理。将事件分为GAP和GATT,对应处理。 4 ![]() 通过初始化,hci_init 将底层接收到的指令转到SVCCTL_UserEvtRX中处理,这样就脱离了对底层的管理,只需要注重接受到数据的分析。 |
大家一起学硬件前端的数据采集呀 |
Nucleo-STM32WB09KE测评-蓝牙调试并使用OLED显示数据
【NUCLEO-WB09KE评测】创建BLE工程和开启调试信息
【NUCLEO-WB09KE评测】+2.串口打印
【NUCLEO-WB09KE评测】+5.实现标准电量服务
【NUCLEO-WB09KE评测】BLE例程HeartRate及工具探索
【NUCLEO-WB09KE评测】+3.蓝牙广播
STM32WB系列MCU低功耗测试
Nucleo-STM32WB09KE测评--IIC传感器读取
【NUCLEO-WB09KE评测】+4.蓝牙控制LED
【NUCLEO-WB09KE评测】+1.点灯