STM32F407窗口看门狗

//窗口看门狗初始化程序
void WWDG_Init(uint8_t ztr,uint8_t zwr,uint32_t zfprer)
{
 
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟
WWDG_CNT=ztr&WWDG_CNT;   //初始化WWDG_CNT.
WWDG_SetPrescaler(zfprer);         //设置分频值
WWDG_SetWindowValue(zwr); //设置窗口值
//WWDG_SetCounter(WWDG_CNT);//设置计数值
WWDG_Enable(WWDG_CNT);  //开启看门狗,
WWDG_ClearFlag();//清除提前唤醒中断标志位
WWDG_EnableIT();//开启提前唤醒中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//嵌套优先级分组为2,
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);
 
}
/*****************************************************************************/
//窗口看门狗中断服务程序
void WWDG_IRQHandler(void)
{
//        WWDG_SetCounter(WWDG_CNT); //一般不在这个中断里喂狗
WWDG_ClearFlag();//清除提前唤醒中断标志位
//执行一些系统在复位前要做的一些操作,比如保存重要数据等
}
/*****************************************************************************/
//窗口看门狗喂狗操作,即如何喂狗
void          SetWatchDog(void)
{
         zwr=WWDG->CFR&0X5F;//窗口值
         ztr=WWDG->CR&0X7F;//计数值
          if((0x40<ztr)&&(ztr<zwr))//计数器值ztr必须小于窗口值zwr时才可喂狗,在之前喂狗则太        早,会产生看门狗复位
          {//这一地方刚开始错写成if(0x40<ztr<zwr),结果老是提前喂狗导致复位
          WWDG_SetCounter(WWDG_CNT);//喂狗
          printf("正在喂狗\n");
          }
}
粽子糖果 发表于10-27 11:42 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

粽子糖果
粽子糖果(总统)
金币:41624个|学分:51977个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号