STM32 HAL库窗口看门狗

  • 1.窗口看门狗基本原理
  • 2.独立看门狗与串口看门狗区别
  • 3.应用场合
  • 4.窗口看门狗的时钟
  • 5.窗口看门狗寄存器:
    • ①.看门狗控制寄存器(WWDG_CR)
    • 2.配置寄存器(WWDG_CFR)
    • 3.状态寄存器(WWDG_SR)
  • 6.Cubemx配置(以STM32F103ZET6为例)
    • ①.代码配置
    • ②.相关接口说明
    • ③.代码段展示

1.窗口看门狗基本原理

窗口看门狗与独立看门狗原理相同,都是计数器按照一定频率进行递减。递减到一定值而产生复位信号。不同的是独立看门狗需要减到0进行复位,而窗口看门狗递减到0x40(下窗口值)进行复位。



由二图WWDG_CR寄存器存放计数值(即为T[6:0]设置的递减计数器的值),由此设置的值将会按照时钟逐级递减到WWDG_CFG寄存器设置的值(即W[6:0]窗口看门狗的上窗口值),之后再逐一递减到0x3F产生复位信号。

2.独立看门狗与串口看门狗区别

①.窗口看门狗具有终端而独立看门狗没有中断。
②.窗口看门狗使用外部时钟,使用的是外部时钟,当外部时钟损坏将会影响其使用,独立看门狗使用内部时钟即使主频不工作了,看门狗也能正常工作。(由于独立时钟因此独立与系统之外)。

3.应用场合

独立看门狗主要用来监控硬件上的错误
窗口看门狗是系统内部故障探测器,如果系统时钟出现了错误,那么窗口看门狗也就失去了作用,主要用于监视软件的错误。

4.窗口看门狗的时钟

窗口看门狗来自PCLK1 时钟主频为42MHZ,由RCC控制器开启。数据手册规定,计数时钟为CK=PCLK1/4096(其中4096为手册给定的值,默认不可修改)。

分频系数由分频系数配置寄存器CFR的[8:7]进行配置,即WDGTB[1:0]配置,可以设置为[0,1,2,3]分别对应[1/2/4/8]分频,因此计数时钟频率为:CNT_CK=PCLK1/4096/(2^WDGTB)。

则通过上述公式计算计数一次的时间为:


上图以fPCLK1=30MHZ为例子,递减计数器总共有7位T[6:0]假设为0x7F当第6位变为0的时候即变为0x3F,可知T[5:0]为实际计数值。因此当T[5:0]变为0时,即T[6:0]此时为0x40,当再递减一次就会产生复位信号,那么那这减一的时间就等于计数器的周期 =1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB) = 1/36 * 4096*2^0 = 136.53us
其他以此类推。

5.窗口看门狗寄存器:

①.看门狗控制寄存器(WWDG_CR)

①.WDGA此位将在看门狗到达0x3F进行复位时由软件的置位,从而产生复位信号。
②.T[6:0]该部分存放窗口看门狗的计数值,当全部设置为1的时候为计数器的最大值即0x7F当到达窗口下限的时候0X40即T[5:0]全为0,而T6位为1,从而得知计数器的计数范围所用的即为T[5:0为]位。当再递减一个数将会发送复位信号。

2.配置寄存器(WWDG_CFR)

①.可使用EWI位设置提前唤醒功能,置1时使能该功能,一旦使能该功能,当计数器递减到下窗口值(0x40)的时候将会进入中断,此时说明程序必有问题,可在中断 当中进行保存重要的数据。
②.WDGTB即上述内容中设置分频值内容,共2位[1:0]可设置为0/1/2/3,对应1/2/4/8分频。
③.W[6:0]用于设置上窗口值,在计数器T[6:0]设置的值到W[6:0]范围内不允许喂狗刷新,否则将会产生复位,在W[6:0]到0x40(下窗口值)可进行喂狗。

3.状态寄存器(WWDG_SR)

该寄存器将由硬件置位,软件置位无效,置位后代表提前唤醒终端标志。
未使能终端无效。可进行读取寄存器判断状态。

6.Cubemx配置(以STM32F103ZET6为例)

①.代码配置



②.相关接口说明

HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);//窗口看门狗软件初始化
HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg);//窗口看门狗硬件(MCU)初始化
HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);//窗口看门狗喂狗
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg);//窗口看门狗中断服务函数
HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg);//窗口看门狗回调函数,弱定义函数可自定义开发

③.代码段展示

以下代码利用窗口看门狗提前进入中断特性,在最后0x40时进行LED反转和喂狗操作。(灯闪烁的时间间隔取决于设置的递减计数值到-0x40时间)
例如下列程序:
0x7f: 为递减计数值到0x40共计数64个数
cubemx配置PCLK1时钟设置为4.5MHZ,分频为1
则f=fpclk1/4096/prc=4.5Mhz/4096/1=1098.63hz
t=1/f= 9.1010^-4s
T=CNT
t=64* 9.1010^-4=0.058s=58ms切换一次
58ms
2=116ms将亮一次(2为亮灭状态切换)

void MX_WWDG_Init(void)
{/* USER CODE BEGIN WWDG_Init 0 *//* USER CODE END WWDG_Init 0 *//* USER CODE BEGIN WWDG_Init 1 *//* USER CODE END WWDG_Init 1 */hwwdg.Instance = WWDG;                                                                        //句柄hwwdg.Init.Prescaler = WWDG_PRESCALER_1;//1分频(不分频)hwwdg.Init.Window = 0x4f;                                                         //上窗口值hwwdg.Init.Counter = 0x7f;                                                       //计数值hwwdg.Init.EWIMode = WWDG_EWI_ENABLE;         //提前中断使能(计数器递减到0x40时将提前进入中断做复位前重要数据保存等处理)if (HAL_WWDG_Init(&hwwdg) != HAL_OK)                //初始化使能进入该函数将会调用 HAL_WWDG_MspInit{Error_Handler();}/* USER CODE BEGIN WWDG_Init 2 *//* USER CODE END WWDG_Init 2 */}
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_WWDG_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);//当看门狗递减到0x40时将会反转该LEDHAL_WWDG_Refresh(hwwdg);//复位前喂狗
}

STM32 HAL库窗口看门狗相关推荐

  1. STM32 HAL库之看门狗

    1.STM32CubeMX配置 keil5文件输出如下: 点击右上角GENERATE CODE 2.代码解析 IWDG_HandleTypeDef hiwdg; void MX_IWDG_Init(v ...

  2. STM32学习笔记——窗口看门狗WWDG介绍及配置

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

  3. 【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

    前言:   今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使 ...

  4. STM32 (五)看门狗

    看门狗简介: 顾名思义就是看门的dog,不过这可不是用来看家的,而是用来看单片机的, 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环:或者因为 ...

  5. STM32 HAL库 看门狗

    STM32之CubeL4独立看门狗 文章目录 STM32之CubeL4独立看门狗 一 看门狗简介 二 STM32内部看门狗 两个狗的区别 1. 独立看门狗(IWDG) 2.窗口看门狗(WWDG) 三. ...

  6. 【转载】如何使用STM32的窗口看门狗

    STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值 ...

  7. stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗

    点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...

  8. 【STM32】窗口看门狗

    00. 目录 文章目录 00. 目录 01. WWDG简介 02. WWDG主要特性 03. WWDG功能说明 04. 设置看门狗超时 05. WWDG寄存器 5.1 控制寄存器 (WWDG_CR) ...

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

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

最新文章

  1. 《程序员做饭指南》霸榜 GitHub!不仅有量筒、烧杯,还用上了数学公式?
  2. autocad不能画图_设计院老司机谈CAD:学习AutoCAD掌握方法技巧更重要
  3. asp中sub与function的区别
  4. firefox 自定义快捷键
  5. 201117阶段二SQLite数据库
  6. 在Linux下下载RPM包
  7. curl txt批量_curl与wget高级用法
  8. 用python爬取东方财富网网页信息_爬取东方财富网数据的网页分析
  9. 用JavaScript修改Canvas图片的分辨率(DPI)
  10. Git工具项目管理的基础使用方式(GitHub同步方式)
  11. 怎么设置某个用户生成hdfs文件的权限_管理 HDFS 服务
  12. 【LeetCode】274. H指数
  13. 服务器w8系统如何重装,华硕w8系统重装图文教程
  14. (7)3DMAX之倒角剖面修改器、扫描修改器、倒角剖面与扫描之间的区别
  15. Abase2:字节跳动新一代高可用 NoSQL 数据库
  16. 如何理解yield的用法
  17. 永恒之蓝漏洞复现测试
  18. 镗刀的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 【STM32F407的DSP教程】第22章 DSP矩阵运算-放缩,乘法和转置矩阵
  20. SAP中MD04中交货计划行例外信息07的分析

热门文章

  1. Android发送短信的源码
  2. Java 动态生成jpg图片
  3. 聊聊C# 中HashTable与Dictionary的区别说明
  4. SAP 财务固定资产常用BAPI
  5. linux pm,Kali Linux下配置PM3运行环境
  6. 转载-Alpha通道实现
  7. 巨蟹本质-绝种好男人
  8. linux服务器显示文件夹,Linux系统怎么隐藏文件夹和文件?
  9. java中multiply用法_Java BigInteger multiply()用法及代码示例
  10. 有没有一款软件是测试阅读准确率的,数据准确性测试