上一个帖子写了如何使用STM32CUBEMX生成一个BLE的样板工程,生成的工程还需要自己添加一些应用信息。
生成的工程结构如下图所示:
这里主要是要关注以下几个文件:app_conf.h, main.c, app_entry.c, app_ble.c, xxx_server_app.c, xxx_server.c。它们的作用如下图所示:
从上面的2个图中可以看到各个文件的调用关系,以及各个文件的作用。
一、首先在app_conf.h 文件中添加我们注册到sequencer中的任务ID,这里有1个任务是必须要添加的,就是停止广播的任务。
二、在app_entry.c 文件中的MX_APPE_Init函数中添加工程中用到的外设的初始化,这个函数是BLE应用的入口函数,因此相关硬件的初始化都是在这里完成的。
三、在app_ble.c文件中,将停止广播的函数注册到sequencer中,同时创建定时器,这个定时器也是用于停止广播的,比如设置广播时长为60s,超过60s后停止广播。
然后设置RF的输出功率,并打开广播,打开广播的同时,开启“停止广播的定时器”。
同时在app_ble.c中需要对一些事件进行处理,比如连接中断时间、连接成功的事件。
四、在xxx_app.c文件中,P2P_SERVER_EventHandler()函数中,将属性值更改事件的数据获取到,然后传递给xxx_server_app.c文件中的P2P_SERVER_Notification()函数
五、在xxx_server_app.c中添加对GATT属性读写的执行函数。
具体的设置方式可以参照下面这个网址:
STM32WBA Bluetooth® Low Energy - STM32CubeMX Application Conception - stm32mcu (stmicroelectronics.cn)
总结
从上面的配置上可以看出需要修改的地方还是很多的,而且涉及的文件也很多,各个文件之间的关系需要弄清楚。不同的文件负责的功能不一样,需要按功能向相关的文件中添加代码。
在没有操作系统的情况下,BLE的协议栈是通过sequencer来实现事件触发的机制的,并且搭配定时器timer来实现一些周期性的功能,sequencer和timer的代码在文件夹Utilities中。