STM32窗口看门狗程序

发布者:声慢慢最新更新时间:2021-04-23 来源: eefocus关键字:STM32  窗口看门狗 手机看文章 扫描二维码
随时随地手机看文章

简介:窗口看门狗(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;





}





}


关键字:STM32  窗口看门狗 引用地址:STM32窗口看门狗程序

上一篇:基于STM32的电容触摸按键的原理解析
下一篇:基于STM32的植物生长动态补光控制系统设计

推荐阅读最新更新时间:2024-11-17 00:40

STM32-时钟树
学习一个硬件,首先要把它的时钟单元弄的清晰一点,这会有助于加快你的学习进度,一开始我也有点迷糊,感觉STM32的时钟系统挺复杂,挺难懂的,但是深入接触了之后,发现也是挺简单的,可能一开始没有仔细看的原因 时钟系统就相当于人类的心跳一样,它为整个硬件系统提供时钟周期,只有它的正常运行,系统或者说片上系统才能够正常的工作。 首先,应该找到时钟源,也就是心跳的发源地,STM32有4个时钟源,分别是内部高速时钟,内部低速始终,外部高速时钟,外部低速时钟,其中外部高速时钟和外部低速始终是由片外晶体振荡器提供的,片内的时钟系统由内部RC震荡器提供。下面贴上STM32的时钟树框图: 如果早期看不明白,也不用着急去弄明白了,等到使用的时候自然
[单片机]
RCC—使用 HSE HSI 配置时钟树梳理(在STM32平台下)
解剖RCC框图——时钟树(参考了火哥的使用手册和网上的一些资料,加上自己的理解) 下面是STM32F429的时钟树: 理解STM32的时钟是我们应用定时器等等的基础,首先 ,从系统时钟说起。 1.首先注意图中打蓝色圈的两个地方,HSE和HSI分别是外部时钟和内部时钟,其中HSE是高速的外部时钟信号,可接石英/陶瓷谐振器,或者接外部时钟源,HSE也可以直接做为系统时钟或者 PLL 输入(从蓝圈9处可以看出),频率范围为 4MHz~26MHz。HSE 我们使用的25M 的无源晶振。所以移植时一定要格外注意。 2.注意看图中蓝圈7的部分,这里是主锁相环倍频输出,用于产生系统需要的高速时钟信号,如图绿色箭头所示(STM32还有
[单片机]
RCC—使用 HSE HSI 配置时钟树梳理(在<font color='red'>STM32</font>平台下)
STM32 GPIO使用超强总结
STM32 GPIO使用超强总结 STM32GPIO使用 操作步骤: 1. 使能GPIO对应的外设时钟 例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); 2. 声明一个GPIO_InitStructure结构体 例如: GPIO_InitTypeDef GPIO_InitStructure; 3. 选择待设置的GPIO管脚 例如://选择待设置的GPIO第7、8、9管脚位 ,中间加“|”符号 GPIO_InitStruc
[单片机]
图说CRC原理应用及STM32硬件CRC外设
在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题。 所谓完整性是指数据在其生命周期中的准确性和一致性。这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们有可能因为外界干扰或者程序错误,甚至系统入侵而导致被破坏。如果这些数据在使用前不做校验,产品功能可能失效。在一些特定领域,严重时可能会危及用户财产甚至生命安全。 本文就来聊聊使用较为广泛的循环冗余校验技术,以及在STM32中的一些具体使用体会。 所谓循环冗余校验(CRC:Cyclic Redundancy Check)是一种错误检测算法,通常在通信协议中或存储设备中用于检测原始数据的意外变动。可以简单理解成对有用数据按照一定
[单片机]
图说CRC原理应用及<font color='red'>STM32</font>硬件CRC外设
关于STM32在程序中间修改PWM值的总结
首先在STM32库函数里有这样一个函数 void TIM3_PWM_Init(u16 arr,u16 psc) 若TIM3_PWM_Init(7200,100)//设置频谱7200.分频100 我们初始化定时器得到得频率为PWM频率=72000000/7200=10000hz 10000/100=100hz; TIM_SetCompare2(TIM3,pwmval);函数调节占空比; 占空比为arr/pwmval; 占空比在主循环里可修改通过TIM_SetCompare2(TIM3,pwmval); 若想要在程序进程中修改频率需要函数TIM_SetAutoreload(TIM3,arr); 这个函数就是手动更改 TIMx- AR
[单片机]
stm32 中断一般配置
配置是stm32外部中断步骤: 1.使能IO时钟和AFIO时钟 2.配置EXIT中断线 3.配置中断控制器NVIC (EXTI15_10_IRQn,EXTI4_IRQn) 4.写中断服务子程序 (EXTI15_10_IRQHandler) 首先要明白中断IO对应的中断线EXTIx 其中 PA0-PE0 对应的是EXTI0 ....... . . ........ PA4-PE4 对应的是EXTI4 共用中断线 PA5-PE5 ...... 对应的是EXTI9_5 ...... PA9-PE9 共用中短线 PA10-PE10 ......... 对应的是EXTI15_10 ......... P
[单片机]
STM32-一文搞懂ADC
1 STM32ADC简介 STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC,F103系列至少有两个ADC),这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的12位ADC是一种逐次逼近型模拟数字转换器,它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是PCLK2经分频产生。 1.1 ADC特性 12位分辨率 转换结束、注入转换结束和发生模
[单片机]
STM32-一文搞懂ADC
STM32单片机学习手记
   STM学习笔记——用定时器实现荧火虫灯   在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。   用ST库所带的例子Tim中的TimBase为例来修改,这个例子的位置以及如何建立工程请参考第7篇笔记,这里就不再重复了,下面简述一下修改的过程。   (1) 由于我的板子上的灯是由PD8~PD11来控制的,因此,要将   void RCC_Configuration(void)   中的:   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打开GPIOC的时钟   改为   RCC_APB
[单片机]
<font color='red'>STM32</font>单片机学习手记
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved