STM32F407系列IWDG独立看门狗
·
1.IWDG简介
IWDG全程Independt Watchdog,即独立看门狗。其本质是能产生系统复位信号的计数器,它的时钟由独立的RC振荡器提供(可在待机和停止模式下运行,独立看门狗被激活以后,当计数器递减到0X0000的时产生复位。)在计数器计时到0之前,通过喂狗,重装载计数器的值,防止复位。F407的lsi时钟频率通过查阅手册为32kHz,如下。

2.IWDG的作用
1.异常:外界电磁干扰或者自身系统(硬件或软件)异常造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行
2.作用:主要用于检测外界电磁干扰,或程序跑飞问题
3.应用:在一些需要高稳定性的产品中,并且对精度要求较低的场合。
ps:独立看门狗是异常处理的最后手段,不可依赖,应尽量避免异常的发生!
2.1 溢出时间计算
T = 预分频系数 * 看门狗重装载值 / 时钟源频率
2.2 独立看门狗配置过程
1.取消PR(预分频)/RLR(重装载)寄存器保护


2.设置预分频和重装载寄存器系数,启动IWDG。
void IWDG_Init(void)
{
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_32; //设置IWDG分频系数
hiwdg.Init.Reload = 1000 * 3; //3秒喂狗
HAL_IWDG_Init(&hiwdg); //初始化IWDG
}
超时时间 = 3000 * 32 / 32000 = 3s。只要3s没有喂狗,即会复位。
main函数
IWDG_HandleTypeDef hiwdg;
void main_thread(void* pArg)
{
IWDG_Init();
uint8_t nCnt = 0;
while (1)
{
HAL_IWDG_Refresh(&hiwdg);
Gpio_setPinToggle(&xLed); //生命信号指示灯闪亮
osDelay(500);
}
}
验证:注释掉喂狗函数,程序3s即复位一次。
更多推荐


所有评论(0)