STM32看门狗

STM32看门狗

1、IWDG

  • 简介
    • 全称
      • Independent watchdog,即独立看门狗
    • 本质
      • 能产生系统复位信号的计数器
    • 特性
      • 递减的计数器
      • 时钟由独立的RC振荡器提供(可在待机和停止模式下运行)
      • 看门狗被激活后,当递减计数器计数到0x000时产生复位
    • 喂狗
      • 计数器计数到0之前,重新装载计数器的值,防止复位

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

  • 工作原理
    • CPU必须及时喂狗,否则系统复位重启

在这里插入图片描述

  • 框图

在这里插入图片描述

  • IWDG寄存器
    • 键寄存器(IWDG_KR)
      • 位[15:0]:用于喂狗,解除PR和RLR寄存器写访问保护,启动软件看门狗工作
    • 预分频器寄存器(IWDG_PR)
      • 位[2:0]:4 * 2预分频因子 = 预分频系数
    • 重装载寄存器(IWDG_RLR)
      • 位[11:0]:用于存放重装载值,最大值为4096
    • 状态寄存器(IWDG_SR)
      • 位1:判断重装载值是否已被更新
      • 位0:判断预分频值是否已被更新
  • IWDG溢出时间计算
    • Tout = psc * rlr / fIWDG
      • Tout是看门狗溢出时间
      • fIWDG是看门狗的时钟源频率
      • psc是看门狗预分频系数( 4 * 2预分频因子 = 预分频系数 )
      • rlr是看门狗的重装载值
    • Tout = ( 4 * 2prer ) * rlr / fIWDG
      • prer为预分频因子,预分频器寄存器(IWDG_PR)的位[2:0]
  • IWDG配置步骤
    1. 取消PR/RLR寄存器写保护,设置IWDG预分频系数和重装载值,启动IWDG
      • HAL_IWDG_Init()
    2. 及时喂狗,即 0xAAAA 写入到 IWDG_KR
      • HAL_IWDG_Refresh()

2、WWDG

  • 简介

    • 全称
      • Window watchdog,即窗口看门狗
    • 本质
      • 能产生系统复位信号提前唤醒中断的计数器
    • 特性
      • 递减的计数器
      • 当递减计数器值从 0x40减到 0x3F时复位(即位6跳变到0)
      • 计数器的值大于W[6:0](窗口上限值)时喂狗会复位
      • 提前唤醒中断(EWI):当递减计数器等于 0x40时可产生
    • 喂狗
      • 在窗口期间重装载计数器的值,防止复位
  • 工作原理

在这里插入图片描述

  • 框图

在这里插入图片描述

  • WWDG寄存器
    • 控制寄存器(WWDG_CR)
      • 位7:使能窗口看门狗工作
      • 位[6:0]:重装载计数器值
    • 配置寄存器(WWDG_CFR)
      • 位9:提前唤醒中断
      • 位[8:7]:设置预分频系数
      • 位[6:0]:窗口上限值
    • 状态寄存器(WWDG_SR)
      • 位0:判断是否发生了WWDG提前唤醒中断
  • WWDG超时时间计算
    • Tout = 4096 * 2WDGTB * ( T[5:0] + 1 ) / FWWDG
      • Tout是WWDG溢出时间
      • FWWDG是WWDG的时钟源频率
      • 4096是WWDG固定的预分频系数
      • 2WDGTB是WWDG_CFR寄存器设置的预分频系数值
      • T[5:0]是WWDG计数器低6位
  • IWDG配置步骤
    1. WWDG工作参数初始化
      • HAL_IWDG_Init()
    2. WWDG Msp初始化
      • HAL_WWDG_MspInit() 配置NVIC、CLOCK等
    3. 设置优先级,使能中断
      • HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
    4. 编写中断服务函数
      • WWDD_IRQHandler() -> HAL_WWDG_IRQHandler()
    5. 重定义提前唤醒回调函数
      • HAL_WWDG_EarlyWakeupCallback()
    6. 在窗口期内喂狗
      • HAL_WWDG_Refresh()

IWDG和WWDG主要区别

对比点独立看门狗窗口看门狗
时钟源LSI(40KHz)PCLK1
复位条件递减计数到0计数值大于W[6:0]值喂狗或减到0x3F
中断没有中断计数值减到0x40可产生中断
递减计数器12位(最大计数范围:4096 ~ 0)7位(最大计数范围:127 ~ 63)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32看门狗(Watchdog)是一种硬件机制,用于监测程序是否正常运行。如果程序发生死循环或者挂起等异常情况,看门狗会在一定时间内未收到喂狗信号时,自动重启系统,确保系统能够正常运行。 下面是使用STM32看门狗的步骤: 1. 配置看门狗定时器 通过设置看门狗计数器(IWDG_PR)和重载值(IWDG_RLR)来配置看门狗定时器。这里以STM32F103为例,设置看门狗定时器时钟为40KHz,重载值为625,则看门狗定时器的定时时间为625/40KHz=15.625ms。 ```c RCC->APB1ENR |= RCC_APB1ENR_IWDGEN; // 使能看门狗时钟 IWDG->KR = 0x5555; // 开始寄存器操作 IWDG->PR = 4; // 分频系数为256,时钟为40KHz IWDG->RLR = 625; // 设置重载值,定时时间为15.625ms IWDG->KR = 0xAAAA; // 操作完成 ``` 2. 喂狗 在程序正常运行时,需要定期喂狗,以避免看门狗的复位。喂狗的方法是向看门狗喂狗寄存器(IWDG_KR)写入0xAAAA,然后再写入0x5555。 ```c IWDG->KR = 0xAAAA; // 喂狗 IWDG->KR = 0x5555; ``` 3. 启动看门狗 配置好看门狗定时器和喂狗后,需要启动看门狗,使其开始工作。启动看门狗的方法是向看门狗控制寄存器(IWDG_KR)写入0xCCCC。 ```c IWDG->KR = 0xCCCC; // 启动看门狗 ``` 4. 处理看门狗超时复位 在程序运行过程中,需要处理看门狗超时复位,以避免程序出现死循环或挂起等异常情况。当看门狗定时器到达重载值时,会自动触发复位,导致系统重启。程序需要在重启后重新初始化系统,并处理异常情况。 ```c if (RCC->CSR & RCC_CSR_IWDGRSTF) { // 判断是否是看门狗复位 RCC->CSR |= RCC_CSR_RMVF; // 清除复位标志位 // 处理异常情况 ... } ``` 以上就是STM32看门狗的使用步骤。需要注意的是,在配置看门狗时,要确保看门狗的定时时间足够长,以保证程序能够正常运行。另外,在程序中也要定期喂狗,以避免看门狗的复位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值