[Решил я настроить WWDG.IWDG.Последний настроил работает но как то не так.Со сбоем.А оконный WWDG так и не понял как правильно работает .Кто подскажет.?
Добавлено after 1 hour 1 minute 13 seconds: Ау где вы?
А чем же отличается WWDG от IWDG.Я имею ввиду что настроил таймер IWDG и в основном цикле вставки ключа сделал 0xAAAA .А тут я должен настраивать 4 параметра.Прескаллер от какого значения считать.И ещё 2 они в документации пишутся как T и W? и T>W.И когда он срабатывает в этом окне?.Или когда значения меньше.Да и ещё IWDG.Когда я вставки 0xAAAA убираю контроллер перерезагружается некоторое время а потом глохнет.И ещё одно в Кубе я зделал генерацию и там другие цифрки 0x000AAAAU.Я вставил в другой проект настроенній вручную не работает?Благодорю за помощь.Война войной а обед по расписанию.
WWDG отличается от IWDG тем, что у него прямо в названии указано, что он ОКОННЫЙ. Проще говоря: IWDG (независимый сторожевой таймер) можно сбрасывать в любой момент, WWDG (оконный) только при открытом окне. Для тех, кто в закрытой комнате без гугла: Настраиваем значение окна: WWDG->CFR = 0x43 | 0x0100; И время от времени пытаемся сбросить значение счётчика: WWDG->CR = 0xFF;
Только если значение счётчика в WWDG->CR больше, чем установленное в WWDG->CFR, сброса не произойдёт. А как только значение того же WWDG->CR опустится ниже 0x40, произойдёт сброс.
Там как раз чёрным по буржуйски написано. Настоятельно рекомендую или пропустить читаемую главу через переводчик, или наконец начать учить технический английский. У меня почему-то чтение технической документации не вызвает проблем.
И ещё 2 они в документации пишутся как T и W? и T>W.И когда он срабатывает в этом окне?.Или когда значения меньше.
Снова документация, описание регистров:
Цитата:
Control register (WWDG_CR)
Bits 31:8 Reserved, must be kept at reset value. Bit 7 WDGA: Activation bit This bit is set by software and only cleared by hardware after a reset. When WDGA = 1, the watchdog can generate a reset. 0: Watchdog disabled 1: Watchdog enabled Bits 6:0 T[6:0]: 7-bit counter (MSB to LSB) These bits contain the value of the watchdog counter. It is decremented every (4096 x 2 WDGTB[1:0] ) PCLK1 cycles. A reset is produced when it rolls over from 0x40 to 0x3F (T6 becomes cleared). <...> Configuration register (WWDG_CFR) Bit 9 EWI: Early wakeup interrupt When set, an interrupt occurs whenever the counter reaches the value 0x40. This interrupt is only cleared by hardware after a reset. Bits 8:7 WDGTB[1:0]: Timer base The time base of the prescaler can be modified as follows: 00: CK Counter Clock (PCLK1 div 4096) div 1 01: CK Counter Clock (PCLK1 div 4096) div 2 10: CK Counter Clock (PCLK1 div 4096) div 4 11: CK Counter Clock (PCLK1 div 4096) div 8 Bits 6:0 W[6:0]: 7-bit window value These bits contain the window value to be compared to the downcounter.
Так T и W это пределы.Если счёт больше T то таймер сбросит программу.И если счёт меньше W то тоже сбросит.Так я понимаю.Ну он точнее работает.А эти два таймера можно включать одновременно.Именно те значения что вы написали нужно выставлять? А от чего это зависит?
И если счёт меньше W то тоже сбросит.Так я понимаю.Ну он точнее работает.
Нет. Ещё раз предлагаю прочитать Reference Manual. Либо ещё раз МЕДЛЕННО прочитать то, что я написал. Я почти дословно перевёл часть текста.
Мне ещё картинку перевести оттуда же?
T[6:0] находится в регистре WWDG->CR W[6:0] находится в регистре WWDG->CFR
Пока значение T больше значения W, запись нового значения в T не произойдёт. Но когда T < W (но при этом больше чем 0x40) - записать новое значение можно. И это приведёт к обновлению значения T до "безопасного" Грубо говоря: W == 0x45 T == 0x60 Пишем T = 0x7F. Так как T > W, запись завершится неудачей. T == 0x60 (или 0x59, если таймер тикнул)
Теперь попытаемся записать чуть позже: W == 0x45 T == 0x44 Пишем T = 0x7F Так как T < W (но больше 0x40), значение запишется успешно. T == 0x7F W == 0x45
Одновременно можно включать ВООБЩЕ ВСЕ периферийные блоки. В некоторых случаях даже те, которые используют одну область памяти для внутренних нужд, как в некоторых линейках кристаллов блоки CAN и USB. И даже можно как-то их заставить работать совместно. Так что и сторожевые таймеры можно запускать параллельно.
Именно те значения что вы написали нужно выставлять? А от чего это зависит?
Можно. Я взял эти значения от балды на самом деле. Просто для примера, используя крайне узкое окно всего в 3 тика таймера. Его можно делать и шире (хоть до 0x7F, хотя в этом случае он перестанет быть оконным, ибо размер окна равен максимальному значению регистра, значит обновлять значение можно в любой момент).
Одновременно можно включать ВООБЩЕ ВСЕ периферийные блоки. В некоторых случаях даже те, которые используют одну область памяти для внутренних нужд, как в некоторых линейках кристаллов блоки CAN и USB. И даже можно как-то их заставить работать совместно. Так что и сторожевые таймеры можно запускать параллельно.
Я понимаю, что месиво, но вы же не читаете ответов А у нас ссанкции. Именно через две "с". И давайте не будем поднимать тему политики хотя бы на электронном форуме.
Согласен.У меня ещё вопрос по вач догам.Политика дело грязное.Она приводит иногда к таким результатам.При каких условиях вач дог независимый не сработает.А также оконный.Я имею ввиду что настроив таймер независимый и написав вкладки 0xAAAA .При включении контроллера он иногда подвисает.Незнаю как оконный.А независимый не всегда срабатывает.Почему?
Ты думал в сказку попал? Собака используется для защиты ценного оборудования, например целого дома, в котором работает газовый котёл с твоим мк. Программа газового котла имеет основной цикл, который должен прогнозируемо выполниться допустим за 50мс. Там всё: и опрос датчиков, и дёрганье лапками, и управление периферией, и даже программная диагностика. Всё это выполняется за 50мс или чуть меньше, и в самом конце цикла кормим собаку. А когда подвисает, и общее время становится 51мс - вот тогда собака кусается, и ресетит мк.
Таймеры WWDG, IWDG не предназначены для моргания светиком. И кормить их по аппаратному таймеру - самая глупая идея, что может прийти в чью-то голову (есть публикации). Они предназначены для защиты от непредсказуемых внешних факторов. Например комбинации состояний датчиков (или входных данных) - которая приводит к значительному увеличению времени обработки сигналов.
А ещё одно.Нужно наверное и аппаратно убирать всплески напряжения.Ну например.Если я захочу управлять контактором или пускателем.То программа без вач дога подвисает.А с ним сбрасывает программу.Я додумался зпаял на резонатор проводок и на корпус. И вся проблема ушла.Насчёт аппаратного таймера согласен.В AVR этот вариант катит.А в stm32 не катит.Катит лиш в том случае когда инкремент записанный в обработчике прерываний .А подпрограммка в основном цикле.Резонатор как антена эл.магнитных волн.
А в stm32 не катит.Катит лиш в том случае когда инкремент записанный в обработчике прерываний .А подпрограммка в основном цикле.
Нельзя сбрасывать сторожевой таймер из прерывания аппаратного таймера. Это не имеет смысла. Скажем, программа повисла, зато обработчик прерывания да пусть того же SysTick'а, продолжает мерно тикать и сбрасывать сторожевой таймер. А программа повисла. Но таймер сбрасывается. Но устройство не работает. Хотя таймер сбрасывается. Улавливаете?
Сброс таймера должен производиться в основном рабочем цикле.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения