Easyelectronics.ru

Электроника для всех
Текущее время: 24 янв 2019, 05:40

Часовой пояс: 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
Сообщения: 3395
Откуда: КЧР, поселок Нижний Архыз
Еще ведь ваш непонятный 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
Сообщения: 3395
Откуда: КЧР, поселок Нижний Архыз
Больше вообще ничего нет? Оно ни в каком прерывании не зависает?
С 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
Сообщения: 786
Принцип работы в 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
Сообщения: 3395
Откуда: КЧР, поселок Нижний Архыз
Дык, у ТС и так собака работает, только как-то неправильно. Если SPL не виноват, то есть что-то, о чем ТС не говорит, что подвисает слишком надолго и убивается псом. Может у него там 1-wire ногодрыгом?


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

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


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

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


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

Сейчас этот форум просматривают: Google [Bot], SerJie


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

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

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