×
单片机 > 单片机程序设计 > 详情

STM32f4窗口看门狗实验代码

发布时间:2020-05-19 发布时间:
|

来我们看看wwdg.c文件内容:

u8 WWDG_CNT=0X7F;

//初始化窗口看门狗    

//tr :T[6:0],计数器值       wr   :W[6:0],窗口值  

//fprer:分频系数(WDGTB),仅最低2 位有效  

//Fwwdg=PCLK1/(4096*2^fprer).  一般PCLK1=42Mhz

void WWDG_Init(u8 tr,u8 wr,u32 fprer)

{

  NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);  

//使能窗口看门狗时钟

  WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.  

  WWDG_SetPrescaler(fprer); //设置分频值

  WWDG_SetWindowValue(wr); //设置窗口值

  WWDG_SetCounter(WWDG_CNT);//设置计数值

  WWDG_Enable(WWDG_CNT);  //开启看门狗

  

  NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看门狗中断

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;    //抢占优先级为2

  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;   //响应优先级为3

  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看门狗

  NVIC_Init(&NVIC_InitStructure);

  

  WWDG_ClearFlag();//清除提前唤醒中断标志位

     WWDG_EnableIT();//开启提前唤醒中断

}

 

//窗口看门狗中断服务程序  

void WWDG_IRQHandler(void)

{

  WWDG_SetCounter (WWDG_CNT); //重设窗口看门狗值

  WWDG_ClearFlag();//清除提前唤醒中断标志位

  LED1=!LED1;

}

wwdg.c文件一共包含两个函数。第一个函数void WWDG_Init(u8 tr,u8 wr,u8 fprer)用来设置 WWDG的初始化值。包括看门狗计数器的值和看门狗比较值等。该函数就是按照我们上面5 个步骤的思路设计出来的代码。注意到这里有个全局变量WWDG_CNT,该变量用来保存最初设置WWDG_CR计数器的值。在后续的中断服务函数里面,就又通过WWDG_SetCounter函数把该数值放回到WWDG_CR上。

最后在中断服务函数里面,先重设窗口看门狗的计数器值,然后清除提前唤醒中断标志。最后对LED1(DS1)取反,来监测中断服务函数的执行状况。  

  wwdg.h 头文件内容比较简单,这里我们就不做过多讲解。

在完成了以上部分之后,我们就回到主函数,代码如下:

int main(void)

{  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

  delay_init(168);          //初始化延时函数

  LED_Init();      //初始化 LED 端口

  KEY_Init();         //初始化按键

  LED0=0;           //点亮 LED0

  delay_ms(300);

  WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8);  

//计数器值为 7f,窗口寄存器为5f,分频数为8      

  while(1)

  {

    LED0=1;  //熄灭 LED 灯

  }

}

该函数通过 LED0(DS0)来指示是否正在初始化。而 LED1(DS1)用来指示是否发生了中断。我们先让 LED0亮 300ms,然后关闭以用于判断是否有复位发生了。在初始化 WWDG 之后,我们回到死循环,关闭LED1,并等待看门狗中断的触发/复位。

在编译完成之后,我们就可以下载这个程序到探索者 STM32F4 开发板上,看看结果是不是和我们设计的一样。


关键字:STM32f4  窗口看门狗  实验代码 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址