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

发布者:创新脑细胞最新更新时间:2020-03-10 来源: 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开发笔记78: 2种STOP模式的唤醒方法
下一篇:STM32开发笔记76: 初始化RTC后死机的原因

推荐阅读最新更新时间:2024-11-10 01:27

Cartesiam发布优化STM32开发板的新版NanoEdge™ AI Studio
嵌入式系统人工智能(AI)软件开发公司Cartesiam发布了针对STM32开发板优化的新版NanoEdge™AI Studio软件工具。STM32是横跨多重电子应用领域的全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)开发的市场领先的微控制器。Cartesiam的NanoEdge AI Studio开发环境消除了传统的AI开发障碍,面向缺乏机器学习专业资源的企业。新版本让任何嵌入式开发者都可以用STM32微控制器快速开发强大的AI解决方案。在其诸多优化功能中,它还可直接通过STM32的串行/ USB端口和Cartesiam增强版自动数据符合性检查和质量验证工具在Nan
[单片机]
STM32HAL库DMA模式串口收发
一.简单了解 串口模式实现有三种 1.普通模式:在主函数中接收函数 2.中断模式:产生的不影响主程序运行 3. DMA模式:与主函数互不影响,独立运行 本文记录第一种普通模式。 学习目标是:实现DMA串口的数据收发,发送数据时LED灯电平翻转。 二.步骤 1-在原来工程基础上,在stm32cubemx中增加dma,usart1中的DMA Settings,ADD USART1_RX循环接收和USART1_TX单次发送 2-添加MDA宏定义代码 #define UART1_DMA uint8_t TdataDMA ={ welcome to uart DMA!rn }; uint8_t Rdata; 3-在主函数添加
[单片机]
STM32补充(一) 启动文件
所需要的文件都是从官方库中下载,从官网下载STM32 的3.5 版库。 我们需要把Libraries 目录下的库函数文件添加到工程中,并查阅库帮助文档来了解ST 提供的库函数,这个文档说明了每一个库函数的使用方法。 内核与外设的库文件分别存放在CMSIS 和STM32F10x_StdPeriph_Driver 文件夹中。内核是针对M3的相关操作,外设是M3的外围电路芯片的相关操作如:串口等。 1. core_cm3.c 文件 CM3 核通用的源文件core_cm3.c 和头文件core_cm3.h,它们的作用是为采用Cortex-M3 核设计SoC 的芯片商设计的芯片外设提供一个进入CM3 内核的接口。对于其他公司
[单片机]
<font color='red'>STM32</font>补充(一) 启动文件
STM32普通定时器配置PWM的问题
oid TIM3_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* PWM信号电平跳变值 */ // u16 CCR1= 36000; // u16 CCR2= 36000; /*PCLK1经过2倍频后作为TIM3的时钟源等于72MHz*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* Time base configuration */
[单片机]
STM32单片机(3) 串口中断通信
注:使用普中科技开发板测试时,需要拔掉Boot1短接帽 两根下载线也要拿掉,重启 /******************************************************************************* * * 软件功能: 串口实验(软件延时方式) * *******************************************************************************/ #include stm32f10x.h #include string.h #include delay.h u8 uart1_
[单片机]
STM32开发笔记40: Keil链接时”No section matches selector“解决方法
单片机型号:STM32F070F6P6 首先指明,此问题是STM32CubeMX升级时造成的,我现在STM32CubeMX的版本是4.27.0,原先的版本生成的程序在Keil中打开是不报错的。 这个问题是链接错误,仔细查看工程目录就可以看见4.27.0版本生成的程序,在工程目录中缺少启动的汇编文件startup_stm32f070x6.s,只需将此文件加载到工程中,再重新生成,此问题就可以解决。
[单片机]
STM32官方标准固件库开发与寄存器开发的区别
一句话概括关系:固件库就是函数的集合,固件库函数的作用就是:向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。对于STM32这种级别的MCU,数百个寄存器记起来何谈容易,于是推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一套API供开发者使用。大多数情况下,你不需要知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 对比一下:入下面只需要知道GPIO_SetBit这个函数的使用即可。 寄存器操作: 库函数操作: 任何的处理器,不管多么高级,归根结底都是对寄存器的操作。固件库不是万能的,如果想要把STM32学透,知其然知其所以然,光读STM32固件库是远远不够的。但是如果知识为了完成
[单片机]
<font color='red'>STM32</font>官方标准固件库开发与寄存器开发的区别
ARM开发(1) 基于stm32的led跑马灯
一 跑马灯原理: 1.1 本实验实现2个led的跑马灯效果,即2个led交替闪烁。 1.2 实验思路:根据电路图原理,给led相关引脚赋予高低电平,实现电路的导通,使led灯发光。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 led.h代码: #ifndef __LED_H #define __LED_H “#include “sys.h” #define LED0 PBout(5)// PB5 #define LED1 PEout(5)// PE5 void LED_Init(void);// 初始化 #endif 2.2 led.c代码(IO配置):
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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