一、独立看门狗
1.1、独立看门狗主要功能
自由运行的递减计数器(由LSI驱动的12位计数器)
|
看门狗被激活后,则在计数器计数至0x000时产生复位 |
时钟由独立的RC振荡器提供(可在停止和待机模式下工作) |
1.2、独立看门狗框图
1.3、独立看门狗时钟
1.4、计数器时钟
递减计数器的时钟由 LSI 经过一个 8 位的预分频器得到,可以操作预分频器寄存器 IWDG_PR 来设置分频因子。下面是PR(Prescaler Register)寄存器
分频系数算法:
prer 是PR[2:0]设置的值。
1.5、计数器
独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0 时,会产生 一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的 值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
1.6、重装载寄存器
1.7、键寄存器
键值 | 键值作用 |
0XAAAA | 把 RLR 的值重装载到 CNT |
0X5555 |
PR
和
RLR
这两个寄存器可写
|
0XCCCC | 启动 IWDG |
1.8、状态寄存器
1.9、简单case
HAL_UART_Transmit(&huart2, "程序启动。。\r\n", strlen("程序启动。。\r\n"), 100);
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {
HAL_IWDG_Refresh(&hiwdg);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_RESET);
}
HAL_Delay(500);
}
二、窗口看门狗
窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。
窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的7位计数器。
2.1、窗口看门狗主要功能
可编程的自由运行的递减计数器(7位计数器)
|
递减计数器的值小于0x40 和 在递减计数器在窗口外被重新装载产生复位
(看门狗启动时)
|
开启中断下,当递减计数器等于0x40时产生早期唤醒中断(EWI),在函数内可进行喂狗操作 |
2.2、窗口看门狗框图
2.3、窗口看门狗原理
T[6:0]: 7位计数器,存在于CR寄存器
W[6:0]: 7位窗口值,存在于CFR寄存器
CR寄存器
CFR寄存器
SR寄存器(只有最低位有用,产生中断时需要软件清0)
2.4、窗口看门狗时序图
看门狗中只有T[5:0]位用来配置计数器,T6是始终是1,当产生复位是T6= 0.
溢出公式如下:
- Tout是WWDG超时时间(没喂狗)
- Fwwdg是WWDG的时钟源频率(最大36M)
- 4096是WWDG固定的预分频系数
- 2^WDGTB是WWDG_CFR寄存器设置的预分频系数值
- T[5:0]是WWDG计数器低6位,最多63
T[6:0] 最高127,减到0x3f(63)会产生复位,127- 63 = 64,T[6:0]最高位是1,所以T[5:0]最大是63
2.5、简单case
核心代码文章来源:https://www.toymoban.com/news/detail-762688.html
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) {
HAL_WWDG_Refresh(hwwdg);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
}
main------>
MX_GPIO_Init();
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
HAL_Delay(300);
MX_WWDG_Init();
while (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
HAL_Delay(40);
}
三、两个看门狗区别
文章来源地址https://www.toymoban.com/news/detail-762688.html
到了这里,关于stm32之看门狗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!