一:概念(基于stm32103xxx)
1:什么是看门狗
STM32F10x 有两个嵌入的看门狗外围设备,能够提供高度的安全,准确的计时和灵活
的运用。所有的看门狗外围设备(独立的或视窗的)都是用来检测和解决由于软件运行失败
而引起的故障,当定时器到达一个给定的超时值时看门狗就会触发一个中断或者重启系统。
独立的看门狗是由它自身所带的专门的低速时钟(32KHZ)计时的,因此即使主时钟不工
作时它也能正常运行。视窗看门狗的时钟由 APB1 时钟分频而来,并拥有一个可配置可编程
的定时窗口,能够检测到不正常的迟到或早到的应用行为。
有些应用需要将看门狗作为一个完全独立于主应用之外的进程独立的看门狗最适合这
种情形。但受到较低的定时精度的限制。有些应用需要看门狗能通过内部精确的定时窗口起
作用,视窗看门狗最适合这种情况。
STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立看门狗,IWDG)和窗口看门狗定时器(WWDG),以提供更可靠的系统保护。
2:什么是独立看门狗
独立看门狗(IWDG)是STM32中常用的看门狗,它是一个独立的硬件模块,可以在系统内部独立运行。通过配置IWDG定时器的计数器和预分频器,可以设置看门狗的定时时间。当看门狗定时器计数器达到预设的值时,会产生看门狗超时事件,触发系统复位。
当对关键寄存器(IWDG_KR)写入值CCCCh 时,独立的看门狗启动,计数器开始从
复位值 FFFh 向下减计数。当计数到计数器的末端值(000h)时,触发复位信号(独立的
看门狗复位)。无论何时将值AAAAh写入到IWDG_KR寄存器中,IWDG_RLR 寄存器的值
将重载到计数器中,从而避免了看门狗的复位。
独立看门狗功能块图:
硬件看门狗:
如果”硬件看门狗”这一特性经设备选择位使能,那么看门狗上电时将自动使能,除非
在定时器到达末端值前由软件写入值到关键寄存器中,否则将产生定时器复位
看门狗超时周期(32KHZ的输入时钟):
溢出时间计算公式:
3:什么是窗口看门狗
窗口看门狗(WWDG)是另一种类型的看门狗,它允许在特定的时间窗口内更新计数器值,以避免触发复位。WWDG可以通过设定窗口和计数器的值来进行配置,并在每次更新计数器时,确保计数器值位于设定的窗口范围内。如果计数器超出窗口范围,将触发看门狗复位。
视窗看门狗用来检测通常由外部的干扰或无法预料的逻辑条件引起的软件错误,这些软
件错误会导致应用程序偏离正常的运行顺序。看门狗电路在一个预先编程的时间到达后会引
发MCU的复位,除非在T6位清0前程序将计数器的内容进行了刷新。若在向下计数器计数
到窗口寄存器值之前对7位的计数器的值(存在控制寄存器中)进行了刷新,则也会引起微
程序控制器的复位。这意味着计数器必须在一个限定的窗口范围内进行刷新。
主要特征:
可编程的自主运行的向下计数器
条件复位
--当向下计数器的值小于40h时复位(如果看门狗处于活动状态)
--当向下计数器在窗口外被重载时复位(如果看门狗处于活动状态)
功能描述:
若看门狗处于活动状态(即WWDG_CR寄存器中的WDGA位置位)并且7位向下计数
器(T[6:0]位)从40h下降到3Fh(T6清0),将引起复位。若在计数器的值大于窗口寄存
器值时软件重载了计数器,则也引发复位。
看门狗功能块图:
正常操作时,应用程序必须周期性地向WWDG_CR寄存器中写值以避免微程序控制器
的复位。这种写入操作仅当计数器的值小于窗口寄存器值时才能进行。在WWDG_CR寄存
器中存储的值必须在FFh和COh范围之间。
使能看门狗:
看门狗在复位后总是不活动的。置位WWDG_CR寄存器中的WDGA位将看门狗使能。
使能后,看门狗将不能被禁用,除非系统被复位。
控制向下计数器:
向下计数器是自主运行的:即使看门狗被禁用它仍能向下计数。
看门狗处于活动状态时,T6位必须被置位以避免产生立即复位。
T[5:0]中的数值表示在看门狗产生复位前需经过的时间延时。该延时值在最小和最大
值之间变化,取决于写入WWDG_CR寄存器时预分频器的未知状态(见图23)
配置寄存器(WWDG_CFR)存有窗口的上限值:为避免复位,向下计数器只有在值小
于窗口寄存器值而大于3Fh时才能被重载。
注意:T6位能用于产生一个软件复位。(当WDGA位置位而T6位清0时)
窗口看门狗的定时:
4:为什么需要看门狗
(1):防止系统死锁:在某些情况下,嵌入式系统可能会陷入无限循环或死锁状态,导致系统停止响应。看门狗能够监测系统的运行状态,如果系统在预定的时间内没有及时更新看门狗定时器,就会触发复位操作,使系统重新启动并恢复正常运行。
(2)处理软件故障:在开发嵌入式软件时,可能会出现编程错误、内存溢出、任务优先级错误等问题,导致系统运行不正常。看门狗可以监测系统是否持续运行,并在软件故障时进行复位,以恢复系统到初始状态。:
(3)应对外部干扰:嵌入式系统可能受到外部干扰,如电源波动、电磁干扰等。这些干扰可能导致系统崩溃或运行不正常。看门狗可以检测这些异常情况,并在系统无响应时采取措施,以确保系统的稳定性和可靠性。
(4)提高系统可靠性:通过引入看门狗,系统可以在出现故障时自动恢复,减少系统停机时间。这对于需要连续运行和高可靠性的应用非常重要,如工业控制、汽车电子、医疗设备等领域。
二:stm32上独立看门狗和窗口看门狗的使用 (HAL)
1 :独立看门狗的相关寄存器
(1)IWDG_KR 关键寄存器
bit31~16:保留读出为0
bit15~0:关键值(只写,读为0000h)
这些位必须由软件周期性的写入关键值AAAAh,否则计数器为0时看门狗将产生一个复位
写入关键值5555h来获得对IWDG_PR和IWDG_PIR寄存器的访问权限
写入关键值ccch来启动看门狗(若已选择硬件看门狗则不需要)
(2)IWDG_PR 预分频数寄存器
bit31~3:保留,读出为0
bit2~0:预分频除数
(3)IWDG_PLR 重载寄存器
bit31~12:保留,读出为0
bit11~0: 看门狗计数重载值
(4)IWDG_SR 状态寄存器
bit31~bit2:保留
bit1:RVU 看门狗定时器重载值更新位
该位由硬件置位,用于指示对重载值的更新正在进行。当更新操作在
VDD电压区域内完成后该位由硬件复位(占用5个RC32KHZ的周期)。
只有在RVU位复位时重置值才能被更新。
bit0:PVU:看门狗预分频数更新位
该位由硬件置位,用于指示对预分频数值的更新正在进行,当更新操
作在VDD电压范围内完成后该位由硬件复位(占用5个RC32KHZ的周
期)。只有在PVU位复位时预分频数的值才能被更新
(5)IWDG寄存器图:
2:窗口看门狗的相关寄存器
(1)WWDG_CR 控制寄存器
bit31~bit8:保留
bit7:
WDGA:激活位
bit6~bit0:
七位计数器:从最高到最低有效位
这些位存有看门狗计数器的值。每隔PCLK1(4096*2WDGTB)个周期
减1。当它从40h计数到3Fh时产生复位(T6位被清0)。
(2)WWDG_CFR 配置寄存器
bit31~10:保留
bit9:
bit8~7:WDGTB[1:0]:时间基值
bit6~bit0:
(3)WWDG_SR 状态寄存器
bit31~bit1: 保留
bit0:EVIF 早唤醒中断标志
当计数器值等于40h时该位由硬件置位。它必须由软件写入0来清0.写
入1无效。若中断没有使能该位也置位。
WWDG寄存器图:
3:看门狗在stm32cubemx上的使用
(1)独立看门狗
第一步:打开stm32cubemx 选择芯片
这里选的是stm32f103cbt6
第二步:设置调试接口
第三步:设置时钟 启用外部晶振(没有外部晶振的不用)
第四步: 配置独立看门狗
看门狗由LSI RC震荡器为时钟源
独立看门狗溢出时间计算为:t = 1/(40000 / 4) * 4096 = 0.409s 也就是409ms
(2)窗口看门狗\
第一步:开启窗口看门狗 配置串口看门狗
第二步:开启中断
第三步:配置io口用来验证
改名
第四步:配置工程名 放置路径 编译软件
第五步:生成工程
第六步:打开工程 编译一下
第七步:找到窗口看门狗回调函数 复制原型在mian.c里面进行重定义
找个位置放 当到达溢出时间前 会进入这个函数 执行翻转io引脚电平 喂狗即可
即可实现 每次溢出前 引脚电平翻转一次 进行喂狗更新时间
这里引脚连接的是led灯 即实验现象为每次进行更新窗口看门狗计数器计数值前进行电平翻转
实现led闪烁现象