学网站建设需要下载什么,母婴会所 网站源码,推广运营怎么做,网站怎么做可以再上面输入文字STM32 有两个看门狗#xff0c;独立看门狗和窗口看门狗#xff0c;独立看门狗又称宠物狗#xff0c;窗 口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时#xff0c;产生系统复位#xff0c;对于窗口型看门狗同… STM32 有两个看门狗独立看门狗和窗口看门狗独立看门狗又称宠物狗窗 口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时产生系统复位对于窗口型看门狗同时会产生一个中断。 独立看门狗 (IWDG) 由专用的内部低速时钟 (LSI) 驱动即使主时钟发生故障它也仍然有效。 窗口看门狗由从APB1 时钟分频后得到的时钟驱动。 独立看门狗代码 窗口看门狗代码 一、独立看门狗
1.1、独立看门狗主要功能 自由运行的递减计数器由LSI驱动的12位计数器) 看门狗被激活后则在计数器计数至0x000时产生复位 时钟由独立的RC振荡器提供(可在停止和待机模式下工作) 1.2、独立看门狗框图 1.3、独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供即使主时钟发生故障它仍然有效非常独立。 LSI 的频率一般在 30~60KHZ 之间根据温度和工作场合会有一定的漂移我们一般取 40KHZ 所以独立看门狗的定时时间并不一定非常精确只适用于对时间精度 要求比较低的场合 1.4、计数器时钟 递减计数器的时钟由 LSI 经过一个 8 位的预分频器得到可以操作预分频器寄存器 IWDG_PR 来设置分频因子。下面是PRPrescaler Register寄存器 分频系数算法 prer 是PR[2:0]设置的值。 1.5、计数器 独立看门狗的计数器是一个 12 位的递减计数器最大值为 0XFFF当计数器减到 0 时会产生 一个复位信号:IWDG_RESET让程序重新启动运行如果在计数器减到 0 之前刷新了计数器的 值的话就不会产生复位信号重新刷新计数器值的这个动作我们俗称喂狗。 1.6、重装载寄存器 重装载寄存器是一个 12 位的寄存器里面装着要刷新到计数器的值这个值的大小决定着独立看门狗的溢出时间。 溢出时间公式 例如果PSC 64, RLR 625,正常情况下f(iwdg) 40khz, 那么溢出时间t 1s。 1.7、键寄存器 功能描述如下 键值键值作用0XAAAA把 RLR 的值重装载到 CNT0X5555 PR 和 RLR 这两个寄存器可写 0XCCCC 启动 IWDG 1.8、状态寄存器 状态寄存器 SR 只有位 0 PVU 和位 1 RVU 有效这两位只能由硬件操作软件操作不了。 1.9、简单case 外设 串口、灯按键 描述开启独立看门狗如果不按键串口会间隔1s一直打印“启动中...”如果按键按下喂狗 灯会亮串口不再打印数据 核心代码如下 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减到0x3f63会产生复位127- 63 64T[6:0]最高位是1所以T[5:0]最大是63 2.5、简单case 外设 两个灯窗口看门狗 描述一个灯启动时由亮到灰一个灯一直在闪烁配置在中断里中断里喂狗 核心代码 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);}
三、两个看门狗区别