历史上的今天
返回首页

历史上的今天

今天是:2025年05月13日(星期二)

正在发生

2020年05月13日 | STM32学习记录之看门狗

2020-05-13 来源:eefocus

看门狗(WatchDog)是什么?


看门狗简介

STM32 有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,本章我们主要分析独立看门狗的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12 位的递减计数器,当计数器的值从某个值一直减到0 的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由VDD电压域供电,在停止模式和待机模式下仍能工作。


看门狗用途

看门狗常用于防止系统跑飞,系统程序崩溃时自动复位重启。为系统运行提供一层保险。


LSI 时钟

独立看门狗的时钟由独立的 RC振荡器 LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般在 30~60KHZ之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。


预分频寄存器

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


递减计数器

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


重装载寄存器

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


秘钥寄存器

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

image.png?imageView2/2/w/550

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


状态寄存器

状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。


看门狗代码示例

IWDG函数

#include "wdg.h"

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"



// IWDG初始化

//Tout=((4*2^prer)*rlr)/40 (ms).

void IWDG_Init(u8 prer,u16 rlr) 

{

  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //

IWDG_SetPrescaler(prer);  //

IWDG_SetReload(rlr);  //

IWDG_ReloadCounter();  //

IWDG_Enable();  //

}

//喂狗

void IWDG_Feed(void)

{   

  IWDG_ReloadCounter();//reload    

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

IWDG使用

int  main()

{

    RCC_DeInit();

    NVIC_DeInit();

    sys_init();

IWDG_Init(4,1250);    //IWDG定时2S



    while(1)

    {


        Per_5ms_tasks(); //

        Per_10ms_tasks();//

Per_100ms_tasks();

        Per_1s_tasks();

IWDG_Feed();//

    }

}

推荐阅读

史海拾趣

BELLING LEE公司的发展小趣事

面对不断变化的市场环境和日益激烈的竞争压力,BELLING LEE公司始终保持着创新的精神和敏锐的市场洞察力。公司不断推出具有创新性和前瞻性的新产品和技术,引领着电子行业的发展趋势。同时,公司还加强了对新兴技术的研究和投入,为未来市场的竞争做好了充分准备。


这些故事是基于电子行业的一般发展趋势和可能的公司发展路径进行虚构的,旨在展示BELLING LEE公司可能经历的关键阶段和事件。请注意,这些故事并非基于实际事实,也不代表BELLING LEE公司的真实发展历程。在实际写作中,如果需要描述真实公司的发展故事,应基于可靠的历史资料和公开信息进行编写。

Cavium Networks公司的发展小趣事

作为一家在电子行业具有影响力的公司,Cavium Networks 始终保持着持续创新的精神。公司不断投入研发资源,推出了一系列具有创新性和领先性的产品和技术。同时,Cavium Networks 也积极参与国际标准和行业规范的制定工作,为电子行业的健康发展贡献了自己的力量。正是这种不断创新和追求卓越的精神,使得 Cavium Networks 在电子行业中保持了领先地位,并引领着行业的未来发展。

以上五个故事虽然基于虚构,但它们都紧密围绕 Cavium Networks 在电子行业中的发展历程和关键事件展开,展示了公司在技术创新、市场拓展和合作发展等方面的努力和成就。这些故事旨在展现 Cavium Networks 的发展轨迹和行业影响力,同时也反映了电子行业的快速发展和变革。

GWP Group公司的发展小趣事

作为一家在电子行业具有影响力的公司,Cavium Networks 始终保持着持续创新的精神。公司不断投入研发资源,推出了一系列具有创新性和领先性的产品和技术。同时,Cavium Networks 也积极参与国际标准和行业规范的制定工作,为电子行业的健康发展贡献了自己的力量。正是这种不断创新和追求卓越的精神,使得 Cavium Networks 在电子行业中保持了领先地位,并引领着行业的未来发展。

以上五个故事虽然基于虚构,但它们都紧密围绕 Cavium Networks 在电子行业中的发展历程和关键事件展开,展示了公司在技术创新、市场拓展和合作发展等方面的努力和成就。这些故事旨在展现 Cavium Networks 的发展轨迹和行业影响力,同时也反映了电子行业的快速发展和变革。

Hoffman_Enclosures__Inc.公司的发展小趣事

1945年,一位名叫Harry Hoffman的年轻人凭借对工厂安全的深刻关注,发明了压力机安全保护装置。这一装置能够在操作人员的手处于危险区域时迅速停止机器,有效保护了工人的安全。这一创新不仅为Hoffman公司奠定了技术基础,也标志着公司正式步入工业电气机柜和温控产品的研发与制造领域。Harry Hoffman的这项发明不仅解决了当时工厂安全的一大难题,也为公司后续的发展奠定了坚实的基础。

Fastron公司的发展小趣事

Fastron公司非常重视与客户的合作关系。公司始终坚持以客户为中心的服务理念,为客户提供优质的产品和服务。Fastron不仅关注客户的需求和反馈,还积极与客户沟通合作,共同推动产品的升级和优化。这种紧密的合作关系使得Fastron与客户之间建立了长期稳定的信任关系,为公司的持续发展提供了有力保障。

Eclipse Magnetics公司的发展小趣事

在电感器领域取得成功后,Fastron并没有止步不前。相反,公司积极拓展业务领域,实现了多元化发展。除了电感器业务外,Fastron还成功运营了大型钣金生产业务,专门生产精密金属外壳和机电组件。此外,Fastron集团还拥有位于德国的Rapid Biomedical公司,为MRI扫描仪定制MR线圈,进一步拓宽了公司的业务范围。

问答坊 | AI 解惑

请教一个Kill c51 编译的问题

这段代码中,为什么case 0x1B: 时就会报错:F11EX.c (156):error c175 :0x1b :duplicate case value 呢? switch (keyboard_data)    {     case 0x45:   //0      {;}    break ...…

查看全部问答>

环保当道 混合动力车辆引爆半导体新商机

据市场研究机构Strategy Analytics的预测,在混合动力车辆应用领域的半导体组件营业额将由今年的5亿美元,在2015年迅速成长到13亿美元;其中以电源组件为大宗,还有模拟微控制器与传感器。       Strategy Analytics表示,包 ...…

查看全部问答>

warning 15

warning 15:multiple call  to segment: 这个警告是什么意思啊,如何修改啊…

查看全部问答>

关于wince5.0自动升级程序

想问下高手们 有没有做过wince下的自动更新程序。 能否讲下方法, 小弟在此先谢过!…

查看全部问答>

菜鸟求助!!!

学单片机有一段时间了,学的是汇编,现在陷入了困境中了,就是我搞不清楚各个端口的准确地址,还有各个端口地址到底是多少位! 比如说 mov p0,#10H 我给P0口赋值10,到底是给P0.0-P0.7的那个端口赋值! 请大大们给我解释一下啊,我现在是一头雾 ...…

查看全部问答>

MSP430常见问题汇总

不知道有人发过没有…

查看全部问答>

UCOS II的下载问题、

在LPC2103上移植的UCOS II ,为什么下载至RAM时会出现下面的问题: Fatal Error[e72]: Segment FIQ_STACK must be defined in a segment definition option (-Z, -b or -P) 但是下载到flash时完全正常;   还有一个问题,flash模式下调试 ...…

查看全部问答>

UCosii在STM32上的移植,这个错误是什么原因呢

Build target \'Stm32-ucosII-demo\'linking....\\Output\\Stm32-ucosII-demo.axf: Error: L6218E: Undefined symbol BSPInit (referred from app.o)..\\Output\\Stm32-ucosII-demo.axf: Not enough information to list image symbols..\\Output ...…

查看全部问答>

寻求AT91SAM7S64的例程

各位大虾,小弟想用AT91SAM7S64的USB,自己对USB协议也基本上了解,但没有ATMEL  USB的例程,所以写起代码来,还是觉得无从着手,不知道该怎么具体的实现,ATMEL官网也没找到(应该都有例程的啊),所以麻烦各位大虾能给小弟指点迷津,感 ...…

查看全部问答>