首先 可以查阅stm32的使用手册有这样一幅图
当你设置为32分频时,则时钟就变为1.25KHz 此时也就是说计数器加1或者减1所花费的最短时间是(1/1.25)=0.8ms,因此如果设置加载值为349,则喂狗的最长时间应该是350*(1/1.25)=280ms
注意此处都是最长 最短 并不是确切的值 这些时间是按照40kHz 时钟给出。实际上,MCU内部的RC频率会在30kHz 到60kHz 之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间的相位差,因此总会有一个完整的RC周期是不确定的。
通过对LSI进行校准可获得相对精确的看门狗超时时间。
开机时,如果按下了 K1,即可启动T0。
T0定时中断,即可自动喂狗,程序即可正常执行while中的内容。
其中就有:
LED2=1;DelayMs(100);
LED2=0;DelayMs(100);
即:LED2就闪烁。
按下 K2,就关闭了 T0,停止了喂狗。
单片机系统,16ms 后,自动复位。
复位后,如果没有按下 K1,不能自动喂狗,就会频繁的自动复位。
频繁的复位,总是执行开始处的:
LED1=0; DelayMs(100);
LED1=1; DelayMs(100);
所以,就是按key2 LED1闪烁。
首先要看是什么单片机,不同的单片机的看门狗的溢出时间是不同的,但不会有这么长的单片机的。STC的单片机晶振是11.0592时,最长的溢出时间是9.1022秒,这就要求必须在溢出时间内喂一次,所以,是不可能设置成30秒的。不过,为什么要设置这长的时间呢,假设可以设置成这么长的时间,在实际应用假设单片机进入死机状态了,需要30多秒以后看门狗才能复位,这么长的时间,复位还有什么意义了,如果是单片机控制重要的设备,这么长的时间早就出现严重事故了,复位已经不起作用了。所以,实际应用中,喂狗时间最好要小于1秒,才能真正起到保护的作用。
看门狗(WDT)有内置的也有外置的,其实就是个定时器。
看门狗的作用是:当程序在某种意外情况下跑飞了,这时就没办法去”喂狗“,一旦持续某个门槛时间(比如20ms)还没有”喂狗“,那么看门狗就把单片机复位。
喂狗信号就是在上面说的20ms之内,去清WDT定时器。
看门狗的作用就是在程序跑飞的情况下,自动复位程序,硬件看门狗就是外加硬件电路来喂狗来使得单片机在跑飞的情况下复位,软件复位就是程序在进行中每隔一段时间来喂狗,单片机死机了,不能继续去喂狗了,看门狗就会复位单片机
主程序一般有个无限循环while(1){...}
WDT初始化程序应该放在这个循环的前面;
喂狗程序一般放在这个循环内部。如:
void main(void)
{
//其他初始化程序...
Init_WDT;
while(1)
{
Feed_Dog;
//doing your jog
};
}
喂狗时间合理单片机的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:喂狗时间合理单片机