• STM32HAL库-IWDG篇


    目录

    IWDG简介

    IWDG介绍

    IWDG有什么作用

    IWDG工作原理

    IWDG框图和寄存器

    IWDG寄存器

    键寄存器IWDG_KR

    预分频寄存器IWDG_PR

     重装载寄存器IWDG_RLR

    ​编辑状态寄存器IWDG_SR

    IWDG溢出时间计算

    IWDG配置步骤

    IWDG配置步骤

    ​编辑

    窗口寄存器IWDG_WINR(F7/H7)


    IWDG简介

    IWDG介绍

    IWDG,Independent Watch Dog 独立看门狗

    IWDG的本质是能产生系统复位信号的计数器

    IWDG的特性:

    递减的计数器

    IWDG时钟由独立的RC振荡器,可在待机和停止模式下运行

    看门狗被激活后,当递减计数器计数到0x00时产生复位

    喂狗是指计数器计数到0之前,重载计数器的值,防止复位

    Reset and Clock.,RCC,复位和时钟控制器 

    Clock Status Register,CSR,时钟状态寄存器

    除了复位和时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器至它们的复位状态。

    当发生以下任一事件时,产生一个系统复位:

    1、NRST引脚上的低电平(外部复位)

    2、窗口看门狗计数终止(WWDG复位)

    3、独立看门狗计数终止(IWDG复位)

    4、软件复位(SW复位)

    5、低功耗管理复位

    IWDG有什么作用

    IWDG通常用于产品异常情况下的复位功能,比如外界电磁干扰或者硬件软件问题导致程序跑飞的情况,适合高稳定性的产品和对时间精度要求较低的场合。IWDG的时钟源是独立的RC震荡器,时钟源不稳定时间精度较低

    独立看门狗是异常处理的最后手段,不可依赖,在设计时应尽量避免

    IWDG工作原理

    IWDG是递减计数器,既然是计数器就需要时钟

    Src CLK指代时钟源,也就是RC震荡器

    RC振荡器提供的时钟信号经过PSC预分频器得到IWDG CLK,也就是工作时钟 

    工作时钟信号到递减计数器,减到0后复位,或者喂狗操作防止复位

     Prescaler,PSC,预分频器

    Count,CNT,计数器

    IWDG框图和寄存器

    IWDG框图

    启用IWDG后,LSI时钟会自动开启

    LSI时钟频率并不精确,F1用40kHz,F4/F7/H7用32kHz进行计算即可

     LSI,Low Speed Inner,低速内部振荡器(时钟)

    LSI产生时钟源,8位预分频器的分频值由IWDG_PR寄存器设置

    时钟信号经过分频后,到达递减计数器(12位,最大值4096),递减到0后IWDG复位

    如果递减到0之前重载寄存器对递减计数器重装载值,则不会复位

    设置分频值和重载值都会有一个状态位,给到IWDG_SR寄存器

    设置重装载值之前还要由密钥寄存器IWDG_KR来进行解锁

    IWDG寄存器

    IWDG相关的寄存器有4个,分别是

    键寄存器IWDG_KR

    预分频寄存器IWDG_PR

    重装载寄存器IWDG_RLR

    状态寄存器IWDG_SR

    键寄存器IWDG_KR

    键寄存器IWDG_KR是32位寄存器,高16位保留,低16位只写,写入不同的键值实现不同的功能,读出值固定0x0000

    软件写入0xAAAA,就是喂狗,将重载寄存器IWDG_RLR的值载入递减计数器

    写入0x5555表示解除IWDG_PR和IWDG_RLR寄存器的写访问保护,也就是允许访问

    写入0xCCCC表示启动看门狗工作(若选择硬件看门狗则不受此命令字限制)

    关于硬件看门狗和软件看门狗的选择,参考STM32FXXX闪存编程手册,查找用户选择/选项字节相关内容。以F1系列为例,USER寄存器的位16用来设置硬件/软件看门狗,硬件看门狗在系统复位以后自己启动,并且不能关闭,软件看门狗则不会自己启动,由IWDG_KR寄存器控制

    预分频寄存器IWDG_PR

    预分频寄存器IWDG_PR是32位寄存器,低3位有效。000、001、010…依次代表预分频因子=4、8、16…

     重装载寄存器IWDG_RLR

    重装载寄存器IWDG_RLR是16位寄存器,高4位保留,低12位有效,用来存储重装载值,最大值为4096。只有键值寄存器IWDG_KR写入0xAAAA时,IWDG_RLR寄存器的值才会被重装载到递减计数器中;只有在键值寄存器IWDG_KR写入0x5555时,预分频计数器IWDG_PR和重装载寄存器IWDG_RLR才可写。

    状态寄存器IWDG_SR

    状态寄存器IWDG_SR时32位寄存器,低2位有效‘

    位0表示看门狗预分频值更新

    位1表示看门狗重装载值更新

    就是这俩位一个控制IWDG_PR的可写状态,一个控制IWDG_RLR的可写状态

    要写的时候对应位置1,写完对应位自动清零

    IWDG溢出时间计算

    看门狗溢出时间 = (预分频系数*重装载值)/看门狗时钟源频率

    IWDG最短/最长溢出时间

    计数 1 次为最短时间,计数 4096 为最大时间

    IWDG配置步骤

    IWDG配置步骤

    取消 PR、RLR 寄存器写保护,设置IWDG预分频系数和重装在值,启动IWDG

    HAL_IWDG_Init()

    1、在键寄存器IWDG_KR中写入0x5555

    来使能预分频器寄存器 IWDG_PR和重装载寄存器IWDG_RLR的访问

    2、设置预分频器寄存器IWDG_PR

    3、设置重装载寄存器IWDG_RLR

    4、等待状态寄存器IWDG_SR更新为0x0000 0000,也就是PR和RLR设置操作完成

    5、在键寄存器IWDG_KR中写入0xCCCC

    来使能IWDG

    喂狗

    HAL_IWDG_Refresh()

    6、在键寄存器IWDG_KR中写入0xAAAA,刷新计数器的值为 IWDG_RLR的值

    IWDG的HAL库配置步骤

    主要参数 一个是 xx外设的句柄 xxx_HandleTypeDef,另一个是xxx外设的初始化结构体 

    句柄xxx_HandlerTypeDef 通常包括

    外设的基地址 xxx_TypeDef 和初始化结构体xxx_InitTypeDef

    窗口寄存器IWDG_WINR(F7/H7)

    在F7/H7系列的IWDG初始化结构体IWDG_InitTypedef中,除了预分频值(PR)和重装载值(RLR),还有窗口值,对应窗口寄存器(IWDG_WINR)。窗口寄存器(WINR)和预分频寄存器(PR)、重装载寄存器(RLR)一样,由键寄存器(KR)的0x5555指令控制写使能

    窗口寄存器WINR为32位寄存器,低12位有效。最大4028

    当递减计数器的值低于窗口计数器的值,且大于0时,才允许喂狗操作,否则不许喂狗

    F7/H7的IWDG初始化结构体
    IWDG_WINR寄存器

  • 相关阅读:
    YOLO系列 --- YOLOV7算法(四):YOLO V7算法网络结构解析
    hugging face tansformer实战篇-阅读理解任务
    博客数量为啥产出少了呢
    【多线程】线程安全(重点)
    大模型实战提示工程 1—常用的大语言模型参数说明
    波卡生态中“中继链”、“DOT”的常见问题解答
    yolov10--C#接口
    SpringBoot--手写组件动态更新@Value的值
    [译]使用Python和Dash 创建一个仪表盘(上)
    字符串拼接,字符串分割,字符串转集合,把Map转String,将字符串转报文
  • 原文地址:https://blog.csdn.net/qq_42190402/article/details/139015494