Python 如何使用pyserial和picocom打印十六进制缓冲区?

Python 如何使用pyserial和picocom打印十六进制缓冲区?,python,serial-port,pyserial,Python,Serial Port,Pyserial,我试图通过USB/串行端口[ttyACM*/COM*]读取协议。当设备返回响应时,我应该接收具有以下模式的帧: |FF | 15 | 44 | 7D | 00 | 88 | 00 | 0D | 00 | 00 | 86 | 00 | 76 | 00 | 00 | 00 | 40 | 00 | A7 | FE |(21个六字节) 我必须使用的配置如下: 波特率:2400 数据位:8 平价:无 停止位:1 握手:无 现在,当我尝试在Linux上使用CuteCom或在Windows上使用HTerm

我试图通过USB/串行端口[ttyACM*/COM*]读取协议。当设备返回响应时,我应该接收具有以下模式的帧:

|FF | 15 | 44 | 7D | 00 | 88 | 00 | 0D | 00 | 00 | 86 | 00 | 76 | 00 | 00 | 00 | 40 | 00 | A7 | FE |(21个六字节)

我必须使用的配置如下:

  • 波特率:2400
  • 数据位:8
  • 平价:无
  • 停止位:1
  • 握手:无
现在,当我尝试在Linux上使用CuteCom或在Windows上使用HTerm阅读这篇文章时,一切都很好,当我将其显示为十六进制时,我得到了所需的帧

HTerm:

帧响应:FF 15 44 7C 00 88 00 00 7B 00 7C 00 73 00 1F 00 00 40 00 26 FE(21个十六字节)

CuteCom:

帧响应:ff 15 44 00 00 78 00 00 00 00 01 00 79 00 18 00 00 8d 00 f0 fe(21个十六字节)

现在为什么当我试图用picocom读取串行数据时,我无法获得所需的数据

Picocom:Picocom-B2400-r-l--omap crcrlf--imap 8bithex-f n/dev/ttyACM0

帧响应:ff D 82 88 81 82 y@>fe(6个六字节?)

<> p>框架中间的奇怪字符是什么?

但更重要的是,在尝试用python接收帧(我将使用它来解析包)时,我也无法获得与cutecom/hterm相同格式的帧:

Python[代码]:

ser=serial.serial(“/dev/ttyACM0”,2400,超时=0.3,字节大小=8,奇偶校验=N',rtscts=0)
塞尔克洛斯()
爵士公开赛()
弗拉什爵士()
ser.write(b'\xff\x09\x53\x83\x00\x00\x00\xdf\xfe')
尽管如此:
s=ser.read_直到(b'\xfe')
弗拉什爵士()
印刷品
时间。睡眠(3.0)
Python:

帧响应:b'\xff\x15D\x82\x00\x88\x00\x00\x81\x00\x82\x00y\x00\x1f\x00\x00@\x00>\xfe'(16个十六字节?)

这里我得到了一些不同大小的十六进制数字和帧中间的奇怪字符。编辑:(我意识到“奇怪的字符”实际上是基于接收到的十六进制代码的ASCII字符,我如何才能将这个缓冲区更改为仅十六进制?)

知道为什么Python和Picocom会出现这种情况,以及在使用这些工具时应该如何阅读框架吗?

编辑:我试着用ssterm来读取序列中的十六进制字符,结果成功了,为什么?如何使用pyserial使它与picocom和python一起工作

ssterm:


帧响应:ff 15 44 82 00 88 00 00 81 00 82 00 79 00 1f 00 40 00 3e fe(21个十六字节)

结果表明python只是方便地将十六进制字符更改为ASCII。但该值保持不变,因此帧可以正常使用。而picocom忽略了空字符