STM32 例程看门狗.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32 例程看门狗

独立看门狗实验 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗。 建议:看门狗是定时器的一种,学习看门狗对于理解定时器有着借鉴作用 [编辑] 实验目的: 1.分析和学习固件库 2.理解固件库的结构 3.通过stm32f10x_iwdg.c/.h文件,熟悉IWDG(独立看门狗)的控制和工作原理 4.复习按键中断的使用方法 [编辑] 实验要求: 1.使用LED灯LED1来指示程序是否重启(IWDG) 2.使用按键WAKEUP来不断地喂狗,并用LED4灯指示 [编辑] 硬件分析: [编辑] 看门狗原理: 看门狗又叫watchdog timer(WDT),是一个定时器电路。 ? 一个输入端:叫喂狗引脚; ? 一个输出端:连接到MCU的RESET引脚; 在系统运行以后,启动了看门狗的计数器,看门狗就开始自动计数; MCU正常工作时,每隔一段时间输出一个信号到喂狗端,将WDT清零; 一旦单片机由于干扰造成程序跑飞后,而进入死循环状态时,在超过规定的时间内“喂狗”程序不能被执行,看门狗计数器就会溢出,从而引起看门狗中断,就会输出一个复位信号到MCU,造成系统复位。 在使用看门狗时,要注意适时喂狗。 [编辑] STM32看门狗简介: [编辑] 启动方式: 通过选项字设定: 硬件或软件启动; [编辑] 基本特色: 自由运行的递减计数器; 内部独立的低功耗时钟LSI提供时钟,即使主时钟失效,看门狗仍处于激活状态; 一旦启动独立看门狗,就不能停止(LSI也不能被禁止); 看门狗被激活后,则在计数器计数至0x000时产生复位;在电源稳定期间,即使系统进入STOP和STANDBY模式,独立看门狗复位能将系统从STANDBY模式唤醒。 最适合应用于要求看门狗运行时,完全独立与主应用之外的项目 [编辑] 硬件电路分析: 这里的核心是在STM32内部进行,并不需要外部电路。但是考虑到指示当前状态和喂狗等操作,我们需要2个IO口,一个用来输入喂狗信号,另外一个用来指示程序是否重启。 喂狗我们采用板上的WAKEUP键来操作,而程序重启,则是通过LED4来指示的。LED4和WAKEUP的连接在前面跑马灯实验已经介绍了,这里我们不再多说. . STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟并不是准确的40Khz,而是在30~60Khz之间变化的一个时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。 通过对LSI进行校准可获得相对精确的看门狗超时时间。有关LSI校准的问题,详见数据手册LSI时钟一节。 IWDG的功能框图如上所示。 可以看出,IWDG主要由4个寄存器控制。 Prescaler register :预分频寄存器 Status register :状态寄存器 Reload register :重装载寄存器 Key Register :键值寄存器 IWDG的工作流程如下: 40KHz的LSI时钟信号发送至8位预分频器进行分频,分频后的时钟信号发送至12位的递减计数器,重装载寄存器把12位的重装载数值发送至递减计数器,如果12位的递减计数器没有得到12位的重装载数值,当计数减至0x000时IWDG则复位 具体的寄存器的使用和特点见下。 IWDG寄存器介绍: IWDG寄存器结构,IWDG_TypeDeff,在文件“stm32f10x_map.h”中定义如下: typedef struct { vu32 KR; //Key Register键值寄存器 vu32 PR; //Prescaler register预分频寄存器 vu32 RLR; //Reload registe重装载寄存器 vu32 SR; //Status register状态寄存器 } IWDG_TypeDef; IWDG外设声明于文件“stm32f10x_map.h”: #define PERIPH_BASE ((u32)0 #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) #define IWDG_BASE (APB1PERIPH_

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档