如何从Python传输十六进制到UART?

时间:2016-11-26 22:28:23

标签: python c uart

我需要了解如何从UART以十六进制格式发送消息,例如: msg = '99'+'70b4c55ad8cdb7806a7b043069c4e0d8'

'99'用于区分消息的开头,其余的是数据。 如     导入序列     进口时间

#serial port   
ser = serial.Serial(
                    port='COM4',\
                    baudrate=230400,\
                    parity=serial.PARITY_NONE,\
                    stopbits=serial.STOPBITS_ONE,\
                    bytesize=serial.EIGHTBITS,\
                    timeout=0)  

   msg=b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
   ser.write(msg)
   time.sleep(0.4)

while True:
  print(ser.read(30))
ser.close()             # close ports

但我不是错误的错误:

 msg= b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
    ^
IndentationError: unexpected indent

然后我需要使用c语言进行比较,将第一个接收到的字节99与0x99进行比较。

int lenght = dev_uart_ptr->uart_read((void*)buffer,34 );

        if (lenght<34)
        {
          if buffer [0]='0x99'
        }

提前致谢。

1 个答案:

答案 0 :(得分:1)

  1. 您似乎正在加载buf,但在c代码中使用buffer

  2. 您正在向缓冲区读取34个字节,然后检查长度是否小于34.应该不能正常工作。从你的例子来看,它应该是17.

  3. 编码不会将msg转换为十六进制字符串。它会将每个字符视为字符,即'0'48'1'49

  4. 使用

    创建字节对象
    msg = b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
    ser.write(msg)