ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
1015419 Топик полностью
BlackMorda, мудак (02.07.2020 21:16, просмотров: 499) ответил Aleksey_75 на Ндя ((( драйверосотворители уроды )) Здесь похоже красивым решением будет только аппаратное, рубить линию rx на время передачи
TXE и TC нельзя трактовать как "отправка последнего байта" 

TXE - говорит о том, что можно загрузить следующий байт для отправки.

При этом, передача "последнего" байта может еще не начаться.

После активизации TXE (в типовом случае), еще будет передаваться стоп бит (половина стоп бита) предыдущего байта и старт бит байта который из TDR передан в сдвиговый регистр для передачи.

TC (в типовом случае) устанавливается в середине стоп бита "последнего" байта.


ИМХО

1) После загрузки последнего байта из пакета в регистр TDR UART, нужно разрешить прерывание TC .

2) После срабатывания прерывания по TC, нужно прочитать RDR чтобы снять флаг USART_ISR_RXNE.

3) Если не помогло то вызвать аппаратную функцию очистки буфера типа:

USART2->RQR |= USART_RQR_RXFRQ; // Send RDR flush request