問題描述:
代碼如下圖:
我要使用一個超聲波測距模塊與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了