微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记---IWDG独立看门狗实验

STM32学习笔记---IWDG独立看门狗实验

时间:11-23 来源:互联网 点击:
继做了WWDG窗口看门狗实验后,继续进行第9个实验-IWDG独立看门狗实验,本实验通过设置窗口看门狗IWDG间断时间来定期的检查是否出错,在SysTick_Handler中断函数中加入了流水灯用来测试是否运行了IDWG看门狗程序,用PD6-LED2通过闪烁验证程序可行性,编程工程大致和USART实验过程差不多,先是开启系统时钟,然后GPIO端口时钟,然后复用功能时钟AFIO,然后各个模块用的的时钟,,呵呵,之后进入各个模块初始化,设置,编写子程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。

以下为IWDG函数主要部分:

//IWDG窗口看门狗设置初始化
void IWDG_Config(void)
{
//独立看门狗初始化
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//启动寄存器读写

IWDG_SetPrescaler(IWDG_Prescaler_32);//40K时钟32分频

IWDG_SetReload(349); //计数器数值

IWDG_ReloadCounter(); //重启计数器

IWDG_Enable(); //启动看门狗
}
***********************************************************

注意事项:

i. 有狗平常没事情可以不理,但是千万别忘了喂它,否则死都不知道怎么死的!

ii. 初始化程序的调用一定要在systic的初始化之后。

iii. 独立看门狗需要systic中断来喂,但是systic做别的用处不能只做这件事,所以我写了如下几句代码,可以不影响systic的其他应用,其他systic周期代码也可参考:

第一步:在stm32f10x_it.c中定义变量

int Tic_IWDG; //喂狗循环程序的频率判断变量

第二步:将SysTickHandler中喂狗代码改为下面:

Tic_IWDG++; //变量递增

if(Tic_IWDG>=100) //每100个systic周期喂狗

{ IWDG_ReloadCounter();//重启计数器(喂狗)

Tic_IWDG=0; //变量清零

}

完整代码为

void SysTick_Handler(void)
{
Tic_Val++; //精确延时变量递增

Tic_IWDG++; //独立看门狗变量递增

if(Tic_IWDG>=100) //每100个systic周期喂狗

{
IWDG_ReloadCounter();//重启计数器(喂狗)
Tic_IWDG=0; //变量清零

switch(IWDGFLAG)
{
case 0:
GPIO_SetBits(GPIOD, GPIO_Pin_6);
break;
case 1:
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
break;
default:
break;
}
IWDGFLAG=!IWDGFLAG;

}
}
以下为IWDG函数结果部分:





Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top