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库实现窗口看门狗

推荐阅读

现在,生态环境问题越来越受到人们的重视。除了人们熟知的污染排放、气候变化、过度捕捞之外,物种入侵也是造成生态失衡的重要因素之一。而且伴随着放生、偷渡等行为的增多有愈演愈烈的趋势。现在加勒比海和西大西洋就面临着物种入侵的问题。若说起海洋中的顶级捕食者,通常大家脑海中想到的大多会是鲨鱼。但是问一下加勒比海或美国沿海地区的渔民或自然保...
今日,外交部发言人耿爽主持例行记者会。有记者就美国与波兰就5G问题达成协议、发表联合声明提问,有分析称协议内容有针对中国企业的内容。耿爽回应,我们注意到有关报道。5G技术是国际社会共同的创新成果,它的开发利用关乎全球经济发展、 世界各国利益和人类的文明进步。有关5G规则和标准的制定,应在具有普遍代表性和权威性的机制框架之下,通过开放包...
智能手机的5G专利授权之争已暂时告一段落,而网联汽车市场的5G专利话语权争夺才刚刚开始。在这场游戏规则如何制定的大战中,一边是高通、诺基亚等通信专利巨头,而另一边则是全球汽车巨头与零部件企业。这场5G专利授权模式的争夺,将直接决定网联汽车行业的未来发展。六大巨头呼吁起诉高通一个月内,高通连迎重大利好。7月31日,高通与华为达成多年期专利...
汽车的传统评测中,动力、操控、空间、配置等特性毫无疑问是考量一辆车是否优秀的重要标准,但时过境迁,今时今日消费者购车已经越来越注重车辆的智能化程度。随着新势力的崛起和传统势力的调整,中国汽车市场已经发生了翻天覆地的变化,为了评判当前汽车市场的最高智能化程度,车云网携车云研究院于近期策划了一场智能车型的终极PK,试图找出目前能代表智...

史海拾趣

问答坊 | AI 解惑

PLD 、FPGA 技术的概念&#183;综述

PLD设计工具 PLD(Programmable Logic Device)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。目前主要有两大类型:CPLD(Complex PLD)和FPGA(Field Programmable Gate Array)。它们的基本设计方法是借助于EDA软件,用原理图、状态机 ...…

查看全部问答∨

紧急求教!如何进行信号分析

我是在一家有线电视机顶盒公司实习,公司给了一个毕业设计论题,是做IC卡与读卡器之间信号情况的反应(开始接受?故 障?开始复位应答?之类)显示在数码管上面。 个人理解是类似于饭堂打卡时候的显示。 不知道各位前辈无什么资料,或者可以给一 ...…

查看全部问答∨

请高手点拨一下3-Wire Timing Diagram和3-Wire Control Registers List如何理解?

以下是LCD里的图表,有人说这个和LCD的初始化有关,看不懂,请高手指点一下。 …

查看全部问答∨

蓝牙

蓝牙能不能实现计算机对单片机的控制? 如果用蓝牙控制机械的话,那怎样由计算机发出信号,怎样实现控制呢?用什么语言编程呢?…

查看全部问答∨

关于lkf和库文件的问题

用stm8 做flash烧写,在工程设置里,把自动使用的lkf改成stm8s208,之后,在主函数(用flash例子程序)里,在调用库函数就出现错误:1 symbol _GPIO_ReadInputData not defined (Debug\\main.o ) 这个怎么回事?解决方法。 另外,flash ram  ...…

查看全部问答∨

launchpad欢乐学习季

MSP挑战级(高级)通过了,呵呵,期待中。。。 …

查看全部问答∨

YUV422信号输入DM814X后图像颜色不正常

使用DM814x 平台,从camera interface 端口输入BT1120,16bit ,YUV422的信号,图像颜色非常不正常,感觉上是黑的变绿了,白的地方变成紫色了,我相信应该是ISS的部分配置错误,也看到论坛上有人也在DM36X的平台上做同样的事情也碰到这样的现象,我 ...…

查看全部问答∨

msp430f149使用TFT液晶屏自带字库

不晓得如何调用液晶屏自带字库,求帮助,液晶屏用的是FY43-4827-65K…

查看全部问答∨

发点电机控制的资料。今天听课上有。看ADI网站也有。就下来了。

发点电机控制的资料,今天听课上有。看ADI网站也有。就下来了。 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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