Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с Watchdog
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Jenya7
Инициализирую собаку
Код
void IWD_Init(void)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

    IWDG_SetPrescaler(IWDG_Prescaler_16);

    IWDG_SetReload(0xFFF);

    IWDG_ReloadCounter();

     IWDG_Enable();
}


Чтоб проверить ставлю заглушку в мэйне
Код
int main(void)
{
  
  GlobalInit();
  UsartSendString("Start\r");
  while(1)
  {
    
    switch(mot_state)
   {
      //some code
    }

     while(1)
    {
          //zaglushka
     }

    if(rx_command_recieved)
    {
        //some code
    }

     IWDG_SetReload(0xFFF);
    IWDG_ReloadCounter();
  }


После 4-5 рисетов камень умирает и оживить его можно только передернув питание. cranky.gif
vlad_new
Для перезапуска таймера IWDG_SetReload(0xFFF) не нужен.
Jenya7
Цитата(vlad_new @ Nov 25 2013, 12:39) *
Для перезапуска таймера IWDG_SetReload(0xFFF) не нужен.

спасибо за информацию, не знал. но проблема все равно осталась.
adnega
Цитата(Jenya7 @ Nov 25 2013, 11:42) *
спасибо за информацию, не знал. но проблема все равно осталась.

А пробовали разобраться в чем заключается "умирание"?
Причина может быть никак не связана со сторожевым таймером...
ViKo
Я попробовал на STM32F207.
Код
/* Инициализация */
  IWDG->KR = 0x5555;        // Key
  // IWDG->PR = 5;            // Prescaler /128 (4 ms)
  IWDG->PR = 3;            // Prescaler /32  (1 ms)
  IWDG->RLR = 0xFFF;        // 4096 (> 16 s) -> > 4 s
  IWDG->KR = 0xCCCC;        // Start

/* Перезапуск */
  IWDG->KR =  0xAAAA;        // Reload Independent Whatchdog Timer

Все просто, все работает...
adnega
Цитата(ViKo @ Nov 25 2013, 12:24) *
Все просто, все работает...

Когда-то давно я уже писал, что в "готовке" есть некоторые тонкие моменты...
Например, при сбросе на ножке RESET будет импульс отрицательной полярности, который собственно камень-то и сбрасывает.
Если по каким-либо причинам этому импульсу не бывать (например, RESET "хорошо притянут" к VCC), то сброса не будет и программа
продолжит исполняться дальше (тот же while(1)).
Дополню: "хорошо притянут" - это и емкий конденсотор на RESET.
ViKo
У меня NRST подтянут к питанию через 4.7 кОм, а сигналы сброса подаются в эту цепь через диоды (анод - к резистору, катод - к источнику сброса). Вот и нет никаких чудес. Почему так сделал, не знаю... само нарисовалось. laughing.gif
Jenya7
Цитата(ViKo @ Nov 25 2013, 13:50) *
У меня NRST подтянут к питанию через 4.7 кОм, а сигналы сброса подаются в эту цепь через диоды (анод - к резистору, катод - к источнику сброса). Вот и нет никаких чудес. Почему так сделал, не знаю... само нарисовалось. laughing.gif

вот схема демо борда. вроде никакого криминала.
ViKo
Цитата(Jenya7 @ Nov 25 2013, 11:56) *
вот схема демо борда. вроде никакого криминала.

Может, и есть, как сказал adnega. Конденсатор C3 заряжен до 3,3В, и должен разрядиться при срабатывании IWDG. Попробуйте уменьшить в 10 раз.
adnega
Цитата(ViKo @ Nov 25 2013, 13:07) *
Может, и есть, как сказал adnega. Конденсатор C3 заряжен до 3,3В, и должен разрядиться при срабатывании IWDG. Попробуйте уменьшить в 10 раз.

Я не настаиваю)) По схеме особого криминала не вижу:
- если J1 и J2 оба на земле (а не в воздухе),
- если к JP1 не подключен отладчик (который может на NRST воздействовать).

Нужно разобраться, где продолжает работать программа. Контроллер не может "умирать" - скорее всего он продолжает крутить while(1)...
или находится в HardFault))
vlad_new
Позвольте не согласиться с этой схемой. По даташыту выходной ток на лапу не должен привышать 50 ма, а потому последовательно с лапой nrst извольте поставить резистор 68 ом, а дальше можете куда угодно и как угодно подтягивать. К стате последовательно с кнопкой ресет резистор то же не помешал бы.
Jenya7
я пробовал и с подключенным отладчиком и без него. придется помахать паяльником. доложу что получилось.
Golikov A.
в вайле бы диодом мигали или на порт что-то слали бы... можно было бы понять отпустило его или нет...
adnega
Цитата(Golikov A. @ Nov 25 2013, 23:32) *
в вайле бы диодом мигали или на порт что-то слали бы... можно было бы понять отпустило его или нет...

+1
И в прерывании от таймера (например, Systick) вторым светодиодом.
vlad_new
По скольку у других проблемм с рестартом от собаки не было, то что то банальное ищите. Проседание питания, лапа не пропаяна, кварц не всегда запускается и.т.д. Уберите все свои уарты и систики. Просто включайте светодиод при старте. Отделите железо от программы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.