第八章 独立看门狗(IWDG)
第八章 独立看门狗(IWDG)
目录
第八章 独立看门狗(IWDG)
1 IWDG 简介
1.1 IWDG 主要性能
1.2 WDG 功能描述
1.3 硬件看门狗
1.4 寄存器访问保护
1.5 调试模式
2 IWDG 寄存器描述
2.1 (IWDG_KR)
2.2 预分频寄存器(IWDG_PR)
2.3 重装载寄存器(IWDG_RLR)
2.4 状态寄存器(IWDG_SR)
2.5 WDG 寄存器映像
3 程序设计
4 下载验证
本章分为如下几个小节:
1 IWDG 简介
2 IWDG 寄存器描述
3 程序设计
4 下载验证
1 IWDG 简介
W55MH32 内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。
1.1 IWDG 主要性能
- 自由运行的递减计数器。
- 时钟由独立的 RC 振荡器提供(可在停止和待机模式下工作)。
- 看门狗被激活后,则在计数器计数至 0x000 时产生复位。
1.2 WDG 功能描述
在键寄存器(IWDG_KR)中写入 0xCCCC ,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键寄存器 IWDG_KR 中写入 0xAAAA ,IWDG_RLR 中的值就会被重新加载到计数器,从而避免产生看门狗复位。
1.3 硬件看门狗
如果用户在选择字节中启用了“硬件看门狗”功能,在系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
1.4 寄存器访问保护
IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向 IWDG_KR寄存器中写入 0x5555 。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA )也会启动写保护功能。状态寄存器指示预分频值和递减计数器是否正在被更新。
1.5 调试模式
当微控制器进入调试模式时(Cortex-M3 核心停止),根据调试模块中的 DBG_IWDG_STOP 配置位的状态,IWDG 的计数器能够继续工作或停止。详见有关调试模块的章节。独立看门狗框图如下:
注: 看门狗功能处于 VDD 供电区,即在停机和待机模式时仍能正常工作。看门狗超时时间(40kHz 的输入时钟(LSI)。
预分频系数 | PR [2:0] 位 | 最短时间 (ms) RL [11:0]=0x000 | 最长时间 (ms) RL [11:0]=0xFFF |
/4 | 0 | 0.1 | 409.6 |
/8 | 1 | 0.2 | 819.2 |
/16 | 2 | 0.4 | 1638.4 |
/32 | 3 | 0.8 | 3276.8 |
/64 | 4 | 1.6 | 6553.6 |
/128 | 5 | 3.2 | 13107.2 |
/256 | 6 或 7 | 6.4 | 26214.4 |
注: 这些时间是按照 40kHz 时钟给出。实际上,MCU 内部的 RC 频率会在 30kHz 到 60kHz 之间变化。此外,即使 RC 振荡器的频率是精确的,确切的时序仍然依赖于 APB 接口时钟与 RC 振荡器时钟之间的相位差,因此总会有一个完整的 RC 周期是不确定的。通过对 LSI 进行校准可获得相对精确的看门狗超时时间。有关 LSI 校准的问题。
2 IWDG 寄存器描述
可以用半字(16 位)或字(32 位)的方式操作这些外设寄存器。
2.1 (IWDG_KR)
地址偏移:0x00
复位值:0x0000 0000(在待机模式复位)
2.2 预分频寄存器(IWDG_PR)
地址偏移:0x04
复位值:0x0000 0000
2.3 重装载寄存器(IWDG_RLR)
地址偏移:0x08
复位值:0x0000 0FFF(待机模式时复位)
2.4 状态寄存器(IWDG_SR)
地址偏移:0x0C
复位值:0x0000 0000(待机模式时不复位)
注: 如果在应用程序中使用了多个重装载值或预分频值,则必须在 RVU 位被清除后才能重新改变预装载值,在 PVU 位被清除后才能重新改变预分频值。然而,在预分频和/或重装值更新后,不必等待 RVU 或 PVU 复位,可继续执行下面的代码。(即是在低功耗模式下,此写操作仍会被继续执行完成。)
2.5 WDG 寄存器映像
IWDG 寄存器映像和复位值。
3 程序设计
这段代码是基于W55MH32微控制器,主要实现了一个独立看门狗(IWDG)复位测试程序。独立看门狗是一种硬件定时器,用于监控系统运行状态,当系统因软件故障等原因无法正常工作时,看门狗会产生复位信号,使系统重新启动。该程序的具体功能如下:
1.初始化系统:初始化延时函数、串口通信,并获取系统时钟频率信息。
2.输出系统时钟信息:通过串口打印系统时钟(SYSCLK)、高速总线时钟(HCLK)、低速外设时钟(PCLK1)、高速外设时钟(PCLK2)和 ADC 时钟(ADCCLK)的频率。
3.初始化独立看门狗:配置独立看门狗的预分频器和重装载值,并使能独立看门狗。
// 使能对IWDG寄存器的写访问
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 设置IWDG预分频器(64)和重装载值(2047)
IWDG_SetPrescaler(IWDG_Prescaler_64);
IWDG_SetReload(0x7FF);// 初始化并启用独立看门狗
IWDG_ReloadCounter();
IWDG_Enable();
4.等待用户输入:在主循环中不断检查用户是否通过串口输入字符 'r',如果输入 'r',则喂狗(重置看门狗计数器),并通过串口输出喂狗成功的信息。
// 从串口获取用户输入字符
uint8_t GetCmd(void);// 判断是否需要喂狗并执行喂狗操作
if (GetCmd() == 'r') {
IWDG_ReloadCounter();
printf("Feed Dog Success\n");
}