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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
halisi
Родился
Сообщения: 19
Зарегистрирован: Пн мар 11, 2013 01:46:59

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

Сообщение halisi »

Добрый вечер. Есть плата STM32VL Discovery. Делаю на ней мост.По UART передаю с компа данные, данные принимаются и передаются по SPI дальше и соответственно ответ от устройства принимаю по SPI и передаю по UART в компьютер.
UARTработает на 115200. В принципе программа работает при идеальных условиях(если посылка идет с компа на правильной скорости).Решил сделать обработчик ошибок по UART, если ошибка то просто пропускается байт и соответственно он не запихивается в SPI.
Возникла проблема, что при передаче например на другой скорости, умышленно передаю на 19200 например, то обработка работает как то через раз и не все байты отсекаются.Хотя ,например , на скорости 460800 все прекрасно отрабатывается.
Проект собран IAR 6.21.1. Использую UART1 прерывание по приему(данные в нем отправляю в SPI), SPI1(прерывание по приему,данные отправляются в UART). Может кто увидит где я накосячил. Спасибо
Вложения
Repeater.rar
(205.82 КБ) 210 скачиваний
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение 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;
halisi
Родился
Сообщения: 19
Зарегистрирован: Пн мар 11, 2013 01:46:59

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

Сообщение halisi »

Спасибо.То я подстраховаться так пытался. Поправил, но эффекта нет.Заметил что ставлю скорость больше передачи- все отлично, меньше чем 115200 - проскакивают байты(
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

ХЗ я подобными извращениями не занимался .
Может стоит перенести на F0 , там USART более навороченный с Auto baud rate detection.
И еще - у тебя CMSIS старая , в новой одни хэдеры ...
halisi
Родился
Сообщения: 19
Зарегистрирован: Пн мар 11, 2013 01:46:59

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

Сообщение halisi »

Спасибо.Шаблон с этим CMSIS как сделал давно, так и пользуюсь. Контроллер возможности нет менять( Буду пыхтеть дальше.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

При передаче на скорости отличной от ожидаемой некоторые символы (последовательности символов) вполне могут быть распознаны как нормальные, значение у них будет уже другое, но тем не менее. Введи понятие кадра, определи его границы, используй контрольную сумму и будет тебе счастье.
halisi
Родился
Сообщения: 19
Зарегистрирован: Пн мар 11, 2013 01:46:59

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

Сообщение halisi »

Хотелось бы просто байт принял - байт отослал.Неужели мк не может отследить например ошибку кадра 100%?. Спасибо за совет.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

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

Так что если нужна близкая к 100% вероятность распознавания ошибки, то без усложнений не обойтись (довольно значительных по сравнению с "принял байт, передал байт", но тем не менее вполне реализуемых).
halisi
Родился
Сообщения: 19
Зарегистрирован: Пн мар 11, 2013 01:46:59

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

Сообщение halisi »

Значит буду допиливать...
Ответить

Вернуться в «ARM»