基于stm32f103zet6的看门狗学习

发布者:HarmonySpirit最新更新时间:2017-09-07 来源: eefocus关键字:stm32f103zet6  看门狗 手机看文章 扫描二维码
随时随地手机看文章

看门狗,这个东西在哪都能看见,关于其中简单介绍在我的另一篇博文中有的,那是关于arm11的,不过大体一样http://blog.csdn.net/king_bingge/article/details/8510713

一、首先就是独立看门狗

直接上操作流程吧

1、三个比较重要的寄存器:键值寄存器(IWDG_KR )、预分频寄存器(IWDG_PR)、重载寄存器(IWDG_RLR)

向IWDG_KR 写入0X5555:能够去除写保护,方便我们给分频寄存器和重载寄存器进行写操作嘛!不就是类似于DS1302的写保护么。。

2、有一个知识点就是关于看门狗使用的时钟,这里使用的是内部低速时钟40k左右的样子,那么我们就能算出,定时的最大时间了。Tout=40Khz/((4*2^prer )*rlr)

向IWDG_KR 写入0XAAAA:这一步能够将我们写入的这个值重装载到IWDG_RLR这个寄存器中,类似于我们51的定时器!

3、接着就是像IWDG_KR 写入0XCCCC来启动看门狗,同时也就关闭了写保护,防止意外写入。

注意了:每次我们给IWDG_KR 写入0XAAAA的时候,他会自动重新进行喂狗!

二、分析代码

1、  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作,也就是带开写保护了!

不信跟踪进去看一看吧,仅仅尝试这一次,因为之前学arm11裸机的时候,全是操作寄存器的,现在烦了,这也是我第一次分析寄存器吧,反正我还是觉得库函数用着方便

GO   GO   GO  !


  1. void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)  

  2. {  

  3.   /* Check the parameters */  

  4.   assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess));  

  5.   IWDG->KR = IWDG_WriteAccess;  

  6. }  


上面是函数定义;


  1. #define IWDG                ((IWDG_TypeDef *) IWDG_BASE)  


上面是原型


  1. #define IWDG_BASE             (APB1PERIPH_BASE + 0x3000)  


这是跟踪到的地址,继续!




  1. #define APB1PERIPH_BASE       PERIPH_BASE  


  1. #define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */  


  1. 好的,反推回去!  


  1.   


  1. IWDG_BASE     = 0x40000000    +  0x3000   


  1. 最后找到这个结构体咯  


  1. typedef struct  

  2. {  

  3.   __IO uint32_t KR;  

  4.   __IO uint32_t PR;  

  5.   __IO uint32_t RLR;  

  6.   __IO uint32_t SR;  

  7. } IWDG_TypeDef;  


  1. 再看芯片手册  


  1. 0x4000 3000 - 0x4000 33FF   独立看门狗(IWDG)  

继续跟踪参数。。

#define IWDG_WriteAccess_Enable     ((uint16_t)0x5555)


发现了??所以嘛    IWDG->KR = IWDG_WriteAccess;

就是相当于给
寄存器(IWDG_KR )0x40003000 地址写 0x5555。
OK分析完毕,ST32的库函数都是这样组织的,我很喜欢这种形式,开发速度相当快呀!即使有些地方的口碑不太好,但是我们在那部分就可以操作寄存器了,一举两得的事情
2、直接给出初始化代码,有兴趣的自己可以分析,我是没什么兴趣了


  1. void IWDG_Init(u8 prer,u16 rlr)   

  2. {     

  3.     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   //使能对寄存器IWDG_PR和IWDG_RLR的写操作  

  4.       

  5.     IWDG_SetPrescaler(prer);            //设置IWDG预分频值:设置IWDG预分频值为64  

  6.       

  7.     IWDG_SetReload(rlr);                //设置IWDG重装载值  

  8.       

  9.     IWDG_ReloadCounter();               //按照IWDG重装载寄存器的值重装载IWDG计数器  

  10.       

  11.     IWDG_Enable();                  //使能IWDG  

  12. }  


//喂独立看门狗



  1. void IWDG_Feed(void)  

  2. {     

  3.     IWDG_ReloadCounter();                                            

  4.   

  5. }  


下面看代码吧!

1、直接给初始化函数


  1. void WWDG_Init(u8 tr,u8 wr,u32 fprer)  

  2. {   

  3.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);    //   WWDG时钟使能  

  4.   

  5.     WWDG_SetPrescaler(fprer);               //设置IWDG预分频值  

  6.   

  7.     WWDG_SetWindowValue(wr);                //设置窗口值  

  8.   

  9.     WWDG_Enable(tr);                    //使能看门狗 ,   设置 counter .                    

  10.   

  11.     WWDG_ClearFlag();  

  12.   

  13.     WWDG_NVIC_Init();                   //初始化窗口看门狗 NVIC  

  14.   

  15.     WWDG_EnableIT();                    //开启窗口看门狗中断  

  16. }  

2、同样也有喂狗函数


//喂狗


  1. void WWDG_Set_Counter(u8 cnt)  

  2. {  

  3.     WWDG_Enable(cnt);      

  4. }  

3、上面提到了当技术到0x40的时候就会长生中断,那么中断怎么实现?


//窗口看门狗中断服务程序


  1. void WWDG_NVIC_Init()  

  2. {  

  3.     NVIC_InitTypeDef NVIC_InitStructure;  

  4.     NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG中断  

  5.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2,子优先级3,组2      

  6.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//抢占2,子优先级3,组2      

  7.     NVIC_Init(&NVIC_InitStructure); //NVIC初始化  

  8. }  

  9. void WWDG_IRQHandler(void)  

  10. {  

  11.     // Update WWDG counter  

  12.     WWDG_SetCounter(0x7F);//当禁掉此句后,窗口看门狗将产生复位  

  13.     // Clear EWI flag */  

  14.     WWDG_ClearFlag();//清除提前唤醒中断标志位  

  15. }  

就是这样配置了!这样就能实现我们的两只狗看着程序这个大门了!!!


  1.   


  1.   

  2.   

  3.   

  4.   

  5.   

  6.   

  7.   

  8.   

  9.   

  10.   

  11.   

  12.   

  13.   

  14.   

  15.   

  16.   

  17.   

  18.   

  19.   

  20.   

  21.   

  22.   

  23.   

  24.   

  25.   

  26.   

  27.   

  28.   

  29.   

  30.   

  31.   

  32.   

  33.   

  34.   

  35.   

  36.   

  37.   

  38.   

  39.   

  40.   

  41.      

  42.   


关键字:stm32f103zet6  看门狗 引用地址:基于stm32f103zet6的看门狗学习

上一篇:基于stm32f103zet6的定时器的学习1(理论知识)
下一篇:基于stm32f103zet6的IIC学习

推荐阅读最新更新时间:2024-03-16 15:36

MSP430第十六章:看门狗
1. 介绍 看门狗定时器模块WDT_A的作用是在软件发生死机或跑飞后控制程序重启。当超过设定的时间而没有喂狗时,就会产生复位中断。如果不需要看门狗功能,可配置为普通定时器或者关闭。 8个可选定时时间 看门狗工作模式 定时器模式 带密码保护的控制寄存器 可选时钟源 允许关闭降低功耗 时钟故障保护 2. 看门狗操作 看门狗定时器模块可以配置为看门狗或普通定时器。WDTCTL是一个16位密码保护的读写寄存器。任何读或写访问都必须使用word指令,并且写访问必须使用密码05Ah。任何对WDTCTL的写操作,只要高字节的值不是05Ah,就会违反密码,并触发PUC系统重置。对WDTCTL的任何读取都是在高字节读取069h。字节读取WD
[单片机]
MSP430第十六章:<font color='red'>看门狗</font>
谈谈MSP430 的框架程序
最近在学习MSP430f149这块单片机,开始程序也没烧进去,弄了一天,发现串口不能下载,买了个jtag下载器,才搞定。现在也谈谈开始写程序的一些方法吧 程序重要的是框架,有这个基础之后才能行云流水的开始写程序。 include MSP430x14x.h //函数声明 void InitSys( ); int main( void ) { WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 InitSys( ); //初始化 start: //以下填充用户代码 LPM3; //进入低功耗模式n,n 取值为0~4,若不希望进入低功耗模式,屏蔽本句 goto start; } /********************
[单片机]
ATtiny13 看门狗复位
ATtiny13看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿,延时定时器开始对tTOUT 记数。请参见P40 以了解看门狗定时器的具体操作过程。
[单片机]
ATtiny13 <font color='red'>看门狗</font>复位
STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验
1、实验目的 1)使用 TIM1 触发 ADC,ADC 采集的数据通过DMA 传至内存,然后通过串口打印出采集的数据; 2)学会 DMA 传输数据并将数据进行保存; 3)验证ADC 的采样率与实际设置的是否相符。 2、硬件资源 1)指示灯 2)ADC 3)DMA 4)TIM 5)杜邦线 3、软件设计 void Adc_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
[单片机]
lpc1114看门狗_窗口看门狗
看门狗定时器是一个倒计时定时器。假设我们规定,当定时器计数到4000和0之间时喂狗,符合条件。当在大于4000的时候喂狗,和计数器倒数到0没有喂狗都不符合要求。这就是窗口看门狗。在实际应用中,当发生提前喂狗,和没有喂狗都会使得单片机复位,从而使程序得到了双重保护。 如果我们要知道定时器是否计数到了规定的两值之间,最直接的办法当然是读取定时器的当前值,但是这样必须在程序中时刻读取定时器的当前值,不仅给程序带来了很大的负担,而且有些时候,程序无法满足读取当前值的条件。所以,LPC1114中,给出了这么一个寄存器:WDWARNINT。即看门狗提醒中断寄存器。改寄存器的定义如下所示: WDWARNINT:看门狗提醒中断寄存器 位 符号
[单片机]
lpc1114<font color='red'>看门狗</font>_窗口<font color='red'>看门狗</font>
STM32 看门狗学习笔记
STM32 有两个看门,一个是独立看门狗,一个是窗口看门狗.这里先说独立看门狗. 以单片机为核心的微型计算机系统中,单片机经常会受到来自外界电磁场的干扰。 造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作。看门狗就是一种专门用于检测单片机程序运行状态的硬件结构。 独立看门狗的特性是,要利用片内的40k RC振荡器作为时钟据(说这个RC是相当的不准),优点就是,即使CPU主晶振 停了,即使CPU进入了休眠模式,狗也可以生效.当CPU进入休眠模式,并且是深度休眠的时候,这个看门狗可以作为一个CPU 的定时唤醒闹钟,以达到超低功耗的同时还会定时醒来.看门狗由于最大可以分频到256,看门狗
[单片机]
STM32 <font color='red'>看门狗</font>学习笔记
MSP430教程10:MSP430单片机WDT看门狗定时器
看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL ,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。 一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在 上电和系统复位内容全部清零 1.记数单元WDTCNT: WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2.控制寄存器WDTCTL: WDTCTL由两部分组成,高8
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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