stm32CubeMx中实现窗口看门狗功能

发布者:大伊山人最新更新时间:2018-09-05 来源: eefocus关键字:stm32CubeMx  窗口看门狗 手机看文章 扫描二维码
随时随地手机看文章

stm32CubeMx..........多数嵌入式编程人员可能已程习惯使用stm32的库开发方式来实现功能,库版本v3.5.0本人之前也一直使用,开始使用stm32CubeMx开发方式,发现和原先库开发方式与很多不同,实现方法也有区别。本文旨在将个人在stm32CubeMx开发方式中总结的一些经验写出来,供大家参考。


对于看门狗而言,stm32中有两种,分为独立看门狗(IWDG)和窗口看门狗(WWDG),在此大概介绍下两条警犬,本文重点介绍窗口看门狗。


独立看门狗:独立看门狗(IWDG)由专用的40kHz的低速时钟驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。


窗口看门狗:窗口看门狗通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。通俗说就是会产生两个复位。复位条件:(1)当计数器的数值从0x40减到0x3F;(2)当刷新看门狗时计数器的数值大于窗口上限值时。满足任何一条都可以产生复位信号。通常情况下设置窗口上限值为0x7F,下限值默认为0x40,计数器向下数到0x40就会产生中断,下个910us后变为0x3F就会复位系统。也就是喂狗操作不能早喂,即大于窗口值时会发生复位;喂的晚了,即计数器的数值从0x40减到0x3F时没有及时喂狗,也会产生复位。


实验说明:板子型号为stm32F103VET6, 每次喂狗并通过串口打印出来

下面来看下在stm32CubeMx中窗口看门狗的实现。

1、在stm32cubemx中设值

我们设置分频系数为8;窗口值为0x5f;计数值为0x7f;其中窗口默认下限值为0x40。并打开中断,打开中断后,会置1中断位,如图:

(2)写WWDG初始化函数

void WWDG_Init(void)
{
__WWDG_CLK_ENABLE(); //使能WWDG时钟
   
MX_WWDG_Init(); //调用系统初始化函数,也就是我们在图形界面设置好值后,会将我们刚才设置的值转化为代码。在本函数里直接调用即可


__HAL_WWDG_CLEAR_FLAG(&hwwdg, WWDG_FLAG_EWIF);  // 开启中断前,先清除中断标志位

HAL_WWDG_Start_IT(&hwwdg);   //设置中断标志位,并开启中断,

}

(3)我们再来开下在中断函数,cubemx的中断函数处理和库开发方式还是有区别的。

/**
* @brief This function handles Window watchdog interrupt.
*/
void WWDG_IRQHandler(void)
{
  /* USER CODE BEGIN WWDG_IRQn 0 */


  /* USER CODE END WWDG_IRQn 0 */
  HAL_WWDG_IRQHandler(&hwwdg);
  /* USER CODE BEGIN WWDG_IRQn 1 */


  /* USER CODE END WWDG_IRQn 1 */
}

我们看到在它的中断函数里调用了一个函数, HAL_WWDG_IRQHandler(&hwwdg); 我们再来看这个函数,在该函数里出现了一个在cubemx方式里独有的,回调函数,当中断开启,并且中断标志位满足后将会调用该函数,而我们的操作将会在这里实现。


void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

  /* Check if Early Wakeup Interrupt is enable */
  if(__HAL_WWDG_GET_IT_SOURCE(hwwdg, WWDG_IT_EWI) != RESET)
  {
    /* Wheck if WWDG Early Wakeup Interrupt occurred */
  if(__HAL_WWDG_GET_FLAG(hwwdg, WWDG_FLAG_EWIF) != RESET)
  {
    /* Early Wakeup callback */ 
    HAL_WWDG_WakeupCallback(hwwdg);
    
    /* Change WWDG peripheral state */
    hwwdg->State = HAL_WWDG_STATE_READY; 
    
      /* Clear the WWDG Early Wakeup flag */
    __HAL_WWDG_CLEAR_FLAG(hwwdg, WWDG_FLAG_EWIF);
    
    /* Process Unlocked */
    __HAL_UNLOCK(hwwdg);
  }

}

(4)下面我们来讨论看门狗的喂狗时间,很容易计算在stm32f103系列里窗口看门狗的最大喂狗时间也就58ms,在一些程序里我们没必要这么密集的去喂狗。那么如何增大喂狗时间呢。搜集了网上的一些方法后,本人根据具体事例实现了一个增大看门狗喂狗时间的方法:就是在中断函数中再做一个额外计数器,如果计数器没有达到设定值,就就行喂狗操作,同时使设定值加1,当计数器达到设定值时,就不加载喂狗定时器初值,这时看门狗定时器就会从从0x40减到0x3F产生系统复位。使用这个方法可以将定时时间拓展到 58ms*额外计数器设定值,定个几十秒都不是问题。 当达到计数值后如果我们清零计数值,那么看门狗系统就会复位,所以我们只要在主函数里定期的将该计数值清零,也就是变相的增大了喂狗时间。下面具体看事例:

每次产生看门狗中断都会调用回调函数,我在回调函数里做如下操作:

/*****************************看门狗回调函数********************************/
void HAL_WWDG_WakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
if(time <=50)
{
HAL_WWDG_Refresh(hwwdg, WWDG_CNT); //喂狗函数
printf("喂狗\r\n");    //每喂一次狗,打印一次,无实际作用
time++;
}
}


/**************************main函数中部分函数********************************/

  while (1)
  {
if(time > 50)
{
time = 0;
printf("time清零 \r\n");
}
  }


我设置看门狗最大喂狗时间为58ms,那么计数50次,大概是2.9s时间,也就是我在主函数中必须在2.9s内,只要对计数器清零,系统就不会复位了。相应的可以把计数值设置更大,这就根据个人需要了。这样是不是变相的增大喂狗时间了。

下面是我的串口打印效果:



大家看一下是不是每喂一次狗就会打印一个“喂狗”,同时在11点55分20秒有一次time清零,到11点55分23秒有一次time清零,是不是间隔大概3秒了。



好了,本人也是刚开始使用stm32CubeMx开发,如果内容中有问题,希望指出来,共同进步


关键字:stm32CubeMx  窗口看门狗 引用地址:stm32CubeMx中实现窗口看门狗功能

上一篇:STM32看门狗 IWDG WWDG
下一篇:如何使用Stm32CubeMX和LL库实现窗口看门狗

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

STM32CubeMX(Keil5)开发之路——5定时器中断TIM
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何使用定时器实现一个定时器中断,每秒打印一串数据 STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目 为了方便调试,重定向printf,进行usart设置 1——点击USART1进行设置 2——模式选择Asynchronous异步传输 3——可以看到右边自动出现了Tx和Rx 4——可以自行设置波特率,停止位,校验位等参数 1——点击Clock Configuration进行设置 2——注意这几个地
[单片机]
<font color='red'>STM32CubeMX</font>(Keil5)开发之路——5定时器中断TIM
STM32CubeMX系列 | 外部SRAM
1.外部SRAM简介 本例程使用的STM32F103ZET6本身有64K字节的SRAM,一般应用已经足够;不过在一些对内存要求高的场合,比如跑算法或者GUI等,就需要外扩SRAM来满足大内存使用的需求。这里我们使用了一颗256K字节容量的SRAM芯片:IS62WV12816,利用STM32F1的FSMC控制该SRAM芯片,实现对该SRAM芯片的访问控制 IS62WV12816是一种16位宽128K(128*2,即256K字节)容量的CMOS静态内存芯片,它有高速访问、低功耗、兼容TTL电平接口、全静态操作(不需要刷新和时钟电路)、三态输出和字节控制(支持高/低字节控制)等特点 IS62WV12816的引脚以及对应的引脚功能如下图示
[单片机]
STM32CubeMX系列 | I2C总线
1. 简介 1.1 I2C总线介绍 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速I2C总线一般可达400kbps以上。下面从物理层和协议层两方面来了解I2C I2C物理层:可连接多个I2C通讯设备,支持多个通讯主机和从机;每个连接到总线的设备都有一个独立的地址,主机利用这个地址进行不同设备之间的访问;总线通过上拉电阻接到电源,当I2C设备空闲时会输出高阻态;多主机同时使用总线时,利用仲裁方式觉得由哪个设备占用总线;有三种
[单片机]
stm32cubemx+freertos+fatfs+sd调试心得
stm32cubemx是当下比较流行的开发工具,可以大大提升我们的移植效率,从而提升开发的效率,但是在某些方面还是有些小坑需要我们注意。以下是用Cube,来进行sd卡读写实验的一些心得。 在这里cube的画面配置环节就不描述了,直接描述所碰问题:文件系统无法挂载或文件无法读写,而且调式的时候光标移到读取时会跑飞等一些列问题。其实针对于这一问题主要是处理SD的信息接受与发送的中断调用有问题,我们可以进入SD的中断函数中进行分析,该函数在stm32f4xx_it.c文件中,如下图所示: 然后我们再进入HAL_SD_IRQHandler(&hsd)函数中,会发现当SD卡发送和接收信息调用的函数如下图所示: 根据这一
[单片机]
STM32F1_WDG看门狗(独立+窗口
前言 今天总结“STM32F103 WDG看门狗”,STM32F1有两个看门狗,IWDG独立看门狗和WWDG窗口看门狗,今天将两个看门狗一并总结了。 总结一下二者的区别: 1)、IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR 2)、IWDG没有中断,WWDG有中断 3)、IWDG是12位递减的。WWDG是7位递减的 4)、IWDG只有下限,WWDG有下限和上限 5)、IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。 看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定
[单片机]
STM32F1_WDG<font color='red'>看门狗</font>(独立+<font color='red'>窗口</font>)
STM32之独立看门狗窗口看门狗了解一下
  STM32之独立看门狗与窗口看门狗总结   一、独立看门狗   STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。   看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。   在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时
[单片机]
STM32之独立<font color='red'>看门狗</font>与<font color='red'>窗口</font><font color='red'>看门狗</font>了解一下
第一次使用STM32cubemx后No target conncted问题
本人用的是ST_Link下载器下载程序,在第一次使用STM32cubemx后仅仅只能下载一次程序 原因可能是因为STM32CubeMX生成的代码会把调试端口关闭 STM32cubemx软件里“SYS”选择“Trace Asynchronous Sw”调试器,(“SYS”还有其他几个选项不知道啥意思,望高手解答,谢了)需要把调试器选进来。如果关闭了调试端口的功能,下次烧录程序时就需要“按住复位键进入下载后松手”的方法来下载程序
[单片机]
第一次使用<font color='red'>STM32cubemx</font>后No target conncted问题
使用STM32CubeMx创建U盘读写程序
平台 windows 7 CPU:STM32F205 软件:keil 5 下载STM32CubeMx:http://pan.baidu.com/s/1bpsvV6R 安装好后,建立usbMassClass工程,注意选择芯片。 选择自己要的功能如下图: 外部是时钟的选择: FSUSB的选择 debug口选择UASRT1 选择USB IPcore 注意这里选择了USBDisk文件系统以及MassStorage Host。 总体芯片的配置: 细节的配置了: 时钟配置 USART、USB、USB IPCore配置 这里可以修改的,点击对应的模块,在弹出的即可配置。 生成代码:
[单片机]
使用<font color='red'>STM32CubeMx</font>创建U盘读写程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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