STM32F103ZET6独立看门狗
1、IWDG简介
STM32F103ZET6的独立看门狗(IWDG)是由内部LSI(内部约40KHZ低速时钟)时钟驱动的。由于IWDG是由内部低速时钟驱动,所以就算主时钟发生故障,IWDG依然能够工作。
由于LSI是一个内部RC时钟,所以时钟不是很准确的40KHZ,而是在30KHZ~60KHZ之间变化的时钟,所以IWDG时间的计算并不是很准确,只能是一个大概的值。一般用40KHZ来估算。
IWDG的计数器是一个递减计数器,当IWDG被激活后,计数器开始向下递减计数,当计数器计数至0x0000时产生复位信号,使芯片复位。
当芯片处于停止和待机模式下工作时,IWDG依然继续工作。
2、IWDG工作原理
当IWDG被激活后,IWDG的计数器开始向下递减计数,当IWDG的计数器的值递减到0x000时,芯片就会复位。所以为了保证芯片正常工作,必须在IWDG的计数器的值递减到0x000之前,重新给IWDG的计数器赋值,否者芯片就会不断的复位。
必须注意的是:IWDG一旦启用,就不能在被关闭,想要关闭IWDG,只能复位,并且在复位后不能打开IWDG。
3、IWDG的配置
IWDG的寄存器并不复杂,只有IWDG_KR键值寄存器、IWDG_PR分频寄存器、IWDG_RLR重装载寄存器这3个寄存器。
IWDG_KR键值寄存器:
当向IWDG_KR寄存器写入0xCCCC后,IWDG就开始工作,IWDG的计数器从IWDG_RLR寄存器的值开始向下递减计数,当计数到0x0000时,就会产生一个复位信号。
当向IWDG_KR寄存器写入0xAAAA后,IWDG_RLR中的值就会重新加载到IWDG计数器中,从而避免IWDG产品复位信号。
需要注意的是IWDG_RLR和IWDG_PR这两个寄存器是有写保护的,当操作这两个寄存器的时候,必须先向IWDG_KR寄存器写入0x5555,之后才能操作IWDG_RLR和IWDG_PR这两个寄存器。
IWDG_PR寄存器:
IWDG_PR寄存器是IWDG的预分频寄存器。IWDG_PR寄存器可以对IWDG的时钟进行分频,分频系数从4分频到256分频。IWDG_PR寄存器只用到了低3位,PR[2:0]组成IWDG的分频系数。如下:
- PR[2:0] = 000: 4分频
- PR[2:0] = 001: 8分频
- PR[2:0] = 010: 16分频
- PR[2:0] = 011: 32分频
- PR[2:0] = 100: 64分频
- PR[2:0] = 101: 128分频
- PR[2:0] = 110: 256分频
- PR[2:0] = 111: 256分频
IWDG_RLR寄存器:
IWDG_RLR寄存器只有低12位有效,所以IWDG的计数值最大只有0xFFF。
IWDG的配置流程:
首先向IWDG_KR写入0x5555,取消IWDG_PR和IWDG_RLR的写保护;
取消写保护之后设置IWDG_PR和IWDG_RLR的值;
为了将IWDG_RLR寄存器的值加载到IWDG的计数器中,将0xAAAA的值写入IWDG_KR寄存器中。
最后将值0xCCCC写入IWDG_KR寄存器中启动IWDG。
IWDG的时间计算:
假设IWDG的预分频系数为pr,重装载值为rlr,那么IWDG的时间计算公式为:
T = ((4*2^pr)*rlr)/40000 (计算后的单位为秒)
4、HAL库操作IWDG
IWDG初始化代码如下:
void IWDG_Init(void)
{
IWDG_HandleTypeDef IWDG_Handle; IWDG_Handle.Instance = IWDG;
IWDG_Handle.Init.Prescaler = IWDG_PRESCALER_4;
IWDG_Handle.Init.Reload = 0xFFF;
HAL_IWDG_Init(&IWDG_Handle);
}
IWDG_Handle是IWDG的句柄。
IWDG_Handle.Instance = IWDG是将句柄指向外设IWDG。
IWDG_Handle.Init.Prescaler = IWDG_PRESCALER_4是设定IWDG的分频系数。
IWDG_Handle.Init.Reload = 0xFFF是设定IWDG的重装载值。
HAL_IWDG_Init(&IWDG_Handle)是将句柄传入HAL_IWDG_Init函数对IWDG进行初始化。
IWDG重新更新计数器(喂狗)代码如下:
void IWDG_CLR(void)
{
IWDG_HandleTypeDef IWDG_Handle; IWDG_Handle.Instance = IWDG; HAL_IWDG_Refresh(&IWDG_Handle);
}
将句柄参数传入HAL_IWDG_Refresh函数,HAL_IWDG_Refresh函数的作用是更新IWDG的计数值,防止IWDG的计数值计算到0x0000时产生复位信号。
STM32F103ZET6独立看门狗的更多相关文章
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- STM8S 独立看门狗配置及使用
//独立看门口的时钟来源 内部低速时钟 128khz 除以2 即64khz //选择 IWDG_Prescaler_128 //64/128 =0.5 khz 2ms周期 #define IWDG_5 ...
- STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)
一 前沿废语: 之前有很风靡的游戏,名字叫<看门狗>.该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden·Pearce(主角)是一名精通黑客技术的高手,当时 ...
- stm8的独立看门狗与窗口看门狗
STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...
- [STM31F103]独立看门狗
独立看门狗步骤: l 取消寄存器写保护: n IWDG_WriteAccessCmd(); l 设置独立看门狗的预分频系数,确定时钟: n IWDG_SetPrescaler(); l 设置看门狗重装 ...
- 【转】STM32 独立看门狗简介
STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种 ...
- STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- FreeRTOS 独立看门狗监测任务执行状态
以下转载自安富莱电子: http://forum.armfly.com/forum.php 通过前面的几个章节,我们基本已经完成了 FreeRTOS 所有功能的讲解,本章节为大家介绍一种使用独立看门狗 ...
- IWDG—独立看门狗
本章参考资料:<STM32F4XX 中文参考手册> IWDG 章节.学习本章时,配合<STM32F4XX 中文参考手册> IWDG 章节一起阅读,效果会更佳,特别是涉及到寄存器 ...
随机推荐
- 第四章、深入理解vue组件
4-1.使用组件的细节 a.使用is解决html出现bug 如下 table下面应该为tr,所以页面渲染的时候没有找到tr是有问题的,所以是有小bug,所以table中必须是tr b.改上面bug,t ...
- idea创建简单web项目分析Servlet的请求转发与重定向的区别
注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme() ...
- JAVA生成EXCEL模板
JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...
- Flask 使用pycharm 创建项目,一个简单的web 搭建
1:新建项目后 2:Flask web 项目重要的就是app 所有每个都需要app app=Flask(__name__) 3:Flask 的路径是有app.route('path')装饰决定, ...
- C++类的多态
目录 一.静态多态 二.动态多态 三.虚函数 四.纯虚函数 五.C++ 接口(抽象类) 六.应用经验 七.版权声明 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就可 ...
- 《Linux环境进程间通信》系列文章链接
深刻理解 Linux 进程间通信(IPC) http://www.ibm.com/developerworks/cn/linux/l-ipc/index.html Linux 环境进程间通信(一): ...
- 【转】分布式架构的演进(JavaWeb)
作者:李小翀 链接:https://www.zhihu.com/question/22764869/answer/31277656 来源:知乎 1.初始 初始阶段 的小型系统 应用程序.数据库.文件等 ...
- PLINQ 并行操作Linq
C#并行编程-PLINQ:声明式数据并行 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...
- docker-ce 在windows10下使用volume的注意事项
最近想搭建一套CI/CD环境尝试一下,因为手里云服务太小了(1C1G),撑不起来gitlab和jenkins.恰巧年前配了台高配版的windows机器,就想在家里的机器上通过docker装gitlab ...
- 【转】深入 ProtoBuf - 简介
之前在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf. 在查阅相关资料学习 ProtoBuf 以及研读其源码之后 ...