1、WWDG简介  

  窗口看门狗(WWDG)通常被用来检测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。

  WWDG是一个不断往下递减的计数器。当WWDG的计数器递减到固定值0x40时,还没有重新赋值计数值(俗称喂狗),就会产生一个复位信号,使芯片复位,这个0x40的固定值就叫做窗口的下限值,窗口下限值不需要设置。

  WWDG还有一个窗口上限值,当WWDG的计数器的值大于窗口上限值的时候,如果给WWDG的计数器重新赋值(喂狗),也会产生一个复位信号,使芯片复位,窗口的上限值可以通过程序设置。

  也就是说在使用WWDG的时候,给WWDG的计数器重新赋值不能够太早,也不能够太晚,必须在一定时间之内。

2、WWDG的时间计算

  WWDG是挂载在APB1总线上的外设,所以WWDG的时钟源来自PCLK1。需要注意的是PCLK1在给WWDG提供时钟源的时候已经被4096分频了,这个分频是芯片默认的,没办法更改。所以WWDG时钟的时钟源应该是PCLK1/4096。

  由于WWDG不像IWDG一样有独立的时钟源,在使用WWDG的时候,需要先使能WWDG的时钟,否则无法使用。

  WWDG的时钟可以被分频,通过配置WWDG_CFR配置寄存器的BIT8~BIT7位的WDGTB[1:0]可以对来自PCLK1/4096的时钟进行分频,如下:

  • WDGTB[1:0] = 00:WWDG的计数器时钟来自PCLK1/4096后再除以1。
  • WDGTB[1:0] = 01:WWDG的计数器时钟来自PCLK1/4096后再除以2。
  • WDGTB[1:0] = 10:WWDG的计数器时钟来自PCLK1/4096后再除以4。
  • WDGTB[1:0] = 11:WWDG的计数器时钟来自PCLK1/4096后再除以8。

  所以WWDG的时钟计算公式如下:

  WWDG_CLK = PCLK1/(4096*PR)

  PCLK1是APB1总线时钟,PR是WWDG的分频系数。

  得出WWDG的时钟大小之后,就可以算出WWDG的计数器每递减一次所经过的时间,如下:

  Step_time = 1/WWDG_CLK = (4096*PR)/PCLK1

  如果PCLK1的单位为MHZ,那么计算出来的单位就是us级;如果PCLK1的单位为KHZ,那么计算出来的单位就是ms级。

  假设PCLK1 = 36MHZ,那么WWDG的最小超时时间为:

    • 当WDGTB = 0时,WWDG的最小超时时间为:time = (4096*1)/36(us) = 113(us)。
    • 当WDGTB = 1时,WWDG的最小超时时间为:time = (4096*2)/36(us) = 227(us)。
    • 当WDGTB = 2时,WWDG的最小超时时间为:time = (4096*4)/36(us) = 455(us)。
    • 当WDGTB = 3时,WWDG的最小超时时间为:time = (4096*8)/36(us) = 910(us)。

  得出WWDG计数器每递减一次所经过的时间后,还需要根据WWDG计数器的初值和固定值0x40计算WWDG计数器的递减次数。假设初值设置为X,那么WWDG产生复位信号的时间计算如下:

  Twwdg = ((4096*PR)/PCLK1)*(X - 0x40)

3、WWDG的窗口值

  WWDG计数器的值必须在一个范围内才可以重新赋值,这个范围又窗口上限值和窗口下限值组成。

  WWDG的窗口下限值是一个固定值,该值固定位0x40。

  WWDG的窗口上限值是由WWDG_CFR配置寄存器的BIT6~BIT0位组成。WWDG的窗口上限值必须大于固定值0x40,如果小于等于固定值0x40就失去了窗口的价值,而且也不能大于计数器的值,由于WDG计数器的最大值为0x7F,所以WWDG的窗口上限值必须小于0x7F。

  在实际使用中,一般使用WWDG的中断功能,在中断服务函数中对WWDG进行喂狗。如果开启了WWDG的中断功能,当WWDG的计数器逐渐递减到0x40的时候就会产生中断,在中断服务函数内对WWDG的计数器重新赋值。如果WWDG的计数器递减到0x3F时,WWDG的计数器还没有重新赋值,那么就会产生复位。      

3、WWDG配置流程

  在使用WWDG之前,必须先使能WWDG的时钟,否者无法使用WWDG的功能。

  通过WWDG_CFR配置寄存器设置WWDG的时钟分频系数、窗口上限值、中断启动。

  通过WWDG_CR控制寄存器设置WWDG的使能、计数器初值。

  通过NVIC配置WWDG的中断分组、优先级、中断使能。

  编写中断服务函数进行喂狗操作。

4、HAL库操作WWDG

  初始化代码如下:

WWDG_HandleTypeDef WWDG_Handle_Init;

void WWDG_Init(void)
{
__HAL_RCC_WWDG_CLK_ENABLE(); WWDG_Handle_Init.Instance = WWDG;
WWDG_Handle_Init.Init.Prescaler = WWDG_PRESCALER_8;
WWDG_Handle_Init.Init.Counter = 0x7F;
WWDG_Handle_Init.Init.Window = 0x5F;
WWDG_Handle_Init.Init.EWIMode = WWDG_EWI_ENABLE; HAL_WWDG_Init(&WWDG_Handle_Init); HAL_NVIC_SetPriority(WWDG_IRQn,,);
HAL_NVIC_EnableIRQ(WWDG_IRQn);
}

  首先定义一个WWDG的句柄结构体变量,该变量是一个全局变量。    

  通过HAL_WWDG_Init函数对WWDG进行初始化,设置分频系数、计数器初值、窗口上限值,开启中断。

  通过HAL_NVIC_SetPriority函数设置WWDG的中断优先级。

  通过HAL_NVIC_EnableIRQ函数使能WWDG的中断功能。

  WWDG中断服务函数如下:

void WWDG_IRQHandler(void )
{
HAL_WWDG_IRQHandler(&WWDG_Handle_Init);
} void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
HAL_WWDG_Refresh(&WWDG_Handle_Init);
}  

  HAL_WWDG_EarlyWakeupCallback是WWDG的回调函数,在HAL_WWDG_IRQHandler函数中调用。

  通过HAL_WWDG_Refresh函数对WWDG的计数器进行重新赋值。

STM32F103ZET6窗口看门狗的更多相关文章

  1. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  2. STM8s窗口看门狗

    看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号: 2 当寄存器WDGCR的值大于WDGWR的时 ...

  3. stm8的独立看门狗与窗口看门狗

    STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...

  4. STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  5. STM32(10)——窗口看门狗

    简介: 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障.除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 ...

  6. stm32 窗口看门狗学习(二)

    窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...

  7. stm32 窗口看门狗学习(一)

    什么是窗口看门狗? 1)独立看门狗                限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗               之所以称为窗口就是因为其 ...

  8. 第35章 WWDG—窗口看门狗—零死角玩转STM32-F429系列

    第35章     WWDG—窗口看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  9. STM32F407 窗口看门狗 个人笔记

    窗口看门狗的喂狗时间范围 由框图知: 复位条件是:当且仅当 { 启动位启动 且 { T6为0 (计数器的值减小到0X03F即下限,还没喂狗,即喂狗太晚) 或 计数器的值高于上限时喂狗,即喂狗太早 } ...

随机推荐

  1. redis环境搭建及一主二从三哨兵模式配置

    一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...

  2. 今天对C语言不常用的小东西的了解

    今天又翻了C语言的书,看到const语句,一时间想不起来到底是干嘛的,看语句const   int   a=1;明白了这是一个支持常量指定类型的定义常量的关键字,作用几乎与#define一毛一样,但# ...

  3. 机器学习——详解经典聚类算法Kmeans

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...

  4. [红日安全]Web安全Day12 – 会话安全实战攻防

    本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...

  5. Canvas方法总结

    渲染上下文 getContext() // 获得渲染上下文和它的绘画功能 绘制形状 绘制矩形 fillRect(x, y, width, height) // 绘制一个填充的矩形 strokeRect ...

  6. 《ASP.NET Core 3框架揭秘》5折预售[发布试读章节]

    <ASP.NET Core 3框架揭秘>于昨天在下午京东正式开始预售,并在半天之内销售近一千套.为了回馈读者,出版社与京东谈了一个5折的价格,这是一个连我都没有想到的价格,至少我写着几本书 ...

  7. Html网页链接数据库验证账户密码(新手)

    连接代码(其中用到了连接池,不要忘记Jar包.拉入配置文件和工具类): package cn.Wuchuang.Servlet; import org.springframework.jdbc.cor ...

  8. Integration of Metabolomics and Transcriptomics To Reveal Metabolic Characteristics and Key Targets Associated with Cisplatin Resistance in Nonsmall Cell Lung Cancer(解读人:林山云)

    期刊名:J. Proteome Res 发表时间:(2019年8月) IF:3.78 单位: 上海第九人民医院药学系,上海交通大学药学院 上海交通大学药物与生物化学系   物种:人源A549细胞系 技 ...

  9. SQLServer——MASTER..spt_values

    常常见到这个表,人家用得天花乱坠的. 自己select一看却莫名其妙的. 如上, 这个表主要用来保存一些枚举值, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影.也可以叫系统常量表吧 ...

  10. CMDB资产采集方式

    一:Agent方式 原理:在每台服务器装上agent客户端程序,定时向数据库发送指定的资产信息. 优点:速度快. 缺点:服务器上需要多装一个软件 import subprocess import re ...