[求助] 关于ESP32 micropython的串口使用问题—多谢!

yanruiqi5678   2020-10-4 11:17 楼主

请问各位高手:ESP32的micropython串口接收到2个字节时,用any( ),返回值是2,然后用read()读出,继续又接收了3个字节时,any()返回值是5,问题是:any()返回值 不会因为用了read()后而重新复位计数  而是累计接收的字节数!这样就给串口接收数据处理带来不便,实际应用是:串口接收一个完整的数据帧8个字节,read()读出,然后又接到8个字节完整数据帧,如果此时用read()读出却是包含第一个数据帧的字节,处理非常不便,不知有没有好的办法 使串口接收的buf复位 重新计数? 多谢!

回复评论 (4)

any()返回的是缓冲区中数据的数量,用read()读取后会自动清零的。不知道你具体的应用方式,是否因为read()和any()之间间隔时间太长,造成有新的数据存入。

点赞  2020-10-4 11:31
引用: dcexpert 发表于 2020-10-4 11:31 any()返回的是缓冲区中数据的数量,用read()读取后会自动清零的。不知道你具体的应用方式,是否因为read() ...

感谢回复:我水平有限  请看下面的代码,我测试时 就出现我所说的样子

from machine import UART

uart1= UART(1, baudrate=9600, rx=13,tx=12,timeout=10)

b=0;
a=0;

while 1:
       if (uart1.any()):
        a=uart1.read;
        b=uart1.any();      

        uart1.write(str(b));      

点赞  2020-10-4 11:47
引用: yanruiqi5678 发表于 2020-10-4 11:47 感谢回复:我水平有限  请看下面的代码,我测试时 就出现我所说的样子 from machine import UART ...

不好意思!read后面应带上(),写成read()才正确,改过后 就如同您说的样子了!多谢! 

点赞  2020-10-4 11:50
引用: yanruiqi5678 发表于 2020-10-4 11:50 不好意思!read后面应带上(),写成read()才正确,改过后 就如同您说的样子了!多谢! 

分号也是不必要的,建议去掉

点赞  2020-10-4 14:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复