打印
[STM32]

立创商城STM32F系列——STM32f4窗口看门狗实验代码

[复制链接]
513|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小乐Tzz|  楼主 | 2018-8-31 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f4————窗口看门狗实验代码
/*******************************************************/
来我们看看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 开发板上,看看结果是不是和我们设计的一样。
/*******************************************************/


【立创商城】STM32F103CBT6 托盘  https://item.szlcsc.com/8796.html

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

70

帖子

0

粉丝