问题:在使用树莓派本身的串口serial 库的时候,接受和发送的指令并不是STM32中最常用的整型数组类型,所以需要封装一下树莓派的serial库,让树莓派实现发送出来一种整型数组,并且在修改一些标志位也很方便,附上代码:
import serial
import time
import struct
serial_rx_len = 10 # 这里设置的是接受的总体长度,byte个数,我这里有2个标志位 有8个数据位
ser = serial.Serial("/dev/ttyAMA0", 115200)
def Serial_Rx():
try:
count = ser.inWaiting() # 获得接收缓冲区字符
if count == serial_rx_len:
recv = ser.read(count) # 树莓派串口接收数据
serial_rx = list(struct.unpack('!10B', recv)) # 转换成列表类型,后面用Rx[i]方便
if serial_rx[0] == 255: # 这里第一位我识别的是FF
if serial_rx[9] == 254: # 最后一位是FE
ser.flushInput()
time.sleep(0.1)
serial_rx = serial_rx[1:-1] # 确认是需要的数据之后,把标识位删去
return serial_rx # 这里的serial_rx已经刨去了标识位 成为8个字的有效数据
ser.flushInput() # 清空接收缓冲区 清除的是count
time.sleep(0.1) # 必要的软件延时
except KeyboardInterrupt:
print('KeyboardInterrupt')
except Exception as e:
print("Exception:", e)
def Serial_Tx(tx):
try:
# 增加前后标识位 ff 和 fe
serial_tx = [255] + tx + [254]
ser.write(serial_tx)
except KeyboardInterrupt:
print('KeyboardInterrupt')
except Exception as e:
print("Exception:", e)
if __name__ == '__main__':
try:
while True:
rx = Serial_Rx()
if rx:
Serial_Tx(rx)
except KeyboardInterrupt:
print('KeyboardInterrupt')
要点:
1:接受固定数位的字符串 可以设置
2:标志位设置
3:发送和接受的格式封装 全部是字节类型的数列