历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2019年04月16日 | stm32F4XX之窗口看门狗 HAL库

2019-04-16 来源:eefocus

首先讲一下独立看门狗和窗口看门狗之间的区别。


独立看门狗Iwdg——独立于系统之外,因为有独立时钟,一般是外部低速时钟。主要用于监视硬件错误。


窗口看门狗wwdg——系统内部的故障探测器,采用内部RCC时钟,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误


1)独立看门狗没有中断,窗口看门狗有中断


2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制


3)独立看门狗只有下限,窗口看门狗又下限和上限


4)独立看门狗是12位递减的。窗口看门狗是7位递减的


5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟APB1ENR(系统时钟要是挂了就完了)


总结起来的区别点大致有如下几点


1:时钟软不同


2:是否产生中断


3:监视功能分工不同


4:喂狗限制不同


接下来我们一起看一下窗口看门狗的相关内容。


1:简介

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位变成 0 前被刷新,看门狗电路在 达到预置的时间周期时,会产生一个 MCU 复位。如果在递减计数器达到窗口寄存器值之前 刷新控制寄存器中的 7 位递减计数器值,也会产生 MCU 复位。这意味着必须在限定的时间 窗口内刷新计数器。


2:主要特性

● 可编程的自由运行递减计数器

● 复位条件

— 当递减计数器值小于 0x40 时复位(如果看门狗已激活)

— 在窗口之外重载递减计数器时复位(如果看门狗已激活)

● 提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)


3:功能说明

如果激活看门狗(WWDG_CR 寄存器中的 WDGA 位置 1),则当 7 位递减计数器(T[6:0] 位)从 0x40 滚动到 0x3F(T6 已清零)时会引发复位。当计数器值大于窗口寄存器中所存 储的值时,如果软件重载计数器,则会产生复位。

应用程序在正常运行过程中必须定期地写入 WWDG_CR 寄存器以防止 MCU 发生复位。只 有当计数器值低于窗口寄存器值时,才能执行此操作。存储在 WWDG_CR 寄存器中的值必 须介于 0xFF 和 0xC0 之间。在系统复位后,看门狗总是处于关闭状态。可通过设置 WWDG_CR 寄存器中的 WDGA 位 来使能看门狗,之后除非执行复位操作,否则不能再次关闭。


递减计数器处于自由运行状态:即使禁止看门狗,递减计数器仍继续递减计数。当使能看门狗时,必须将 T6 位置 1,以防止立即复位。T[5:0] 位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大 值之间变化,这是因为写入 WWDG_CR 寄存器时,预分频值是未知的。配 置寄存器 (WWDG_CFR) 包含窗口的上限:为防止发生复位


如果在产生实际复位之前必须执行特定的安全操作或数据记录,则可使用提前唤醒中断(EWI)。通过设置 WWDG_CFR 寄存器中的 EWI 位使能 EWI 中断。当递减计数器的值为0x40 时,将生成 EWI 中断。在复位器件之前,可以使用相应的中断服务程序 (ISR) 来触发特定操作(例如通信或数据记录)。在某些应用中,可以使用 EWI 中断来管理软件系统检查和/或系统恢复/功能退化,而不会生 成 WWDG 复位。在这种情况下,相应的中断服务程序 (ISR) 可用来重载 WWDG 计数器以 避免 WWDG 复位,然后再触发所需操作。通过将 0 写入 WWDG_SR 寄存器中的 EWIF 位来清除 EWI 中断。

上图中T[6:0]就是 WWDG_CR 的低七位,W[6:0]即是 WWDG->CFR 的低七位。T[6:0]就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值窗口值大于 0X40,否则窗口就不存在了。

窗口看门狗的超时公式如下:

Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;


其中:

Twwdg:WWDG 超时时间(单位为 ms)

Fpclk1:APB1 的时钟频率(单位为 Khz)

WDGTB:WWDG 的预分频系数

T[5:0]:窗口看门狗的计数器低 6 位


根据上面的公式,假设 Fpclk1=45Mhz,那么可以得到最小-最大超时时间表如表 11.1.1 所示


 

4:寄存器描述


可以看出,这里我们的 WWDG_CR 只有低八位有效,T[6:0]用来存储看门狗的计数器值,随时更新的,每个窗口看门狗计数周期(4096×2^ WDGTB)减 1。当该计数器的值从 0X40 变为 0X3F 的时候,将产生看门狗复位。WDGA 位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。


窗口看门狗的第二个寄存器是配置寄存器(WWDG_CFR),该寄存器的各位及其描述如下图所示

该位中的 EWI 是提前唤醒中断,也就是在快要产生复位的前一段时间(T[6:0]=0X40)来提醒我们,需要进行喂狗了,否则将复位!因此,我们一般用该位来设置中断,当窗口看门狗的计数器值减到 0X40 的时候,如果该位设置,并开启了中断,则会产生中断,我们可以在中断里面向 WWDG_CR 重新写入计数器的值,来达到喂狗的目的。注意这里在进入中断后,必须在不大于 1 个窗口看门狗计数周期的时间(在 PCLK1 频率为 42M 且 WDGTB 为 0 的条件下,该时间为 97.52us)内重新写 WWDG_CR,否则,看门狗将产生复位!


最后我们要介绍的是状态寄存器(WWDG_SR),该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1。它必须通过软件写 0 来清除。对此位写 1 无效。即使中断未被使能,在计数器的值达到 0X40的时候,此位也会被置 1。

最后附上相关代码


WWDG_HandleTypeDef WWDG_Handler;     //窗口看门狗句柄

 

//保存WWDG计数器的设置值,默认为最大

u8 WWDG_CNT=0X7F;

 

 

//初始化窗口看门狗

//tr   :T[6:0],计数器值 

//wr   :W[6:0],窗口值 

//fprer:分频系数(WDGTB),仅最低2位有效 

//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=45Mhz

void WWDG_Init(u8 tr,u8 wr,u32 fprer)

{

    WWDG_Handler.Instance=WWDG;

    WWDG_Handler.Init.Prescaler=fprer;   //设置分频系数

    WWDG_Handler.Init.Window=wr;         //设置窗口值

    WWDG_Handler.Init.Counter=tr;        //设置计数器值

    HAL_WWDG_Init(&WWDG_Handler);        //初始化WWDG

    HAL_WWDG_Start_IT(&WWDG_Handler);    //开启窗口看门狗  

}

 

 

 

//WWDG底层驱动,时钟配置,中断配置

//此函数会被HAL_WWDG_Init()调用

//hwwdg:窗口看门狗句柄

void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)

{   

    __HAL_RCC_WWDG_CLK_ENABLE();    //使能窗口看门狗时钟

        

    HAL_NVIC_SetPriority(WWDG_IRQn,2,3);    //抢占优先级2,子优先级为3

    HAL_NVIC_EnableIRQ(WWDG_IRQn);          //使能窗口看门狗中断

}

 

 

 

//窗口看门狗中断服务函数

void WWDG_IRQHandler(void)

{

    HAL_WWDG_IRQHandler(&WWDG_Handler);//调用WWDG共用中断处理函数

}

 

 

 

//中断服务函数处理过程

//此函数会被HAL_WWDG_IRQHandler()调用

void HAL_WWDG_WakeupCallback(WWDG_HandleTypeDef* hwwdg)

{

    HAL_WWDG_Refresh(&WWDG_Handler,WWDG_CNT);//更新窗口看门狗值

    LED1=!LED1; 

}

推荐阅读

史海拾趣

Diodes公司的发展小趣事

在竞争激烈的电子行业中,合作共赢是企业发展的重要途径。Diodes公司始终坚持合作共赢的理念,与众多上下游企业建立了紧密的合作关系。例如,在供应链方面,Diodes与多家原材料供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量保障;在销售方面,Diodes与多家分销商建立了战略合作伙伴关系,共同开拓市场、推广产品。这些合作关系不仅为Diodes带来了更多的商业机会和市场份额,也促进了整个产业链的健康发展。

Global Specialties公司的发展小趣事

随着电子技术的快速发展,教育和培训成为了Global Specialties的另一个重要领域。公司敏锐地捕捉到这一市场需求,推出了一系列针对教育的试验板和套件。这些产品不仅帮助学生更好地理解电子原理,还激发了他们的创造力和实践能力。通过与多所高校和职业院校的合作,Global Specialties成功地将自己的品牌深入到教育市场的每一个角落。

Eurotech公司的发展小趣事

Eurofarad公司自创立之初,就专注于电容器技术的研发。在当时,电容器市场已经相当成熟,但Eurofarad公司凭借对材料科学的深入研究,成功开发出一种新型的高性能电容器。这种电容器不仅具有更高的能量密度,而且寿命更长,稳定性更好。这一技术突破为Eurofarad公司赢得了市场的初步认可,也为公司后续的发展奠定了坚实的基础。

爱普特半导体(APTSEMI)公司的发展小趣事

在全球供应链受到冲击、芯片告急的背景下,爱普特半导体始终坚持纯国产化发展理念。公司从管理层到核心研发人员,都具有深厚的半导体从业经验,无需借助任何海外团队支持,就能实现技术攻关和市场把控。这种全国产化的优势使得爱普特在面对外部风险时能够保持稳健的发展态势,也为公司的长远发展奠定了坚实基础。

Eurotechnique公司的发展小趣事

Eurotechnique公司成立于XXXX年,由几位具有远见卓识的电子工程师和企业家共同创立。他们看到了当时电子行业快速发展的趋势,尤其是数字电路和微控制器领域的巨大潜力。因此,公司决定专注于这两个领域的技术研发和产品生产。在创立初期,Eurotechnique通过不断的技术创新和产品优化,逐渐在市场上树立了良好的口碑。

科通(COMTEK)公司的发展小趣事

面对快速变化的电子行业市场,科通技术始终坚持以技术创新为驱动,不断推动公司的转型升级。公司加大在研发方面的投入,积极引进先进的技术和设备,提升产品的技术含量和附加值。同时,科通技术还不断拓展业务领域,从单一的元器件分销逐渐发展到提供全方位的技术整合方案和应用方案,为客户提供更加全面、专业的服务。

问答坊 | AI 解惑

如何快速创建开关电源的PCB版图设计

如今的开关稳压器和电源越来越紧凑,性能也日益强大,而越来越高的开关频率是设计人员面临的主要问题之一,正是它使得PCB的设计越来越困难。事实上,PCB版图已经成为区分好与差的开关电源设计的分水岭。本文针对如何一次性创建优秀PCB版图提出一些 ...…

查看全部问答>

我想要份单片机方面的中英资料

我想要份单片机方面的中英资料,大家帮帮我…

查看全部问答>

看《风声》电影 谈数据传输加密

来源:http://bbs.c114.net/viewthread.php?tid=372433 国庆60周年,电影市场中涌现出大量关于抗ri、建国的影片,如***、风声、邓稼先等,其中风声让我感觉特别亲切。不是周迅一贯冷酷的演技感动了我,也不是李冰冰优美气质的身段刺激了我;而是风 ...…

查看全部问答>

BSP移植问题

我在CE6上面克隆了一个BSP,是DeviceEmulator, 我是第一次接触,现在想问个简单的问题, 在FILES目录中的platform.bib文件中,有一些像 ; @CESYSGEN IF CE_MODULES_WAVEAPI IF BSP_NOAUDIO !     s3c2410x_wavedev.dll    ...…

查看全部问答>

pxa 2360-2大家帮忙。

最近在看这个: -----i2c源代码情景分析(Beta2)---------- 但是上面提到的-----本文档中的源代码以i2c-2.9.1包及www.arm.linux.org.uk上下载的pxa的i2c适配器的补丁2360-2为准 ----------2360-2的源码一直没有找到,网站也看了,可能我水平不行 ...…

查看全部问答>

MSP430的PWM输出脉冲上下不对称是什么问题啊?新手求指导,谢谢。

MSP430的PWM输出脉冲上下不对称是什么问题啊?新手求指导,谢谢。…

查看全部问答>

关于uCOS-ii的一些其他问题,求解释啊

第一个问题: /* ********************************************************************************************************* *                         ...…

查看全部问答>

UCOS移植到MSP430过程与心得体会《3》

static void OS_InitRdyList (void){     INT16U    i;     INT8U    *prdytbl;      OSRdyGrp       = 0x00;    ready list& ...…

查看全部问答>

大家一起来赚积分啊。。。。。。

大家一起来赚积分啊。。。。。。…

查看全部问答>

炫3D 元件模型

那个贴子不能编辑了。所以在此发个新贴,目前最新模型 …

查看全部问答>