博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
独立看门狗及其实现的热启动
阅读量:4327 次
发布时间:2019-06-06

本文共 1095 字,大约阅读时间需要 3 分钟。

     独立看门狗的作用是检测出程序的跑飞,并使系统复位,重新开始工作。比如系统受到干扰,程序指针跑向了其他区,从而导致正常的程序逻辑无法执行,没有在规定时间内喂狗,系统会产生复位,进行一次热启动,单片机开始重新工作。

    当然独立看门狗只能检测出程序跑到其他区的问题,或者跑到当前逻辑里,恰好也在喂狗时间内,执行了喂狗代码,这样就无法区分了,而其实程序已经出错。在这种应用场景下,就需要窗口看门狗了,用窗口看门狗可以记录某一段代码执行的时间,而避免了上述情况。

    现在分析一下独立看门狗的实现。

    STM32F103的时钟树如下图1,独立看门狗是取自LSI,而LSI频率为40KHz的RC振荡器。由时钟树可知,看门狗时钟是独立于系统的主时钟的,即使使用的外部时钟初始化失败时,看门狗也能正常工作。其次就是精度问题,RC振荡器,必然是只能用在对时间精度要求较低的应用场合。

 

                                                                     图1

 

独立看门狗模块如下图2:

                                                                                             图2 

独立看门狗超时时间表如下图3:

                                                                           图3

  独立看门狗配置代码如下:

void IWDG_Configuration()    {  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能写下列各寄存器  IWDG_SetPrescaler(IWDG_Prescaler_16);        //设置时钟分频系数,即40K/16 = 2.5K, 即1T = 0.4ms  IWDG_SetReload(1000);                        //设置重载计数值,t = 1000*0.4ms = 0.4s  IWDG_ReloadCounter();                        //重载寄存器装入重载值,即喂狗  IWDG_Enable(); }

  独立看门狗喂狗代码如下:

IWDG_ReloadCounter();                         //重载计数值,即喂狗

 

  当系统接收到新参数需要重新开机工作,或者IAP之后需要重新工作时,就要用到热启动,有两种方式:软件复位和看门狗复位。当系统复位后,看门狗相关寄存器也被清零,即再开机后看门狗是不工作的。代码如下:

IWDG_Configuration()                         //配置并开启看门狗while(1);                                    //等待看门狗重启

 

转载于:https://www.cnblogs.com/xyelectric/p/9115167.html

你可能感兴趣的文章
Leetcode 6——ZigZag Conversion
查看>>
dockerfile_nginx+PHP+mongo数据库_完美搭建
查看>>
Http协议的学习
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
设计模式那点事读书笔记(3)----建造者模式
查看>>
ActiveMQ学习笔记(1)----初识ActiveMQ
查看>>
Java与算法之(2) - 快速排序
查看>>
Windows之IOCP
查看>>
机器学习降维之主成分分析
查看>>
CTP2交易所成交回报
查看>>
WebSocket & websockets
查看>>
openssl 升级
查看>>
ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
查看>>
CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
查看>>
使用正确的姿势跨域
查看>>
AccountManager教程
查看>>
Android学习笔记(十一)——从意图返回结果
查看>>
算法导论笔记(四)算法分析常用符号
查看>>
ultraedit激活
查看>>
总结(6)--- python基础知识点小结(细全)
查看>>