Страница 1 из 1

Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 20:27:17
halisi
Добрый вечер. Есть плата STM32VL Discovery. Делаю на ней мост.По UART передаю с компа данные, данные принимаются и передаются по SPI дальше и соответственно ответ от устройства принимаю по SPI и передаю по UART в компьютер.
UARTработает на 115200. В принципе программа работает при идеальных условиях(если посылка идет с компа на правильной скорости).Решил сделать обработчик ошибок по UART, если ошибка то просто пропускается байт и соответственно он не запихивается в SPI.
Возникла проблема, что при передаче например на другой скорости, умышленно передаю на 19200 например, то обработка работает как то через раз и не все байты отсекаются.Хотя ,например , на скорости 460800 все прекрасно отрабатывается.
Проект собран IAR 6.21.1. Использую UART1 прерывание по приему(данные в нем отправляю в SPI), SPI1(прерывание по приему,данные отправляются в UART). Может кто увидит где я накосячил. Спасибо

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 20:43:39
dosikus

Код: Выделить всё

if(USART1->SR & (USART_SR_PE | USART_SR_FE | USART_SR_NE | USART_SR_ORE)){
        temp = USART1->SR;
        temp = USART1->DR;
        temp = USART1->DR;
        USART1->SR &= ~USART_SR_RXNE;



PE,FE,NE,ORE чистятся вычиткой SR с последующей вычиткой DR.
Вычитка SR уже происходит в if ( ...) .
RXNE чистится вычиткой DR .
Итого :

Код: Выделить всё

if(USART1->SR & (USART_SR_PE | USART_SR_FE | USART_SR_NE | USART_SR_ORE)){
        temp = USART1->DR;

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 20:51:31
halisi
Спасибо.То я подстраховаться так пытался. Поправил, но эффекта нет.Заметил что ставлю скорость больше передачи- все отлично, меньше чем 115200 - проскакивают байты(

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 20:56:25
dosikus
ХЗ я подобными извращениями не занимался .
Может стоит перенести на F0 , там USART более навороченный с Auto baud rate detection.
И еще - у тебя CMSIS старая , в новой одни хэдеры ...

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 21:09:32
halisi
Спасибо.Шаблон с этим CMSIS как сделал давно, так и пользуюсь. Контроллер возможности нет менять( Буду пыхтеть дальше.

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 21:19:22
menzoda
При передаче на скорости отличной от ожидаемой некоторые символы (последовательности символов) вполне могут быть распознаны как нормальные, значение у них будет уже другое, но тем не менее. Введи понятие кадра, определи его границы, используй контрольную сумму и будет тебе счастье.

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 21:30:32
halisi
Хотелось бы просто байт принял - байт отослал.Неужели мк не может отследить например ошибку кадра 100%?. Спасибо за совет.

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 21:42:49
menzoda
Зависит от конкретной аппаратной реализации, но 100% никогда не будет. Лень рисовать картинки, к примеру, значение 0xFF, переданное на скорости 9600, распознается как 0x7F приемником настроенным на скорость 19200. Включение проверки четности позволит отсеять некоторые "коллизии", но не все.

Так что если нужна близкая к 100% вероятность распознавания ошибки, то без усложнений не обойтись (довольно значительных по сравнению с "принял байт, передал байт", но тем не менее вполне реализуемых).

Re: Проблемы обработки ошибок по UART в stm32

Добавлено: Вт окт 28, 2014 21:54:11
halisi
Значит буду допиливать...