Я пытаюсь выполнить чтение из uart2 клона ESP32 DevKitC в потоке задач.
Мой код выглядит следующим образом:
uint8_t data[128];
data[0] = '\0'; //null terminate so we don't print garbage
for( ; ; ) {
//get a chunk of data off the FIFO buffer
const int uart_num = UART_NUM_2;
int length = 0;
IotLogInfo( "preread" );
length = uart_read_bytes(uart_num, data, 10, 1000 / portTICK_RATE_MS); //read 10 bytes or time out after a second.
if(length == -1)
IotLogInfo( "read reported error! -1" );
//did we rx anything?
if(length > 0){
data[length] = '\0'; //null terminate the string
IotLogInfo( "Rx: %i bytes", length );
IotLogInfo( "Rx: %s ", data );
}
else{
IotLogInfo( "rx no data" );
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
По какой-то причине символы 2 и 3 передаваемой строки "UVW" портятся, даже если буфер содержит более одной передачи:
122 4911 [_readSerialForM] [INFO ][DEMO][49110] preread
123 5011 [_readSerialForM] [INFO ][DEMO][50110] Rx: 3 bytes
124 5011 [_readSerialForM] [INFO ][DEMO][50110] Rx: U⸮⸮
126 5011 [_readSerialForM] [INFO ][DEMO][50110] preread
127 5111 [_readSerialForM] [INFO ][DEMO][51110] Rx: 3 bytes
128 5111 [_readSerialForM] [INFO ][DEMO][51110] Rx: U⸮⸮
130 5111 [_readSerialForM] [INFO ][DEMO][51110] preread
131 5510 [_readSerialForM] [INFO ][DEMO][55100] Rx: 12 bytes
132 5510 [_readSerialForM] [INFO ][DEMO][55100] Rx: U⸮⸮U⸮⸮U⸮⸮U⸮⸮
134 5510 [_readSerialForM] [INFO ][DEMO][55100] preread
135 5710 [_readSerialForM] [INFO ][DEMO][57100] Rx: 6 bytes
136 5710 [_readSerialForM] [INFO ][DEMO][57100] Rx: U⸮⸮U⸮⸮
138 5710 [_readSerialForM] [INFO ][DEMO][57100] preread
139 5910 [_readSerialForM] [INFO ][DEMO][59100] Rx: 6 bytes
140 5910 [_readSerialForM] [INFO ][DEMO][59100] Rx: U⸮⸮U⸮⸮
«UVW» должно быть 0x55 x56 x57, но похоже, что оно интерпретируется как «0x55 0xD5 0xFD», что еще более странно, если я отправляю «UUU» на сериал, который должен быть «0x55 0x55 0x55», он прибывает как «0x55 0x55 0xF5 ", что очень странно, так как байт № 2 не искажается, когда его повторяет байт перед ним.
Я самостоятельно проверил передачу с помощью arduino, и она отлично читается. Так что я очень смущен.
Я уверен, что это довольно простая ошибка с моей стороны. Однако я не могу понять, что это такое.
Заранее спасибо.