STM32之独立看门狗实验

来源:本站
导读:目前正在解读《STM32之独立看门狗实验》的相关信息,《STM32之独立看门狗实验》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32之独立看门狗实验》的详细说明。
简介:STM32之独立看门狗这个实验做了很久了,现在感觉有满又蛮多人在玩STM32了,趁现在还火发给大家。以前也是因为学校要求要做,所以才做的。废话不多说了,入主题。

实验现象:

开始LED1亮,LED2熄灭,若不隔时间按KEY1则发现LED2因独立看门狗的作用使系统复位而不断闪烁,若间断的按KEY1则发现LED2不会闪烁,表明没有复位。

实验平台:

基于STM32F103C8T6的彩屏开发板

操作步骤:

1)向IWDG_KR 写入0X5555。

通过这步,我们取消IWDG_PR 和IWDG_RLR 的写保护,使后面可以操作这两个寄存器。

设置 IWDG_PR 和IWDG_RLR 的值。

这两步设置看门狗的分频系数,和重装载的值。由此,就可以知道看门狗的喂狗时间(也

就是看门狗溢出时间),该时间的计算方式为:

Tout=((4×2^prer) ×rlr) /40

其中Tout 为看门狗溢出时间(单位为ms);prer 为看门狗时钟预分频值(IWDG_PR 值),

范围为0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值);

比如我们设定 prer 值为4,rlr 值为625,那么就可以得到Tout=64×625/40=1000ms,这样,

看门狗的溢出时间就是1s,只要你在一秒钟之内,有一次写入0XAAAA 到IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准

确的40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

2)向IWDG_KR 写入0XAAAA。

通过这句,将使STM32 重新加载IWDG_RLR 的值到看门狗计数器里面。也可以用该命令

来喂狗。

3)向IWDG_KR 写入0XCCCC。

通过这句,来启动 STM32 的看门狗。注意IWDG 在一旦启用,就不能再被关闭!想要关

闭,只能重启,并且重启之后不能打开IWDG,否则问题依旧,所以在这里提醒大家,如果不

用IWDG 的话,就不要去打开它,免得麻烦。

通过上面 3 个步骤,我们就可以启动STM32 的看门狗了,使能了看门狗,在程序里面就

必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们通过一个LED 灯来指

示程序是否重启,来验证STM32 的独立看门狗。

程序部分代码:

watchdong.h

#ifndef WATCHDOG_H

#define WATCHDOG_H

void WatchDog_Init(u8, u16);//申明看门狗的初始化函数

void WatchDog_Feed(void);//申明喂狗的函数

#endif

watchdong.c

#include"common.h"

#include"watchdog.h"

//看门狗初始化,参数:prer-分频,reld-计数器重装载值

void WatchDog_Init(u8 prer, u16 reld)

{

IWDG->KR=0x5555; //允许访问PR和RLR寄存器

IWDG->PR=prer;//设置分频

IWDG->RLR=reld; //设定计数器初值

IWDG->KR=0xaaaa; //初次装初值

IWDG->KR=0xcccc;//启动看门狗定时器

}

//喂狗

void WatchDog_Feed(void)

{

IWDG->KR=0xaaaa;

}

该代码就2 个函数,void IWDG_Init(u8 prer,u16 rlr)是独立看门狗初始化函数,就是按照

上面介绍的步骤来初始化独立看门狗的。该函数有2 个参数,分别用来设置与预分频数与重装

寄存器的值的。通过这两个参数,就可以大概知道看门狗复位的时间周期为多少了。其计算方

式上面有详细的介绍,这里不再多说了。

void IWDG_Feed(void)函数,该函数用来喂狗,因为STM32 的喂狗只需要向键值寄存器写

入0XAAAA 即可,

主函数

#include<stm32f10x_lib.h>

#include"common.h"

#include"led.h"

#include"key.h"

#include"watchdog.h"

int main(void)

{

u8 temp2;

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72); //延时初始化

LED_Init(); //LED初始化

KEY_Init();

WatchDog_Init(4,625); //看门狗初始化

LED1=1;

LED2=0;

while(1)

{

temp2=KEY_Scan(); //读取按键值

if(temp2==1)

WatchDog_Feed(); //喂狗

}

}

提醒:《STM32之独立看门狗实验》最后刷新时间 2024-03-14 01:08:11,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32之独立看门狗实验》该内容的真实性请自行鉴别。