Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Сб окт 13, 2018 19:25:39

Уважаемые коты! Подключил 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 из-за каких-нибудь несброшенных флагов? Предполагаю, что на каждом периферийном узле стоит такой флаг, и его надо вручную сбрасывать.

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

Пн окт 15, 2018 11:47:08

похоже бот писал
AI на отладке

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

Ср окт 17, 2018 00:18:50

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

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

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

Ср окт 17, 2018 07:55:06

Почему бот? Я жив!
Разве ж это жизнь...

Подскажите, есть ли функция проверки подключения usart, что провода не висят в воздухе а именно подключены?
А что это изменит? Подключенный провод разве гарантирует поступление данных?

Сделать бы условие: если usart не подключен, то выходим из функции, а если подключен то выполняем функцию.
Логику надо менять. Пришли данные -> считал -> обработал.

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

Ср окт 17, 2018 17:27:44

А если нули пришли?
Ну так как мне сделать чтобы узнать, что пришли данные?

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

Ср окт 17, 2018 17:36:27

Как что? Как и озвучивал ранее, перестать тыкаться в калокубе и начать читать и думать.

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

Ср окт 17, 2018 17:46:35

А если нули пришли?
Нули такие же числа, ничем не хуже других.

Ну так как мне сделать чтобы узнать, что пришли данные?
Ну это уже не смешно. Почитай хоть пару ссылок гугла по ключевым словам "UART", "STM32 UART".

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

Ср окт 17, 2018 17:55:41

Ну так от отключенных проводов данные прийти не могут.
Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули), это поможет, как думаете?

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

Ср окт 17, 2018 18:07:27

Достаточно включить внутренний пулдаун на RX.

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

Ср окт 17, 2018 19:10:37

Ну так от отключенных проводов данные прийти не могут.
И что? Если у вас с подключенными проводами данные перестанут передаваться, то микрокотроллер будет по WDG перегружаться?

Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули),
Вам вот такая картинка о чём-нибудь говорит? В частности зелёные биты START и STOP?
Изображение

это поможет, как думаете?
Слово ПРЕРЫВАНИЕ вам о чём-то говорит?

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

Ср окт 17, 2018 21:22:54

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

VladislavS , я с вами дружу! Надо сказать BusMasterу, чтобы возвращал мне мою карму взад!

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

Ср окт 17, 2018 21:26:52

И в бесконечном цикле вызываю прерывание HAL_UART_Receive_IT(&huart3, &X, 1);

Чегой? Снова куча минусов к карме

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

Ср окт 17, 2018 21:38:38

Прерывание в бесконечном цикле вызываю, вызвать его на стороне не получается. Там какой-то глюк в Кубе.
Хотя конечно глупо, прерывание на то и прерывание, чтобы откуда угодно вызываться.

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

Ср окт 17, 2018 21:47:09

Офигеть, да ты чЁ. Прямо таки колбэк и не вставить в хэндлер?

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

Ср окт 17, 2018 21:54:39

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

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

Ср окт 17, 2018 22:05:33

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

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

Ср окт 17, 2018 22:28:07

Управляю ШИМом через 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:
Простите, а хэндлер это что?

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

Ср окт 17, 2018 22:41:23

Pazitiff25 писал(а):хэндлер это что?
Обработчик прерывания.
Это функция которая для USART может иметь имя USART3_IRQHandler.

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

Ср окт 17, 2018 22:49:55

Pazitiff25, "передача" по одному байту? По UART?
ЧистА поиграться ?

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

Ср окт 17, 2018 22:59:22

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

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