avr 和 python 串行通信时出现奇怪的 b'\x' 数据

Weird b'\x' data while communication between avr and python serially

我正在尝试在 python 和 atmega128 avr c 脚本之间发送和接收数据。我收到了我不明白的奇怪类型的字节。

我尝试读取 python 代码中的数据,但结果看起来有点像 b'\x00' b'\x06' b'\x9e' b'f' b'\x06' .我的代码有什么问题?

这是我的atmega主线

unsigned char Message[]="Initialization Complete!"; 
unsigned char buff = 0;

MCU_init(); 
UART_init_with_INT();

uart_send_string(Message,25);
uart_send_byte('\n');
uart_send_byte('\r');

return 0;

这是我的python脚本读取数据

import serial

ser = serial.Serial('COM4', 115200)

while(True):
    print(ser.read())

#ser.write(b'hello test')
ser.close()

这是我实际的奇怪结果

b'\x86'
b'\x98'
b'\xf8'
b'\x9e'
b'\x86'
b'\x9e'
b'`'
b'f'
b'\x9e'
b'\x06'
b'\x06'
b'\x9e'
b'\x86'
b'\x9e'
b'\x98'
b'f'
b'\x06'
b'~'
b'\x86'
b'\x9e'
b'\xfe'
b'\x9e'
b'\xf8'
b'\x9e'
b'\x00'
b'\x98'
b'\x80'
b'\xe6'
b'\x9e'
b'\xe6'
b'\x9e'
b'\x00'
b'\x06'
b'\x9e'
b'f'
b'\x06'
b'~'
b'f'
b'f'
b'\x18'
b'\x06'
b'\xe6'
b'\x80'

然而我期望的输出是 "Initialization Complete!"

P.S。这是 UART 实现

void uart_send_byte(unsigned char byte)
{
        while(!(UCSR1A&(1<<UDRE1)));
        UDR1 = byte;
}

void uart_send_string(unsigned char *str, unsigned char len)
{
        int i;
        for(i=0;i<len;i++) {
                if(!(*(str+i)))
                        break;
                uart_send_byte(*(str+i));
        }
}

python 读取的是字节:https://docs.python.org/3/library/stdtypes.html

如果您想将字节转换为 ascii,可以使用以下函数:

ser.read().decode("ascii")

根据编码,参数可能会改变(例如可能是 utf-8)

谢谢大家,我解决了

我如下更改了我的 python 代码并完成了!我必须设置端口。

import serial

ser = serial.Serial(
    port='/COM4',
    baudrate=57600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.SEVENBITS
)

while(True):
    print(ser.readline())

ser.close()