STM32笔记之十三:恶搞,两只看门狗

发布者:美好回忆最新更新时间:2015-09-29 来源: eefocus关键字:STM32  看门狗 手机看文章 扫描二维码
随时随地手机看文章
a)        目的:

了解两种看门狗(我叫它:系统运行故障探测器和独立系统故障探测器,新手往往被这个并不形象的象形名称搞糊涂)之间的区别和基本用法。

b)        相同:

都是用来探测系统故障,通过编写代码定时发送故障清零信号(高手们都管这个代码叫做“喂狗”),告诉它系统运行正常。一旦系统故障,程序清零代码(“喂狗”)无法执行,其计数器就会计数不止,直到记到零并发生故障中断(狗饿了开始叫唤),控制CPU重启整个系统(不行啦,开始咬人了,快跑……)。

c)        区别:

独立看门狗Iwdg——我的理解是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。(这条狗是借来的,见谁偷懒它都咬!)主要用于监视硬件错误。

窗口看门狗wwdg——我的理解是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。(这条狗是老板娘养的,老板不干活儿他不管!)主要用于监视软件错误。

d)        初始化函数定义:鉴于两只狗作用差不多,使用过程也差不多初始化函数栓一起了,用的时候根据情况删减。

void WDG_Configuration(void);

e)        初始化函数调用:

WDG_Configuration();

f)        初始化函数

void WDG_Configuration()                //看门狗初始化

{

//软件看门狗初始化

  WWDG_SetPrescaler(WWDG_Prescaler_8); //时钟8分频4ms

// (PCLK1/4096)/8= 244 Hz (~4 ms)

   WWDG_SetWindowValue(65);                    //计数器数值

  WWDG_Enable(127);                   //启动计数器,设置喂狗时间

// WWDG timeout = ~4 ms * 64 = 262 ms

   WWDG_ClearFlag();                   //清除标志位

  WWDG_EnableIT();                    //启动中断

//独立看门狗初始化

  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//启动寄存器读写

  IWDG_SetPrescaler(IWDG_Prescaler_32);//40K时钟32分频

  IWDG_SetReload(349);                 //计数器数值

  IWDG_ReloadCounter();                //重启计数器

  IWDG_Enable();                       //启动看门狗

}

g)        RCC初始化:只有软件看门狗需要时钟初始化,独立看门狗有自己的时钟不需要但是需要systic工作相关设置。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

h)        独立看门狗使用systic的中断来喂狗,所以添加systic的中断打开代码就行了。软件看门狗需要在NVIC打开中断添加如下代码:

  NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel; //通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //占先中断等级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;      //响应中断优先级

  NVIC_Init(&NVIC_InitStructure);                        //打开中断

i)        中断程序,软件看门狗在自己的中断中喂狗,独立看门狗需要使用systic的定时中断来喂狗。以下两个程序都在stm32f10x_it.c文件中。

void WWDG_IRQHandler(void)

{

  WWDG_SetCounter(0x7F);          //更新计数值

WWDG_ClearFlag();               //清除标志位

}

void SysTickHandler(void)

 IWDG_ReloadCounter();         //重启计数器(喂狗)

}

j)        注意事项:

i.        有狗平常没事情可以不理,但是千万别忘了喂它,否则死都不知道怎么死的!

ii.        初始化程序的调用一定要在systic的初始化之后。

iii.        独立看门狗需要systic中断来喂,但是systic做别的用处不能只做这件事,所以我写了如下几句代码,可以不影响systic的其他应用,其他systic周期代码也可参考:

第一步:在stm32f10x_it.c中定义变量

int Tic_IWDG;           //喂狗循环程序的频率判断变量

第二步:将SysTickHandler中喂狗代码改为下面:

Tic_IWDG++;             //变量递增

if(Tic_IWDG>=100)       //每100个systic周期喂狗

 IWDG_ReloadCounter();//重启计数器(喂狗)

  Tic_IWDG=0;          //变量清零

关键字:STM32  看门狗 引用地址:STM32笔记之十三:恶搞,两只看门狗

上一篇:STM32笔记之十二:时钟不息工作不止,systic时钟应用
下一篇:STM32笔记之十四:基本问题,来讨论一下软件架构

推荐阅读最新更新时间:2024-03-16 14:33

PIC16位单片机CAN(8)看门狗
程序的框架已经出来了,把看门狗打开剩下的就是程序结构的完善了。 根据文档说明,看门狗主要就是配置位的配置。下面是我的配置: _FWDT(WDTPOST_PS4096&WDTPRE_PR32&PLLKEN_OFF&WINDIS_OFF&FWDTEN_ON); //后分频器4096(4096*1ms=4s) 预分频器32分频(1ms) 禁止看门狗窗口模式 使能看门狗 看门够一个独立的32KHz的时钟,可以经过预分频和后分频进行操作, 由 LPRC 提供的看门狗定时器时钟源的频率标称值为 32 kHz。该信号输入给可配置为 5 位 (32 分频)或 7 位(128 分频)工作的预分频器。预分频比通过 WDTPRE 配置位进行设置
[单片机]
STM32学习笔记(4) 高级定时器-两路互补的PWM输出(带死区和刹车控制)
1.实验目的 使用高级定时器,输出两路互补的PWM输出,需要有带死区和不带死区两种情况 2.实验效果 图1:不带死区的两路互补的PWM输出 图2 :带死区的两路互补的PWM输出 3.理论部分 3.1时钟源 内部时钟(基本定时器,通用定时器时钟源来自PCLK1,但高级定时器的时钟源来自PCLK2(72M)) 实践中几乎无需使用:外部时钟模式1、外部时钟模式2 3.2时基单元 组成: 16bit预分频PSC 16bit计数器CNT 8bit重复计数器RCR(高级定时器独有) 16bit自动重装载寄存器ARR 3.3输入捕获 作用:对输入信号的上升沿/下降沿/双边沿进行捕获,测量输入信号的脉宽,和
[单片机]
<font color='red'>STM32</font>学习笔记(4) 高级定时器-两路互补的PWM输出(带死区和刹车控制)
【话说定时器系列】之四:STM32定时器更新事件及案例分享
我们知道,STM32定时器中的四个带影子特性的寄存器组,每组寄存器分别由 影子寄存器【即实际控制寄存器】和预装寄存器组成。其中,影子寄存器是真正起作用的控制寄存器,用户访问不到它。而预装寄存器是用户访问的为实际影子寄存器准备数据或指令的寄存器。它们分别是: TIMx_PSC 分频寄存器 TIMx_ARR 自动重装载寄存器 TIMx_CCR 捕捉寄存器 TIMx_RCR 重复计数寄存器[高级定时器有】 其中,ARR、CCR寄存器带预装载使能控制位,即它们的预装功能可以软件开启或关闭。 TIMx_ARR 带预装载使能控制位 ARPE@TIMx_CR1 TIMx_CCR 带预装载使能控制位 OCxPE@TIMx_CC
[单片机]
stm32 tim6、tim7中断配置以及注意事项
void TIM6_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 13; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; N
[单片机]
STM32调试过程中常见的问题及解决方法?
STM32调试过程中常见的问题及解决方法 一、 在 Debug选项卡 下设置好仿真器的类型后,下载程序时却提示 No ULINK Device found. 解决办法: Keil MDK默认使用ULINK仿真器下载程序,在 Project --- Option for Target 'xxx' --- Utilities选项卡 下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o). main.axf: E
[单片机]
用汇编语言做一个看门狗测试
用STC的MCU的IO方式控制74HC595驱动8位数码管。 ; 用户可以修改宏来选择时钟频率. ; 显示效果为: 显示秒计数, 5秒后不喂狗, 等复位. Fosc_KHZ EQU 22118 ;22118KHZ STACK_POIRTER EQU 0D0H ; 堆栈开始地址 DIS_DOT EQU 020H DIS_BLACK EQU 010H DIS_ EQU 011H AUXR DATA 08EH P4 DATA 0C0H P5 DATA 0C8H P0M1 DATA 0x93 ; P0M0 DATA 0x94 ; P1M1 DATA 0x91 ; P1M0 DATA 0x92 ; P2M1 DATA 0x95 ; P2M0
[单片机]
关于STM32中断的部分理解
中断这个问题从学习stm32一开始就困扰着我,我想估计很多初学者都会有这样的问题。曾经问过隔壁实验室的职工,人家没告诉我,让我自己回去理解。同行是冤家,这句话很在理。 首先提出我对几个中断的理解不了的问题: 1、中断是干嘛的? 2、中断是如何从函数进入的? 3、中断相关设置是如何设置的? 第一个问题:关于中断可以有一个很形象的解释:你正在吃饭,突然尿急了,准备去尿尿,中断了吃饭的这一过程。从程序上解释就是吃饭可以分解为一系列的动作,称为主程序,每个动作相当于函数,组成了这个主程序。这时候你尿急了,产生了一个信号,相当于中断信号,告诉大脑CPU,现在尿急比较重要,不然会尿裤子。这时候大脑会停下吃饭这一主程序,去执行撒尿这程序
[单片机]
ST新开发环境极大降低STM32微控制器的使用门槛
意法半导体(纽约证券交易所代码:STM)发布一套价格极低的开发环境,让更多的开发人员有机会使用意法半导体针对嵌入式应用专门研制、采用ARM Cortex-M3处理器内核的STM32系列微控制器。 新的开发环境整合Atollic TrueSTUDIO®/STM32开发工具和意法半导体的ST-LINK调试器,前者可以从网站免费下载,无使用代码量或使用时间限制;后者通过USB端口可连接到目标微控制器。对于初期投资很小的项目,花费很少即可拥有ST-LINK,因此尝试性和小批量的产品概念的各种初始设计,均能受益于STM32系列微控制器的高性能、低功耗和丰富功能,方便选择STM32系列70多款软件、引脚和外设相互兼容的产品
[单片机]
ST新开发环境极大降低<font color='red'>STM32</font>微控制器的使用门槛
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved