历史上的今天
返回首页

历史上的今天

今天是:2024年08月29日(星期四)

正在发生

2019年08月29日 | STM32F429 >> 15. IWDG_独立看门狗

2019-08-29 来源:eefocus

STM32 有两个看门狗,一个是独立看门狗,另一个是窗口看门狗


独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。


IWDG 功能框图

在这里插入图片描述


①. 独立看门狗时钟

独立看门狗的时钟由独立的 RC 振荡器 LSI 提供,即使主时钟发生故障它仍然有效。LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ。


②. 计数器时钟

递减计数器的时钟由 LSI 经过一个 8 位的预分频器得到,我们可以操作预分频器寄存器 IWDG_PR 来设置分频因子,分频因子可以是:[4,8,16,32,64,128,256,256],计数器时钟CK_CNT= 40/ (4*2^PRV)(PRV 是预分频器寄存器的值),一个计数器时钟计数器就减一。


③. 计数器

独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0 时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。


④. 重装载寄存器

重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。超时时间 Tout = (4*2^prv) / 40 * rlv (s) ,prv 是预分频器寄存器的值,rlv 是重装载寄存器的值。


⑤. 关键字(密钥)寄存器

键寄存器 IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。


键值 键值作用

0xAAAA 把RLR 的值重装载到CNT

0x5555 PR 和RLR 这两个寄存器可写

0xCCCC 启动IWDG

通过写往键寄存器写 0XCCC 来启动看门狗是属于软件启动的方式,一旦独立看门狗启动,它就关不掉,只有复位才能关掉。


⑥. 状态寄存器

状态寄存器 SR 只有位 0:PVU 和位 1:RVU 有效,这两位只能由硬件操作,软件操作不了。


RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。

PVU: 看门狗预分频值更新,硬件置‘1‘指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。

所以只有当 RVU/PVU 等于 0 的时候才可以更新重装载寄存器/预分频寄存器。


独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这个段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序 50ms 多一点,如果超过 60ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。


由于看门狗属于单片机内部资源,并且配置非常简单,故程序也非常简短,其初始化程序为:


bsp_iwdg.c

/**

  ******************************************************************************

  * @file    bsp_iwdg.c

  * @author  Waao

  * @version V1.0.0

  * @date    15-Feb-2019

  * @brief   This file contains some board support package's functions for the IWDG.

  *            

  ******************************************************************************

  * @attention

  *

  * None

*

  ******************************************************************************

  */


#include "bsp_iwdg.h"



/**

  * @brief  Configure the IWDG and enable it.

  * @param  None  

  * @retval None

  */

void iwdg_Config(void)

{

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(IWDG_Prescaler_32);

IWDG_SetReload(0xFFF);

IWDG_Enable();

}


我的程序中使用按键触发中断喂狗:


stm32f4xx_it.c

void KEY1_IRQHandler(void)

{

LED_GREEN;

IWDG_ReloadCounter();

EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);

}


在该程序中,每次按下按键都可以喂狗,使计数器重新开始计数,否则计数器为零时程序将重启(复位)


推荐阅读

史海拾趣

Franel Corp公司的发展小趣事

法勒公司始终将技术创新视为企业发展的核心驱动力。在中国市场,法勒不断推出适应本土需求的新产品和解决方案,如非接触供电系统、智能故障诊断系统等。这些创新技术不仅提升了物流设备的智能化水平,还为客户带来了更高的效率和更低的运行成本。法勒的技术创新不仅赢得了市场的广泛认可,也推动了整个物流装备行业的技术进步和产业升级。

Coherent Inc公司的发展小趣事

Coherent Inc.在激光技术领域取得了多项技术突破,如固态激光器、半导体激光器、气体激光器、飞秒激光器等。这些技术的突破不仅提升了公司的产品性能和质量,也使其在行业中处于领先地位。公司的产品广泛应用于科学研究、工业制造、医疗诊断和治疗、通信等领域,为这些领域的发展做出了重要贡献。

Cortina Systems Inc公司的发展小趣事

1966年,Coherent Inc.由一群斯坦福大学的研究人员共同创立,其中包括物理学家James Hobart。初创时期的公司致力于激光技术的研究和开发,逐渐积累起了丰富的技术底蕴。这种对技术的执着追求和不断探索,为公司的后续发展奠定了坚实的基础。

Diconex公司的发展小趣事

在电子行业的激烈竞争中,Diconex公司凭借其卓越的技术创新能力脱颖而出。公司成立之初,便专注于研发高性能、低能耗的半导体芯片。通过不断的研发投入和团队努力,Diconex成功推出了一系列具有行业领先水平的产品,赢得了客户的广泛认可。随着技术的不断升级和市场需求的不断增长,Diconex逐渐在电子行业占据了一席之地。

Chemi-Con公司的发展小趣事

Chemi-Con公司的历史可以追溯到XXXX年,当时铝电解电容器在日本首次成功实现产品化。这不仅是电子行业的一个里程碑,也是Chemi-Con公司传奇故事的起点。公司创始人凭借对技术的深刻理解和市场的前瞻性,敏锐地捕捉到了铝电解电容器的巨大潜力,并决定将其作为公司的主营业务。在创业初期,Chemi-Con面临着资金、技术和市场等多方面的挑战,但创始人凭借着坚定的信念和不懈的努力,带领公司逐步攻克难关,奠定了在铝电解电容器领域的领先地位。

AXSEM公司的发展小趣事

随着电子行业的快速发展,Chemi-Con公司不断加大对研发的投入,致力于技术创新和产品升级。公司研发团队在铝电解电容器的基础上,不断推出性能更优、体积更小、寿命更长的产品,满足了市场对于高效、可靠电容器的迫切需求。此外,Chemi-Con还积极拓展产品线,涉足了多层陶瓷电容器、薄膜电容器等多个领域,为客户提供更加丰富的选择。

问答坊 | AI 解惑

自适应无线电提高无线连接的频谱利用效率

现在的无线通信依赖大量的独立设备,每种设备都有自己的协议并在一个固定的频段上工作。因为这些设备彼此不能通信,所以它们一起创造的无线环境工作效率非常低。此外,每种设备的发射和接收都有可能对其它设备产生干扰,尤其是当高功率发射器与高灵 ...…

查看全部问答>

我来聊聊模电学习的两个重点

凡是学电的,总是避不开模电。     上学时老师教的知识,毕业时统统还给老师。毕业后又要从事产品设计,《模电》拿起又放下了 n 次,躲不开啊。毕业多年后,回头望,聊聊模电的学习,但愿对学弟学妹有点帮助。     通观整本 ...…

查看全部问答>

LINUX操作系统下MC55的问题

S3C2410上有两个串囗,一个接了超级终端,一个接了MC55,在S3C2410装了一个LINUX系统,如何在超级终端上操作MC55,我那个MC55模块没有串囗接囗的,MC55串囗只有接了S3C2410的一个串囗,请问能在LINUX系统下用超级终端直接操作MC55吗…

查看全部问答>

windows mobile 6.0上开发一个蓝牙程序

大家好,我是一个菜鸟。导师让我做一个在windows mobile 6.0 上开发一个蓝牙程序。只需要能搜到设备,传输文件即可。我在vs2005上的模拟器上看到有蓝牙,那个到底该怎么用呀?我电脑上面需要安装什么蓝牙驱动呀?…

查看全部问答>

CE5.0下线程优先级

我做一个键盘鼠标驱动,开了一个线程采集数据.在CPU不忙时能几个毫秒采集一次,CPU很忙时,特别是打开media play进,采集间隔一下子就变成了几十毫秒.我的线程优先级用cesetthreadpriority曾经提到过0,还是不起作用,不知道还需要设置什么? 各位帮帮忙, ...…

查看全部问答>

Wavecom猫在Windows自带的超级终端可正常发送短信,可使用串口编程方式发送短信时失败?为啥??

Wavecom猫在Windows自带的超级终端可正常发送短信,可使用串口编程方式发送短信时失败?为啥??我试验了好几天了,每次用Windows自带的超级终端就可以,一旦换到用Vc++串口编程方式就失败。用PortMan监视数据也没找到失败的原因?有做过碰到过钉子 ...…

查看全部问答>

一起来讨论一下.关于embeded 的设计 开发问题.

嗯.欢迎大家以来来讨论.或者给我一些建议. 我现在准备做一个激光器的项目.医疗用的那种.以前不是写的很多.现在正在research阶段. GUI 我倒是写过一些.之前用uc/gui,不过我个人认为有的东西uc/gui实现有的时候有些麻烦.而且这次我需要最少7种语言的 ...…

查看全部问答>

watch window为什么不能看变量

程序是汇编语言,为什么添加变量到watch window总是说没有定义呢? 是不是只能看c语言的变量?…

查看全部问答>

C2000晒晒 + Piccolo MCU experimenter kits 外加大量资料下载!

不多说,看图!东西是前段时间买的,最近一直忙别的,这个还是没开封的呢!同时也买了个350W通信电源,准备把它改成数控的。就用C2000控制!顺便给大家提供些资料,共同学习! [ 本帖最后由 phimas 于 2011-11-25 22:16 编辑 ]…

查看全部问答>

ti c2000与c2400的关系

大家好,小弟有个白痴级问题,ti的c2000系列与c2400以及2800有什么关系?如果ucosii移植到c2400的版本,能直接在c2000系列的tms320f28069芯片上运行吗?谢谢各位大牛!!!…

查看全部问答>