- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)