0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32入门学习笔记之看门狗实验(下)

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 11:27 次阅读

14.4.2 窗口看门狗实验

功能:程序一运行使得接在PB5上的LED1亮300ms后关闭,进入死循环。等待WWDG中断的到来,在中断里面,喂狗,并对PE5上的LED2进行翻转操作。可以看到LED2不停的闪烁,LED1只在刚启动的时候闪一下。

(1)在上一个实验的wdg.h文件的函数列表区域添加以下代码。

void WWDG_Init( u8 tr, u8 wr, u8 fprer ) ; //窗口看门狗初始化

(2)在上一个实验的wdg.c文件末尾添加以下代码。

/***************************************************
Name    :WWDG_IRQHandler
Function  :窗口看门狗中断服务程序
Paramater  :None
Return    :None
***************************************************/
void WWDG_IRQHandler()
{
  WWDG->CR = 0x7F ;                                          //重设置7位计数器
  WWDG->SR = 0x00 ;                                          //清除提前唤醒中断标志位
  LED2 != LED2 ;
}
/***************************************************
Name    :WWDG_Init
Function  :窗口看门狗初始化
Paramater  :
      tr:计数器值
      wr:窗口值
      fprer:分频系数
Return    :None
***************************************************/
void WWDG_Init( u8 tr, u8 wr, u8 fprer )
{
  RCC->APB1ENR |= 1<<11 ;                                        //使能wwdg时钟
  WWDG->CFR |= fprer<<7 ;    //PCLK1/4096再除2^fprer
  WWDG->CFR &= 0xFF80 ;
  WWDG->CFR |= wr ;                                          //设定窗口值
  WWDG->CR |= tr&0x7F ;                                        //设定计数器值
  WWDG->CR |= 1<<7 ;                                          //开启看门狗
  NVIC_Init( 2, 3, WWDG_IRQn, 2 ) ;                                  //抢占2,子优先级3,组2
  WWDG->SR = 0x00 ;                                          //清除提前唤醒中断标志位
  WWDG->CFR |= 1<<9 ;                                          //使能提前唤醒中断
}

注:由于在中断服务函数中引用了LED2,所以需要添加头文件#include “led.h”。

(3)创建led.h文件,并输入以下代码。

#ifndef _LED_H_
#define _LED_H_


#include "sys.h"
/*********************************************************************************************************
                  硬    件    端    口
*********************************************************************************************************/
#define LED1  PBout( 5 )                                        //定义LED1端口
#define LED2  PEout( 5 )                                        //定义LED2端口
/*********************************************************************************************************
                  函    数    列    表
*********************************************************************************************************/
void LED_Init( void ) ;                                          //LED初始化


#endif

(4)创建led.c文件,并输入以下代码。

#include "led.h"


/***************************************************
Name    :LED_Init
Function  :LED初始化
Paramater  :None
Return    :None
***************************************************/
void LED_Init()
{
  RCC->APB2ENR |= 1<<3 ;
  GPIOB->CRL &= 0xFF0FFFFF ;
  GPIOB->CRL |= 0x00300000 ;

  RCC->APB2ENR |= 1<<6 ;
  GPIOE->CRL &= 0xFF0FFFFF ;
  GPIOE->CRL |= 0x00300000 ;

  LED1 = 1 ;
  LED2 = 1 ;
}

(5)在1.c文件中输入以下代码。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "led.h"
#include "wdg.h"
/***************************************************
Name    :main
Function  :主函数
Parameter  :None
Return    :None
***************************************************/
int main()
{
  STM32_Clock_Init( 9 ) ;                                        //STM32时钟初始化
  SysTick_Init( 72 ) ;                                        //SysTick初始化
  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200
  LED_Init() ;                                            //LED初始化
  LED1 = 0 ;                                              //点亮DS0
  delay_ms( 300 ) ;                                          //延时300ms,让人可以看到DS0亮的状态
   WWDG_Init( 0x7F, 0x5F, 3 ) ;                                    //计数器值为7f,窗口寄存器为5f,分频数为8
  while( 1 )
  {
    LED1 = 1 ;                                            //熄灭LED1
  }
}

14.5 为何STM32要同时存在窗口看门狗与独立看门狗

14.5.1 独立看门狗的使用条件

(1)程序跑飞

(2)出现死循环

(3)睡眠与休眠不合理

(4)外部主晶振损坏

(5)需要重新复位,且不保留任何数据

14.5.2 窗口看门狗使用条件

(1)软件逻辑出现错误

(2)死机或者死循环

(3)软件执行不按预期效果执行

(4)软件需要重新复位,但是保留所有数据

14.5.3 两者的区别

(1)独立看门狗使用内部专用40kHz低速时钟

窗口看门狗则使用PCLK1的时钟

(2)独立看门狗没有中断,超时直接复位

窗口看门狗有中断,超时可以在中断服务函数中操作或者喂狗

(3)独立看门狗一般用于避免程序跑飞或者死循环

窗口看门狗则是为了避免程序不按照预先设定的逻辑执行

(4)独立看门狗是12位递减操作

窗口看门狗则是6位递减操作
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44525

    浏览量

    633272
  • 看门狗
    +关注

    关注

    10

    文章

    559

    浏览量

    70754
  • STM32
    +关注

    关注

    2266

    文章

    10876

    浏览量

    354936
  • 计数器
    +关注

    关注

    32

    文章

    2254

    浏览量

    94374
  • 定时器
    +关注

    关注

    23

    文章

    3242

    浏览量

    114520
收藏 人收藏

    评论

    相关推荐

    STM32中的独立看门狗和窗口看门狗是什么

    在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立看门狗
    的头像 发表于 02-20 17:47 2683次阅读
    <b class='flag-5'>STM32</b>中的独立<b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>是什么

    STM32_独立看门狗程序

    STM32 独立看门狗程序,很好的学习资料,快来下载吧
    发表于 02-15 17:08 25次下载

    ALIENTEK_MINISTM32_实验5_独立看门狗实验

    ALIENTEK MINISTM32 实验5 独立看门狗实验,很好的资料,快来学习
    发表于 02-18 14:58 6次下载

    ALIENTEK_MINISTM32_实验6_窗口看门狗实验

    ALIENTEK MINISTM32 实验6 窗口看门狗实验,很好的资料,快来学习
    发表于 02-18 14:58 4次下载

    stm32看门狗时间计算 独立看门狗和窗口看门狗的特性是什么

    本文为您讲解STM看门狗时间计算(时限)与频率计算,独立看门狗和窗口看门狗的特性、区别与联系。
    发表于 10-10 10:41 8741次阅读

    什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析

    stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗
    的头像 发表于 11-06 11:48 2.7w次阅读
    什么是<b class='flag-5'>stm32</b><b class='flag-5'>看门狗</b>?独立<b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>工作原理解析

    STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)

    stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定
    发表于 11-09 17:17 8430次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>看门狗</b>配置(独立<b class='flag-5'>看门狗</b>IWDG和窗口<b class='flag-5'>看门狗</b>WWDG)

    STM32看门狗配置详情解说

     stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗有自己独立的40Khz时钟,不存
    发表于 11-13 11:17 4422次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>看门狗</b>配置详情解说

    独立看门狗实验-IWDG-M3

    关于STM32独立看门狗实验文档
    发表于 11-27 15:30 3次下载

    基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法

    基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
    的头像 发表于 03-12 10:11 9312次阅读

    stm32看门狗的特点是什么

    stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。
    的头像 发表于 07-22 11:08 4031次阅读

    MCU学习笔记_IWDG独立看门狗

    MCU学习笔记IWDG独立看门狗1. IWDG独立看门狗概述2. 寄存器和HAL库函数配置3. 实例1. IWDG独立看门狗概述
    发表于 10-28 20:21 9次下载
    MCU<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>_IWDG独立<b class='flag-5'>看门狗</b>

    STM32学习心得十六:独立看门狗实验

    记录一,方便以后翻阅~主要内容:1) 独立看门狗概述;2) 常用寄存器和库函数配置;3) 独立看门狗实验代码解读。官方资料:《STM32
    发表于 12-27 18:44 6次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b>心得十六:独立<b class='flag-5'>看门狗</b><b class='flag-5'>实验</b>

    STM32:独立看门狗、窗口看门狗的配置

    STM32单片机的看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同。
    发表于 02-08 16:15 18次下载
    <b class='flag-5'>STM32</b>:独立<b class='flag-5'>看门狗</b>、窗口<b class='flag-5'>看门狗</b>的配置

    STM32中的独立看门狗和窗口看门狗

    一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立
    的头像 发表于 12-22 16:58 2068次阅读