【WCH蓝牙系列芯片】-基于CH582开发板—动态更新蓝牙广播间隔

------------------------------------------------------------------------------------------------------------------------------------

  在使用蓝牙从机的时候,从机与主机设备在建立之前一直是出于广播数据状态,在从机中广播包含有广播数据和扫描回复数据,这两个内容的总长度都是31个字节;对于广播的内容格式, 蓝牙规定是按照 1byte长度 + 1byte类型 + n字节内容的方式循环放。BLE设备每次广播时,会在3个广播信道上发送相同的报文,这些报文被称为一个广播事件。两个相邻广播事件之间的时间称为广播间隔。广播间隔是针对从机设备来说的,广播间隔决定了从机设备的广播频率。实际广播间隔时间为32~16448,单位是0.625ms,所以实际的广播间隔时间是(32~164480.625ms。

  这次利用CH582开发板进行更新蓝牙广播间隔的操作,对于广播间隔,当减少广播间隔时,可以使得广播频率增高,在建立连接过程速度加快,但是这样也会使得芯片功耗增大。当增大广播间隔,使得广播频率降低,建立连接的速度也会减慢,此时芯片功耗也会降低。因此可以在程序中进行修改, 当有需求连接时,可以将广播间隔改小一点,可以快速的建立连接,当长时间不需要连接时,可以把广播间隔改大,降低芯片的功耗。

  在CH582的从机例程中,写一个更新广播间隔的tmos任务函数,在修改广播间隔参数时,需要重启广播,才能生效。

  第一步先关闭广播

  第二步修改设置广播间隔参数

  第三步在广播 GAPROLE_WAITING(广播停止)状态产生后,然后立刻开启广播. 不能关闭广播后立刻开启广播.

  要先关闭广播,然后在停止广播的状态( GAPROLE_WAITING)产生后才能再去使能广播,不能刚执行完关闭广播,就去开启广播,否则会导致立刻开启失败,如当前在广播状态,执行关闭广播,然后立刻执行开始广播,这时候开始广播是不会调用成功的 因为这里只是设置协议栈状态机标识位,实际上广播并没有立刻停止,要等协议栈轮询处理后,才会真正关闭,如果现在去启动广播,协议栈会认为当前已经在广播状态。

   在Peripheral_Init初始化中,添加更新广播间隔参数的事件任务启动,其中里面的Update_time的参数设置,就可以修改延时多久进入更新广播间隔参数事件。

 

可以通过仪器观察整个更新的过程,一开始的广播间隔时间在50ms左右,更新后广播间隔在500ms

 

 

 

 

 

posted on 2024-11-02 10:08  凡仕  阅读(4)  评论(0编辑  收藏  举报