树莓派和STM32串口通信,格式统一化封装

问题:在使用树莓派本身的串口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:发送和接受的格式封装 全部是字节类型的数列

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值