CH582M蓝牙连接报:0x3e

问题如下:

在Peripheral基础上更改的程序,手机作为主机进行连接调试,几乎很难连接成功串口debug显示reason:0x3e;

调试发现:

当关闭程序中一处自定义的TMOS任务后可正常连接;

此任务将原500ms时间改到5000ms时可正常连接;

此任务时间改到1000ms连接成功几秒后自断开;

此TMOS任务耗时大致在2ms左右,任务中会触发中断方式的adc开始一定次数的转换。此任务中的一些变量会和1ms的硬件定时器中断有关联(中断内耗时约5us);

j_0033.gif

看看能不能指引一下调试方向,找了几天实在找不到原因。谢谢!


BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED   0x3E

蓝牙会很难连接,或者连上断开。

有几点需要注意:①TMOS任务书写规范

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)

②禁止在中断中调用

③连接间隔导致的问题可以参见这个帖子

CH582广播和连接间隔的优先级可以调高吗? - 沁恒微电子社区 (wch.cn)

④上面你提到了ADC和主从建立连接,应该是通过ADC采集数据然后通过蓝牙发送出去。提供一个思路,ADC正常采集,采集完数据置一个标志,同时TMOS不停的查询这个标志,当查询到标志为true时,通过调用通道4将数据发送出去或者采取自定义的方式通过蓝牙发数据出去。

你也可以具体描述一下你的需求,我们帮忙看看。


问题已解决,谢谢!

嗯,adc数据都是通过中断放到数组中,然后任务里查询标志处理数据;

修改连接间隔有所改善,不过很快还是会掉线,逐步排查代码后发现adc处理任务中指针可能会发生溢出,修改后正常j_0064.gif


另请教:

主机例程中的 类似 DEFAULT_UPDATE_MAX_CONN_INTERVAL和DEFAULT_CONNECTION_TIMEOUT的区别?



这两个参数都会出现在?GAPRole_UpdateLink函数中:

DEFAULT_UPDATE_MAX_CONN_INTERVAL是更新最大连接间隔,

DEFAULT_UPDATE_CONN_TIMEOUT是底层其实每个连接间隔从机都会有空包回应,那么这个参数就是多久没回应就会超时。


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