Easyelectronics.ru

Электроника для всех
Текущее время: 15 окт 2019, 19:02

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: HAL UART, прошу совет
СообщениеДобавлено: 01 июл 2019, 22:56 
Здравствуйте!

Зарегистрирован: 01 июл 2019, 22:41
Сообщения: 3
Добрый вечер. Помогите новичку. Пытаюсь соединить два контроллера по uart (второй - авр). STM32f10* по прерыванию таймера раз в 1 секунду отправляет данные, авр ему отвечает (согласование уровней сделал аппаратно). Пришедшие данные принимаю по колбэку HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart). Всё работает хорошо, данные идут. Но я решил сделать проверку, отключив avr от питания, чтобы протестировать реакцию контроллеров. После восстановления питания avr продолжает отвечать на запросы stm, но вот stm больше не заходит в HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart). Как правильно избавиться от этого недочета? Простите, если спрашиваю глупость, просто хочется узнать у опытных людей. Спасибо заранее!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 01 июл 2019, 23:14 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1762
HAL_UART_ErrorCallback перезапускайте UART


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 01 июл 2019, 23:17 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3643
Произошла ошибка фрейма и UART остановился. Обранужив ошибку фрейма, нужно перезапустить UART


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 00:09 
Здравствуйте!

Зарегистрирован: 01 июл 2019, 22:41
Сообщения: 3
x893 писал(а):
HAL_UART_ErrorCallback перезапускайте UART


Я реализовал запуск этого коллбэка, чтобы считать конкретную ошибку

Код:
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
        if(huart == &huart1)
        {
          uint32_t error = HAL_UART_GetError(&huart1);
   }
}


В итоге я получаю
Код:
0x00000008U   /*!< Overrun error       */


Насколько я понимаю это ошибка из-за переполнения, но ведь данные не идут, раз устройство физически отключено..
Я прочиталв интернете, хотя конечно многому верить нельзя, что
Цитата:
HAL устроен так, что в случае ошибки приём будет перезапущен.

Тогда как корректно перезапустить UART, если как уверяют, он перезапущен.

Кстати, переполнение возникает, даже если ресетнуть stm, но на линии rx tx ничего не подключать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 09:08 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 999
Overrun сбрасывается последовательным чтением SR и DR. Раз есть информация об overrun, значит SR уже считан, осталось только DR прочитать. Тафай, изобрази это на HAL... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 09:33 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3643
Откройте, наконец, мануал и посмотрите сами.
Overrun Error - это когда принят следующий байт, а вы не прочитали предыдущий. И вообще что-то у вас сильно накосячено с логикой программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 13:11 
Здравствуйте!

Зарегистрирован: 01 июл 2019, 22:41
Сообщения: 3
Отправку и прием данных реализовал через DMA. В обработчик коллбэка ошибки дописал отключение прерываний и их перезапуск. Данные приходят по кольцу. В обработчике данных просто нахожу первый символ (он определен заранее) и собираю в новый массив, который уже обрабатываю. Проблема решена.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 21:33 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 416
Откуда: Киев
Оригинально придумано


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HAL UART, прошу совет
СообщениеДобавлено: 02 июл 2019, 21:39 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1762
MasterElectric писал(а):
Оригинально придумано

Надо было добавить значок irony


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: VladislavS, Yoda


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB