关于Central例程开发问题

现在我有一个款产品开发用到了CH573。蓝牙产品和蓝牙遥控器,遥控器发送简单的指令,产品收到后,执行对应的操作。

打算直接使用主机和从机的通信控制,所以使用例程中Central和Peripheral的工程进行开发,遥控器上运行的是Central的工程,主要功能为,检测按键,对应按键按下后通过蓝牙发送数据到从机,开发过程中遇到了一些问题:

(1)遥控器作为主机,这种方式可行吗?

(2)因为遥控器是电池供电,所以功率控制很重要,将HAL_SLEEP设置为TRUE来降低功耗,请问这里的睡眠模式是协议自动运行吗?RTC唤醒的时间也是固定的吗?主机和从机的例程直接将HAL_SLEEP设置为TRUE就可以都降低功耗吗?

(3)蓝牙通信前需要保证蓝牙连接,我使用长按按键的方式,在长按检测中调用tmos_set_event(centralTaskId, START_DEVICE_EVT);开始蓝牙服务,这种方式可行吗?有没有更好的方式运行蓝牙主机和从机连接的过程。应该调用哪些函数。

(4)例程中数据的通信,是比较宽泛的,有很多个元素,请问有没有更直接的,清晰明了的通信例程。

以上问题有对应的类似的Demo可以发送到我的邮箱,我作为参考开发。

个人信息保护,已隐藏

非常感谢。

考虑功耗的情况下,一般遥控器可以作为从机,产品作为主机。产品在开机的时候进行搜索广播设备,从机被扫描建立连接。

这样可以使从机广播的功耗低一些,更好控制。

如果使用遥控器作为主机,开启HAL_SLEEP后,将扫描间隔/扫描窗口注意配置,参考:

蓝牙BLE主机Central讲解二(Observer扫描讲解) - SweetTea_lllpc - 博客园 (cnblogs.com)

开启sleep后睡眠是协议栈管理,管理唤醒即可,通过tmos任务处理自己的任务。

可以直接参考central和peripheral的demo。


(1)请问管理唤醒是直接写TMOS的任务吗?当MCU有识别到有任务执行会自动唤醒吗?

(2)我程序里面有一个100ms的按键扫描任务,扫描会一直执行,请问这个时候,还会休眠吗?如果会休眠,休眠后,按键扫描任务执行就会被自动唤醒吗?


直接tmos任务管理即可,协议栈检查到tmos任务会醒来并执行任务。

如果是100ms扫描间隔,通过tmos管理,则会在100ms间隔到来时醒来并扫描。如果需要长时间扫描一段时间,可以将进入sleep函数的入口根据标志进行return。

image.png

sleep功能讲解参考:

CH573芯片Sleep说明(RTC程序说明) - SweetTea_lllpc - 博客园 (cnblogs.com)


我想在从机的广播包中添加自定义信息,主机在扫描到自定义信息后,进行比对,然后连接,我现在知道

image.png

(1)在图中的事件处理中可以得到周围设备的MAC地址,请问这个地址,到底是从广播包中获取的还是在扫描响应包中获取的呢?

image.png

(2)同理在以上的结构体中可以得到数据包的一些数据,pEvtData就是完整数据,还是同样的问题,比如周围有一个从机例程的设备,这个数据是广播包的数据,还是扫描响应包的数据

(3)怎么才能在这个数据中得到自定义信息,周围设备的数据长度都不一样,是直接根据自己设备的数据包,直接分包解析,识别固定的那几位是不是自定义信息,这样来做吗?


根据这个结构体成员的获取信息进行区分广播包和扫描应答包,在主机扫描的cb获取。

image.png

image.png

image.png

这里填写的类型为0xFF则为自定义信息,可以自行添加并使用手机APP查看:

image.png


只有登录才能回复,可以选择微信账号登录