历史上的今天
今天是:2025年01月15日(星期三)
2019年01月15日 | STM32独立看门狗IWDG的使用
2019-01-15 来源:eefocus
一、定义
按照STM32参考手册的说法:“独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。”
简单的说,STM32 中的IWDG 其核心就是一个12bits的向下递减的计数器,当计数器计数到零时就会触发系统复位。因此,要在每次计数到零之前将其复位到一个初始值。这个初始值就在重装载寄存器(IWDG_RLR)中存放,其默认值为0xFFF,我们也可以将其改为其他值。
二、初始化
时钟来源: 内部的40KHz的时钟,与系统时钟无关!
如下所示:
这里的fsoc才是IWDG真正的时钟!(IWDG_Prescaler_XX指的是XX分频)。
IWDG的重载值寄存器:RLR 是一个16位的寄存器,只有低12bit可以使用,其他的保留!所以重载值最大是0xFFF 也就是从IWDG最大从0xFFF减到0 然后如果没有喂狗就会引起系统软件复位!
所以定时时间Time可以如下计算:
Time = (XX /(40*10^3))*Val(RLR) (s)
XX表示40KHz的分频!
void IWDG_Configuration(void)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //允许写IWDG
IWDG_SetPrescaler(IWDG_Prescaler_64); //设置分频
IWDG_SetReload(1250); //设置Reload
IWDG_ReloadCounter();//重载值
IWDG_Enable();//时能IDWG
}
Time = (64/(40*10^3))*1250 =2s
注意在程序里面要手动喂狗!喂狗代码如下:
void IWDG_Feed(void)
{
IWDG_ReloadCounter();
}
如果大于2S不喂狗就会复位了!
上一篇:stm32的存储器结构
史海拾趣
|
学习单片机,汇编,C语言是基础。我和大家一起学习汇编,希望刚开始学习的,即将学习的,以及有兴趣学习的同学们,同仁们,同志们共同分享,共同进步!汇编编程代码100例 有要的下载吧… 查看全部问答> |
|
Quartusll 中的ip_toolbench如何用命令行控制啊 就是不用GUI界面,和用命令行控制quartusll编译工程一样~~~ 不过quartus用命令行编译有帮助文档,已经搞定了。但这个玩意没有帮助文档~~~知道了兄弟支个招~~~ 主要是做项目有需要,不然谁无聊研究这个~~~… 查看全部问答> |
|
第0章 现代通信系统 绪论 6页 0.2M PPT版.ppt 第1章 高频小信号谐振放大器 57页 6.9M PPT版.ppt 第2章 高频调谐功率放大器 44页 2.2M PPT版.ppt 第3章 正弦波振荡器 39页 2.3M PPT版.ppt 第4章 频率变换电路基础 38页 1.5M PPT版 .ppt 第5章 ...… 查看全部问答> |
|
请问下我照着《EVC高级编程及其应用开发》的串口通信类,然后在对话框中加入一个打开串口和写串口的按钮,打开串口成功,但是写串口的时候会出问题,应该是在WriteThreadFunc函数中,也就是写线程,运行一段时间后会出现Unhandled exception at 0x0 ...… 查看全部问答> |
|
哪有windows下的驱动程序开发,或串口\usb通讯,或工业控制方面的软件开发培训?vc vb dephi等皆可,要求时间较长,能学彻底的。 哪有windows下的驱动程序开发,或串口\\usb通讯,或工业控制方面的软件开发培训?vc vb dephi等皆可,要求时间较长,能学彻底的。 … 查看全部问答> |




