реклама на сайте
подробности

 
 
> HardFault при одновременной передаче/приеме по UART.
charkin
сообщение Mar 26 2017, 15:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977



Всем привет.
Есть проблема - периодически МК падает в HardFault во время обмена по UART. Процессор - STM32F405.
Формат общения - Запрос-Ответ - чужое устройство посылает команды по UART, которые МК должен обработать и отправить ответ. Скорость обмена 115200, 8N1.
Работало стабильно, но до того момента, пока обмен не стал более интенсивным.

Подцепил логический анализатор на шину и увидел, что в момент, когда МК отправляет данные, устройство тоже что-то пытается отправить - после чего логика работы МК рушится и он падает в HardFault. На скриншоте записанный обмен - верхняя линии это команды от устройства, нижняя - ответы МК, соответственно.

В момент, когда МК отправляет ответ устройству, тот по непонятной причине сам отправляет какой-то мусор (судя по содержимому) в МК, в результате последний сходит с ума и шлет какой-то адовый по своему размеру буфер (при этом в отладчике видно, что длина данных при отправке была указана верно), после чего падает.

Почему такое происходит и как бороться?

P.S. Падение в HardFault может произойти и через 5-10 минут, а может и через 1,5 часа.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
charkin
сообщение Mar 26 2017, 18:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977



Режим обмена - ну да, фактически полудуплекс. В буфере, который я отправляю в ответ, есть заголовок, в нем длина данных - значение там верное. Почему принимающая сторона начинает отправку данных, не дожидаясь конца пакета - вопрос интересный, но мне больше интересно, как обойти эту проблему, ведь именно после этой внеплановой посылки мой проц сходит с ума и отправляет гораздо больше данных, чем должен. То есть пришедшие от устройства данные что-то портят в настройках УАРТа - выглядит это так.

Попробовал на время обработки полученных данных и отправки ответа отключать приемную линию - в регистре CR1 обнулил бит RE - не помогло, все равно упало..
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th August 2025 - 08:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016