[原创] 【ST AMG SensorTile开发大赛 健身小管家】03 sensorTile 蓝牙开发初探

johnrey   2017-4-21 12:30 楼主
还是从最基本的ALLMEMS1出发
main函数流程
首先是一些硬件和外设上的初始化
- HAL_Init();
- SystemClock_Config();
- InitTargetPlatform(TARGET_SENSORTILE);
这一行比较重要,主要就是在初始化板上的各种传感器(TargetPlatform.c)
Init_MEM1_Sensors();
BSP_GG_Init();
Init_MEMS_Mics();
其中Init_MEM1_Sensors();包含了大部分的初始化工作,其实都是调用BSP_xx_Init函数。不过很奇怪一点,Temperature Sensor1是用自动模式,其实就是初始化LPS22HB_T_0,这个是正常的, 但是Sensor2也是指定初始化LPS22HB_T_0,返回的却是Error。难道是发现已经初始化过了?
39c9d628-8931-456a-9f55-c56250c106fd.jpg
接下来做的就是和蓝牙相关的事情了,
ec2c02cf-8caa-4c46-95ff-e4a55f5ca828.png

第一个函数:
设定板子的名称、地址,并初始化gap和gatt
第二个函数:
添加3个服务,这个就是用户代码的主要部分了,这些都在sensor_service里面

while(1):循环操作部分
如果没有连接,那么闪烁,设为可连接的,等待连接
循环判断是否有MEMSInterrupt、HCI_ProcessEvent、SendEnv、SendAudioLevel、SendAccGyroMag等事件,有的话,做对应的处理。

下面就来看看添加服务的具体过程。蓝牙主要就是用service来提供数据,这些定义都在sensor_service.c中。不过st蓝牙部分的函数基本没有注释啊,不知道哪里可以找到API说明。我们以最简单的Add_ConfigW2ST_Service()为例来看,(@160,ref @ 1049)。过程都非常简单,
- copy service UUID,aci_gatt_add_serv()
- copy char UUID,aci_gatt_add_char()

当有属性被改变时,会调用
Attribute_Modified_CB:属性变化的回调函数,判断哪个属性变了,调用对应的函数。如果是config的char被改变了,那么就执行
ConfigCommandParsing:解析配置命令,完成操作,@1609
并通过Config_Notify对配置进行回应,LED的控制也在这个里面。验证方式如下:
找一个BLE调试工具,连接上我们的sensorTile,选择最后一个service,里面就一个属性,点进去,发送hex串0x200000000100就可以点亮sensorTile的LED,而发送hex串0x200000000000则是sensorTile的LED。sensorTile完成操作后,会notify操作的结果给手机,st的app应该就是根据notify回来的

不得不说,这些代码看的头有点涨,只要是没找到合适的资料。哎,看看后面能不能把mems数据的发送给搞明白。

回复评论 (1)

代码的说明在C:\Program Files (x86)\STMicroelectronics\BlueMicrosystem1_V3.2.0\Documentation下面有一部分的。至于低功耗蓝牙的服务/属性等等的添加和调用,可以参考PM0237 本帖最后由 alberthink 于 2017-4-21 14:24 编辑
点赞  2017-4-21 14:23
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复