小弟最近用STM32F103VC开发了一个小系统,现在想加上看门狗防止程序跑飞,对看门狗的使用不是很熟悉,还望大家多多赐教。
我的要求比较简单,只是想使用软件实现看门狗功能,初始化里面通过软件时能看门狗,主循环里面不断喂狗,我使用的是STM32里面的独立看门狗(IWDG),以下是我的使用方法,有什么不对的地方还请指正。
int main(void)
{
......
/* IWDG timeout equal to 280 ms (the timeout may varies due to LSI frequency
dispersion) */
/* Enable write access to IWDG_PR and IWDG_RLR registers */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz */
IWDG_SetPrescaler(IWDG_Prescaler_32);
/* Set counter reload value to 349 */
IWDG_SetReload(349);
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
while (1)
{
/* Reload IWDG counter */
IWDG_ReloadCounter();
......
}
}
以上程序是直接移植STM32提供的例程,我在调试的时候去掉主循环里面的喂狗系统会不断复位(通过LED灯指示),不知道我这样使用有没有问题,我从相关资料了解到独立看门狗可以通过硬件上产生外部中断实现复位也可以通过软件复位,由于系统硬件已经成型,不便更改,所以只能通过软件复位。 |