WCH沁恒单片机
直播中

张红

8年用户 1348经验值
私信 关注
[问答]

print和uart1_recvstring为什么不能同时使用?

len = UART1_RecvString(RxBuff);
        if(len)
        {
           PRINT("RECV_OK");
            UART1_SendString(RxBuff, len);
        }
这个代码 下载后,可以每次都转发收到得数据,但是print不会执行输出,并且在反复转发十几遍后会连续打印出来几十个print得字符串就是“recv_ok”,请问是不是库函数得问题,要如何解决
  

回帖(2)

丁欣如

2022-9-19 11:57:08
使用默认的工程配置,需要在PRINT字符串后面加一个‘n’才显示,比如这样写PRINT("RECV_OKn");
举报

h1654155275.5795

2022-9-19 11:57:18
您好,R8_UART1_RFC在收到第一个字节数据的时已经置为了1,在没有占用串口PRINT的情况下,在下一个字节收到之前就已经处理完了这1个字节数据,等待下个字节,也就是说会逐个字节处理。PRINT打印“recv-ok”需要一段时间,这段时间刚好够接收接下来的3个字节,故出现以上现象。
建议使用串口中断,FIFO设置字节触发可以避免逐个字节处理。非要用查询的话也可以自行添加逻辑,比如说R8_UART1_RFC小于n时就不接收BRB中的数据,若一直小于n超过自定义时长后,就判断为超时,全部接收。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分