gpt4 book ai didi

python - python中的高速UART

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:31 25 4
gpt4 key购买 nike

我有一个微 Controller ,通过 UART 以 3 MBaud 发送数据。微 Controller 每 8000 字节发送一个启动/状态字节。我希望我的 python 脚本能够读取所有数据并分析起始字节之间的数据。

我知道 Python 能够处理 3 MBaud,因为该代码片段显示了起始字节的正确位置:

ser =  serial.Serial('COM3', 3000000, timeout=None)

_RawData = ser.read(100000)

for cnt in range(0, 100000, 1):
#search for start byte and print the position
if(_RawData[cnt] < 128): print(cnt)

但我需要不断读取数据流,在该示例中,我在“ser.read(x)”命令之间丢失了数据。所以我需要在读取流时比较数据:

ser =  serial.Serial('COM3', 3000000, timeout=None)

_RawData = []
cnt = 0

for c in ser.read():
cnt += 1
#search for start byte
if(c < 128):
#print start byte position
print(cnt)

# -= start thread =-

_RawData.clear()
_RawData.append(c)

但发现读取一个字节对于该波特率来说太慢了,起始字节位置实际上是随机生成的。有没有办法可以无损地读取我的数据流?

最佳答案

我设法让它为我工作。正如其他线程中所建议的,我实现了函数 ser.inWaiting(),它给出了输入缓冲区中等待的字节数(在我的系统上限制为 4096 字节)并从 uart 读取该数量。然后我寻找起始字节并启动一个线程来分析数据:

ser =  serial.Serial('COM3', 3000000, timeout=None)
_RawData = []

while True:
#get data in input buffer
bytesToRead = ser.inWaiting()
Buffer = ser.read(bytesToRead)

for cnt in range(0,bytesToRead,1):
#search for start byte
if(Buffer[cnt] < 128):
#print bytes between start bytes
print(len(_RawData))

# -= start thread =-

_RawData.clear()

_RawData.append(Buffer[cnt])

#wait a short time for the buffer to fill
time.sleep(0.001)

目前看来这可行。感谢您的帮助。

关于python - python中的高速UART,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40476914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com