STM32F103ZET6之独立看门狗实验
文章目录
前言
对于STM32的学习可分为3个版本。
1.寄存器版本
2.库函数版本
3.HAL库版本
由于个人原因,选择库函数版本来进行STM32的学习。
提示:软件安装等问题,不进行讲解!!!
一、看门狗相关概述
1.概念
2.原理
二、相关寄存器
1.键值寄存器( IWDG_KR)
2.预分频寄存器( IWDG_PR)
3.重装载寄存器( IWDG_RLR)
4.状态寄存器( IWDG_SR)
三、操作步骤
1.独立看门狗超时时间计算
2.操作步骤
四、程序源码
1.iwdg.h
代码如下:
#ifndef __IWDG_H
#define __IWDG_H
#include "sys.h"
void IWDG_Init(u8 prer,u16 rlr);
#endif
2.iwdg.c
代码如下:
#include "iwdg.h"
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//取消寄存器写保护
IWDG_SetPrescaler(prer);//设置独立看门狗的预分频系数
IWDG_SetReload(rlr);//设置看门狗重装载值
IWDG_Enable();//使能看门狗
}
3.main.c
代码如下:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "beep.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "iwdg.h"
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
LED_Init();
Beep_Init();
KEY_Init();
uart_init(115200);
EXTIX_Init();
IWDG_Init(4,625);//1s 1000ms=4*2^4/40*rlr
delay_ms(200);
LED1=0;
while(1)
{
if(KEY_SCAN(1)==KEY0_PRES)
{
IWDG_ReloadCounter();
}
}
}
五、实验结果
无操作时,LED0每隔200ms点亮,一直进行复位操作;
当按下一次KEY0按键,相当于"喂狗"一次,此时不进行复位操作;
当一直按下KEY0按键,LED0不亮,此时一直"喂狗",一直无法进行复位操作;
总结
只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。