STM32f10x--->bsp(IWDG)

IWDG(independent watch dog)

  • 大纲
  • 作用
  • 时钟图
  • 功能框图
  • 程序

注意点:不要用仿真器进行单步调试,因为看门狗一直在计时。

作用:独立看门狗一般用来检测和解决由程序引起的故障

现象如果在规定时间内检测的程序没有被喂狗,软件就会复位。即时这个程序运行在while中,她是独立于循环的,可以自己检测。(违反程序的逻辑)

           特别的,如果你用单步调式,独立看门狗会复位,因为你设置的时间太短了,它在背后运行着。全速运行就可以喂狗。

时钟图

                         

          由上图可知她是用RC震荡器引出的,独立于系统的,即时系统时钟死了也没事。

IWDG 功能框图

                                   

相关参数

     分频器:确定计数一次所需要的时间   prv

     重装载寄存器:每次计数的数量,rlv

                 

相关程序

#include "bsp_iwdg.h"   

/*
 * 设置 IWDG 的超时时间
 * Tout = prv/40 * rlv (s)
 *      prv可以是[4,8,16,32,64,128,256]
 * prv:预分频器值,取值如下:
 *     @arg IWDG_Prescaler_4: IWDG prescaler set to 4
 *     @arg IWDG_Prescaler_8: IWDG prescaler set to 8
 *     @arg IWDG_Prescaler_16: IWDG prescaler set to 16
 *     @arg IWDG_Prescaler_32: IWDG prescaler set to 32
 *     @arg IWDG_Prescaler_64: IWDG prescaler set to 64
 *     @arg IWDG_Prescaler_128: IWDG prescaler set to 128
 *     @arg IWDG_Prescaler_256: IWDG prescaler set to 256
 *
 * rlv:预分频器值,取值范围为:0-0XFFF
 * 函数调用举例:
 * IWDG_Config(IWDG_Prescaler_64 ,625);  // IWDG 1s 超时溢出
 */

void IWDG_Config(uint8_t prv ,uint16_t rlv)
{    
    // 使能 预分频寄存器PR和重装载寄存器RLR可写
    IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
    
    // 设置预分频器值
    IWDG_SetPrescaler( prv );
    
    // 设置重装载寄存器值
    IWDG_SetReload( rlv );
    
    // 把重装载寄存器的值放到计数器中
    IWDG_ReloadCounter();
    
    // 使能 IWDG
    IWDG_Enable();    
}

// 喂狗
void IWDG_Feed(void)
{
    // 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位
    // 当计数器的值减到0的时候会产生系统复位
    IWDG_ReloadCounter();
}

 

posted @ 2021-11-14 15:27  InitForever  阅读(79)  评论(0编辑  收藏  举报