STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看
门狗设备( 独立看门狗窗口看门狗 )可用来检测和解决由软件错误引起的故障;当计数器达到给
定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

  独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门
狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟
或过早的操作。

  IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精
度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

  看门狗主要是用来对系统运行状态进行监控的,以免系统被干扰后代码跑飞了,导致系统混乱。看门狗的使用也比较简单,下面就分别来看一下独立看门狗和窗口看门狗的使用方法。

独立看门狗

//初始化独立看门狗
//prer:分频数:0~7(只有低 3 位有效!)
//分频因子=4*2^prer.但最大值只能是 256!
//rlr:重装载寄存器值:低 11 位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{// 1、取消寄存器写保护 写0x5555IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 2、设置独立看门狗预分频系数IWDG_SetPrescaler(prer);// 3、设置独立看门狗重装载值IWDG_SetReload(rlr);;// 4、重载计数值喂狗 写0xAAAAIWDG_ReloadCounter();// 5、启动看门狗     写0xCCCCIWDG_Enable();
}
void IWDG_Feed(void)
{IWDG_ReloadCounter();
}

独立看门狗的初始化很简单,主要就是设置一下喂狗的时间。然后在程序运行过程中不停的喂狗。

int main(void)
{u8 key = 0;delay_init();       //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();KEY_Init();IWDG_Init(4, 625);   //溢出时间为1s  (4*2^4)*625/40=1000msLED0 = 1;LED1 = 1;delay_ms(500);LED0 = 0;LED1 = 0;while(1){key = KEY_Sacn(1);if( key == WKUP_PRES){IWDG_Feed();}delay_ms(10);}
}

这里通过一个按键来模拟喂狗,当按键按一次,就会喂狗一次。如果按键超过喂狗时间没有按下时,独立看门狗就会使系统复位。

窗口看门狗

u8 WWDG_CNT = 0x7f;
void WWDG_NVIC_Init(void)
{NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低 2 位有效
//Fwwdg=PCLK1/(4096*2^fprer)
void WWDG_Init(u8 tr, u8 wr, u32 fprer)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); //时钟使能WWDG_CNT = tr & WWDG_CNT;WWDG_SetPrescaler(fprer);         //设置预分频值WWDG_SetWindowValue(wr);            //设置窗口值 上窗口值  与喂狗间隔没关系WWDG_Enable(WWDG_CNT);            //使能看门狗,设置计数值WWDG_ClearFlag();               //清除提前唤醒中断WWDG_NVIC_Init();             //设置中断优先级WWDG_EnableIT();               //开启窗口看门狗中断
}
void WWDG_Set_Counter(u8 cnt)
{WWDG_Enable(cnt);              //使能看门狗,设置计数值
}
void WWDG_IRQHandler(void)
{WWDG_SetCounter(WWDG_CNT);            //喂狗WWDG_ClearFlag();                //清除提前唤醒中断LED0=!LED0;
}

由于窗口看门狗的喂狗时间很短,在程序运行过程中很难判断出什么时候该喂狗,所以这里喂狗使用中断来执行,在需要喂狗的时候,直接触发中断,在中断中进行喂狗,每喂一次狗,LED就取反一次。通过观察LED的闪烁就可看出中断函数的执行情况。

int main(void)
{u8 key = 0;delay_init();       //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();KEY_Init();//IWDG_Init(4, 625); //溢出时间为1s  (4*2^4)*625/40=1000msLED0 = 1;LED1 = 1;delay_ms(500);LED0 = 0;LED1 = 0;//窗口看门狗喂狗间隔 只和 tr 低6位有关  wr 可以设置为0x40---0x7f 之间的任意值// 4096*2^3*64/36000000 = 58.25ms   (64为0x7f 低6位值)WWDG_Init(0x7f, 0x7f, WWDG_Prescaler_8); //计数器值7f,窗口寄存器5f,分频数为8// 4096*2^3*31/36000000 =28.22ms   (31为0x4f 低6位值)//WWDG_Init(0x5f, 0x5f, WWDG_Prescaler_8);// 4096*2^3*15/36000000 =13.65ms   (15为0x4f 低6位值)//WWDG_Init(0x4f, 0x5f, WWDG_Prescaler_8); // 4096*2^3*1/36000000 =910us  (1为0x41 低6位值)  窗口最小值为0x40 //WWDG_Init(0x41, 0x5f, WWDG_Prescaler_8);while(1){       }
}

在主函数中通过设置不同的溢出时间来观察LED灯的闪烁频率。

STM32F103看门狗功能实现相关推荐

  1. 【芯片应用】具有看门狗功能的超低功耗系统计时器TPL5010

    目录 一.简介 二.同系列对比 三.引脚 四.应用推荐 五.编程 六.PCB设计 七.封装分享 一.简介 具有看门狗功能的纳瓦级功耗系统计时器-TPL5010 TPL5010是一款超低功耗的计时器,其 ...

  2. (29)基于FPGA实现看门狗功能(FPGA不积跬步101)

    1 引言  微处理(ARM.单片机)在特殊的环境下,运行代码或程序会跑到非预期状态,也就是说系统可能会进入死循环,这种情况微处理器无法进行自我恢复,只能通过复位或者重启进行解决.看门狗就是解决这种情况 ...

  3. Python 看门狗功能实现

    前言: 用 python 实时实现监控一个文件夹功能,将监控到的 Excel(笔者目前用于解析excel文件)解析写到 mysql 中,起功能和 sparkStreaming 中的 textFileS ...

  4. HC32F460开发之看门狗功能

    文章目录 前言 一.看门狗是什么? 二.看门狗的使用 1.简介 2.启动 3.刷新看门狗计数器 总结 前言 在一些设备需要长时间稳定运行的场合中,看门狗功能可以说是必不可少的.但在一些低功耗设备中,硬 ...

  5. STM8单片机ADC模拟看门狗功能实现

      看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢?   简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断 ...

  6. stm32增加IWDG(看门狗)功能

    现有工程是通过stm32CubeMX生成,并且新增很多逻辑.当前需求是需要增加看门狗功能,如果还是用stm32CubeMX生成,还需要将之前的逻辑再移植一遍,很麻烦. 1. 先新建一个stm32Cub ...

  7. STM32开发(11)----CubeMX配置独立看门狗(IWDG)

    CubeMX配置独立看门狗(IWDG) 前言 一.独立看门狗的介绍 二.实验过程 1.STM32CubeMX配置独立看门狗 2.代码实现 3.硬件连接 4.实验结果 总结 前言 本章介绍使用STM32 ...

  8. STM8S看门狗配置失败的原因

    配置STM8S207的看门狗,必须先使能看门狗功能模块,然后再配置其参数,这个和STM32F103不同. //函数功能:配置看门狗复位时间为1000毫秒 void IWDG_Config(void) ...

  9. WINCE平台下C#应用程序中使用看门狗

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让 ...

最新文章

  1. BPM与Portal SSO实施方案v2
  2. 前SAP全球VP加盟第四范式任总裁,戴文渊:加速多行业规模化扩展
  3. iOS SDWebImage 缓存机制与缓存策略
  4. 2021阿里巴巴大数据技术公开课第一季:外部工具连接SaaS模式云数仓MaxCompute实战
  5. 除留余数法构造哈希表_哈希表算法原理
  6. JavaScript学习杂记--对象和数组
  7. 直接点oracle表编辑器,DbForge Studio for Oracle入门教程:如何在表编辑器中创建表...
  8. Nature150岁生日:盘点史上十大重磅论文,中国13篇文章登上封面!
  9. python 数据类_python数据类
  10. Shell学习之IF的使用
  11. hibernate 联合主键
  12. asp.net MVC遇到的问题
  13. 现在完成进行时和现在完成时的区别
  14. 图像融合综述论文整理
  15. 隐私权斗士库克:出身平凡 从小喜欢伸张正义
  16. SAP系统配置SMPT邮箱
  17. ## STM32——闪烁灯程序
  18. 使用html canvas制作简易画板
  19. 邹城的关于机器人教育_济宁市教育局 文件公告 关于公布济宁市第四批中小学机器人教育实验室建设试点学校名单的通知...
  20. 去掉 VC2017里输出:warning LNK4099

热门文章

  1. java加载dtk控件,DTK教程 五 :一些基本的控件(三) 输入框
  2. 什么是IT运维管理体系?该如何建设IT运维管理体系?
  3. Kali linux 学习笔记(二十三)提权——几个好工具(WCE、fgdump、mimikatz) 2020.3.4
  4. Vue 动态路由和权限菜单的实现思路
  5. Culling 渲染剔除
  6. 巅峰之作推荐:遥仰凰华——仰望那份遥远的美丽 遥かに仰ぎ、麗しの(下载、汉化、简繁日攻略、存档)...
  7. 售后服务也是crm客户管理系统的一大重点
  8. Ubuntu18.04安装显卡驱动导致开机时卡在『ok』‘starting Gnome display manager
  9. 网络安全专业人员应该具备哪些技能
  10. img 标签 的 title 和 alt 有什么区别