[DAY 26] _STM32 看门狗简介_独立看门狗(2)

昨天件绍了看们狗的,今天就来看看如何使用看门狗

独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这个段程序之後紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序50ms 多一点,如果超过60ms 还没有喂狗,那就说明我们监控的程序出故障了,那麽就会产生系统重置,让程序重新运行。

接下来做1个简单的超过预定时间的实验

硬体:IWDG、按钮 1个、LED 1个
IWDG属於MCU内部资源,不需要外部电路,需要一个外部的按键和LED,通过按键来喂狗,喂狗成功LED 亮,喂狗失败,程序重启,LED 灭一次。
软件:我们编写两个 IWDG 驱动档,bsp_iwdg.h 和 bsp_iwdg.c,用来IWDG的初始化配置函数。

bsp_iwdg.h

#ifndef __IWDG_H
#define	__IWDG_H

#include "stm32f0xx.h"
void IWDG_Config(uint8_t prv ,uint16_t rlv);
void IWDG_Feed(void);

#endif /* __IWDG_H */

宣告初始化函式和IWDG实验函式

bsp_iwdg.c

#include "./iwdg/bsp_iwdg.h"   

void IWDG_Config(uint8_t prv ,uint16_t rlv)
{		
	IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable ); // 致能预分频寄存器PR和重新加载暂存器RLR可写入

	IWDG_SetPrescaler(prv);  // 设置预分频器值
	
	IWDG_SetReload(rlv);     // 设置重新加载暂存器值
	
	IWDG_ReloadCounter();    // 把重新加载暂存器的值放到计数器中
	
	IWDG_Enable();	         // 使能 IWDG
}

// 喂狗
void IWDG_Feed(void)
{
	// 把重新加载暂存器的值放到计数器中,喂狗,防止IWD重置
	// 当计数器的值减到0的时候会产生系统重定
	IWDG_ReloadCounter();
}

以上式两个函式的实现,再来看看主程序如何实现这两个函式

main.c

#include "stm32f0xx.h"
#include "./led/bsp_led.h"    //GPIO初始化来点亮LED
#include "./key/bsp_key.h"    //GPIO初始化来检测按键状态
#include "./iwdg/bsp_iwdg.h"  //看门口初始话

int main(void)
{
 
  LED_GPIO_Config();	// GPIO_LED初始化 
  Delay_ms(20);	
  
  if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) //检查是否为独立看门狗重置
  {
    LED_RED;           //独立看门狗复位,亮红灯
    RCC_ClearFlag();   //清除标志
    /*如果一直不喂狗,会一直复位,加上前面的延时,会看到红灯闪烁
    在1s 时间内喂狗的话,则会持续亮绿灯*/
  }
  else
  {
    //不是独立看门狗复位(可能为上电重定或者手动按键重定之类的) 
    LED_BLUE;  //亮蓝灯 
  }		
  
  /*初始化按键*/
  Key_GPIO_Config();	
  // IWDG 1s 超时溢出
  IWDG_Config(IWDG_Prescaler_64 ,625); 
  
	while(1)                            
	{	   
		if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  )
		{
			// 喂狗,如果不喂狗,系统则会重定,重定後亮红灯,如果在1s
			// 时间内准时喂狗的话,则会亮绿灯
			IWDG_Feed();		
			//喂狗後亮绿灯
			LED_GREEN;
		}
	}
}

while部分是我们在专案中具体需要写的代码,这部分的程序可以用独立看门狗来监控如果我们知道这部分代码的执行时间,比如是500ms,那麽我们可以设置独立看门狗的溢出时间是600ms,比500ms多一点,如果要被监控的程序没有跑飞正常执行的话,那麽执行完毕之後就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗的程序,此时就会产生系统重定。但是也不排除程序跑飞了又跑回来了,刚好喂狗了,歪打正着。所以要想更精确的监控程序,可以使用视窗看门狗,视窗看门狗规定必须在规定的视窗时间内喂狗。

明天就会来看看视窗看门狗的简介和用法了。


<<:  【第二五天 - Flutter 知名外送平台画面练习(上)】

>>:  Wrap-up : Alpine Linux on LiteX/VexRiscv

Best Web Hosting Affiliate Program

The platform provides a range of hosting options, ...

D3JsDay18 不让资料进坟墓,秒懂农产品分布—实际资料画地图

我们到政府开放资料平台下载这两个档案,第一个是包含各种伴手礼的经纬度资料、名称、介绍等等作为要画在地...

[13th][Day13] docker file

相较於用 docker commit ,比较多人是使用 『Dockerfile』来建立 image ...

活动分享|高品质数据用Tableau活起来!

2021年很快已经倒数2个月了 这一年变动很大很快 不管是你所属的企业还是我任职的企业,很明显的,在...

Django #1 安装环境

1. Python windows Linux sudo apt install python3-p...