首页 > 其他分享 >STM32学习(WDG看门狗)

STM32学习(WDG看门狗)

时间:2024-06-20 11:56:50浏览次数:10  
标签:分频 IWDG WDG 看门狗 STM32 WWDG 寄存器 时钟

1.WDG简介

WDG(Watchdog)看门狗(简单来说就是程序运行的保障措施,我们的在程序中定期的喂狗,如果程序出问题卡死了,没有在规定的时间去喂狗,那么看门狗硬件就会自动帮我们复位一下,防止程序长时间卡死)
看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
STM32内置两个看门狗
    独立看门狗(IWDG):独立工作(就是独立看门狗的时钟时专用的LSI,内部低速时钟,即使主时钟出现问题,看门狗也能正常工作),对时间精度要求较低
    窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用(使用APB1的时钟)

2.IWDG

2.1 IWDG框图

       输入时钟是LSI,内部低速时钟,时钟频率为40KHz,之后,时钟进入预分频器进行分频,这个预分频器只有8位,所以最大只能进行256分频,上面这个预分频寄存器,可以配置分频系数,这个PR和定时器的PSC是一个意思,之后后面,经过预分频器分频之后,时钟驱动递减计数器,每来一个时钟,自减一个数,另外这个计数器是12位的,所以最大值是2的12次方减1,然后,当自减到0之后,产生IWDG复位,正常运行时,为了避免复位,我们可以提前在重装载寄存器写一个值,IWDG_RLR和定时器的ARR一样,那当我们写好值之后,在运行过程中,我们在这个键寄存器里,写一个特定数据,控制电路进行喂狗,这时重装值,就会复制到当前的计数器中,这样记数器就会回到重装值,重新自减运行了,然后,这里有个状态寄存器SR,就是标志电路运行的状态。最后上面的寄存器位于1.8V供电区,下面主要工作的电路,都在VDD供电区。

2.2 IWDG键寄存器

键寄存器本质上是控制寄存器,用于控制硬件电路的工作
在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率

        指令的抗干扰能力强,对PR和RLR的写操作,可以设置一个写保护措施,只有键寄存器写入5555,才能解除写保护,一旦写入其他值,PR和RLR再次被保护起来,这样PR和RLR,就跟键寄存器一起被保护了起来,防止误操作

2.3 IWDG超时时间

超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)
其中:TLSI = 1 / FLSI

        FLSI就是40K,TLSI就是周期,等于40k分之1,等于0.025ms,之后输入时钟进行分频,相当于计数时间加倍,上图是PR和分频系数的关系,最后RLR计数目标乘个RLR+1,就是最终的超时时间。

3.WWDG

3.1 WWDG框图

        时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36MHz,所以就是36M的时钟进来,进来之后,还是先经过一个预分频器进行分频(灵活调节后面计数器的时钟频率,同时预分频系数也是计算计数器溢出时间的重要参数),那接着,分频之后的时钟,驱动这个计数器进行计数, T5—T0是有效计数位,T6是标志位。左边是复位信号输出部分,首先这个WDGA,是窗口看门狗的激活位,也就是使能,WDGA写入1,启用窗口看门狗。 上面这一块实现喂狗时间的最早界限,首先,我们需要计算一个最早界限的计数值,写入这里的W6~W0中,这里的值写入之后是固定不变的,之后这里,一旦我们执行写入CR操作时,这个与门开关就会打开,写入CR,就是写入寄存器,也就是喂狗。在喂狗时,这个比较器开始工作,一旦它比较,我们当前计数器T6:0>窗口值W6:0,比较结果就等于1。

3.2 WWDG工作特性

递减计数器T[6:0]的值小于0x40时,WWDG产生复位
递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位(一般用来执行紧急操作,比如保存重要数据、关闭危险设备等,或者还有一种写法,虽然超市喂狗了,但是我们可以在中断里执行一些代码解决,或者任务不危险,超时了就想做一些提示,不不想让它复位,这样的话,我们就可以在这个早期唤醒中断里,直接执行喂狗,阻止系数复位,然后提示一些信息)
定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

3.3 WWDG超时时间

超时时间:
    TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)
窗口时间:
    TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
其中:TPCLK1 = 1 / FPCLK1

        多乘一个4096,时因为PCLK进来之后先执行一个4096的分频,WDGTB的值与分频系数的关系,就是分频系数=2^WDGTB,对应上表。

4.IWDG和WWDG对比

5.独立看门狗配置

1.开启时钟,只有LSI时钟开启,独立看门狗才能运行(如开启了独立看门狗,那么LSI就会跟随强制打开,等LSI稳定后,就可以自动为独立看门狗提供时钟,这步可以不用写代码)

2.解除写保护

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

3.写入预分频器和重装寄存器

IWDG_SetPrescaler(IWDG_Prescaler_x); 
IWDG_SetReload(x);

4.配置工作完成后,执行启动看门狗的指令

IWDG_ReloadCounter();                         
IWDG_Enable();

5.在主循环里,不断执行喂狗指令

IWDG_ReloadCounter();

6.窗口看门狗配置

1.开启独立看门狗APB1的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

2.配置各个寄存器,比如预分频、窗口值

WWDG_SetPrescaler(WWDG_Prescaler_x);            
WWDG_SetWindowValue(0x40 | xx);

3.写入控制寄存器CR,控制寄存器,包含看门狗使能位,计数器溢出位和计数器有效位

WWDG_Enable(0x40 | xx);(使能第一次喂狗,参数与下方函数相同)

WWDG_SetCounter(0x40 | xx);(主循环喂狗,注意与使能函数的时间间隔)

标签:分频,IWDG,WDG,看门狗,STM32,WWDG,寄存器,时钟
From: https://blog.csdn.net/2401_83265518/article/details/139807705

相关文章

  • 【单片机毕业设计选题24017】-基于STM32的禽舍环境监测控制系统(蓝牙版)
    系统功能:系统分为主机端和从机端,主机端主动向从机端发送信息和命令,从机端收到主机端的信息后回复温湿度氨气浓度和光照强度等信息。主要功能模块原理图:电源时钟烧录接口:单片机和按键输入电路:主机部分电路:从机部分电路:资料获取地址主从机部分代码:初......
  • STM32学习笔记(十)--I2C、IIC总线协议详解
    概述:InterIntegratedCircuit,一组多从多组多从有应答是一种同步(具有时钟线需要同步时钟SCL)、串行(一位一位的往一个方向发送)、半双工(发送接收存在一种)通信总线。(1)硬件电路所有I2C设备的SCL连接在一起,SDA连在一起            设备的SCL和SDA均要......
  • 看门狗 WDG
    嵌入式软件中的看门狗(WatchdogTimer,WDT)是一种监控机制,用于确保系统在出现故障时能够自动恢复正常运行。它通常由硬件定时器和相应的软件组成,当系统中的软件没有在预定时间内喂狗(即重置定时器)时,看门狗会发出一个复位信号,重启系统。以下是两种常见的看门狗及其监控对象的区别:......
  • STM32 基础知识
    下面是您提到的外设的简要说明:1.**SMC(StaticMemoryController)**:静态存储控制器用于控制外部静态存储器(如ROM、RAM)的接口。它负责处理CPU与静态存储器之间的数据传输。2.**TIMER(定时器)**:定时器是一种计数器,可以在预设的时间间隔内产生中断或触发事件。它常用于......
  • STM32学习笔记(五)--TIM输出比较PWM详解
    (1)配置步骤1.配置RCC外设时钟开启GPIO以及TIM外设2.配置时基单元的时钟包含时钟源选择配置初始化时基单元3.配置输出比较单元包含CCR的值输出比较模式极性选择输出使能等4.配置GPIO口初始化为复用式推挽输出的配置5.运行控制启动计数器输出PWM(2)代码示例案例1(TIM_2......
  • stm32经验问题
    1.移植软件模拟IIC的0.96oled的stm32f103驱动代码给stm32f407时,屏幕无法正常点亮原因:原代码中的SCL和SDA高低电平反转时没加延时,stm32f103主频比较低,该问题可以忽略。但是stm32f407主频比较高,有可能SCL还没有拉低,数据就已经开始发送了,导致数据丢失。2.移植别人的基于硬件SPI的......
  • STM32学习(SPI通信)
    本文章根据江科大的视频制作,供学习参考1.SPI通信1.1SPI简介SPI(SerialPeripheralInterface)是由Motorola公司开发的一种通用数据总线四根通信线:SCK/SCLK/CLK/CK(SerialClock)(串行时钟线)、MOSI/DO(MasterOutputSlaveInput)(主机输出从机输入)、MISO/DI(MasterInputSlaveOut......
  • 基于STM32和人工智能的智能家居监控系统
    目录引言环境准备智能家居监控系统基础代码实现:实现智能家居监控系统4.1数据采集模块4.2数据处理与分析4.3控制系统4.4用户界面与数据可视化应用场景:智能家居环境监控与管理问题解决方案与优化收尾与总结1.引言随着智能家居技术的发展,智能家居监控系统在提升家居安......
  • STM32定时器篇——Systick定时器的使用(实现delay延时函数)
    一、Systick定时器的简介:        Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器对于CM3,CM4内核芯片,都有Systick定时器。当Systick计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在......
  • 史上最简单的bootloader【STM32F767】[【二】
    继上一篇史上最简单的bootloader【STM32F767】后,最近进一步研究了下bootloader。任务:bootloader不变,app自我复制,将app搬运到sram中运行。目的:1)学习bootloader;     2)没什么大用处,主要是学习---->看资料说是代码在sram中运行会快一点,本人没有测试过学习过程有点......