STM32f4————独立看门狗实验代码
/*******************************************************/
iwdg.c里面的代码如下:
#include "iwdg.h"
//初始化独立看门狗
//prer:分频数:0~7(只有低 3位有效!) rlr:自动重装载值,0~0XFFF.
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护
IWDG_SetPrescaler(prer); //设置 IWDG分频系数
IWDG_SetReload(rlr); //设置IWDG装载值
IWDG_ReloadCounter(); //reload
IWDG_Enable(); //使能看门狗
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter();//reload
}
该代码就 2个函数,void IWDG_Init(u8 prer,u16 rlr)是独立看门狗初始化函数,就是按照上面介绍的步骤来初始化独立看门狗的。该函数有2 个参数,分别用来设置预分频数与重装载寄存器的值的。通过这两个参数,就可以大概知道看门狗复位的时间周期为多少了。其计算方式上面有详细的介绍,这里不再多说了。
void IWDG_Feed(void)函数,该函数用来喂狗,因为STM32的喂狗只需要向关键字寄存器写入 0XAAAA 即可,也就是调用库函数 IWDG_ReloadCounter(),所以这个函数也是很简单的。
iwdg.h 内容比较简单,主要是一些函数申明,这里我们忽略不讲解。
接下来我们看看主函数,主程序里面我们先初始化一下系统代码,然后启动按键输入和看门狗,在看门狗开启后马上点亮 LED0(DS0) ,并进入死循环等待按键的输入,一旦 KEY_UP有按键,则喂狗,否则等待IWDG 复位的到来。该部分代码如下:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
LED_Init(); //初始化 LED 端口
KEY_Init(); //初始化按键
delay_ms(100); //延时 100ms
IWDG_Init(4,500); //与分频数为 64,重载值为500,溢出时间为1s
LED0=0; //先点亮红灯
while(1)
{
if(KEY_Scan(0)==WKUP_PRES)//如果WK_UP 按下,则喂狗
{
IWDG_Feed();//喂狗
}
delay_ms(10);
};
}
上面的代码,鉴于篇幅考虑,我们没有把头文件给列出来(后续实例将会采用类同的方式处理) ,因为以后我们包含的头文件会越来越多,大家想看,可以直接打开光盘相关源码查看。至此,独立看门狗的实验代码,我们就全部编写完了,接着要做的就是下载验证了,看看我们的代码是否真的正确。
/*******************************************************/
【立创商城】STM32F103CBT6 托盘 https://item.szlcsc.com/8796.html |