历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2019年03月07日 | stm32F4XX之窗口看门狗 HAL库

2019-03-07 来源: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; 

}

 

推荐阅读

史海拾趣

兵字(BingZi)公司的发展小趣事

随着公司规模的不断扩大和产品线的日益丰富,兵字公司开始注重品牌建设和市场拓展。公司注册了“BingZi兵字”商标,并通过一系列的市场推广活动,提升了品牌的知名度和美誉度。同时,兵字公司还积极开拓国内外市场,与多家知名企业建立了长期稳定的合作关系,实现了业务的快速增长。

American Technical Ceramics (ATC)公司的发展小趣事

兵字公司的创始人李元兵,在经历了多年的研究所工作后,怀揣着对电子元器件领域的深厚情感与独到见解,决定投身创业。他深知,在电子行业这个日新月异的领域,唯有掌握核心技术,才能在激烈的市场竞争中立足。于是,兵字公司从成立之初,就致力于电源变压器和触发变压器的研发与生产,凭借过硬的技术实力和优质的产品质量,迅速在市场中站稳了脚跟。

Fagor Electrónica公司的发展小趣事

进入1960年代,Fagor Electrónica迎来了其发展的第一个重大里程碑。1964年,公司成功启动了第一批硅整流器的制造。这一创新不仅提高了产品的性能,还为公司带来了更大的市场份额。硅整流器的推出标志着Fagor Electrónica在电子制造技术上的领先地位,也为其后续的发展奠定了坚实的基础。

Elpaq公司的发展小趣事
E-Switch公司的发展小趣事

E-Switch公司始终坚持以客户为中心的经营理念,致力于为客户提供优质的服务和产品。公司建立了完善的客户服务体系,及时解决客户在使用过程中遇到的问题。同时,E-Switch还积极与客户保持沟通交流,了解市场需求变化,以便及时调整产品策略和生产计划。正是这种以客户至上的经营理念和持续发展的战略眼光,让E-Switch在电子行业中不断发展壮大。

Antenna Factor公司的发展小趣事

Antenna Factor公司最初由几位热衷于无线通信技术的工程师创立。创业初期,他们面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,他们凭借着对技术的执着和不懈的努力,成功开发出了一款具有高性价比的天线产品,并获得了市场的初步认可。这一突破性的产品为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

TD终端测试仪各有千秋 性能价格是角逐点

TD-SCDMA产业在中国的兴起,对测试仪器提出了更高要求,测试厂商也不断适应形势,推出新品。目前市场上共有8家TD终端测试仪表厂家,其中终端综合测试仪厂家有6家,分别是国内的湖北众友(ZY4923)、星河亮点(SP6010)、中电科技集团第41所(AV4943),国 ...…

查看全部问答>

电子密码锁

本帖最后由 paulhyde 于 2014-9-15 04:23 编辑 电子密码锁可能有点问题,请高手帮助分析一下怎么才能完成电子锁的功能!  …

查看全部问答>

最新无线收发模块资料总结

本帖最后由 paulhyde 于 2014-9-15 04:09 编辑 :P :P :P :P :P :P :P :P :P :P :P :P 好东西与各位分享!  …

查看全部问答>

关于位宽的问题

如题,请教高人,verilog中的位宽应该如何理解,看了几本书都只是简单的举几个例子,看得不是很明白。位宽是指什么的位宽?是二进制的吗?十进制的位宽又是怎么的呢?比如这样定义:8\'d100 和 1d\'5  正确吗?…

查看全部问答>

FPGA学习分享---初学者的快乐(记应用FPGA完成DS18B20的控制和读取)

        各位坛友,         在国庆过后,我就开始在坛子空间里面念叨着老师给我的这个毕业设计热身题目:运用红色飓风二代altera FPGA开发板,编写VHDL程序控制和读取显示DS18B20数 ...…

查看全部问答>

头盔式MP3播放器

存储容量为1G的MP3数码音频播放器,可以兼容所有的定制音乐服务: 如Napster To Go, 微软PlaysForSure, Janus, Rhapsody To Go, 雅虎Music Unlimited, 索尼Connect …

查看全部问答>

想嵌入式驱动方面,但是从应聘角度来说是软件工程师还是硬件工程师!

如题,应届生马上毕业,大学里学过MCU,做过一些小实验,C 编程可以,可以对硬件进行相应的控制,不知适合干这一块吗?…

查看全部问答>

菜鸟虚心请教:OK6410开发板wince6.0下开发QT程序

OK6410开发板自带Wince6 操作系统,开发环境安装了开发板自带的SDK,能用vs2008开发QT程序吗?需要根据板子的SDK编译QT源代码吗?…

查看全部问答>

MSP430的手持式仪器核心模块设计

MSP430的手持式仪器核心模块设计,本文介绍了基于MSP430单片机的嵌入式手持仪器核心模块硬件的开发与软件的实现,,, 下面资料下载: MSP430的手持式仪器核心模块设计 [ 本帖最后由 qwqwqw2088 于 2013-10-29 08:08 编辑 ]…

查看全部问答>