问题描述:
代码如下图:
我要使用一个超声波测距模块与 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 了