如何将十六进制从python发送到UART?

如何将十六进制从python发送到UART?,python,c,uart,Python,C,Uart,我需要了解如何从UART发送十六进制格式的消息,例如: msg='99'+'70b4c55ad8cdb7806a7b043069c4e0d8' “99”用于区分消息的开头,其余部分是数据。 作为 导入序列号 导入时间 #serial port ser = serial.Serial( port='COM4',\ baudrate=230400,\ parity=seria

我需要了解如何从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'
        }
int lenght=dev\u uart\u ptr->uart\u read((void*)缓冲区,34);
如果(长度)
  • 似乎您正在加载到
    buf
    ,但在c代码中使用了
    buffer

  • 您正在向缓冲区读取34个字节,然后检查长度是否小于34。不应该正常工作。根据您的示例判断,应该是17

  • Encode不会将
    msg
    转换为十六进制字符串。它会将每个字符视为一个字符,即
    '0'
    48
    '1'
    49

  • 使用创建字节对象

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

    你知道99是一个有效的十六进制数,对吧?这使它成为一个糟糕的开始标记。@MarkRansom,我最近开始使用十六进制、uart和c,我愿意接受所有建议和建议。关于使用字节对象,你已经有了一个很好的答案,但如果你有一个十六进制字符串开始,你可以
    binascii.unhexlify('99'+'70b4c55ad8cdb7806a7b043069c4e0d8')
    。谢谢您的回复,不过我想发送一个十六进制字节,以便cIt中的文件易于使用。它给了我一个错误:msg=b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'^indentation错误:意外的缩进检查您的缩进。这可能在函数中,因此应该继续通过4个空格或制表符。
    b'…'
    创建其内容的字节对象,如
    .encode()
    。但使用这种方式,您可以使用十六进制值进行初始化。谢谢@Uriel,这就是我所有的python文件:导入串行导入时间'#串行端口ser=serial.serial(port='COM4',\baudrate=230400,\parity=serial.parity\u NONE\stoppits=serial.stoppits\u 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)而True:print(ser.read(30))ser.close()#关闭端口'但我不理解错误msg=b'\x99\x70\xb4\xc5\x5a\xd8…xd8'缩进错误:意外缩进我无法在单行代码中看到您的缩进,请在问题中更新它(按原样复制代码并编辑问题)