STM32系列 STM32F4xx 独立看门狗(IWDG)
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寄存器
- 关键字寄存器(IWDG_KR)
Key register
位31:16 保留,必须保持复位值。
位15:0 KEY[15:0]:键值(Key value)(只写位,读为0000h)
必须每个一段时间便通过软件对这些位写入键值AAAAh,否则当计数器计数到0时,看门狗会产生复位。
写入键值5555h可使能对IWDG_PR和IWDG_RLR寄存器的访问
写入键值CCCCh可启动看门狗(选中硬件看门狗选项的情况除外) - 预分频寄存器(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分频 - 重载寄存器(IWDG_RLR)
Reload register
位31:12 保留,必须保持复位值。
位11:0 RL[11:0]:看门狗计数器重载值(Watchdog counter reload value)
这些位受写访问保护,每次对IWDG_KR寄存器写入值AAAAh时,这个值就会重装载到看门狗计数器中,之后,看门狗计数器便从该装载的值开始递减计数。若要更改重载值,IWDG_SR中的RVU位必须为0。 - 状态寄存器(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)相关推荐
- STM32F103五分钟入门系列(十三)独立看门狗IWDG
参考:STM32F103五分钟入门系列(十三)独立看门狗IWDG 作者:自信且爱笑' 发布时间:2021-07-31 19:50:28 网址:https://blog.csdn.net/Curnane ...
- [STM32 ]内部独立看门狗IWDG
看门狗大家应该都不陌生,STM32内部带有独立看门狗和窗口看门狗两种:其中独立看门狗依赖于内部的晶振LSI进行工作,窗口看门狗依赖于系统时钟工作: 看门狗的作用,防止程序跑飞无法实现自复位而存在:如果 ...
- STM32—独立看门狗(IWDG)
STM32-独立看门狗(IWDG) 独立看门狗(IWDG) STM32-独立看门狗(IWDG) 独立看门狗(IWDG) IWDG 简介 IWDG 功能框图剖析 独立看门狗时钟 计数器 重装载寄存器 键 ...
- stm32专题三十四:独立看门狗 IWDG
独立看门狗简介 IWDG结构框图 (1)独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立. LSI 的频率一般在 30~60KHZ 之间, ...
- STM32F1笔记(六)独立看门狗IWDG
STM32F1内置了两个看门狗,独立看门狗IWDG和窗口看门狗WWDG,可以用来检测和解决由软件错误引起的故障. IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 ...
- STM32中的独立看门狗和窗口看门狗
STM32中的独立看门狗和窗口看门狗 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况.为了避免这种情况的出现,后期的MCU都集成了看门狗的功能.但是,目前看门狗发展到今天 ...
- 独立看门狗IWDG详细解析
目录 独立看门狗IWDG详细解析 为什么要有看门狗? 看门狗的定时原理 寄存器功能简介 看门狗定时器计数原理 看门狗相关寄存器 KR寄存器 PR寄存器 RLR寄存器 SR寄存器 看门狗相关基础知识 什 ...
- cubeIDE开发, stm32独立看门狗IWDG的CubeMX配置及HAL库底层实现分析
一.STM32 的IWDG简介 2.1 看门狗原理 看门狗本质上就是一种计数器,和我们现实生活中一炷香现象.沙漏现象等是同理的,计数器一般有两种做法,一种是递增,超过固定阀值报警:一种是递减,通常值降 ...
- 从零实现 独立看门狗IWDG STM32的待机与唤醒,在待机过程中如何喂狗
欢迎大家留言交流~ 前言: 最近在学习原子的阿波罗,进行到待机实验,实验目的是摁下KEY_UP的时候就可以让MCU从待机模式唤醒了.而KEY1在按下的时候进入休眠.(验证过程比较繁琐,只看结论的小伙伴 ...
最新文章
- 懂得了这些才可以说学习Python入门了
- 甩锅!偷懒!PUA!转嫁压力!铲除异己!压榨下属!这就是职场leader真面目!...
- 在VMware Workstation中安装Ubuntu设置网络连接
- 每日一皮:你不知道你的骑手为了给你送餐要经历什么...
- vs2010没有 最近使用的项目和解决方案
- mongodb如何快速进行版本升级
- 图片image和byte处理,fileupload上传图片
- ASP.NET性能优化小结(ASP.NETC#)(转)
- 应行家算法_一些行家技巧和窍门
- 经典公司小型局域网服务器架设方案
- 空间解析几何 | 经典例题、李林880例题
- mysql没有data文件夹
- SHOI 2008 仙人掌图 BZOJ 1023
- 跨境电商如何制定社交媒体营销策略?
- 查找目录下大小超过10M的文件
- 如何设置或关闭访客进来的铃声
- 系统重构的原则代码重构的原则
- STC15单片机读写大容量SD卡(IO口模拟SPI模式)
- SDL mac(event) 入门1 - 显示图像
- 【玩转python】python实现代替QQ邮箱发出邮件(附源码,新手也能用!)
热门文章
- LA 5031 图询问
- (zhuan) LSTM Neural Network for Time Series Prediction
- CSS垂直居中的11种实现方式
- Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”...
- kernel.sem信号量参数调优,以及ipcs信号量队列查询
- C#_LINQ(LINQ to Entities)
- 注重IT的全程管控 第三方监理可有效保证IT质量
- 横河电机修复多个工控产品漏洞,可用于破坏和操纵物理进程
- 苹果修复三个已遭利用的 iOS 0day
- 精度提升第一步:形状各异测区的像控点布设方案