STM32 看门狗

WDG简介

        程序设计的漏洞必须要对可以预知的漏洞提前想好对策和解决方法,最后实在不行了才用看门狗作为最后的杀手锏。

        独立看门狗:看门狗的时钟是专用的LSI,内部低速时钟,主时钟出现问题了,看门狗也可以工作。只有一个最晚的喂狗时间界限。当程序卡死在喂狗的程序,或者跑飞的时候也依然执行了喂狗的代码,这样就无法检测到了。

        窗口看门狗:有一个最早的时间界限和一个最晚的时间界限,必须在这个界限之内喂狗。窗口看门狗使用的是APB1的时钟。

        看门狗开启之后就不可以再关闭了。

独立看门狗框图

类比定时器的时基单元。

预分频寄存器可以用来设置IWDG_PR可以配置分频系数,重装载寄存器可以自动地重装,上面地寄存器位于1.8V供电区,下面地主要部分位于VDD供电区。

IWDG键寄存器

IWDG超时时间

TLSI = 1/40 = 0.025ms

窗口看门狗

最高位T6用作溢出标志位,T6 = 1时表示计数器没有溢出,T6等于0时,表示计数器溢出。WDGA,是窗口看门狗的激活位,WDGA = 1,启用窗口看门狗;PCLK1进来之后会执行一个固定的4096分频。

WWDG工作特性

WWDG超时时间

两种看门狗的对比

  • 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、付费专栏及课程。

余额充值