问题描述:
代码如下图:
我要使用一个超声波测距模块与w801通信,通过uart3给超声波模块发送一字节0xA0就可以通过uart3返回所测距离,返回的是三个hex的数据
代码里面实现的是:每间隔2s通过uart3口发送一个hex:0XA0 ; 分别用字符串的形式和hex的形式printf打印从uart3接收到的数据。
问题背景:
1.使用串口助手与MCU通信正常,如下图:
2.我使用串口助手与超声波模块通信,超声波模块也正常返回,如下图:
但是我直接将模块与mcu主板连接调试窗口就会打印以下的字样:
我通过assert提示进入相关的代码:1470行是freertos获取队列信号量的函数
1160行是freertos xqueuegivefromisr 函数中的断言
如果我把信号量相关的代码给屏蔽掉,使用纯裸机串口跑,发现会一直进入接收回调函数(即使没有数据发送给mcu),如下图
想问各位大佬该如何解决呢
串口使用例程:http://ask.winnermicro.com/article/70.html
@isme 老师,用户函数里就是我这个测试工程里全部的代码了,按理说不应该有程序调用了消息队列呀,而且我pc用串口助手给w801通信是完全正常的,串口的demo我不知道在哪加代码(每间隔1s通过uart3向外发送一次A0),或者说咱们有裸机的串口demo嘛
@isme 我这个测试程序就是按照demo写的
@yangxiaolin1 裸机可以看w806的sdk https://gitee.com/w800/wm_sdk_w806,你现在用的是iot的sdk,另外看你代码有用的信号量,并且先注册了中断回调函数,中断回调函数里面用了信号量,如果刚注册完串口接收回调,就来了中断,而此时信号量还没被注册就使用了,不就报错了。
@isme 好的,谢谢老师,我试试看
@isme 我朝,老师,牛13!我把创建队列放到注册回调前就ok了,但是还有一个问题,就是我明明没有接收到数据,但是还是一直进回调函数,直到我给mcu发送一次数据后,mcu真正接收到数据了以后才正常!

前面这些0 0 0都是mcu在没有接收到数据后一直发送的,从图片中的红框开始,正常接收到数据之后,就再也没0 0 0了