当前位置: 首页 > news >正文

第八章 独立看门狗(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");
}

4 下载验证

相关文章:

  • 状态管理详解:Context API、Redux、Recoil 和 Zustand 在 React Native 中的应用
  • Kotlin基础语法一
  • Visual Studio2022配置OpenCV环境
  • 【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem
  • 网络编程(Modbus进阶)
  • spring中的ImportSelector接口详解
  • 云原生核心技术 (2/12): Docker 入门指南——什么是容器?为什么它比虚拟机更香?
  • Docker监控服务部署
  • 【LeetCode】二叉树相关算法题
  • LeetCode--27.移除元素
  • 睡岗检测算法AI智能分析网关V4全场景智能守护,筑牢安全效率防线
  • UE5 学习系列(三)创建和移动物体
  • 【QT】自动更新库QSimpleUpdater使用实例封装
  • 在微服务架构中,怎么搭建Maven私服
  • eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
  • 力扣HOT100之堆:215. 数组中的第K个最大元素
  • docker 安装 milvus standalone 版本 + attu
  • spark数据处理练习题番外篇【下】
  • 空间注意力机制
  • 如何判断一个bug,是前端还是后端的?
  • 做时时彩网站平台有哪些/百度网址大全电脑版旧版本
  • apple 网站模板/发外链的论坛
  • .net做网站开发/外贸网站推广平台
  • 最大的域名注册网站是那个/上海百度
  • 建设公司网站开发方案/免费正规大数据查询平台
  • 凉州区新农村建设网站/seo的概念是什么