目录
(一)简介
(二)IWDG
IWDG的CUBEMX工程配置
IWDG相关函数(非常少,所以直接贴上来):
(三)WWDG
(一)简介
看门狗分为独立看门狗(IWDG)和窗口看门狗(WWDG)
(二)IWDG
独立看门狗本质是一种定时器,其作用是监视系统的运行,当系统发生错误(如程序卡死)时,能自动让系统复位;观察cubemx中的时钟树可以发现,IWDG是由LSI提供32KHz的时钟,而IWDG内部可以对LSI时钟进行分频,预分频系数从4~256(须为2的次幂);并且系统复位时,IWDG的12位递减计数器初值为4095,在启动IWDG后,计数器递减计数,当计数值为0时,系统复位;所以如果程序正常运行的话,必须在规定时间里刷新IWDG内递减计数器的值(这就是大家说的“喂狗”),以防止系统复位;另外,根据预分频系数可以算出IWDG的最长超时,如下表所示;计算方法为:T = 1 / (32KHz / 预分频系数)* 4096(注意K表示10e3,k才是2e10);
预分频系数 | 超时/ms |
---|---|
/4 | 512 |
/8 | 1024 |
/16 | 2048 |
/32 | 4096 |
/64 | 8192 |
/128 | 16384 |
/256 | 32768 |
IWDG使用方法非常简单,只需要在计数值减为0之前,按时喂狗即可,否则就会重启系统(常称为“狗叫”);
IWDG的CUBEMX工程配置
在cubemx中,只需要开启IWDG,并配置预分频系数和递减计数值即可:
IWDG相关函数(非常少,所以直接贴上来):
1、初始化:HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);初始化之后自动启动;
2、喂狗:HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);
3、宏:__HAL_IWDG_START(__HANDLE__) ;启动iwdg,启动后不可关闭;
4、宏:__HAL_IWDG_RELOAD_COUNTER(__HANDLE__);重置计数值,也就是喂狗;
5、宏:IWDG_ENABLE_WRITE_ACCESS(__HANDLE__);使预分频reg和重载reg可写入;
6、宏:IWDG_DISABLE_WRITE_ACCESS(__HANDLE__);使预分频reg和重载reg不可写入;
IWDG使用方法非常简单,只需要在计数值减为0之前,按时喂狗即可,否则就会重启系统(常称为“狗叫”);
(三)WWDG
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。也就是要求某段程序在限定的时间内执行完毕,否则复位系统,防止程序跑飞。
IWDG和WWDG的区别可以参考这个大佬的这篇文章,讲得非常详细了。
完~
以上均为个人学习心得,如有错误,请不吝赐教~
THE END