Arduino STM32F103C8T6(BluePill) 教程四教你使用STM32的WDTO(看门狗)功能

Arduino STM32F103C8T6(BluePill) 教程四教你使用STM32的WDTO(看门狗)功能

感谢CSDN前人教会我们用撸Arduino的方法撸STM32F103,作者最近在帮公司做项目预算有限,采用某宝13元的Blue Pill开发,很多代码直接拿Arduino UNO的来用,考虑好久,还是决定写一些Arduino BluePill的教程,只为方便以后方便大家一起使用. (不足之处望大神指出)
经常做嵌入式系统的人都知道,系统再稳定也避免不了突发状况 :比如笔者最近在做一款温控在读取温度时,温度探头(K型测温)经常与受体接触,抖动,自然容易受到干扰,芯片在读取温度时候很容易卡死,必须增加看门狗功能因此这里借鉴Arduino UNO系看门狗如下:

#include <avr/wdt.h>
void setup()
{
   pinMode(13,OUTPUT);
   wdt_enable(WDTO_2S); //开启看门狗,并设置溢出时间为两秒
}
 
void loop()
{
   digitalWrite(13,HIGH);
   delay(100);
   digitalWrite(13,LOW);
   delay(100);
   wdt_reset(); //喂狗操作,使看门狗定时器复位
}

以上代码引用自:

https://blog.csdn.net/chn89/article/details/17199171

而STM32库稍有不同需要调用#include <libmaple/iwdg.h>:

#include <libmaple/iwdg.h>     //调用库
iwdg_init(IWDG_PRE_32,1000);  //初始化看门狗,并设置溢出时间为1秒
iwdg_feed();                  //喂狗操作,使看门狗定时器复位

以下以LED闪烁为例:

#include <libmaple/iwdg.h>
void setup()
{
   pinMode(PC13,OUTPUT);
   iwdg_init(IWDG_PRE_32,1000); //开启看门狗,并设置溢出时间为1秒
}
 
void loop()
{
   digitalWrite(PC13,HIGH);
   delay(700);
   digitalWrite(PC13,LOW);
   delay(700);
   iwdg_feed(); //喂狗操作,使看门狗定时器复位
}

由于700ms+700ms>1000ms,因此看门狗未得到feed,导致自动复位,因此执行逻辑是PC13.(HIGH)持续700ms,PC13(LOW)持续1000ms-700ms=300ms,STM32F103复位,再次执行,不停循环。

猜你喜欢

转载自blog.csdn.net/leotian966/article/details/103430245