Watch Dog STM32 перезагружает ethernet

Кто любит RISC в жизни, заходим, не стесняемся.
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Уважаемые коты! Подключил Watch Dog в stm32f767 (плата NUCLEO-F767ZI). Библиотек в кубе почему-то не оказалось. Написал вручную, как чувак рассказывает в этом ролике https://www.youtube.com/watch?v=xzM3NxqSchs

hiwdg.Init.Reload = 1000;
IWDG -> KR=((uint32_t)0x5555); // (Key Register Write) Access Enable Watch Dog
IWDG -> PR=((uint32_t)((uint8_t)(0<<2|0<<1|0<<0))); // Prescaler = 4
IWDG -> KR=((uint32_t)0xCCCC); // Start Watch Dog
while (1)
{
IWDG -> KR=((uint32_t)0xAAAA); // Reset Watch Dog. 32000/4/1000=8 resets per second.
}

Работает нормально. Сделал эксперимент. Зажег пин и поставил задержку несколько секунд. 8 раз в секунду осциллограмма дергается вниз - микроконтроллер перезагружается.

Но вот что интересно. Подаю число через переходник usb-uart на uart микроконтроллера (пользуюсь LabView). На плате 767 есть ethernet-разъем. Если не подавать данные на USART (выдернуть провода), watch dog 8 раз в секунду моргает оранжевой лампочкой - со скоростью сброса Watch Dog . Если подавать данные - не моргает. Почему так? Я ethernet не активировал. Как индикация работы Watch Dog конечно прикольно, но наверное ethernet работает независимо и Watch Dog его постоянно перезагружает. Можно ли его отключить?

Еще я слышал, что Watch Dog после срабатывания включает какой-то флаг. Его надо потом сбрасывать или необязательно? Может ли быть перезагрузка ethernet из-за каких-нибудь несброшенных флагов? Предполагаю, что на каждом периферийном узле стоит такой флаг, и его надо вручную сбрасывать.
Реклама
pixar
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Re: Watch Dog STM32 перезагружает ethernet

Сообщение pixar »

похоже бот писал
AI на отладке
Реклама
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Почему бот? Я жив!

Добавлено after 25 minutes 5 seconds:
Кажется дошло.WatchDog перезагружает не ethernet, а весь микроконтроллер целиком. Если выдернуть провода, функция HAL_UART_Receive похоже не пропускает программу дальше, и WDG переполняется. Подскажите, есть ли функция проверки подключения usart, что провода не висят в воздухе а именно подключены? А то можно задеть ногой кабель, и stm вместо того чтобы просто замолчать начнет постоянно перезагружаться.
Сделать бы условие: если usart не подключен, то выходим из функции, а если подключен то выполняем функцию.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Watch Dog STM32 перезагружает ethernet

Сообщение VladislavS »

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3483658#p3483658"]Почему бот? Я жив![/uquote]Разве ж это жизнь...

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3483658#p3483658"]Подскажите, есть ли функция проверки подключения usart, что провода не висят в воздухе а именно подключены?[/uquote]А что это изменит? Подключенный провод разве гарантирует поступление данных?

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3483658#p3483658"]Сделать бы условие: если usart не подключен, то выходим из функции, а если подключен то выполняем функцию.[/uquote]Логику надо менять. Пришли данные -> считал -> обработал.
Реклама
Эиком - электронные компоненты и радиодетали
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

А если нули пришли?
Ну так как мне сделать чтобы узнать, что пришли данные?
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Как что? Как и озвучивал ранее, перестать тыкаться в калокубе и начать читать и думать.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Watch Dog STM32 перезагружает ethernet

Сообщение VladislavS »

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484268#p3484268"]А если нули пришли?[/uquote]Нули такие же числа, ничем не хуже других.

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484268#p3484268"]Ну так как мне сделать чтобы узнать, что пришли данные?[/uquote]Ну это уже не смешно. Почитай хоть пару ссылок гугла по ключевым словам "UART", "STM32 UART".
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Ну так от отключенных проводов данные прийти не могут.
Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули), это поможет, как думаете?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Достаточно включить внутренний пулдаун на RX.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Watch Dog STM32 перезагружает ethernet

Сообщение VladislavS »

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484303#p3484303"]Ну так от отключенных проводов данные прийти не могут.[/uquote]И что? Если у вас с подключенными проводами данные перестанут передаваться, то микрокотроллер будет по WDG перегружаться?

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484303#p3484303"]Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули),[/uquote]Вам вот такая картинка о чём-нибудь говорит? В частности зелёные биты START и STOP?
Изображение

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484303#p3484303"]это поможет, как думаете?[/uquote]Слово ПРЕРЫВАНИЕ вам о чём-то говорит?
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Дааа! Ух ты, с прерыванием-то все нормально работает! И WDG отключать не пришлось!
Написал __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
И в бесконечном цикле вызываю прерывание HAL_UART_Receive_IT(&huart3, &X, 1);
Если данные не приходят, вызов прерывания тупо пропускается и WDG в следующей строке сбрасывается IWDG -> KR=((uint32_t)0xAAAA);.

VladislavS , я с вами дружу! Надо сказать BusMasterу, чтобы возвращал мне мою карму взад!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484501#p3484501"]И в бесконечном цикле вызываю прерывание HAL_UART_Receive_IT(&huart3, &X, 1);[/uquote]
Чегой? Снова куча минусов к карме
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

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

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Офигеть, да ты чЁ. Прямо таки колбэк и не вставить в хэндлер?
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

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

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Вообще-то по вменямому, вся обработка должна быть в хэндлере, без всяких колбэков и прочей ереси и как можно короче. Нет , тогда выставляем флаг и обрабатываем в суперлупе.
Это для вашего уровня...
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Управляю ШИМом через uart. Написал в бесконечном цикле вот так:

while(1)
{
IWDG -> KR=((uint32_t)0xAAAA); // Сброс WDG.
HAL_UART_Receive_IT(&huart3, &X, 1); // Вызов прерывания по uart.
TIM1->CCR1 = X; // Записываем в счетный регистр принятое по uart число X.
}

Работает. Но хорошо бы все написанное в обработчик кинуть, а цикл освободить, мало ли для чего пригодится. Но как это сделать?

Добавлено after 9 minutes 45 seconds:
Простите, а хэндлер это что?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Мурик »

Pazitiff25 писал(а):хэндлер это что?
Обработчик прерывания.
Это функция которая для USART может иметь имя USART3_IRQHandler.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Pazitiff25, "передача" по одному байту? По UART?
ЧистА поиграться ?
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

Управление-то вручную, зачем мне быстрее одного байта.

А вообще как положено делать? Упаковывать в пакет и посылать всем скопом? Если например ацп задействовать? Однажды возился с платой сбора данных, там по 4000 точек сразу посылалось.
Ответить

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