Easyelectronics.ru

Электроника для всех
Текущее время: 20 мар 2019, 10:38

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 15:38 
Только пришел

Зарегистрирован: 20 окт 2018, 13:51
Сообщения: 7
Пытаюсь использовать собакенга на STM8L
инит:
Код:
      IWDG_Enable();
      IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
      IWDG_SetPrescaler(IWDG_Prescaler_256);   
      IWDG_SetReload(254);   //1.7sec to reset
      //IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
      IWDG_ReloadCounter();


и сброс:
Код:
   for(;;)
   {
      IWDG_ReloadCounter();
      printf(".");
           delay_ms(10);   
   }//end of infinite loop

Option Byte: AA000000000000

Печатает 2 точки и уходит в ресет. Что делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 17:29 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 3557
Откуда: КЧР, поселок Нижний Архыз
Еще ведь ваш непонятный printf может тормозить.


Последний раз редактировалось Eddy_Em 22 дек 2018, 19:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 19:34 
Только пришел

Зарегистрирован: 20 окт 2018, 13:51
Сообщения: 7
Без printf и delay_ms тоже пробовал - ребутится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 19:44 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 3557
Откуда: КЧР, поселок Нижний Архыз
Больше вообще ничего нет? Оно ни в каком прерывании не зависает?
С l-ками я не работал, но сомневаюсь, что у них watchdog разительно от s-ок отличается.
А если просто написать
IWDG_KR = KEY_REFRESH;
вместо IWDG_ReloadCounter(), будет перезагружаться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 19:58 
Только пришел

Зарегистрирован: 20 окт 2018, 13:51
Сообщения: 7
В SPL
void IWDG_ReloadCounter(void)
{
IWDG->KR = IWDG_KEY_REFRESH;
}

То есть, как раз ваша строчка. Напрямую IWDG_KR = KEY_REFRESH; не компилит - у Космика этот регистр напрямую не работает.

Насчет лишнего - есть таймер на 1мс. Но я и в его обработчик вставлял сброс вотчдога, никакого эффекта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 22 дек 2018, 23:33 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 855
Принцип работы в STM8L такой же как в STM32

Вот что написано в мануале:

Цитата:
When the independent watchdog is started by writing the value 0xCC in the key register
(IWDG_KR), the counter starts counting down from the reset value of 0xFF. When it reaches
the end of count value (0x00) a reset signal is generated (IWDG RESET).
Once enabled, the independent watchdog can be configured through the IWDG_PR, and
IWDG_RLR registers. The IWDG_PR register is used to select the prescaler divider feeding
the counter clock. Whenever the KEY_REFRESH value (0xAA) is written in the IWDG_KR
register, the IWDG is refreshed by reloading the IWDG_RLR value into the counter and the
watchdog reset is prevented.
The IWDG_PR and IWDG_RLR registers are write protected. To modify them, first write the
KEY_ACCESS code (0x55) in the IWDG_KR register. The sequence can be aborted by
writing 0xAA in the IWDG_KR register to refresh it.


Т.е.
Вам нужно выставить значение пред делителя
IWDG->PR =0xYY где YY принимает значение от 0 до 6,
0 - пред делитель = 4,
1 - пред делитель = 8
......
6 - пред делитель = 256
Выставить значение RLR (в который заносится число от которого будем считать вниз до нуля)
IWDG->RLR=0xZZ (по умолчанию равно 0xff )
IWDG->KR
KR может принимать следующие значения:

KEY_ENABLE = 0xCC // Запись этого значения стартует IWDG
KEY_REFRESH = 0xAA // Перезапуск IWDG.
KEY_ACCESS = 0x55 // запись этого значения открывает доступ к записи IWDG_PR и IWDG_RLR


Пример вашего действия:

В настройках:

Код:
IWDG->KR =0x55;
IWDG->PR=0x06;
IWDG->RLR=0x0F; //  период будет равен  ~100mS


Далее в начале программы:
Даем команду на старт:
Код:
IWDG->KR =0xCC; // старт


И в основном цикле
Код:
IWDG->KR =0xAA; // рестарт



P\S Какой у вас контроллер ?
Может там что то в ERRATA есть на этот счет,
На STM8L101 Собакирена проверял - работал нормально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 23 дек 2018, 00:07 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 3557
Откуда: КЧР, поселок Нижний Архыз
Дык, у ТС и так собака работает, только как-то неправильно. Если SPL не виноват, то есть что-то, о чем ТС не говорит, что подвисает слишком надолго и убивается псом. Может у него там 1-wire ногодрыгом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L watchdog
СообщениеДобавлено: 23 дек 2018, 03:04 
Только пришел

Зарегистрирован: 20 окт 2018, 13:51
Сообщения: 7
Нет такого чтобы подвисало надолго. Только таймер на 1мс, но в него тоже пихал ресет собаки. 1-wire точно не использую.
Еррату читал, не увидел ничего похожего. Контроллер stm8L151g4


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB