赞
踩
这里openmv接受到的数据帧格式
帧头:0xaa
帧尾:0xdd
- if uart.any(): #进行串口数据的接收
- res=uart.read(1) #表示为读取一个十六进制数,这里的uart必须是例化的
- res = struct.unpack('B', res)
- res = hex(res)
- res = int(res)
- if rx_buf&0x8000==0:
- if res==0xaa:
- rx_buf=0
- rx_buf|=0x4000
- if rx_buf&0x4000:
- rx_buf = rx_buf+1
- if res==0xdd:
- rx_buf|=0x8000
该部分代码为整个过程的核心部分
res=uart.read(1)/#一次只接受一个字节,再由后面对每个接受到的字节进行数据的处理
在直接接收到数据未进行处理的时候显示出来的是字节串的格式,是无法与下面的帧头和帧尾进行比较匹配的,因此需要引入下面的函数
res = struct.unpack('B', res)#struct这里是对数据进行处理给出下图中函数中关键字的具体用法,这里的B即
b signed char integer 1
struct中支持的格式如下表:
Format C Type Python 字节数
x pad byte no value 1
c char string of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int integer or long 4
l long integer 4
L unsigned long long 4
q long long long 8
Q unsigned long long long 8
f float float 4
d double float 8
s char[] string 1
p char[] string 1
P void * long
最后再进行数据的转化
- res = hex(res)
- res = int(res)
下面就可以编写所想要的数据帧格式了,希望能有所帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。