【正点原子STM32连载】 第十五章 窗口看门狗实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第十五章 窗口看门狗实验

本章介绍APM32E103窗口看门狗(WWDT)的使用,窗口看门狗与独立看门狗一样能够帮助CPU在进入错误状态或程序跑飞时进行复位,不过窗口看门狗相对于独立看门狗限制了“喂狗”的最小间隔,若两次“喂狗”的间隔太短,一样会产生复位。通过本章的学习,读者将学习到WWDT的使用。
本章分为如下几个小节:
15.1 硬件设计
15.2 程序设计
15.3 下载验证

15.1 硬件设计
15.1.1 例程功能

  1. 程序运行后,点亮LED0等待300毫秒后开启窗口看门狗,后进入死循环等待窗口看门狗的中断在窗口看门狗的中断服务函数中执行喂狗和翻转LED1状态的操作,能观察到的现象为LED0在程序启动时闪烁以下,随后LED1不停闪烁
    15.1.2 硬件资源
  2. LED
    LED0 - PB5
    LED1 - PE5
  3. 窗口看门狗
    15.1.3 原理图
    本章实验使用的窗口看门狗为APM32E103的片上资源,因此并没有相应的连接原理图。
    15.2 程序设计
    15.2.1 Geehy标准库的WWDT驱动
    本章实验使用到了WWDT的提前唤醒中断,提前唤醒中断指的是WWDT在“喂狗”超时即将进行复位前由WWDT产生的中断,本章实验就在WWDT的提前唤醒中断服务函数中进行“喂狗”。在使用WWDT前,需要先对其进行初始化,在初始化中,需要使能WWDT并配置WWDT的预分频系数和窗口值,还要进行使能WWDT中断的相关操作,具体的步骤如下:
    ①:使能WWDT
    ②:配置WWDT预分频系数
    ③:配置WWDT窗口值
    ④:使能WWDT的提前唤醒中断
    ⑤:使能WWDT中断,并配置其相关的中断优先级
    ⑥:在WWDT提前唤醒中对其进行“喂狗”
    在Geehy标准库中对应的驱动函数如下:
    ①:使能WWDT
    该函数用于使能WWDT,其函数原型如下所示:
    void WWDT_Enable(uint8_t counter);
    该函数的形参描述,如下表所示:
    形参 描述
    counter WWDT的计数值
    该值从0x40减到0x3F时,会产生WWDT复位
    表15.2.1.1 函数WWDT_Enable()形参描述
    该函数的返回值描述,如下表所示:
    返回值 描述
    无 无
    表15.2.1.2 函数WWDT_Enable()返回值描述
    该函数的使用示例,如下所示:
#include "apm32e10x.h"
#include "apm32e10x_wwdt.h"void example_fun(void)
{/* 使能WWDT */WWDT_Enable(0x7F);
}

②:配置WWDT预分频系数
该函数用于配置WWDT的预分频系数,预分频系数决定了WWDT计数的快慢,其函数原型如下所示:
void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase);
该函数的形参描述,如下表所示:
形参 描述
timeBase WWDT的时基预分频值
例如:WWDT_TIME_BASE_1、WWDT_TIME_BASE_2等(在apm32e10x _wwdt.h文件中有定义)
表15.2.1.3 函数WWDT_ConfigTimebase()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表15.2.1.4 函数WWDT_ConfigTimebase()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_wwdt.h"void example_fun(void)
{/* 配置WWDT的预分频系数* WWDT的计数时钟为(PCLK1/4096)/8*/WWDT_ConfigTimebase(WWDT_TIME_BASE_8);
}

③:配置WWDT窗口值
该函数用于配置WWDT的窗口值,在WWDT的计数值减少到窗口值之前进行“喂狗”,将为导致WWDT复位,其函数原型如下所示:
void WWDT_ConfigWindowData(uint8_t windowData);
该函数的形参描述,如下表所示:
形参 描述
windowData WWDT的窗口值
表15.2.1.5 函数WWDT_ConfigWindowData()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表15.2.1.6 函数WWDT_ConfigWindowData()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_wwdt.h"void example_fun(void)
{/* 配置WWDT窗口值 */WWDT_ConfigWindowData(0x5F);
}

④:使能WWDT提前唤醒中断
该函数用于使能WWDT的提前唤醒中断,其函数原型如下所示:
void WWDT_EnableEWI(void);
该函数的形参描述,如下表所示:
形参 描述
无 无
表15.2.1.7 函数WWDT_EnableEWI()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表15.2.1.8 函数WWDT_EnableEWI()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_wwdt.h"void example_fun(void)
{/* 使能WWDT提前唤醒中断 */WWDT_EnableEWI();
}

⑤:配置WWDT中断
请见第12.2.3小节中配置中断的相关内容。
⑥:配置WWDT的计数值
该函数用于配置WWDT的计数值,也就是所谓的“喂狗”,其函数原型如下:
void WWDT_ConfigCounter(uint8_t counter);
该函数的形参描述,如下表所示:
形参 描述
counter WWDT的计数值
表15.2.1.9 函数WWDT_ConfigCounter()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表15.2.1.10 函数WWDT_ConfigCounter()返回值描述
该函数的使用示例,如下表所示:

#include "apm32e10x.h"
#include "apm32e10x_wwdt.h"void example_fun(void)
{/* 配置WWDT的计数值(喂狗) */WWDT_ConfigCounter(0x7F);
}

15.2.2 看门狗驱动
本章实验的看门狗驱动主要负责向应用层提供WWDT的初始化函数,并实现WWDT的提前唤醒中断服务函数,在WWDT的提前唤醒中断服务函数中执行“喂狗”操作。本章实验中,看门狗驱动的驱动代码包括wdt.c和wdt.h两个文件。
看门狗驱动中WWDT的初始化函数,如下所示:


```c
/*** @brief       初始化窗口看门狗* @param       tr: T[5:0],计数器值* @param       tw: W[6:0],窗口值* @param       fprer:分频系数(WDGTB),范围:WWDT_TIME_BASE_1~WWDT_TIME_BASE_8,表示2^WDGTB分频*              Twwdt=TPCLK1 * 2^(WTB) * (T[5:0]+1). 一般PCLK1 = 60MHz最大-最小超时时间参考《APM32E103xCxE用户手册 V1.3》 第十八章* @retval      无*/
void wwdt_init(uint8_t tr, uint8_t tw, WWDT_TIME_BASE_T fprer)
{RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_WWDT);/* 打开时钟 */wwdt_cnt = tr;                                  /* 初始化wwdt_cnt传进参数tr*/WWDT_ConfigTimebase(fprer);                     /* 设置WWDT分频系数 */WWDT_ConfigWindowData(tw);                      /* 窗口值 */WWDT_Enable(tr);                                /* 设置计数器的值,使能WWDT */WWDT_ClearFlag();                               /* 清楚唤醒中断标志位 */wwdt_nvic_init();                               /* 窗口看门狗中断初始化 */WWDT_EnableEWI();                               /* 使能窗口看门狗中断 */
}

从上面的代码中可以看出,WWDT的初始化函数中除了使能WWDT的时钟外,还分别执行了使能WWDT、配置WWDT的预分频系数和窗口值、使能WWDT的提前唤醒中断和使能WWDT中断的操作。随后,在WWDT计数值减少到0x40时,将会产生提前唤醒中断。```c
/*** @brief       窗口看门狗中断服务程序* @param       无* @retval      无*/
void WWDT_IRQHandler(void)
{if (WWDT_ReadFlag() != RESET){WWDT_ConfigCounter(wwdt_cnt);/* 刷新递减计数器的值,当计数器值小于窗口值喂狗 */LED1_TOGGLE();               /* LED1闪烁 */WWDT_ClearFlag();            /* 清楚唤醒中断标志位 */}
}

从上面的代码中可以看出,在窗口看门狗的提前唤醒中断服务函数中,对WWDT进行了喂狗操作,同时LED1的亮灭状态发生了翻转。通过代码设置LED1亮灭状态翻转的目的在于方便观察“喂狗”这一过程。
15.2.3 实验应用代码
本实验的应用代码,如下所示:

int main(void)
{NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  /* 设置中断优先级分组为组4 */sys_apm32_clock_init(15);                         /* 配置系统时钟 */delay_init(120);                                  /* 初始化延时功能 */usart_init(115200);                               /* 初始化串口 */led_init();                                       /* 初始化LED */LED0(0);                                          /* 先点亮LED0 */delay_ms(500);                                    /* 延时500ms */wwdt_init(0x7F, 0x5F, WWDT_TIME_BASE_8);          /* 初始化窗口看门狗 */while (1){LED0(1);                                      /* 关闭LED0 */}
}

从上面的代码中可以看出,初始化LED后,LED0会被点亮500毫秒,随后初始化窗口看门狗并熄灭LED0,若窗口看门狗没有正常被“喂狗”,那么程序复位,可以看到LED0再次亮起和熄灭,如果窗口看门狗被正常“喂狗”,则可以看到LED1快速闪烁。
15.3 下载验证
在完成编译和烧录操作后,可以看到板子上的LED0在上电时,亮起并熄灭一次,随后LED1不断闪烁,说明WWDT“喂狗”正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录——链表 刷题记录

链表数据结构 public class ListNode {int val;ListNode next;// 构造函数public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode next) {this.val val;this.next next;} }203.移除链表元素 707.设计链表 单链表双链表 publi…

软件测试小课堂

1.测试用例的作用 一、理清测试思路 实际结果、预期结果、目的、bug二、评估工作进度 每个测试用例覆盖多少个功能点,有多少没有覆盖三、提前准备测试数据 正向数据、反向数据、等价类、边界值四、评估工作量五、进行回归测试六、企业角度 人员流动不影响测试进度&…

遥感图像分割系统:融合空间金字塔池化(FocalModulation)改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 遥感图像分割是遥感技术领域中的一个重要研究方向,它的目标是将遥感图像中的不同地物或地物类别进行有效的分割和识别。随着遥感技术的不断发展和遥感…

Hystrix使用及原理概述

一、背景 1. 当前问题 一个系统,所有请求共用同一个APP容器(Tomcat/jetty/等),共用一个用户线程池,依赖多个不同的远程服务。 当系统健康时,处理请求的延时较低,服务正常运行;当某…

大模型下开源文档解析工具总结及技术思考

1 基于文档解析工具的方法 pdf解析工具 导图一览: PyPDF2提取txt: import PyPDF2 def extract_text_from_pdf(pdf_path):with open(pdf_path, rb) as file:pdf_reader PyPDF2.PdfFileReader(file)num_pages pdf_reader.numPagestext ""f…

漏洞复现-网神SecGate3600防火墙敏感信息泄露漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

记录 | ubuntu安装Albert

ubuntu 安装 Albert # 依赖安装 sudo apt install cmake pybind11-dev libmuparser-dev libqalculate-dev libxcb-cursor0 libgl1-mesa-dev# 安装Qt6git clone --recursive https://github.com/albertlauncher/albert.gitcd albert # 若 albert/plugin clone失败,则…

算法leetcode|92. 反转链表 II(rust重拳出击)

文章目录 92. 反转链表 II:样例 1:样例 2:提示:进阶: 分析:题解:rust:go:c:python:java: 92. 反转链表 II: 给你单链表的…

迈入数据结构殿堂——时间复杂度和空间复杂度

目录 一,算法效率 1.如何衡量一个算法的好坏? 2.算法效率 二,时间复杂度 1.时间复杂度的概念 2.大O的渐进表示法 3.推导大O的渐进表示法 4.常见时间复杂度举例 三,空间复杂度 一,算法效率 数据结构和算法是密…

关于成品项目分辨率适配解决方案

最近接手一个项目,开发马上完成,客户突然提出产品的分辨率适配不太友好; ......领导一声令下,改吧 怎么改?量太大,项目用的reactantdvumi,react页面没有800个也有500个了,一个一个页面改,不太现实,耗时太久,决定找新的其他方案. 在网上找了一些文章,决定用css3 transfrom …

迅腾文化品牌网络推广助力企业:保持品牌稳定,发展更多消费者信任,提升品牌忠诚度

迅腾文化品牌网络推广助力企业:保持品牌稳定,发展更多消费者信任,提升品牌忠诚度 在当今快速发展的互联网时代,品牌网络推广已经成为企业发展的重要手段。迅腾文化作为专业的品牌网络推广公司,致力于帮助企业实现品牌…

单机版ElasticSearch健康状态yellow解决---ElasticSearch工作笔记035

ElasticSearch启动的时候报错: [2023-12-12T14:53:01,356][WARN ][r.suppressed ] [node-1] path: /.kibana/_doc/space%3Adefault, params: {index=.kibana, id=space:default} org.elasticsearch.action.NoShardAvailableActionException: No shard available f…

产品经理之如何编写需求PRD文档(医疗HIS项目详细案例模板)

目录 前言 一.需求文档的含义 二.需求文档的作用及目的 三.编写前的准备 四.需求大纲 五.案例模板 前言 继上两篇的可行性分析文档和竞品分析报告,本篇将继续介绍如何编写PRD文档,并且会附上以医疗项目为例的模板 一.需求文档的含义 需求文…

【C语言(十五)】

动态内存管理 一、为什么要有动态内存分配? 我们已经掌握的内存开辟方式有: int val 20 ; // 在栈空间上开辟四个字节 char arr[ 10 ] { 0 }; // 在栈空间上开辟 10 个字节的连续空间 但是上述的开辟空间的方式有两个特点: • 空间开辟大小是固…

camera卷帘快门(Rolling Shutter)与全局快门(Global Shutter)

首先来看一下什么叫快门: 快门是照相机用来控制感光元件有效曝光时间的装置。可以理解为光线要想打到相机传感器上必经的一道门。如果快门关着,那么光线进不去,感光元件就无法曝光;门开了,光线进来了,感光元…

FlinkSQL中的窗口

多维分析 需求:有一张test表,表的字段为:A, B, C, amount, 其中A, B, C为维度字段,求以三个维度任意组合,统计sum(amount) Union方案: A, B, C的任意组合共有8种,分别为(A, B,C,AB…

C语言:指针与数组易错辨析

前言: 在学校学习指针和数组的联系时,对指针与数组的结合产生了很大的疑惑,后来不断查找资料,本人对指针与数组的综合有了一定的理解,现进行综合讨论辨析 数组指针: 数组指针,即为指向数组类…

OpenAI 认为超人工智能即将来临,并希望构建工具来控制它

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

机器学习中数据的特征表示

在实际应用中,数据的类型多种多样,比如文本、音频、图像、视频等。不同类型的数据,其原始特征的空间也不相同。比如一张灰度图像(像素数量为 𝐷)的特征空间为 [0, 255]𝐷,一个自然语…

深入理解 hash 和 history:网页导航的基础(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…