首页 > 其他分享 >stm32f407探索者开发板(二十一)——窗口看门狗

stm32f407探索者开发板(二十一)——窗口看门狗

时间:2023-02-25 13:02:24浏览次数:41  
标签:窗口 探索者 看门狗 NVIC 喂狗 WWDG 寄存器 stm32f407


文章目录

  • ​​一、窗口看门狗概述​​
  • ​​1.1 看门狗框图​​
  • ​​1.2 窗口看门狗工作过程总结​​
  • ​​1.3 超时时间​​
  • ​​1.4 为什么需要窗口看门狗​​
  • ​​1.5 其他注意事项​​
  • ​​二、常用寄存器和库函数​​
  • ​​2.1 控制寄存器WWDG_ CR​​
  • ​​2.2 配置寄存器WWDG_ CFR​​
  • ​​2.3 状态寄存器WWDG_SR​​
  • ​​三、手写窗口看门狗​​
  • ​​3.1 配置过程​​
  • ​​3.2 初始化窗口看门狗​​
  • ​​3.3 中断服务函数​​
  • ​​3.4 主函数​​

一、窗口看门狗概述

之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。

是存在一口窗口期,只有在窗口期喂狗才能生效。,如果不再窗口期内进行喂狗,则也会复位

1.1 看门狗框图

stm32f407探索者开发板(二十一)——窗口看门狗_嵌入式硬件


也就是第6位​​0011 1111​​​,开始下一次技术到​​0100 0000​​则会进行复位

stm32f407探索者开发板(二十一)——窗口看门狗_看门狗_02


配置寄存器就是用来设定​​窗口​​,而控制寄存器就是用来进行倒计时的。如果控制寄存器里面的数值大于配置寄存器里面的数值,则会进行​​复位​​​,如果T6为​​0​​​则也会进行​​置位​

1.2 窗口看门狗工作过程总结

STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位:

  • 当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
  • 当计数器的数值从0x40减到0x3F时【T6位跳变到0】

如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位

stm32f407探索者开发板(二十一)——窗口看门狗_stm32_03

1.3 超时时间

stm32f407探索者开发板(二十一)——窗口看门狗_看门狗_04


stm32f407探索者开发板(二十一)——窗口看门狗_单片机_05


stm32f407探索者开发板(二十一)——窗口看门狗_嵌入式硬件_06

1.4 为什么需要窗口看门狗

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;

如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况

1.5 其他注意事项

上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。

二、常用寄存器和库函数

2.1 控制寄存器WWDG_ CR

stm32f407探索者开发板(二十一)——窗口看门狗_嵌入式硬件_07

void WWDG_Enable(uint8_t Counter);//启动并设置初始值
void WWDG_SetCounter(uint8_t Counter);//喂狗

2.2 配置寄存器WWDG_ CFR

stm32f407探索者开发板(二十一)——窗口看门狗_看门狗_08

void WWDG_EnablelT(void);// 使能提前唤醒中断
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
void WWDG_SetWindowValue(uint8_t WindowValue);

2.3 状态寄存器WWDG_SR

stm32f407探索者开发板(二十一)——窗口看门狗_看门狗_09

FlagStatus WWDG_GetFlagStatus(void);
void WWDG_ClearFlag(void);

三、手写窗口看门狗

3.1 配置过程

使能看门狗时钟:
​​​RCC_APB1PeriphClockCmd();​​ ②设置分频系数:
​WWDG_SetPrescaler();​​ ③设置上窗口值:
​WWDG_SetWindowValue();​​ ④开启提前唤醒中断并分组(可选):
​WWDG_EnableIT();​​​​NVIC_Init();​​ ⑤使能看门狗:
​WWDG_Enable();​​ ⑥喂狗:
​WWDG_SetCounter();​​ ⑦编写中断服务函数
​WWDG_IRQHandler();​

3.2 初始化窗口看门狗

u8 WWDG_CNT=0X7F;
//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低2位有效
//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟

WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT,就是保留0-6,共7位的值
WWDG_SetPrescaler(fprer); //设置分频值
WWDG_SetWindowValue(wr); //设置窗口值
// WWDG_SetCounter(WWDG_CNT);//设置计数值
WWDG_Enable(WWDG_CNT); //开启看门狗

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看门狗中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级为3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看门狗
NVIC_Init(&NVIC_InitStructure);

WWDG_ClearFlag();//清除提前唤醒中断标志位
WWDG_EnableIT();//开启提前唤醒中断
}

3.3 中断服务函数

void WWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT); //重设窗口看门狗值
WWDG_ClearFlag();//清除提前唤醒中断标志位
LED1=!LED1;
}

3.4 主函数

如果正常喂狗,LED1会隔一段时间翻转。LED0会开始时亮,之后一直灭,如果产生复位,则LED0亮一下

int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
KEY_Init(); //初始化按键
LED0=0; //点亮LED0
delay_ms(300);
WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); //计数器值为7f,窗口寄存器为5f,分频数为8

while(1)
{
LED0=1; //熄灭LED灯
}
}


标签:窗口,探索者,看门狗,NVIC,喂狗,WWDG,寄存器,stm32f407
From: https://blog.51cto.com/u_15909950/6085309

相关文章

  • stm32f407探索者开发板(二十)——独立看门狗实验
    文章目录​​一、独立看门狗概述​​​​1.1独立看门狗​​​​二、常用寄存器和库函数配置​​​​2.1独立看门狗框图​​​​2.2键值寄存器IWDG_KR​​​​2.3预分频......
  • Redisson的锁重试和看门狗机制
    先看一下自己利用setnx写的简易分布式锁,有四个问题,1,不可重入2,不可重试3,超时自动释放(如果业务阻塞了,就算代码没执行完也会释放锁)4,集群模式下怎么办?@Override......
  • STM32F407VET6 / BLACK_F407VE开发板间隔0.5秒不断重启
    有一块STM32F407VET6的故障开发板,之前的问题是经常无法烧录,必须reset之后才能连接,具体查看这篇STM32F407VET6烧录出现flashdownloadfailedtargetdllhasbeen......
  • 阿里云天池 天池实验室DSW探索者版 免费GPU 天池notebook教程
    1、DSW教程点击天池notebook,进入我的实验室选择一个私有项目,点击编辑集成机器学习PAIDSW(DataScienceWorkshop)探索者版开发环境左边文件管理,中间工作区,右边是计算资源。在......
  • 关于看门狗的那些事
    一、SP706S看门狗SP706S看门狗,只要1.6S内给看门狗芯片高低电平信号看门狗的复位引脚就会保持高电平,如果没喂狗则为低。SP706S看门狗芯片特性,只有GPIO口为3.3V或0......
  • stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
    文章目录​​一、按键实验的硬件连接​​​​二、GPIO输入操作说明​​​​三、按键实验​​​​3.1支持连续按​​​​3.2不支持随便按​​​​3.3都兼容​​一、按键实......
  • STM32F407IGHX与Ubuntu20.04串口通信
    STM32F407IGHX与Ubuntu20.04串口通信为了让RobomasterC板(这块板用的是STM32F407IGHX的芯片)能与上位机进行通讯。我最近翻了不少博客和CSDN文章,看到了很多文章存在一些......
  • Redisson的看门狗机制
    背景据Redisson官网的介绍,Redisson是一个JavaRedis客户端,与Spring提供给我们的RedisTemplate工具没有本质的区别,可以把它看做是一个功能更强大的客户端(虽然官网上声称Re......
  • STM32F407 HardFault_Handler 中断输出初步定位越界问题
    1、测试环境:MDK+STM32F4072、汇编重写 HardFault_Handler 中断/*硬件错误中断的回调*/voidHardFault_CallBack_MSP(void){unsignedintMSP=__get_MSP......
  • STM32 独立看门狗(IWDG)
    1、定义:看门狗,又叫watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。看门狗......