Промежуточные итоги, сделал как советовал SciFi синхронизацию в
случае "сдвига". В принципе, можно просто всегда читать начиная с
CNDTR по кольцу. Нашел несколько косяков, но один точно мог влиять
Когда был добавлен датчик момента, он опрашивался через второй UART, причем по прерываниям, а основной UART в фоновом режиме. Функции обмена были общие, нереентерабельные. Функцию приема я разделил, а функцию передачи почему то забыл.
Передача делалась с указанием номера UART:
StatusPutUART PutUARTDMAByte (uint8_t *buf, uint16_t Size) {
if (HAL_UART_Transmit_DMA(Buf[NumberUART].huart, buf, Size) == HAL_OK) { return NoErrorUARTDMA;
else {
............
}
}
В результате, естественно, иногда это функция вызывалась внутри себя по прерыванию, с соответствующим результатом. Вероятность очень низкая, но ненулевая.
Но "сдвиг" по прежнему возникает, но токи читаются правильно.