STM32—IWDG看门狗

发布者:幸福时刻最新更新时间:2018-12-18 来源: eefocus关键字:STM32  IWDG  看门狗 手机看文章 扫描二维码
随时随地手机看文章

背景:


STM32的看门狗有2个:独立看门狗IWDG和窗口看门狗WWDG本文主要介绍STM32的IWDG。


内容:


IWDG主要性能


(1)自由运行的递减计数器;


(2)时钟由独立的RC振荡器提供(可在停止和待机模式下工作),LSI为其时钟源,STOP和SLEEP模式仍可运行;


(3)看门狗被激活后,在计数器计数至0x000的的时产生复位。


下图为看门狗的框图。

上图中,IWDG由4个寄存器控制,PR,SR,RLR和KR。下面继续分析STM32的HAL库中IWDG的使用。


IWDG_HandleTypeDef hiwdg;定义一个IWDG_HandleTypeDef类型的结构体,查看其结构体,如下


typedef struct 

  IWDG_TypeDef * Instance; / *!<寄存器基地址* / 

 

  IWDG_InitTypeDef Init; / *!

 

} IWDG_HandleTypeDef;


继续查看其内部的两个结构体,如下


typedef struct 

  __IO uint32_t KR; / *!

  __IO uint32_t PR; / *!

  __IO uint32_t RLR; / *!

  __IO uint32_t SR; / *!

} IWDG_TypeDef;

typedef struct 

  uint32_t Prescaler; / *!<选择IWDG的预分频器。

                            此参数可以是@ref的值IWDG_Prescaler * / 

 

  uint32_t Reload; / *!<指定IWDG减计数器重载值。

                            此参数必须是介于Min_Data = 0和Max_Data = 0x0FFF之间的数字* / 

 

} IWDG_InitTypeDef;


下面继续分析看门狗的初始化函数:


static void MX_IWDG_Init(void)

  hiwdg.Instance = IWDG; //传入IWDG的基地址;

  hiwdg.Init.Prescaler = IWDG_PRESCALER_32; //32预分频

  hiwdg.Init.Reload = 3000; 

  if(HAL_IWDG_Init(&hiwdg)!= HAL_OK)

  { 

    _Error_Handler(__ FILE__,__LINE__); 

  } 

}

继续查看HAL_IWDG_Init函数:


HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef * hiwdg)

  uint32_t tickstart; 

  / *检查IWDG句柄分配* / 

  if(hiwdg == NULL)

  { 

    return HAL_ERROR; 

  } 

  / *检查参数* / 

  assert_param(IS_IWDG_ALL_INSTANCE(hiwdg-> Instance)); 

  assert_param(IS_IWDG_PRESCALER(hiwdg-> Init.Prescaler)); 

  assert_param(IS_IWDG_RELOAD(hiwdg-> Init.Reload)); 

 

  / *启用IWDG。LSI开启automaticaly * / 

  __HAL_IWDG_START(hiwdg); 

 

  / *通过在KR * / 

  IWDG_ENABLE_WRITE_ACCESS(hiwdg)中写入0x5555来启用对IWDG_PR和IWDG_RLR寄存器的写入访问; 

 

  / *写入IWDG寄存器Prescaler&Reload值与* /

  hiwdg-> Instance-> PR = hiwdg-> Init.Prescaler; 

  hiwdg-> Instance-> RLR = hiwdg-> Init.Reload; 

 

  / *检查未决的标志,如果以前的更新没有完成,则返回超时* / 

  tickstart = HAL_GetTick(); 

 

  / *等待寄存器更新* / 

  while(hiwdg-> Instance-> SR!= RESET)

  { 

    if((HAL_GetTick() - tickstart)> HAL_IWDG_DEFAULT_TIMEOUT)

    { 

      return HAL_TIMEOUT; 

    } 

  } 

 / *在重装载寄存器* /定义的值重新加载IWDG计数器

  __HAL_IWDG_RELOAD_COUNTER(hiwdg); 

 

 

  / *返回函数状态* / 

  return HAL_OK; 

}


当实际程序中使用看门狗后,需要在计数时间内不停地喂狗,以防止程序重启。若程序较为复杂,也可通过开启的一个定时器来不停地喂狗,喂狗即让看门狗复位从新计数,调用 __HAL_IWDG_RELOAD_COUNTER(hiwdg)函数来喂狗。


关键字:STM32  IWDG  看门狗 引用地址:STM32—IWDG看门狗

上一篇:lpc1768中结构体在RAM中的存储格式
下一篇:基于arm11处理器S3C6410内核的linux下串口通信实现

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

stm32驱动12864液晶显示程序
注意:stm32的3.3v工作电压,需要使用3.3v工作电压的12864液晶 #include stm32f10x_lib.h #define uint unsigned int #define uchar unsigned char #define RSH GPIO_SetBits(GPIOA,GPIO_Pin_0) #define RSL GPIO_ResetBits(GPIOA,GPIO_Pin_0) #define RWH GPIO_SetBits(GPIOA,GPIO_Pin_1) #define RWL GPIO_ResetBits(GPIOA,GPIO_Pin_1) #define ENH GPIO_Se
[单片机]
如何用flash保存stm32 html的参数
STM32F407由一个Cortex-M4内核,片上flash,片上sram,以及片上外设(uart,I2C,SPI等)组成。 内核通过I,S,D三条数据总线,与总线矩阵相连,对片上flash,片上sram,以及片上外设等进行操作,内核通过I总线获取指令,内核通过D总线进行立即数加载和调试访问,内核通过S总线访问SRAM中的数据,也可以通过该总线获得指令(效率低于I总线)。 并且I总线可以向片内flash,SARM,FSMC取址,而且,STM32F407有三种自举方式,也就是当BOOT1为任意和BOOT0为0时,程序从flash中0x0800 0000 开始自举启动,程序此时开始启动。
[单片机]
STM32开发笔记30:STM32L0低功耗设计-STOP_RTC模式下的休眠时间
单片机型号:STM32L053R8T6 本文介绍STOP_RTC模式下,设置进入低功耗休眠时间的方法。 低功耗的休眠时间的设置首先需要确定RTC的基准时间,我们一般将其设置为1秒,这在《STM32L0低功耗设计4: RTC模块1秒时钟的产生方法》中已经介绍过,大家看一下就好。 接下来,就需要对HAL_RTCEx_SetWakeUpTimer_IT函数的第2个参数进行设置了。 具体计算公式:数值 = 定时时间(秒)*(RTC时钟)/16,其中16为该参数的第2个参数,RTC时钟要看具体的时钟源,在我设计的项目中,使用的是LSI,则为37000。 进一步计算:数值 = 定时时间(秒) * 370
[单片机]
STM32学习记录20 FFT
前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT。在网上找了很多这方面的资料做实验并进行比较,最终选择了使用STM32提供的DSP库这种方法。 本文将以一个实例来介绍如何使用STM32提供的DSP库函数进行FFT。 1.FFT运算效率   使用STM32官方提供的DSP库进行FFT,虽然在使用上有些不灵活(因为它是基4的FFT,所以FFT的点数必须是4^n),但其执行效率确实非常高效,看图1所示的FFT运算效率测试数据便可见一斑。该数据来自STM32 DSP库使用文档。 图1 FFT运算效率测试数据   由图
[单片机]
<font color='red'>STM32</font>学习记录20 FFT
STM32学习笔记之硬件SPI读写与极性设置
【软件中如何设置SPI的极性和相位】 SPI分主设备和从设备,两者通过SPI协议通讯。 而设置SPI的模式,是从设备的模式,决定了主设备的模式。 所以要先去搞懂从设备的SPI是何种模式,然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。 对于从设备的SPI是什么模式,有两种: (1)固定的,有SPI从设备硬件决定的 SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即: 关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1; 然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算
[单片机]
<font color='red'>STM32</font>学习笔记之硬件SPI读写与极性设置
STM32五个串口同时收发函数配置
#include user_usart.h #include stm32f10x_usart.h /*使用microLib的方法*/ /* int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch; } int GetKey (void) { while (!(USART1- SR & USART_FLAG_RXNE)); return ((int)(USART1-
[单片机]
STM32——库函数开发小结
基本上所有外设都有以下几类寄存器:【CR/DR/SR】 (1)控制寄存器 xxx_CR(Control/Configuration Register):这类寄存器是用来配置、控制 相应 外 设 的 工 作 方 式 的 。 如 GPIOx_CRL、GPIOx_CRH, AFIO_EXTICR1~AFIO_EXTICR4,串口的 USART_CR1~USART_CR3等。 (2)数据寄存器 xxx_DR(Data Register):这类寄存器主要是存储了外设进行输出输入的数据。如 GPIOx_IDR、GPIOx_ODR、USART_DR 等。 (3)状态寄存器 xxx_SR(Status Register):这类寄存器主
[单片机]
<font color='red'>STM32</font>——库函数开发小结
SD NAND在STM32应用上的保姆级教程
SD NAND与正点原子精英板的连接 由于正点原子精英板没有SD NAND接口,只有TF卡接口,所以SD NAND需要用到转接板来连接。 SD NAND正常运行现象 本次实验的程序是正点原子的SD卡实验例程,先用读卡器把SD NAND接到电脑上,并复制一个文件进去,再插到开发板上; 用送的数据线连接USB UART接口,下载好程序,打开电脑上的串口助手,按下KEY0,即可读取到数据, 具体实验步骤和现象可以看例程文件夹中的readme, 另外LED-DS0闪烁也表示SD NAND芯片在正常运行, SD NAND芯片用的是MK-米客方德的工业级芯片MKDV1GIL-AS;MK-米客方德家还有其他各种型号的SD NAN
[单片机]
SD NAND在<font color='red'>STM32</font>应用上的保姆级教程
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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