历史上的今天
返回首页

历史上的今天

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

正在发生

2019年04月09日 | STM32F103ZET6 — WWDG

2019-04-09 来源:eefocus

简介

与 STM32 的 IWDG 一样,窗口看门狗的作用也是从不可预知的情况下,进行恢复的一种手段,只不过窗口看门狗的用法和 IWDG 有一定的差异,主要体现在“窗口”二字。那么什么是窗口看门狗呢?顾名思义,窗口看门狗就是在指定的时间窗口进行喂狗,才有效,在窗口外进行喂狗,都视为无效。具体的内容,请看下面分析


时钟

与独立看门狗 IWDG 不同,WWDG 窗口看门狗由 APB1 提供时钟输入:



工作原理

WWDG 的基本组成为:


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

条件复位

        ---- 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。


        ---- 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。


如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位

 

WWDG 看门狗依然存在一个预分频器:



预分频器将来自 PCLK1 的时钟进行分频处理:



存在两个可以配置的寄存器:


WWDG_CR    -----------    用于配置递减计数器的值


WWDG_CFR  -----------    用于窗口计数器的值


如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从0x40翻转到0x3F(T6位清零)时,则产生一个复位。


如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,将产生一个复位。


也就是说,递减计数器的值永远不可能小于 0x3F,当达到了 0x3F 时刻,马上产生复位信号(所以当我们在写递减计数器的时候,必须保证写入的值要大于 0x40,这样才不会马上就产生复位信号)。


同时,喂狗的时间也需要正确,不然也会产生复位。


那有没有办法在计数器翻转到 0x3F 之前,我们还不让复位呢?当然有,WWDG 存在一个叫做 EWI 的中断,这个中断产生的条件是当递减寄存器到达 0x40 的时候产生,也就是此刻,我们在中断里面进行及时的喂狗,就可以避免复位产生了。


现在解释一下,什么是窗口的意思:



如图所示,在我们设置的窗口 W[6:0] 之前,若是进行了喂狗,则产生复位,或者到达了 0x3F,也产生复位。只有在“刷新窗口”那个区域进行喂狗,才能够继续运行。


中断

支持配置打开叫做 EWI 的提前唤醒中断,当递减计数器达到 0x40 的时候产生中断。



中断中,需要清除对应的中断标志位,若是不希望复位的产生,则还需要重新刷新一下递减计数器即可。


配置过程

1. 开启 WWDG 的时钟


2. 设置预分频器的值


3. 设置窗口的值


4. 设置递减计数器的值


5. 初始化 NVIC 


6. 使能看门狗


7. 清除中断标志位


8. 使能 EWI 中断


#define MAX_WWDG_CNT    0x7F

#define WWDG_TEST_WIN   0x5F

 

/*

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

 ******************* WWDG Function Defination *******************

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

*/

static void SK_WWDGNVICConfig(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

    NVIC_Init(&NVIC_InitStructure);

 

}

void SK_WWDGInit(uint8_t target, uint8_t window, uint32_t fprer)

{

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

 

    target = target & MAX_WWDG_CNT;

 

    WWDG_SetPrescaler(fprer);

 

    WWDG_SetWindowValue(window);

 

    SK_WWDGNVICConfig();

 

    WWDG_Enable(target);

 

    WWDG_ClearFlag();

 

    WWDG_EnableIT();

}

 

void SK_WWDGFeed(uint8_t target)

{

    WWDG_Enable(target);

}

 

 

void WWDG_IRQHandler(void)

{

    //WWDG_SetCounter(MAX_WWDG_CNT); // If open this, it will never reset

 

    WWDG_ClearFlag();

 

    //SK_SetLedStatus(SK_LED_1, SK_LED_ON);

    //SK_SetLedStatus(SK_LED_1, SK_LED_OFF);

}

 


推荐阅读

史海拾趣

Allianc公司的发展小趣事

在XXXX年,Allianc公司迎来了一次重大的技术突破。公司研发团队成功开发出了一款具有领先性能的新型电子产品,该产品不仅具有更高的性能和更低的能耗,还具备更好的用户体验。这一技术突破使得Allianc公司在市场上迅速脱颖而出,赢得了大量客户的青睐。随着产品销量的不断攀升,公司的知名度和影响力也逐渐扩大。

FINECHIPS公司的发展小趣事

面对全球电子行业的激烈竞争,FINECHIPS公司意识到供应链优化的重要性。公司积极调整供应链策略,与全球领先的半导体制造商和原材料供应商建立长期稳定的合作关系,确保原材料的稳定供应和成本控制。同时,FINECHIPS还在全球范围内设立生产基地和研发中心,实现本地化生产和快速响应市场需求,进一步提升了公司的全球竞争力。

EVER-WAY公司的发展小趣事

在电子行业,技术创新是企业发展的关键。EVER-WAY公司深知这一点,因此在技术研发方面投入了大量资源。公司成立了专门的研发团队,不断引进先进的生产设备和技术人才,致力于开发具有自主知识产权的电子产品。经过多年的努力,EVER-WAY公司成功推出了一系列高性能、高可靠性的电子元器件产品,获得了国内外客户的广泛认可。这些技术创新的突破不仅提升了公司的核心竞争力,也为公司带来了丰厚的经济回报。

AMS公司的发展小趣事

EVER-WAY公司成立于XX世纪初,当时电子行业正处于蓬勃发展的阶段。创始人李明看准了市场机遇,决定创立一家专注于电子元器件制造的公司。他带领一支由几名工程师组成的小团队,开始了艰苦的创业之路。初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,李明和他的团队凭借坚定的信念和不懈的努力,逐渐在市场中站稳脚跟。他们不断优化产品性能,提高生产效率,同时积极拓展国内外市场,逐步扩大了公司的知名度和影响力。

中科芯(CKS)公司的发展小趣事

人才是企业发展的核心驱动力。中科芯高度重视人才队伍建设,通过引进和培养高素质人才、优化人才结构等措施,不断提升公司的创新能力和竞争力。同时,公司还创新激励机制,通过“揭榜挂帅”等形式吸引和激励人才投身重点项目的研发攻关。这些措施的实施不仅激发了员工的积极性和创造力,也为公司的持续发展提供了有力保障。

以上五个故事分别从中科芯的技术创新、科研成果、业绩增长、产品推广和人才队伍建设等方面展示了公司在电子行业中的发展历程和取得的成就。这些故事不仅展现了公司的实力和潜力,也体现了公司对社会和行业发展的贡献和担当。

ALTERA(阿尔特拉)公司的发展小趣事

近年来,面对全球芯片市场的激烈竞争和内外部环境的挑战,中科芯坚持创新驱动发展战略,加大市场开拓和科技攻关力度。通过优化产品结构、提升产品质量和降低成本等措施,公司实现了营业收入和净利润的稳步增长。一季度,中科芯的营业收入较正常年度增长24%,净利润增长83%,新签合同增长50%以上。这一成绩的取得充分展示了公司的市场竞争力和发展潜力。

问答坊 | AI 解惑

哪位能提供下DC-DC隔离电源电路啊

哪位能提供下DC-DC隔离电源电路啊…

查看全部问答>

C8051F340 关于USBXpress的问题(下载后USBXpress就弹出,为什么呢)

我用C8051F340做设计,用到了USB和PC机的通信。之前使用都还算正常,不过不知道是重装系统的原因还是什么,现在出现了下面这样的问题: 我使用Silicon Laboratories IDE这个软件进行调试,一开始的时候,在电脑属性的设备管理器的“通用串行总线控 ...…

查看全部问答>

s3c2440板子,wince5.0系统,有时不能识别U盘,可能原因在哪?

有一8gU盘,在PC上能正常使用,换作该开发板上就不能认,其它8gU盘多数还是能认的,不知道从哪找原因?…

查看全部问答>

什么叫驱动程序的移植?

我是刚刚开始接触驱动方面的东西,老是看到驱动的移植,但是不知道是怎么回事,哪位能解释下吗?谢谢啦~~~~~…

查看全部问答>

单片机编程,会不会运用到算法!

     谁能谈谈算法的学习?从最基础的如何入门开始!…

查看全部问答>

一本不错的430 C教程,包括硬件和软件设计

一本不错的430 C教程,包括硬件和软件设计…

查看全部问答>

谁有远程温湿度监测系统资料啊

谁有远程温湿度监测系统资料啊…

查看全部问答>

【FPGA(cyclone4)第二期 】 时序与仿真学习总结

学习 了两周,终于完成了整数乘法器的相关学习,主要学习了四种乘法器“传统乘法器,Booth乘法器,LUT查表乘法器和Modified Booth”乘法器,LUT乘法器拥有最少的时钟消耗,但是占用资源最多。 整数乘法器所涉及的知识很多,涉及到诸如补码,整数的 ...…

查看全部问答>