STM8S_库函数_独立看门狗使用方法

大家好,我是单片机爱好者-MCU起航。这里说下使用库函数方式控制STM8S103F3P6实现独立看门狗定时复位的功能。

首先说一下什么是看门狗:看门狗一般是一个定时器电路,有的集成在单片机内部,有的是一个独立的芯片。它一般有一个输入信号,叫做喂狗。MCU正常工作时,看门狗定时器自动计时,MCU每隔一段时间喂一次狗,也就是把定时器计数清零。

如果MCU工作异常,无法清零,那么看门狗定时器计数值满了会引发MCU复位,进而重新开始执行程序。所以,这是一种自我保护机制。

那么这里说的独立看门狗又是什么?

这个问题先不解答,下一节说窗口看门狗的时候再说。

关于独立看门狗的简介,数据手册里的描述是:可以用于解决处理器因为硬件或软件的故障所发生的错误。它由一个内部的128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。功能框图如下:

那么,如何使用呢?

数据手册里说的比较详细,大致意思就是:启动看门狗和喂狗操作是比较简单的,可以直接使用。除此之外,还有计时时间的修改和重装载寄存器的设置,但由于看门狗是一个保护机制,为了防止误操作,所以这两个操作是受保护的,使用之前需要先解除保护。

经过我的测试,库函数方法下,看门狗的使用步骤如下:

1、启动看门狗

2、允许写操作

3、重置时间

4、设置分频系数

5、禁止写操作

下面通过代码实现一个功能:上电后LED闪烁一下,然后启动看门狗,原地等待看门狗复位。LED依然使用PB4接口上的,原理图如下:

代码如下:

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

void iwdg_init(void)
{
  IWDG_Enable();     //启动看门狗
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);     //允许写操作
  IWDG_SetReload(0xFF);     //1.02s
  IWDG_SetPrescaler(IWDG_Prescaler_256);     //256分频,4ms
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);     //禁止写操作

}
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}

void main(void)
{
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW);
  GPIO_WriteLow(GPIOB, GPIO_PIN_4);
  Delay(40000);
  GPIO_WriteHigh(GPIOB, GPIO_PIN_4);
  Delay(40000);
  iwdg_init();
  while(1);
  
}

主函数部分比较简单,就是PB4的初始化,然后闪烁,然后看门狗初始化,然后原地等待。

看门狗初始化里面进行了几个操作:

1、启动看门狗

2、允许写操作

3、设置复位时间

4、设置分频系数

5、禁止写操作

编译、下载、上电!现象OK!

很简单,打完收工!

要获取该程序完整的工程文件,可以关注公众号:单片机爱好者,然后回复关键词:STM8S。可以获取完整的下载链接,里面包含工程文件、视频、PPT、数据手册等所有相关资料。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据