主控:w801 4g使用的是移远的EC801
我给4G模块测试单条AT指令是能够正确返回的,但是将我以前用stm32与4G通信的项目移植过来,并且接收数据的代码时按照测试成功的代码写的,下面是测试成功的代码,实现的是:我给4G模块每间隔500tick发送AT+CSQ指令,我用面代码测试4G模块,如果接收到的数据里面有”OK”就将接收到的数据打印出来,这个测试是成功的
成功的返回数据如下
但是我修改上述代码中接收的部分,修改如下图,这个代码中的rx_flag也是和上面的代码一样在回调函数中置1,两个代码的初始化,以及回调函数都是一模一样的,这个代码实现的是如果接收到的是AT指令所对应的正确的返回,就返回1,否则就返回0,但是我代码每一次运行到这块都会死机,并且打印的结果是:RX_Cmd:^boot rom
代码截图如下
打印截图如下:其中RDY和OK是应有的返回数据
最新发现:我用串口助手模拟4G给w801回复数据,我一回复就死机。
最新最新发现:我给这个函数里套上一个死循环又好了,至少能进这个接收函数而不会死机了
这是为什么呢
我也感觉我写的挺乱的,老师,我这个函数的作用是接收到4G模块对应AT指令的正确的回复就会返回1;按理来说是在这个函数里面不应该一循环发送的,应该是在发送数据后只运行一次,但我按照我对您回复的理解,判断if(os_status == TLS_OS_SUCCESS) 后才对数据进行处理,然后我把这个接收函数里的循环发送给注释掉了,并且我换了个4G模块,排除了4G模块本身的问题,但还是会卡死

卡在了第二次接收到数据后

可能不是串口的问题,老师,我自己先排查一下代码