Watch Dog STM32 перезагружает ethernet
-
Pazitiff25
- Родился
- Сообщения: 13
- Зарегистрирован: Чт сен 27, 2018 18:14:49
Watch Dog STM32 перезагружает ethernet
Уважаемые коты! Подключил 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 из-за каких-нибудь несброшенных флагов? Предполагаю, что на каждом периферийном узле стоит такой флаг, и его надо вручную сбрасывать.
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
похоже бот писал
AI на отладке
AI на отладке
-
Pazitiff25
- Родился
- Сообщения: 13
- Зарегистрирован: Чт сен 27, 2018 18:14:49
Re: Watch Dog STM32 перезагружает ethernet
Почему бот? Я жив!
Добавлено after 25 minutes 5 seconds:
Кажется дошло.WatchDog перезагружает не ethernet, а весь микроконтроллер целиком. Если выдернуть провода, функция HAL_UART_Receive похоже не пропускает программу дальше, и WDG переполняется. Подскажите, есть ли функция проверки подключения usart, что провода не висят в воздухе а именно подключены? А то можно задеть ногой кабель, и stm вместо того чтобы просто замолчать начнет постоянно перезагружаться.
Сделать бы условие: если usart не подключен, то выходим из функции, а если подключен то выполняем функцию.
Добавлено 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
[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]Логику надо менять. Пришли данные -> считал -> обработал.
[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
А если нули пришли?
Ну так как мне сделать чтобы узнать, что пришли данные?
Ну так как мне сделать чтобы узнать, что пришли данные?
- Реклама
Re: Watch Dog STM32 перезагружает ethernet
Как что? Как и озвучивал ранее, перестать тыкаться в калокубе и начать читать и думать.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Watch Dog STM32 перезагружает ethernet
[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484268#p3484268"]А если нули пришли?[/uquote]Нули такие же числа, ничем не хуже других.
[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3484268#p3484268"]Ну так как мне сделать чтобы узнать, что пришли данные?[/uquote]Ну это уже не смешно. Почитай хоть пару ссылок гугла по ключевым словам "UART", "STM32 UART".
[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
Ну так от отключенных проводов данные прийти не могут.
Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули), это поможет, как думаете?
Если я подтягивающие резисторы на rx и tx поставлю на +питания (и они будут гнать логические нули), это поможет, как думаете?
Re: Watch Dog STM32 перезагружает ethernet
Достаточно включить внутренний пулдаун на RX.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Watch Dog STM32 перезагружает ethernet
[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]Слово ПРЕРЫВАНИЕ вам о чём-то говорит?
[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
Дааа! Ух ты, с прерыванием-то все нормально работает! И WDG отключать не пришлось!
Написал __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
И в бесконечном цикле вызываю прерывание HAL_UART_Receive_IT(&huart3, &X, 1);
Если данные не приходят, вызов прерывания тупо пропускается и WDG в следующей строке сбрасывается IWDG -> KR=((uint32_t)0xAAAA);.
VladislavS , я с вами дружу! Надо сказать BusMasterу, чтобы возвращал мне мою карму взад!
Написал __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
[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
Прерывание в бесконечном цикле вызываю, вызвать его на стороне не получается. Там какой-то глюк в Кубе.
Хотя конечно глупо, прерывание на то и прерывание, чтобы откуда угодно вызываться.
Хотя конечно глупо, прерывание на то и прерывание, чтобы откуда угодно вызываться.
Re: Watch Dog STM32 перезагружает ethernet
Офигеть, да ты чЁ. Прямо таки колбэк и не вставить в хэндлер?
-
Pazitiff25
- Родился
- Сообщения: 13
- Зарегистрирован: Чт сен 27, 2018 18:14:49
Re: Watch Dog STM32 перезагружает ethernet
Тьфу, херню написал. Вызывается откуда угодно, а функция обработчика прерываний пишется в сторонке. А где там функция для обработчика по приему на UART пока не разобрался.
Re: Watch Dog STM32 перезагружает ethernet
Вообще-то по вменямому, вся обработка должна быть в хэндлере, без всяких колбэков и прочей ереси и как можно короче. Нет , тогда выставляем флаг и обрабатываем в суперлупе.
Это для вашего уровня...
Это для вашего уровня...
-
Pazitiff25
- Родился
- Сообщения: 13
- Зарегистрирован: Чт сен 27, 2018 18:14:49
Re: Watch Dog STM32 перезагружает ethernet
Управляю ШИМом через 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:
Простите, а хэндлер это что?
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
Обработчик прерывания.Pazitiff25 писал(а):хэндлер это что?
Это функция которая для USART может иметь имя USART3_IRQHandler.
Re: Watch Dog STM32 перезагружает ethernet
Pazitiff25, "передача" по одному байту? По UART?
ЧистА поиграться ?
ЧистА поиграться ?
-
Pazitiff25
- Родился
- Сообщения: 13
- Зарегистрирован: Чт сен 27, 2018 18:14:49
Re: Watch Dog STM32 перезагружает ethernet
Управление-то вручную, зачем мне быстрее одного байта.
А вообще как положено делать? Упаковывать в пакет и посылать всем скопом? Если например ацп задействовать? Однажды возился с платой сбора данных, там по 4000 точек сразу посылалось.
А вообще как положено делать? Упаковывать в пакет и посылать всем скопом? Если например ацп задействовать? Однажды возился с платой сбора данных, там по 4000 точек сразу посылалось.


