多语言展示
当前在线:286今日阅读:91今日分享:37

如何解决蓝牙模块通过HFP发送AT指令延时问题

最近在做一个蓝牙对讲机的项目,需要通过HFP给手机发送AT指令,在开发过程中发现AT指令发过去,手机总是过一段时间才有响应。一开始以为是服务开的太多了,后来分析下来不是这个原因。通过一步步的调试打印输出,总算是找到了问题所在,下面我将我的调试和解决方法跟大家分析,希望可以帮到大家。
工具/原料
1

ADK2.0

2

BC05

方法/步骤
1

首先在main中找到按键触发的事件,这个事件触发后,会通过HFP向手机发送一条AT指令。

2

这是通过调用之前封装的一个接口,进入到这个接口函数中,如下图所示,最终调用的是HfpAtCmdRequestBLK这个接口。

3

进到该接口中去,发现是把指令处理后发送一条消息出去,由任务调度接受后处理。

4

这接下来就是在整个工程中查找HFP_INTERNAL_AT_CMD_REQ_BLK这个事件了,建议还是使用Source Insight来找比较方便。

5

通过全局查找,找到了相关的case,如下图所示,再定位到具体的消息处理部分的代码。

6

找到该case后,发现会调用hfpSendAtCmd()这个函数,那就找到该函数,看有没有问题。

7

在该函数中发现最后是调用了hfpSendNextAtCmd这个函数,其他的无关紧要的,进到这个函数再看看吧。

8

在该函数中发现这里有一个延时,如下图所示,不知道该延时时间跟发送有没有关系呢,继续往下看吧。

9

后面就是发送一条消息出去了,这个发送是延时一段时间后才发的,这个时间就是前面的那个timeout时间,问题可能就出在这了。

10

找到问题就好办了,我们在这里对特殊的指令进行处理,在收到这些指令时把延时设为0,其他的就不要变。

12

编译好后,再把蓝牙模块与手机相连,按下按键,发现手机很快响应了动作,这说明之前问题的定位以及修改就没有问题的。

推荐信息