Kad smo već kod IWDG, kog sam malopre pomenuo kao vrlo korisnu stvarčicu, setup je jako jednostavan i važi za sva Cortex STM uz neka obogaćenja kod većih M.
Evo kako izgleda za STM32F1 (Cortex M3, konkretno na Blue Pill):
Velika prednost je što je IWDG sasvim nezavisna naprava, kojoj treba čistiti brojač sa IWDG->KR = 0xAAAA; pre nego što istekne, inače resetuje MCU pa otpočetka.
Super je zato što može zaštititi od jedne jako nezgodne stvari, a to je prestanak rada HSI oscilatora. Tada MCU ostaje zaglavljen tu gde jeste, sa svim outs koji su trenutno bili aktivni.
Pošto to može u nekim situacijama biti jako opasna stvar, posebno kod kontrole nekih izvršnih organa koji raspolažu velikim silama, brzinama, itd, onda nezavisna IWDG naprava može sve to počisti resetom MCU i pri tom isključiti opasne izlaze.
Ranije sam kod MCU, koji nisu imali nezavisni hardver za IWDG, koristio eksterni NE555 kog čistim u pravilnim intervalima i koji obara MCU u slučaju nekog problema. Sada je to fino jer postoji unutra u STM32xxx.
P.S.
Da "dokusurim" info o IWDG:
kod Cortex M3 je podesiv od 100uS do 26 sekundi timeout, što je i više nego dovoljno za bilo koju opciju opasnog rada.
Čak može zaštititi i SMPS vođen tim MCU, koji radi do nekih 50KHz, sa timeout od 100uS.
Evo kako izgleda za STM32F1 (Cortex M3, konkretno na Blue Pill):
Code:
void iwdg_setup(void)
{
// RCC->CSR |= (1<<0); // LSI enable (ukoliko negde vec nije), necessary for IWDG
// while ((RCC->CSR & (1<<1)) == 0); // wait till LSI is ready
IWDG->KR = 0x5555; // enable write to PR, RLR
IWDG->PR = 4; // Init prescaler, /64, max 8 sec trenutno
IWDG->RLR = 0xFFE; // Init RLR
IWDG->KR = 0xAAAA; // Reload the watchdog, takodje ciscenje u nekoj petlji
IWDG->KR = 0xCCCC; // Start the watchdog
}
Velika prednost je što je IWDG sasvim nezavisna naprava, kojoj treba čistiti brojač sa IWDG->KR = 0xAAAA; pre nego što istekne, inače resetuje MCU pa otpočetka.
Super je zato što može zaštititi od jedne jako nezgodne stvari, a to je prestanak rada HSI oscilatora. Tada MCU ostaje zaglavljen tu gde jeste, sa svim outs koji su trenutno bili aktivni.
Pošto to može u nekim situacijama biti jako opasna stvar, posebno kod kontrole nekih izvršnih organa koji raspolažu velikim silama, brzinama, itd, onda nezavisna IWDG naprava može sve to počisti resetom MCU i pri tom isključiti opasne izlaze.
Ranije sam kod MCU, koji nisu imali nezavisni hardver za IWDG, koristio eksterni NE555 kog čistim u pravilnim intervalima i koji obara MCU u slučaju nekog problema. Sada je to fino jer postoji unutra u STM32xxx.
P.S.
Da "dokusurim" info o IWDG:
kod Cortex M3 je podesiv od 100uS do 26 sekundi timeout, što je i više nego dovoljno za bilo koju opciju opasnog rada.
Čak može zaštititi i SMPS vođen tim MCU, koji radi do nekih 50KHz, sa timeout od 100uS.