单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗就是为了避免这样的情况的发生。如果系统出问题,没有给看门狗喂狗,看门狗就由于超时将CPU复位。
看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定时计数等。
独立看门狗IWDG简介
独立看门狗就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
看门狗功能由VDD电压域供电,在停止模式和待机模式下仍能工作
独立看门狗(IWDG)由内部低速时钟(LSI)提供,适用于对时间精度不高的场合,即使主时钟发生故障它也仍然有效
独立看门狗IWDG寄存器
键寄存器IWDG_KR是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。
在键寄存器IWDG_KR中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。一旦独立看门狗启动,它就关不掉,只有复位才能关掉。
无论何时,只要键寄存器IWDG_KR中被写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位 。
预分频寄存器 (IWDG_PR )和 重装载寄存器I(WDG_RLR )具有写保护功能,要修改这两个寄存器的值,必须先向 IWDG_KR 寄存器中写入 0x5555。
独立IWDG与窗口WWDG的区别
IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR
IWDG没有中断,WWDG有中断
IWDG有硬件软件之分,WWDG只能软件控制
IWDG是12位递减的,WWDG是7位递减的
IWDG只有下限,WWDG有下限和上限
IWDG应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
WWDG应用于在精确计时窗口起作用的应用程序。但是WWDG时钟与系统相同,如果系统时钟不走了,这个狗也就失去作用了。
怎么用IWDG
独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这个段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序 50ms 多一点,如果超过 60ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。
void main(void) { //初始化 IWDG_START();//启动看门狗 while(1) { { //需要被监控的代码 } IWDG_Feed();//喂狗 } }
单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗就是为了避免这样的情况的发生。如果系统出问题,没有给看门狗喂狗,看门狗就由于超时将CPU复位。
看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定时计数等。
独立看门狗IWDG简介
独立看门狗就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
看门狗功能由VDD电压域供电,在停止模式和待机模式下仍能工作
独立看门狗(IWDG)由内部低速时钟(LSI)提供,适用于对时间精度不高的场合,即使主时钟发生故障它也仍然有效
独立看门狗IWDG寄存器
键寄存器IWDG_KR是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。
在键寄存器IWDG_KR中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。一旦独立看门狗启动,它就关不掉,只有复位才能关掉。
无论何时,只要键寄存器IWDG_KR中被写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位 。
预分频寄存器 (IWDG_PR )和 重装载寄存器I(WDG_RLR )具有写保护功能,要修改这两个寄存器的值,必须先向 IWDG_KR 寄存器中写入 0x5555。
独立IWDG与窗口WWDG的区别
IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR
IWDG没有中断,WWDG有中断
IWDG有硬件软件之分,WWDG只能软件控制
IWDG是12位递减的,WWDG是7位递减的
IWDG只有下限,WWDG有下限和上限
IWDG应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
WWDG应用于在精确计时窗口起作用的应用程序。但是WWDG时钟与系统相同,如果系统时钟不走了,这个狗也就失去作用了。
怎么用IWDG
独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这个段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序 50ms 多一点,如果超过 60ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。
void main(void) { //初始化 IWDG_START();//启动看门狗 while(1) { { //需要被监控的代码 } IWDG_Feed();//喂狗 } }
举报