美文网首页我爱编程
运动控制器37:STM32的看门狗功能

运动控制器37:STM32的看门狗功能

作者: 吴松乾 | 来源:发表于2018-02-03 22:49 被阅读0次

IWDG

IWDG由LSI驱动,就算外部高速时钟失效也能正常工作,用于程序以外,需要一个独立,对时间精度要求不太高的场合。

IWDG主要性能

自由运行的递减计数器,看门狗激活以后,计数到0时产生复位

IWDG功能描述

IWDG_KR中写入OXCCCC后,看门狗启动,从OXFFF减到0时产生复位,写入OXAAAA进行重新加载。

  • 硬件看门狗,如果有硬件看门狗功能,上电复位以后,看门狗自动运行。
  • 寄存器的保护:重载寄存器的修改必须按照一个流程才可以进行设置。

库函数

void  IWDG_Enable (void) 
 // 使能
FlagStatus  IWDG_GetFlagStatus (uint16_t IWDG_FLAG) 
 // 重载值和预分频设置是否完成
void  IWDG_ReloadCounter (void) 
void  IWDG_SetPrescaler (uint8_t IWDG_Prescaler) 
void  IWDG_SetReload (uint16_t Reload) 
void  IWDG_WriteAccessCmd (uint16_t IWDG_WriteAccess) 

设置流程

通常设置一个看门狗的流程如下:

//设置看门狗的参数开关
 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//设置分频
   IWDG_SetPrescaler(IWDG_Prescaler_32);
//设置重载值
   IWDG_SetReload(LsiFreq/128);
//打开计数
   IWDG_ReloadCounter();
//使能看门狗,
   IWDG_Enable();

窗口看门狗WWDG

WDG1.png

如上图,我们可以递减计数器,同时设置W[6..0]位,WWDG由PCLK1分频后进行驱动,如果T减少到W时,可以进行刷新一次,如果不刷新,到T减小到3F时将产生一个复位,同时T6位置1,相当于重新开始计数。
那如果处于睡眠模式,时钟都没有了,该这么操作?我们在EWI中设置了一个中断,如果进入了睡眠模式,则自动喂狗,防止产生复位。

所以用到的函数都很简单,如下:

void  WWDG_ClearFlag (void) //清唤醒的FLAG
void  WWDG_DeInit (void)   //
void  WWDG_Enable (uint8_t Counter) 使能,并设置W
void  WWDG_EnableIT (void)  //使能中断
FlagStatus  WWDG_GetFlagStatus (void)  //FLAG状态,有无中断
void  WWDG_SetCounter (uint8_t Counter)  //设置T值
void  WWDG_SetPrescaler (uint32_t WWDG_Prescaler) //分频
void  WWDG_SetWindowValue (uint8_t WindowValue)  //设置W值

WWDG的配置如下:

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
 WWDG_SetPrescaler(WWDG_Prescaler_8);
  WWDG_SetWindowValue(80);
  WWDG_Enable(127);
 // ...
 //然后在一段程序以后,及时喂狗
  WWDG_SetCounter(127);

相关文章

网友评论

    本文标题:运动控制器37:STM32的看门狗功能

    本文链接:https://www.haomeiwen.com/subject/qtypzxtx.html