找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 1891|回复: 0
打印 上一主题 下一主题
收起左侧

STM32看门狗操作

[复制链接]
跳转到指定楼层
楼主
ID:365205 发表于 2018-7-4 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

窗口看门狗( WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。

简单来说,和IWDG的区别就是IWDG要靠手动去喂狗,而WWDG有内置中断,所以可以利用设置中断服务函数去喂狗

首先还是设置WWDG (记得往工程里面添加头文件)大致设置步骤如下:

1)使能 WWDG 时钟(系统内部时钟)

2)设置窗口值和分频数

3)开启 WWDG 中断并分组

4) 设置计数器初始值并使能看门狗

5) 编写中断服务函数

  • #include "led.h"



  • #include "wwdg.h"



  • //保存 WWDG 计数器的设置值,默认为最大.



  • u8 WWDG_CNT=0x7f;



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



  • {



  •         RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);



  •         WWDG_SetPrescaler(fprer);////设置 IWDG 预分频值



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



  •         WWDG_Enable(tr); //使能看门狗 , 设置 counter .



  •         WWDG_ClearFlag();



  •         WWDG_NVIC_Init();//初始化窗口看门狗 NVIC



  •         WWDG_EnableIT(); //开启窗口看门狗中断



  • }



  • void WWDG_NVIC_Init(void)



  • {



  •         NVIC_InitTypeDef NVIC_ist;



  •         NVIC_ist.NVIC_IRQChannel=WWDG_IRQn;



  •         NVIC_ist.NVIC_IRQChannelPreemptionPriority=2;



  •         NVIC_ist.NVIC_IRQChannelSubPriority=3;



  •         NVIC_ist.NVIC_IRQChannelCmd=ENABLE;



  •         NVIC_Init(&NVIC_ist);



  • }



  • void WWDG_IRQHandler(void)



  • {



  •         WWDG_SetCounter(0x7f);//喂狗



  •         WWDG_ClearFlag();//清除提前唤醒标志



  •         LED1=!LED1;//检测中断函数是否工作了

  • }

简单来讲(只是个人愚见)就是WWDG是一个递减的计数器,从最大值递减到0,到0的时候如果没喂狗(就是重置计数器,比如说将它重置为最大值)就会复位,但中断触发是在中途进行的,就是当递减到0x40的时候就会触发中断,这时候会转到我们写的中断服务函数里面去,只要我们在中断服务函数里面写喂狗函数就可以一直喂狗了



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表