STM32之独立看门狗 学习笔记

发布者:760802csy最新更新时间:2019-10-29 来源: eefocus关键字:STM32  独立看门狗  定时复位狗 手机看文章 扫描二维码
随时随地手机看文章

一、独立看门狗概述:

             独立看门狗其实就是一个独立于主时钟的定时复位狗。一旦开启独立看门狗,它就会根据自己设定的时间不断倒数,倒数到0后就开始复位。


二、关于喂狗:

              喂狗就是让狗去吃东西,分心后,这只狗就得重新倒数。


三、stm32看门狗示例程序:

#include "led.h"

#include "delay.h"

#include "key.h"

#include "sys.h"

#include "usart.h"

 

 

 

 

void IWDG_Init(u8 prer,u16 rlr) 

{

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

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

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

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

IWDG_Enable();                             //使能IWDG

}

 

 

 int main(void)

 {  

   //延时函数初始化

delay_init()

   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级        

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  

   //初始化与LED连接的硬件接口

  LED_Init();

   //按键初始化                                    

KEY_Init();                                       

delay_ms(500); 

  //与分频数为64,重载值为625,溢出时间为1s                                 

IWDG_Init(4,625);  

   //点亮LED0                             

LED0=0;                            

 

 

while(1)

{

if(KEY_Scan(0)==WKUP_PRES)

{

IWDG_ReloadCounter();                 //如果WK_UP按下,则喂狗

}

}

  

 

从主程序main的第一行开始运行到下面的代码时,开启看门狗


  //与分频数为64,重载值为625,溢出时间为1s                                 

 IWDG_Init(4,625); 

  此时,键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。


所以我们会看到等一亮一灭。


 


  此时,如果检测到按键按下,那么就会运行喂狗程序:


if(KEY_Scan(0)==WKUP_PRES)

{

IWDG_ReloadCounter();                 //如果WK_UP按下,则喂狗

}

  喂狗后, 键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器,也就是对应到初始化设置的计数值,我们设置的1S,那么计数器就将重1s处开始递减,如果我们持续按按键,那么计数器就会持续保持在那个值,不会倒数到0,也就不会产生复位,那么灯就会始终保持亮的状态。


从而验证了看门狗和喂狗的功能。

关键字:STM32  独立看门狗  定时复位狗 引用地址:STM32之独立看门狗 学习笔记

上一篇:实现蓝牙与手机的双向通信 学习笔记
下一篇:STM32 DMA 学习笔记(一)

推荐阅读最新更新时间:2024-11-14 10:39

STM32默认启动
TM32默认启动时PB4、PB3、PA15三个引脚不是普通IO,而是JTAG的复用功能,分别为JNTRST、JTDI、JTDO。 当我们试用SWD接口调试仿真时,这三个引脚可以用作普通IO。 具体做法就是禁用JTAG功能。只需使用以下语句即可。 #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
[单片机]
stm32在manin()前做了什么?
最近要在Cortex-M3上写一个简单的操作系统,打算使用IAR,为了写好启动代码,花了一些时间了解了IAR在main()以前做了些什么事。 首先系统复位时,Cortex-M3从代码区偏移0x0000'0000处获取栈顶地址,用来初始化MSP寄存器的值。 接下来从代码区偏移0x0000'0004获取第一个指令的跳转地址。这些地址,是CM3要求放置中断向量表的地方。 这里是一个程序的启动区的反汇编: __vector_table: 08004000 2600 08004002 2000 08004004 7E1D 08004006 0800 这个程序是由IAP程序来启动的,IAP程序获
[单片机]
STM32固件库V3.3.0的CMSIS文件简析
STM32的V3.3.0库,内有CMSIS的文件夹为arm Cortex微控制器软件接口标准,现在将我实际工作中的作一个简要分析: 1.选择启动文件:根据自己所用的芯片的型号,选择正确的启动文件。这个根据数据手册上的划分。例如STM32F101VBT6,就选择startup_stm32f10x_md.s,在这个文件里,首选要定义自已的堆和栈的大小,这个根据自已的需要确定。文件中已经定义好了中断向量的位置及堆和栈的初始化操作。 Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit
[单片机]
STM32 HAL 库学习笔记之-------(系统时钟配置)
使用CubeMX工具,让开发者不用理会底层的实现,是整个配置变简单 一、准备工具STM32_CubeMX ST官网可下载 http://www.st.com/content/st_com/en/search.html#q=cubemx-t=tools-page=1 二、打开STM32_CubeMX开始配置,使用内部RC,最大倍频至64MHZ,芯片大于64MHZ,应该选择HSE 以STM32F103为例子 HSI配置 HSE配置 三、以下是STM32F103 HES 72MHZ配置例子: 工具生成基本直接可以使用,需要注意是,外部晶振源,有8khz(默认),12khz,可以在System_stm32f1xx.
[单片机]
<font color='red'>STM32</font> HAL 库学习笔记之-------(系统时钟配置)
基于stm32的车牌识别设计
系统介绍 使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO)。STM32进行了16倍频。识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配。 识别过程分析 1.图像采集: 通过OV7670摄像头进行图像采集,采集的图像大小为320*240像素,像素格式为RGB565。每个像素由两字节组成,第一字节的高五位是Red,第一字节的低三位和第二字节的高三位组成Green,第二字节的低五位是Blue。 2.二值化: 二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),让整个图片呈现出只有黑色和白色的效果。二值化后的图像中灰度值范围是0或者255。 怎样让像素点
[单片机]
STM32标准库函数命名规则
1.xxx_Init的函数,其功能是根据xxx_InitTypeDef中指定的参数,初始化外设xxx,例如TIM_Init 2.xxx_DeInit的函数,其功能为复位外设xxx的所有寄存器至默认值,例如TIM_DeInit 3.xxx_StructInit的函数,其功能为通过设置xxx_InitTypeDef 结构中的各种参数为默认值,例如:USART_StructInit 4.xxx_Cmd的函数,其功能为使能或者失能外设xxx,例如: SPI_Cmd. 5.xxx_ITConfig的函数,其功能为使能或者失能来自外设xxx某中断源,例如: RCC_ITConfig 6.xxx_DMAConfig的函数,其功能为使能或者失能外
[单片机]
stm32如何改变PC(R15)的值?
我想在FLASH里面存入两段程序,假设一个存在0x08000000(即烧录进去的,main函数),另一个存在0x08001000,我想在执行第一段程序的时候给PC赋一个值0x08001000,让它跳到另一段程序,关键要如何改变PC的值呢? 单纯的实现你上面说的结果: ((void (*) (void)) (0x08001000) ();就可以了。 但是要注意了,地址0x08001000处的数据必须要是可执行的代码而不是可执行代码的地址。 如果地址0x08001000处的数据是可执行代码的地址,那么你应该要这样用: ((void (*) (void)) (*(vu32 *)0x08001000) ();
[单片机]
STM32外部中断操作
内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。 NVIC NVIC Nested Vectored Interrupt Controller 嵌套向量中断控制。在STM32的标准外设库和MDK定义的中断相关的变量和结构体类型,大多都是以NVIC开头的,例如 NVIC_InitTypeDef 。 NVIC_Type NVIC寄存器结构体。在MDK380a中,这个结构体是定义在stm32f10x_map.h中,具体的定
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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