STM32开发笔记77: 内部看门狗长延时的产生

发布者:心有所属最新更新时间:2019-11-12 来源: eefocus关键字:STM32  内部看门狗  长延时 手机看文章 扫描二维码
随时随地手机看文章

单片机型号:STM32L053R8T6


开发笔记STM32开发笔记45:看门狗驱动程序的移植介绍了看门狗驱动程序的基本设计方法。今天项目中看门狗的延时时间达到10秒,则实际运行效果只有3秒。


以下是看门狗最大延时时间的设置函数:


void CIwdg::SetMaxRefreshInterval(uint8_t u8_second)

{

this->hIwdg.Instance = IWDG;

  this->hIwdg.Init.Prescaler = IWDG_PRESCALER_64;

  this->hIwdg.Init.Window = 4095;

#if defined STM32F091xC || defined STM32F070x6

  this->hIwdg.Init.Reload = 625 * u8_second; //40000000 / 1000 / 64 * 5 = 3125

#elif defined STM32L053xx

this->hIwdg.Init.Reload = 578 * u8_second; //37000000 / 1000 / 64 * 5 = 2890

#endif

  if (HAL_IWDG_Init(&this->hIwdg) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

}

以当前使用的STM32L053R8T6为例,如果希望产生10秒延时则设置的值为37000000/1000/64*10=5780。


看下面的程序,这是STM32底层的看门狗驱动,其Reload的最大值为0x0FFF,也就是4095。这就是为什么达不到10秒延时的原因,因为其设置的值已经溢出。


typedef struct

{

  uint32_t Prescaler;  /*!< Select the prescaler of the IWDG.

                            This parameter can be a value of @ref IWDG_Prescaler */

 

  uint32_t Reload;     /*!< Specifies the IWDG down-counter reload value.

                            This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */

 

  uint32_t Window;     /*!< Specifies the window value to be compared to the down-counter.

                            This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */

 

} IWDG_InitTypeDef;


可以通过增加分频系数的方式,加以解决,当然前提是不需要看门狗的实践过于精准,一般来说也不需要过于精准的看门狗时间。


以下是修正后的程序,再设置10秒延时已非常准确。


void CIwdg::SetMaxRefreshInterval(uint8_t u8_second)

{

this->hIwdg.Instance = IWDG;

  this->hIwdg.Init.Prescaler = IWDG_PRESCALER_256;

  this->hIwdg.Init.Window = 4095;

#if defined STM32F091xC || defined STM32F070x6

  this->hIwdg.Init.Reload = 156 * u8_second; //40000000 / 1000 / 256 = 156

#elif defined STM32L053xx

this->hIwdg.Init.Reload = 145 * u8_second; //37000000 / 1000 / 256 = 145

#endif

  if (HAL_IWDG_Init(&this->hIwdg) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

}


这样设置后,对于STM32F0来说,其最大延时时间约为26秒;对于STM32L0来说,其最大延时时间约为28秒。


关键字:STM32  内部看门狗  长延时 引用地址:STM32开发笔记77: 内部看门狗长延时的产生

上一篇:STM32休眠时关闭看门狗计数的简单解决方案
下一篇:stm32f103 c6t6 CAN总线的配置

推荐阅读最新更新时间:2024-11-24 11:15

再造STM32---第七部分:初识 STM32 固件库
本章参考资料:《STM32F4xx 参考手册》、《STM32F4xx 规格书》、《Cortex-M3 权威指南》 , STM32 标准库帮助文档:《stm32f4xx_dsp_stdperiph_lib_um.chm》。在上一章中,我们构建了几个控制 GPIO 外设的函数,算是实现了函数库的雏形,但GPIO 还有很多功能函数我们没有实现,而且 STM32 芯片不仅仅只有 GPIO 这一个外设。 如果我们想要亲自完成这个函数库,工作量是非常巨大的。 ST 公司提供的标准软件库,包含了 STM32 芯片所有寄存器的控制操作,我们直接学习如何使用 ST 标准库,会极大地方便控制 STM32 芯片。 7.1 CMSIS
[单片机]
再造STM32---第七部分:初识 <font color='red'>STM32</font> 固件库
STM32开发笔记95: 处理UNUSED宏
单片机型号:STM32F091RCT6 使用C语音在PlatformIO中进行STM32Cube的工程设计,一切正常,希望使用C++语音进行程序开发,顾将main.c文件改为main.cpp文件,再次编译报如下警告: In file included from C:userssnmplink.platformiopackagesframework-stm32cubef0DriversSTM32F0xx_HAL_DriverInc/stm32f0xx_hal_rcc.h:45:0, from C:userssnmplink.platformiopackagesframework-stm32cubef0Dri
[单片机]
STM32HAL库学习(二)CubeMx按键
首先是找到电路图,按键是高电平按下还是低电平按下 GPIO八种模式 https://blog.csdn.net/hailin0716/article/details/24333951 上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。 按键是按下时是高电平时,那无信号输入时要保持低电平,下拉输入 枚举KEYState_TypeDef 定义按键的两种状态 typedef enum{ KEY0_UP, KEY0_DOWN, KEY1_UP, KEY1_DOWN }KEYState_typedef; 函数有个 KEYState_TypeDef 类型的返回值
[单片机]
STM32HAL库学习(二)CubeMx按键
STM32库函数void USART_SendData()的缺陷和解决方法
简介:本文主要谈到了STM32库函数void USART_SendData()存在的一些问题,针对这些问题提到了3个解决方案,一起来看看。 2.1问题及现象 使用USART_SendData()函数非连续发送单个字符是没有问题的;当连续发送字符时(两个字符间没有延时),就会发现发送缓冲区有溢出现象。若发送的数据量很小时,此时串口发送的只是最后一个字符,当发送数据量大时,就会导致发送的数据莫名其妙的丢失。 如: for(TxCounter = 0;TxCounter RxCounter; TxCounter++) USART_SendData(USART1, RxBuffer ); 2.2原因 此API
[单片机]
STM32之外部中断和中断控制器
在外部中断和中断控制器中,我们首先阐述嵌套向量中断控制器(NVIC),他和处理器核的接口紧紧相连。可以实现低延时的中断处理和处理晚到的中断。主要具有以下几个特点: 1.60个可屏蔽中断通道; 2.16个可编程的优先等级; 3.低延时的异常和中断处理; 4.电源管理控制; 5.系统控制寄存器的实现。 其中每一个STM32系列芯片都会有一个产品向量表,博友们可以在相关 产品说明书中查看具体的中断问题。 接下来介绍中断优先级 在M3中有两个优先级的概念-抢占优先级和响应优先级。每一个中断源都必须指定这两种优先级。这里的中断抢占其实和89C51差不多,高中断优先级可以抢占正在进行中断处理的低中断优先级,也就是我们所说的中断嵌套。学习过51
[单片机]
STM32单片机的BOOT0和BOOT1运用原理
STM32三种发动形式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)体系存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是普通说的ISP顺序。这个区域的内容在芯片出厂后没有人可以修正或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状况决议了芯片复位后从哪个区域开端执 行顺序,见下表: BOOT1=x BOOT0=0 从用户闪存发动,这是正常的任务形式。 BOOT1=0 BOOT0=1 从体系存储器发动,这种形式发动的顺序功用由厂家
[单片机]
VNA网络分析仪实现延时器件的测量
  1. 光纤长延时器件的特点与应用   光纤通信在数字通信领域已得到相当广泛的应用,且得到了快速的发展。由于光纤通讯具有带宽宽、损耗低、抗干扰、保密性好、重量轻、性能价格比高等优点,近年来通过光纤传输模拟信号特别是微波射频信号在国际上研究十分活跃。   在电子学系统中,常常需要对数字信号和模拟信号进行一系列处理,例如进行脉冲编码、解码、滤波、进行相关卷积运算及作A/D变换等。过去常用的方法除电子学方法外,还应用了声表面波电荷耦合器件(SAW CCD)以及同轴电缆等,但是随着信号工作频率与带宽的提高,特别是在微波频段,这些方法就显得无能为力了。由光纤及其相应的光电子器件构成的光纤延迟线不仅能完成上述信号处理功能,而且在某些方面比
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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