STM32学习记录之看门狗

发布者:MysticalEssence最新更新时间:2020-05-13 来源: eefocus关键字:STM32  看门狗 手机看文章 扫描二维码
随时随地手机看文章

看门狗(WatchDog)是什么?


看门狗简介

STM32 有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,本章我们主要分析独立看门狗的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12 位的递减计数器,当计数器的值从某个值一直减到0 的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由VDD电压域供电,在停止模式和待机模式下仍能工作。


看门狗用途

看门狗常用于防止系统跑飞,系统程序崩溃时自动复位重启。为系统运行提供一层保险。


LSI 时钟

独立看门狗的时钟由独立的 RC振荡器 LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般在 30~60KHZ之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。


预分频寄存器

递减计数器的时钟由LSI经过一个8位的预分频器得到,我们可以操作预分频器寄存器IWDG_PR来设置分频因子,分频因子可以是:[4,8,16,32,64,128,256,256],计数器时钟CK_CNT= 40/ 4*2^PRV,一个计数器时钟计数器就减一。


递减计数器

独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。


重装载寄存器

重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。超时时间 Tout = (4*2^prv) / 40 * rlv (s) ,prv是预分频器寄存器的值,rlv是重装载寄存器的值。


秘钥寄存器

键值寄存器 IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。

image.png

通过写往键寄存器写 0XCCC 来启动看门狗是属于软件启动的方式,一旦独立看门狗启动,它就关不掉,只有复位才能关掉。


状态寄存器

状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。


看门狗代码示例

IWDG函数

#include "wdg.h"

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"



// IWDG初始化

//Tout=((4*2^prer)*rlr)/40 (ms).

void IWDG_Init(u8 prer,u16 rlr) 

{

  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //

IWDG_SetPrescaler(prer);  //

IWDG_SetReload(rlr);  //

IWDG_ReloadCounter();  //

IWDG_Enable();  //

}

//喂狗

void IWDG_Feed(void)

{   

  IWDG_ReloadCounter();//reload    

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

IWDG使用

int  main()

{

    RCC_DeInit();

    NVIC_DeInit();

    sys_init();

IWDG_Init(4,1250);    //IWDG定时2S



    while(1)

    {


        Per_5ms_tasks(); //

        Per_10ms_tasks();//

Per_100ms_tasks();

        Per_1s_tasks();

IWDG_Feed();//

    }

}

关键字:STM32  看门狗 引用地址:STM32学习记录之看门狗

上一篇:STM32CubeMx开发之路—3发送USART数据和printf重定向
下一篇:STM32定时器分时操作系统

推荐阅读最新更新时间:2024-11-05 08:13

STM32 基础系列教程 0 - CubeMX 下载与安装
前言 学习STM32CUBEMX工具的下载与安装,学会从st官网(www.st.com)查找与下载资料。 示例详解 STM32CUBEMX 下载 进入st官网(www.st.com),在官网的网页搜索框中输入STM32cubeMX 在跳转后面网页中,点 Get Software 网页自动跳转到尾部,选选最高版本(如图中5.0.1) 在弹出的界面中点ACCEPT,然后输入用户名及邮箱地址(用于接收下载地址),勾选I have…后点DOWNLOAD 此时网页显示界面如下,登入邮箱,去查收下载地址,在接收到的邮件中直接点击DownLoad Now 网页自动加载,然后自动下载 stm32cub
[单片机]
<font color='red'>STM32</font> 基础系列教程 0 - CubeMX 下载与安装
关于STM32中RTC的校准方法
实现RTC 校准的核心之一是库文件Stm321f0x_bkp.c中的void BKP_SetRTCCalibrationValue (uint8_t CalibrationValue) 函数。谈到RTC校准的相关参考文档包括AN2604.pdf,AN2821.pdf和AN2821.zip。这三个文档都可以从STM32官方网站下载。 按照AN2604.pdf描述的原理,RTC 的校准值应在0-127之间。可实现的校准误差对应为0-121ppm。相当于每30天跑快的秒数为0-314s。 这里应注意的一个关键问题是,RTC只能对跑快进行校准,不能对跑慢进行校准。如果手表晶振的标称频率是32768Hz,设其可能的误差范围是 2Hz,则实
[单片机]
基于ARM公司STM32的智能电机保护器设计
0 引言 电机是工业生产领域中最主要的驱动源,如何有效地监控电机的运行状态,保护电机回路,提高电机的运行时间,减少电机故障,对工厂整体电网的运行十分关键。 电动机保护装置有很多种,目前使用得比较普遍的还是基于金属片机械式的热继电器,它结构简单,在保护电动机过载方面具有反时限特性。但它的保护功能少,无断相保护,对电机发生通风不畅、扫膛、堵转、长期过载、频繁启动等故障也不能起保护作用。此外,热继电器还存在重复性能差、大电流过载或短路故障后不能再次使用、调整误差大、易受环境温度影响而误动或拒动、功耗大、耗材多、性能指标落后等缺陷。 为响应国家节能减排的要求,采用基于微控制器的电子式电机保护器替代现有热继电器,具有广大的
[单片机]
基于ARM公司<font color='red'>STM32</font>的智能电机保护器设计
【玩转STM32】:低功耗定时器LPTIM应用
目标实现:使用LPTIM1,在低功耗stop模式下定时1s,1s后将STM32从stop模式唤醒,并且点亮LED灯 1 LPTIM 介绍 LPTIM,顾名思义,即低功耗定时器的意思,与普通定时器的差别是LPTIM在睡眠或者停机模式下依然可以工作(待机模式除外),支持低速时钟 LSI、 LSE 或者外部输入时钟。LPTIM是低功耗产品在低功耗功耗模式下定时的不二之选 支持芯片:并不是STM32的所有芯片都有LPTIM这个外设,,从官方资料可知,支持LPTIM的芯片有:STM32F410、STM32F413/423、STM32F7系列, STM32G0系列, STM32H7系列, STM32L0系列, STM32L4系列, ST
[单片机]
【玩转<font color='red'>STM32</font>】:低功耗定时器LPTIM应用
STM32 Cubemax(十五) —— 串级PID以控制电机角度值为例
前言 很早前说要补的坑,今天补一下。之前介绍过单级的PID来控制电机的速度值,建议先看下面这篇文章,因为后面代码和这篇文章有关联! STM32 Cubemax(七) —— 单级PID控制带编码器的直流减速电机速度 而这次,我们来讲解一下怎么控制电机的角度,如果用单级PID控制角度会有什么问题,为什么要用串级PID。 当然串级PID不只是可以控制电机的角度,如现在诸多的控制系统,倒立摆,风力摆,平衡小车等等,都是基于串级PID的控制。 一、单级PID控制电机角度 如果还用我们之前熟知的单级PID来控制角度值,我们很容易的可以得出以下框图。 看上去很完美,没有什么问题,但这里面最大的问题就在于单片机给电机的是PWM
[单片机]
<font color='red'>STM32</font> Cubemax(十五) —— 串级PID以控制电机角度值为例
基于STM32与机智云的智能蜡疗机
摘要: 随着物理疗法在慢病治疗中的效果获得认可, 传统的石蜡疗法被广泛应用在医院的理疗科。目前, 蜡疗机的制蜡方法虽已趋于成熟, 但仍存在制蜡效率低下、功耗大、不够智能等问题, 因此有必要对蜡疗机的制蜡效率及智能化程度进行研究。以STM32微控制器为核心, 结合G510通信模块, 对蜡疗机的硬件系统进行优化设计;通过机智云物联网开发技术, 对蜡疗机进行控制和通信。 试验结果表明, 与现有产品相比, 该系统减少了制蜡时间、降低了蜡疗机的功耗, 实现了蜡疗机的物联网控制。该研究为进一步完善蜡疗机的功效提供了设备基础, 对蜡疗机的广泛应用具有积极促进作用, 对今后利用石蜡疗法进行理疗大数据的挖掘与应用具有重要意义。 0 引言 经
[单片机]
基于<font color='red'>STM32</font>与机智云的智能蜡疗机
STM32的ADC及内部温度传感器的使用
STM32自带1-3个ADC模块,采样精度达到了12位,比起当年使用的AVR单片机的10位来说,上了个小档次了~本测试程序采用了ADC DMA的中断方式,这样CPU就可以把ADC的任务交给DMA这个勤劳肯干的部下了,当DMA完成了一次任务之后会产生中断,告诉CPU可以来查收结果了!DMA也是在嵌入式系统中非常常用的,例如在LCD中,数据拷贝中等。。。在STM32F103RBT6中,ADC1和ADC2共用一组管脚   总体编程思路和顺序如下:   1.初始化RCC相关,使得系统有时钟,功能模块如ADC、DMA有时钟。   2.GPIO相关初始化,比如常用的指示灯,ADC的管家要设置为输入等。   3.NVIC向量中断的配置,
[模拟电子]
stm32学习之四
systick(滴答定时器): 系统的滴答定时器可以测试的例子是,将开发板上的LED等轮流点亮即可(我选择的是1s轮流点亮三个LED等)。 首先,系统滴答定时器的特点是,设置开启定时器的话,会自动计数,这个时候,计数到0的时候,会触发中断。 可以设置一个静态的变量,全局进行计数,从而延时。 步骤: 1、建立一个SysTick.h文件,代码如下: #ifndef _SYSTICK_H #define _SYSTICK_H #include stm32f10x.h void SysTick_Init(void); //void timeDecrement(void); void delay(__IO ui
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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