Central例程更改默认最大连接间隔后找不到服务

Central例程运行在CH32F208WBU6,自己画的板子

从机运行在BLE调试助手,手机是小米11


情况是这样,Central例程有个宏定义

#define DEFAULT_MAX_CONNECTION_INTERVAL 60

在这种情况下一切正常,能扫描到,建立连接,更新连接参数,找到从机主服务FFF0,找到特征值,然后发送数据,一切正常。


我把60改成100后,找不到FFF0服务

#define DEFAULT_MAX_CONNECTION_INTERVAL 100

KEIL4.png

图中断电处均无法进

KEIL3.png


随后我跟踪查看连接参数是否有更新成功,结果用注释写出来了。看样子应该是协商成功了。图如下

KEIL6.png

还有另外一个问题,连接超时的问题。在#define DEFAULT_MAX_CONNECTION_INTERVAL 60 的情况下,我每隔1秒钟就发送一个字节的数据给从机。大概在20~30分钟的时候,连接会超时。返回的reason就是连接超时0x08。测了好几次,基本都是这样,一开始没问题,放在一边不管它,程序就进Terminate Link事件了。从机用的就是BLE 调试助手。下图是Terminate Link事件处理的代码,这部分我都没怎么动,都是例程的原代码。

KEIL7.png

接下来的一张图片是我添加的一个tmos循环事件START_WRITE_EVT,一秒钟发送一个字节给从机。替换了原代码中的"START_READ_OR_WRITE_EVT"。

KEIL8.png











你好,优先使用开发板测试一下是否出现连接后无法进行枚举服务的现象。

并测试仅修改连接间隔为100,其他参数均不配置使用原始例程,是否出现无法进行枚举的现象,理论上是可以进行枚举的。 

reason8断开是蓝牙连接超时了,建议也是先通过开发板测试是否出现该现象。并查看代码里面是否有阻塞或者其他干扰导致的通讯失败。


你好,我这边没有评估板,只有自己画的板子。这个板子应该是没问题的,硬件工程师都是老师傅了。况且我在运行的代码是直接从蓝牙例程改过来的,没有去用一些外设或者乱七八糟的东西。

问题解决的经过与结果:

我用原例程简单的只改了一些必要的参数比如MAC地址啥的,然后运行,还是没办法在改了初始连接间隔的情况下找到从机的服务。再之后,找到了一个可疑的地方,我也不知道对不对,因为我对蓝牙真的一窍不通,但是确实改了之后就没问题了。

原例程是连接参数协商与请求服务并行,我把请求服务挪动到协商之后,就没问题了。代码截图如下图

KEIL9.png



ZSBD

KEIL10.png


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