STM32F103ZET6 — WWDG

发布者:蓝天飞行最新更新时间:2019-04-09 来源: eefocus关键字:STM32F103ZET6  WWDG  计数器 手机看文章 扫描二维码
随时随地手机看文章

简介

与 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);

}

 


关键字:STM32F103ZET6  WWDG  计数器 引用地址:STM32F103ZET6 — WWDG

上一篇:【STM32F103】按键检测(GPIO输入)
下一篇:stm32按键的检测(EXTI和Polling两种方式)

推荐阅读最新更新时间:2024-03-16 16:27

基于stm32f103zet6的DS1302学习
由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧! 1、所谓的DS1302 这里面也指明了简单的SPI协议 然后就直接上代码了,注释很详细的!基本实现单行注释 1、主函数main #include stm32f10x.h #include SysTick.h #include Delay.h #include Usart.h #include stdio.h #include DS1302.h /*******由于没有做外设测试的程序是:按键P
[单片机]
基于<font color='red'>stm32f103zet6</font>的DS1302学习
灵敏的盖革计数器电路图
灵敏的盖革计数器电路图
[模拟电子]
灵敏的盖革<font color='red'>计数器</font>电路图
PIC单片机入门_定时器/计数器TMR1详解与实例
1.前言 前面介绍了定时器/计数器TMR0的基本概念和用途,下面介绍PIC单片机中另外一种定时器/计数器TMR1。 2.TMR1的特性 TMR1为16位宽,附带一个3位的分频器,还自带一个低功耗低频的时基振荡器。TMR1的主要用途:类似于TMR0,用于定时和计数;自带一个时基振荡器,可记录年、月、日、时、分、秒,实现实时时钟RTC(real time clock);可以与CCP模块配合使用,实现输入捕捉或输出比较功能。 TMR1由二个8位寄存器TMR1H和TMR1L对组成的16位定时器/计数器,可以由软件读/写,这二个寄存器都是和RAM统一编址的,地址分别为0EH和0FH 。TMR1H:TMR1L寄存器对,从0000H递
[单片机]
MSP432E401Y-PWM输出
不介绍死区相关配置和信息,这里为432自带的PWM输出,定时器PWM输出看上一篇文章 一、时钟配置 PWM有两个时钟源,系统时钟和预分频的系统时钟。通过写PWMCC(PWM Clock Configuration)寄存器中的USEPWM位来选择时钟源。 二、PWM计时器 每个PWM发生器的计时器都可以配置增/减计数模式或者减计数模式。在减计数模式中,计数器每次计数从装载值到零后会回到加载值,如此循环计数。增/减计数模式则相反计数。一般减计数模式被用来生成左对齐或者右对齐的PWM信号,增/减计数模式则用来生成中心对齐的PWM信号。 在PWM生成过程中计时器输出三种信号:方向信号(在减计数模式下低,在增/减计数模式
[单片机]
MSP432E401Y-PWM输出
可减小延迟的计数器
可减小延迟的计数器
[模拟电子]
可减小延迟的<font color='red'>计数器</font>
定时计数器T0作定时应用技术(一)
1. 实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示 2. 电路原理图 图4.15.1 3. 系统板上硬件连线 (1. 把 单片机系统 区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到 四路静态数码显示模块 区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b, ,P0.7/AD7对应着h。 (2. 把 单片机系统 区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到 四路静态数码显示模块 区域中的任一个a-h端口上;要求:P2.0/A
[单片机]
定时<font color='red'>计数器</font>T0作定时应用技术(一)
平凡单片机教学 第十九讲 定时/计数器实验2
前面我们做了定时器的实验,现在来看一看计数实验,在工作中计数通常会有两种要求:第一、将计数的值显示出来,第二、计数值到一定程度即中断报警。第一种如各种计数器、里程表,第二种如前面例中讲到的生产线上的计数。先看第一种吧。我们的硬件中是这样连线的:324构成的振荡器连到定时/计数器1的外部引脚T1上面,我们就利用这个来做一个计数实验,要将计数的值显示出来,当然最好用数码管了,可我们还没讲到这一部份,为了避免把问题复杂化,我们用P1口的8个LED来显示计到的数据。 程序如下: ORG 0000H AJMP START ORG 30H START: MOV SP,#5FH MOV TMOD,#01000000
[单片机]
定时器/计数器的定时或计数范围
工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。 工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。 工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。 预置值计算:用最大计数量减去需要的计数次数即可。 例:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,应当预置多大的值呢?对了,就是8192-12=8180。 以上是计数,明白了这个道理,定时也是一样。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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