概述
开发步骤
(1)开启寄存器访问(给 IWDG_KR 寄存器写入 0X5555) 通过前面内容的介绍我们知道 IWDG_PR 和 IWDG_RLR 寄存器具有写访问保 护。若要修改寄存器,必须首先对 IWDG_KR 寄存器写入代码 0x5555,如果写入 其他的值将重新开启写保护。在库函数中实现函数如下: IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护 这个函数非常简单,里面的参数就是用来使能或失能写访问,即开启或关闭 写访问
(2)设置 IWDG 预分频系数和重装载值 设置 IWDG 预分频系数函数为: void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频 值 设置 IWDG 重装载值函数为: void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值 设置好 IWDG 的分频系数 pre 和重装载值就可以知道独立看门狗的喂狗时 间,也就是看门狗溢出时间,该时间的计算公式前面已经介绍,公式如下: Tout = (4*2^pre) / 40 * rlr 其中 Tout 为独立看门狗溢出时间,单位是 ms。pre 是预分频器系数(0-6), rlr 是重装载寄存器的值,公式内的 40 是独立看门狗的时钟。
(3)重载计数器值(喂狗)(给 IWDG_KR 寄存器写入 0XAAAA) 重载计数器值(喂狗)库函数是: IWDG_ReloadCounter(); //重装载初值 此函数功能是将 IWDG_RLR 寄存器内值重新加载到独立看门狗计数器内,实 现喂狗操作。
(4)开启 IWDG(给 IWDG_KR 寄存器写入 0XCCCC) 要使用独立看门狗,我们还需要打开它,开启 IWDG 的库函数是: IWDG_Enable(); //打开独立看门狗 这里提醒下大家:IWDG 在一旦启用,就不能再被关闭,想要关闭,只能重 启,并且重启之后不能打开 IWDG,否则问题依旧存在。所以如果不用 IWDG 的 话,就不要去打开它,免得麻烦
iwdg.h+iwdg.c
#ifndef _iwdg_H
#define _iwdg_H
#include "system.h"
void IWDG_Init(u8 pre, u16 rlr);
void IWDG_FeedDog();
#endif
#include "iwdg.h"
void IWDG_Init(u8 pre, u16 rlr)//分频系数0-6,重装载值
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//取消寄存器写保护
IWDG_SetPrescaler(pre);
IWDG_SetReload(rlr);
//接下来喂狗
IWDG_ReloadCounter();
IWDG_Enable();//使能
}
void IWDG_FeedDog()//封装说明一下
{
IWDG_ReloadCounter();
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "system.h"
#include "SysTick.h"
#include "beep.h"
#include "key.h"
#include "exti.h"
#include "time.h"
#include "pwm.h"
#include "usart.h"
#include "stdio.h"
#include "iwdg.h"
int main()
{
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组
SysTick_Init(72);
LED_Init();
KEY_Init();
USART1_Init(115200);//波特率115200
IWDG_Init(4,800);//Tout = (4*2^pre) 时间计算公式,共1280ms
LED2=1;
printf("复位系统rn");
while(1)
{
if(KEY_Scan(0)==KEY_UP_PRESS)
{
IWDG_FeedDog();
LED2=0;
printf("喂狗rn");
}
i++;
if(i%50==0)
{
LED1=!LED1;
}
delay_ms(10);
}
}
最后
以上就是会撒娇绿茶为你收集整理的IWDG独立看门狗实验开发步骤的全部内容,希望文章能够帮你解决IWDG独立看门狗实验开发步骤所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复