还是从最基本的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。难道是发现已经初始化过了?
接下来做的就是和蓝牙相关的事情了,
第一个函数:
设定板子的名称、地址,并初始化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数据的发送给搞明白。