历史上的今天
返回首页

历史上的今天

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

正在发生

2021年04月23日 | STM32窗口看门狗程序

2021-04-23 来源:eefocus

简介:窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG->CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。


在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

图 3.6.1.1中,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位


窗口看门狗寄存器介绍:





如何使用窗口看门狗:

1)使能WWDG时钟

2)设置WWDG_CFR和WWDG_CR两个寄存器

在时钟使能完后,我们设置WWDG的CFR和CR两个寄存器,对WWDG进行配置。包括使能窗口看门狗、开启中断、设置计数器的初始值、设置窗口值并设置分频数WDGTB

3)开启WWDG中断并分组

4)编写中断服务函数



软件例程:


//---------------------------wdg.c-----------------------



#include "wdg.h"


#include "led.h"





u8 wwdg_cnt=0x7f; //窗口看门狗计数器初值





void wwdg_init(u8 tr,u8 wr,u8 fprer)


{


RCC->APB1ENR|=1<<11; //使能WWDG时钟


wwdg_cnt=tr&wwdg_cnt; // 初始化计数器值


WWDG->CFR|=fprer<<7; //设置频率时基


WWDG->CFR|=1<<9; //使能串口看门狗中断


WWDG->CFR&=0xff80; //窗口值清零


WWDG->CFR|=wr; //设定窗口值


WWDG->CR|=(wwdg_cnt|1<<7); // 启动看门狗设置7位计数器初值


MY_NVIC_Init(2,3,WWDG_IRQChannel,2);





}





void wwdg_feed(u8 cnt)


{


WWDG->CR|=(cnt&0x7f);//喂狗值





}








void WWDG_IRQHandler(void)


{


u8 tr,wr;


wr=WWDG->CFR&0x7f;


tr=WWDG->CR&0x7f;


if(tr

WWDG->SR&=0x00; //清楚提前唤醒标志位


LED1=!LED1;


}



//------------------------wdg.h---------------------


#ifndef _wdg_h


#define _wdg_h





#include "sys.h"





void wwdg_init(u8 tr,u8 wr,u8 fprer);


void wwdg_feed(u8 cnt);





#endif

//------------------led.c----------------------


#include "led.h"





void led_init(void)


{


RCC->APB2ENR|=1<<2;


RCC->APB2ENR|=1<<5;


GPIOA->CRH&=0xfffffff0;


GPIOA->CRH|=0x00000003;


GPIOD->CRL&=0xfffff0ff;


GPIOD->CRL|=0x00000300;


GPIOA->ODR|=1<<8;


GPIOD->ODR|=1<<2;





}


//---------------------led.h------------------


#ifndef _led_h


#define _led_h





#include "sys.h"





#define LED0 PAout(8)


#define LED1 PDout(2)





void led_init(void);





#endif




///-----------------------主函数------------test.c---------------


#include





#include "sys.h"


#include "delay.h"


#include "usart.h"


#include "led.h"


#include "wdg.h"





int main(void)


{


Stm32_Clock_Init(9);


delay_init(72);


uart_init(72,9600);


led_init();


wwdg_init(0x7f,0x5f,3);


LED0=0;


delay_ms(1800);


while(1)


{


LED0=1;





}





}


推荐阅读

史海拾趣

APSA公司的发展小趣事

作为一家有社会责任感的企业,APSA公司始终注重可持续发展。公司在生产过程中积极采取环保措施,降低能耗和排放。同时,公司也积极参与社会公益活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,这些故事是基于一般性的电子行业发展趋势和公司成长路径构建的,并不特指任何一家名为“APSA”的公司。如果你需要关于特定公司的信息,建议直接查阅该公司的官方网站或相关新闻报道。

Federal Custom Cable公司的发展小趣事

在追求企业发展的同时,Federal Custom Cable也积极履行社会责任。他们注重绿色生产,采用环保材料和生产工艺,减少对环境的影响。同时,Federal Custom Cable还积极参与公益事业和慈善活动,回馈社会。这种关注社会责任、追求绿色发展的企业精神,使Federal Custom Cable在电缆行业中树立了良好的企业形象。

General Transistor Corp公司的发展小趣事

面对日益激烈的市场竞争,GTC及时调整市场策略,加强品牌建设。公司注重提升产品质量和服务水平,积极参与国内外各类电子产品展会和论坛,提高品牌知名度和影响力。同时,GTC还建立了完善的销售网络和售后服务体系,为客户提供更加便捷、高效的服务。这些举措有力地推动了公司业务的快速增长和市场份额的扩大。

ADI(亚德诺半导体)公司的发展小趣事

面对日益激烈的市场竞争,GTC及时调整市场策略,加强品牌建设。公司注重提升产品质量和服务水平,积极参与国内外各类电子产品展会和论坛,提高品牌知名度和影响力。同时,GTC还建立了完善的销售网络和售后服务体系,为客户提供更加便捷、高效的服务。这些举措有力地推动了公司业务的快速增长和市场份额的扩大。

Ercona Corp公司的发展小趣事

为了进一步巩固市场地位和提升竞争力,GTC开始实施并购整合战略。公司通过收购具有技术优势和市场潜力的企业,实现了技术、产品和市场的快速扩张。同时,GTC还积极寻求战略转型,从单一的电子元器件分销商和生产商向综合性电子解决方案提供商转变。这一战略转型为公司带来了新的增长点和发展机遇。

GE (General Electric)公司的发展小趣事
检查机床指示灯和照明灯是否正常工作,如有故障及时更换。

问答坊 | AI 解惑

提高测量精度的七大技巧

活动时间/地点: 2010/01/26  14:00 杭州 浙江国际大酒店5楼影视厅(杭州下城区体育场路221号) 2010/01/28  14:00 深圳 金茂深圳JW万豪酒店3楼会议室I&II (深圳市福田区深南大道6005号) 2010/01/28  14:00 南京 ...…

查看全部问答>

Linux MTD源代码分析(Jim Zeus著)--linux下flash驱动开发重要参考

目录 专有名词:.... 7 Linux MTD介绍:... 8 设备层和原始设备层的函数调用关系(红色部分需要我们实现):... 9 NOR型Flash芯片驱动与MTD原始设备... 10 NAND和NOR的比较... 11 源码分析... 14 头文件分析... 14 mtd.h. 14 MTD_CHAR_MAJ ...…

查看全部问答>

如何选适合产品的系统设计模板

请问大家如何选适合产品的系统设计模板  不清楚每个模板下有哪些组件…

查看全部问答>

西安嵌入式俱乐部 QQ群: 76450856

西安嵌入式俱乐部 QQ群: 76450856…

查看全部问答>

wince 的导航软件 怎么调用地图

入门想问问: wince平台上的导航软件 一般是怎么调用导航地图…

查看全部问答>

100分求一篇多核处理器嵌入式应用方面的文章

为了完成作业,可发到我的信箱chenccq_666@sina.com,谢谢了。 名称:   基于多核处理器****的应用 要求:   1.市场前景    2. 系统的框架及其功能说明     3. 所设计内容涉及嵌入式领域     4. 系统中各具体功 ...…

查看全部问答>

DDK的TESTCAP的问题

我开始学习驱动,在调试TESTCAP这个例子,现在有个问题,就是不知道它的色彩条码是怎么产生的,请各位帮忙指点一下,谢谢!…

查看全部问答>

STM32+WIFI模块

 最近针对有一些需求,我们将在2008年8月左右推出一套基于STM32的WIFI模块,功能如下:1)基于MCU的网络应用需求2)标准的UART,SPI接口3)完整的API函数4)完全与标准的WIFI数据统一详细的User Manual请查看www.mxchip.com网站。…

查看全部问答>

各位能否就430在电池供电下的应用发表些看法

我作了一个控制系统,定时控制部分. 430采用电池(SONY的CR2032)供电, 每分钟系统激活一次,工作约100ms, 在激活工作期间以9600bps的波特率发送一个字节的数据. 发现工作三天之后电池电量就不足了. 有没有哪位遇到这样的问题. 发表一下看法吧…

查看全部问答>

求助linux中更换DDR需更改哪些地方

现工作需要正在将MX27的128M的DDR换为256M ,请问需要修改哪些地方(bootload使用的是Redboot)…

查看全部问答>