2019独角兽企业重金招聘Python工程师标准>>>

0 前言

    由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法正常工作,会造成整个系统陷入停滞状态,发生不可预料的后果。

1 简介

    STM32F4xx具有两个看门狗外设,均可用于检测并解决由软件错误导致的故障,当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

    独立看门狗(IWDG)由其专用的低速时钟(LSI)驱动,因此,即便在主时钟发生故障时仍然保持工作状态。窗口看门狗(WWDG)时钟由APB1时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

    LSI RC 可作为低功耗时钟源在停机和待机模式下保持运行,所以,在MCU进入停机或待机模式时,看门狗仍能正常运行,所以需要定时唤醒喂狗,否则,MCU复位重启。

    独立看门狗适用于那些需要看门狗作为一个在主程序外,能够完全独立工作,并且对时间精度要求较低的场合。窗口看门狗适合那些要求看门狗在精确计时窗口起作用的应用程序。

2 独立看门狗特性

  • 自由运行递减计数器
  • 时钟由独立RC振荡器提供(可在待机和停止模式下运行)
  • 当递减计数器值达到0x000时产生复位(如果看门狗已激活)

3 独立看门狗功能说明

    当通过对关键字寄存器(IWDG_KR)写入值0xCCCC启动独立看门狗时,计数器开始从复位值0xFFF递减计数。当计数器计数到终值(0x000)时会产生一个复位信号(IWDG复位)。

    任何时候将关键字0xAAAA写到IWDG_KR寄存器中,IWDG_RLR的值就会被重载到计数器,从而避免产生看门狗复位。

硬件看门狗
    如果通过选项字节位使能“硬件看门狗”功能,上电时将自动使能看门狗,如果在计数器计数结束前,若软件没有向关键字寄存器写入相应的值,则系统会产生复位。

关于选项字节

选项字节(字,地址0x1FFF C000)
......
USER:用户选项字节
此字节用于配置以下用能:
选择看门狗:硬件或软件
进入停机模式时产生复位事件
进入待机模式时产生复位时间
bit 7 nRST_STDBY
0:进入待机模式时产生复位
1:不产生复位
bit 6 nRST_STOP
0:进入停机模式时产生复位
1:不产生复位
bit 5 WDG_SW
0:硬件看门狗
1:软件看门狗
......

注:关于bit7和bit6的说明
1.进入待机模式时产生复位:
  此复位的使能方式是清零用户选项字节中的nRST_STDBY位。使能后,只要成功执行进入待机模式序列,MCU就将复位,而非进入待机模式。
2.进入停机模式时产生复位:
  此复位的使能方式是清零用户选项字节中的nRST_STOP位。使能后,只要成功执行进入停止模式序列,MCU就将复位,而非进入待机模式。

32kHz(LSI)频率条件下IWDG超时周期的最小值/最大值

预分频器 PR[2:0]位 最短超时(ms)
RL[11:0] = 0x000
最长超时(ms)
RL[11:0] = 0xFFF
/4 0 0.125 512
/8 1 0.25 1024
/16 2 0.5 2048
/32 3 1 4096
/64 4 2 8192
/128 5 4 16384
/256 6 8 32768

4 IWDG寄存器

  1. 关键字寄存器(IWDG_KR)
    Key register

    位31:16 保留,必须保持复位值。
    位15:0 KEY[15:0]:键值(Key value)(只写位,读为0000h)
            必须每个一段时间便通过软件对这些位写入键值AAAAh,否则当计数器计数到0时,看门狗会产生复位。
            写入键值5555h可使能对IWDG_PR和IWDG_RLR寄存器的访问
            写入键值CCCCh可启动看门狗(选中硬件看门狗选项的情况除外)
  2. 预分频寄存器(IWDG_PR)
    Prescaler register
    位31:3 保留,必须保持复位值。
    位2:0 PR[2:0]: 预分频器(Prescaler divider)
        这些位受写访问保护,通过设置这些位来选择计数器始终的预分频因子,若要更改预分频器的分频系数,IWDG_SR的PVU位必须为0。
        000:4分频
        001:8分频
        010:16分频
        011:32分频
        100:64分频
        101:128分频
        110:256分频
        111:256分频
  3. 重载寄存器(IWDG_RLR)
    Reload register
    位31:12 保留,必须保持复位值。
    位11:0 RL[11:0]:看门狗计数器重载值(Watchdog counter reload value)
        这些位受写访问保护,每次对IWDG_KR寄存器写入值AAAAh时,这个值就会重装载到看门狗计数器中,之后,看门狗计数器便从该装载的值开始递减计数。若要更改重载值,IWDG_SR中的RVU位必须为0。
  4. 状态寄存器(IWDG_SR)
    Status register
    位31:2 保留,必须保持复位值。
    位1 RVU:看门狗计数器重载值更新(Watchdog counter reload value update)
        通过硬件将该位置1以指示重载值正在更新,只有在RVU位为0时才可更新。
    位0 PVU:看门狗预分频器值更新(Watchdog prescaler value update)
        通过硬件将该位置1以指示预分频器值正在更新,只有在PVU位为0时才可更新。

5 代码实现

/*IWDG看门狗初始化*/
void IWDTDOG_Init(void)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_256);IWDG_SetReload((u16)(SYSWDG_TIMEOUT * 1000 /6.4 + 0.5));IWDG_ReloadCounter();
}/*使能IWDG看门狗*/
void IWDG_Enable(void)
{IWDG->KR = KR_KEY_ENABLE;
}/*使能对IWDG_PR和IWDG_RLR寄存器的写访问*/
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)
{assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess));IWDG->KR = IWDG_WriteAccess;
}/*设置IWDG预分频器的值*/
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler)
{assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler));IWDG->PR = IWDG_Prescaler;
}/*设置IWDG的重载值*/
void IWDG_SetReload(uint16_t Reload)
{assert_param(IS_IWDG_RELOAD(Reload));IWDG->RLR = Reload;
}/*将Reload register的值重新加载IWDG计数器,喂狗操作*/
void IWDG_ReloadCounter(void)
{IWDG->KR = KR_KEY_RELOAD;
}

至此,IWDG看门狗已经初始化完毕,并开启,需要调用IWDG_ReloadCounter()定时喂狗。

6 题外话

    STM32F系列的MCU看门狗开启之后是关闭不了的,所以在进入待机和停机之后,需要定时唤醒去喂狗,喂狗的时间很短,与ST确认,STM32LXXX和STM8系列,可以在进入待机和停机之前通过用户选线字节冻结看门狗。

文章参考资料:
《STM32F4xx中文参考手册》
《STM32F4xx Reference manual》

转载于:https://my.oschina.net/u/4060728/blog/3047616

STM32系列 STM32F4xx 独立看门狗(IWDG)相关推荐

  1. STM32F103五分钟入门系列(十三)独立看门狗IWDG

    参考:STM32F103五分钟入门系列(十三)独立看门狗IWDG 作者:自信且爱笑' 发布时间:2021-07-31 19:50:28 网址:https://blog.csdn.net/Curnane ...

  2. [STM32 ]内部独立看门狗IWDG

    看门狗大家应该都不陌生,STM32内部带有独立看门狗和窗口看门狗两种:其中独立看门狗依赖于内部的晶振LSI进行工作,窗口看门狗依赖于系统时钟工作: 看门狗的作用,防止程序跑飞无法实现自复位而存在:如果 ...

  3. STM32—独立看门狗(IWDG)

    STM32-独立看门狗(IWDG) 独立看门狗(IWDG) STM32-独立看门狗(IWDG) 独立看门狗(IWDG) IWDG 简介 IWDG 功能框图剖析 独立看门狗时钟 计数器 重装载寄存器 键 ...

  4. stm32专题三十四:独立看门狗 IWDG

    独立看门狗简介 IWDG结构框图 (1)独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立. LSI 的频率一般在 30~60KHZ 之间, ...

  5. STM32F1笔记(六)独立看门狗IWDG

    STM32F1内置了两个看门狗,独立看门狗IWDG和窗口看门狗WWDG,可以用来检测和解决由软件错误引起的故障. IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 ...

  6. STM32中的独立看门狗和窗口看门狗

    STM32中的独立看门狗和窗口看门狗 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况.为了避免这种情况的出现,后期的MCU都集成了看门狗的功能.但是,目前看门狗发展到今天 ...

  7. 独立看门狗IWDG详细解析

    目录 独立看门狗IWDG详细解析 为什么要有看门狗? 看门狗的定时原理 寄存器功能简介 看门狗定时器计数原理 看门狗相关寄存器 KR寄存器 PR寄存器 RLR寄存器 SR寄存器 看门狗相关基础知识 什 ...

  8. cubeIDE开发, stm32独立看门狗IWDG的CubeMX配置及HAL库底层实现分析

    一.STM32 的IWDG简介 2.1 看门狗原理 看门狗本质上就是一种计数器,和我们现实生活中一炷香现象.沙漏现象等是同理的,计数器一般有两种做法,一种是递增,超过固定阀值报警:一种是递减,通常值降 ...

  9. 从零实现 独立看门狗IWDG STM32的待机与唤醒,在待机过程中如何喂狗

    欢迎大家留言交流~ 前言: 最近在学习原子的阿波罗,进行到待机实验,实验目的是摁下KEY_UP的时候就可以让MCU从待机模式唤醒了.而KEY1在按下的时候进入休眠.(验证过程比较繁琐,只看结论的小伙伴 ...

最新文章

  1. 懂得了这些才可以说学习Python入门了
  2. 甩锅!偷懒!PUA!转嫁压力!铲除异己!压榨下属!这就是职场leader真面目!...
  3. 在VMware Workstation中安装Ubuntu设置网络连接
  4. 每日一皮:你不知道你的骑手为了给你送餐要经历什么...
  5. vs2010没有 最近使用的项目和解决方案
  6. mongodb如何快速进行版本升级
  7. 图片image和byte处理,fileupload上传图片
  8. ASP.NET性能优化小结(ASP.NETC#)(转)
  9. 应行家算法_一些行家技巧和窍门
  10. 经典公司小型局域网服务器架设方案
  11. 空间解析几何 | 经典例题、李林880例题
  12. mysql没有data文件夹
  13. SHOI 2008 仙人掌图 BZOJ 1023
  14. 跨境电商如何制定社交媒体营销策略?
  15. 查找目录下大小超过10M的文件
  16. 如何设置或关闭访客进来的铃声
  17. 系统重构的原则代码重构的原则
  18. STC15单片机读写大容量SD卡(IO口模拟SPI模式)
  19. SDL mac(event) 入门1 - 显示图像
  20. 【玩转python】python实现代替QQ邮箱发出邮件(附源码,新手也能用!)

热门文章

  1. LA 5031 图询问
  2. (zhuan) LSTM Neural Network for Time Series Prediction
  3. CSS垂直居中的11种实现方式
  4. Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”...
  5. kernel.sem信号量参数调优,以及ipcs信号量队列查询
  6. C#_LINQ(LINQ to Entities)
  7. 注重IT的全程管控 第三方监理可有效保证IT质量
  8. 横河电机修复多个工控产品漏洞,可用于破坏和操纵物理进程
  9. 苹果修复三个已遭利用的 iOS 0day
  10. 精度提升第一步:形状各异测区的像控点布设方案