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

news2024/9/29 16:44:55

1)实验平台:正点原子stm32f103战舰开发板V4
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html#

第十五章 窗口看门狗实验

本章介绍APM32F407窗口看门狗(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 - PF9
    LED1 - PF10
  3. 窗口看门狗
    15.1.3 原理图
    本章实验使用的窗口看门狗为APM32F407的片上资源,因此并没有相应的连接原理图。
    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);
    该函数的形参描述,如下表所示:
    在这里插入图片描述

表15.2.1.1 函数WWDT_Enable()形参描述
该函数的返回值描述,如下表所示:
在这里插入图片描述

表15.2.1.2 函数WWDT_Enable()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 使能WWDT */
    WWDT_Enable(0x7F);
}

②:配置WWDT预分频系数
该函数用于配置WWDT的预分频系数,预分频系数决定了WWDT计数的快慢,其函数原型如下所示:
void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase);
该函数的形参描述,如下表所示:
在这里插入图片描述

表15.2.1.3 函数WWDT_ConfigTimebase()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表15.2.1.4 函数WWDT_ConfigTimebase()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_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 "apm32f4xx.h"
#include "apm32f4xx_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 "apm32f4xx.h"
#include "apm32f4xx_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 "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 配置WWDT的计数值(喂狗) */
    WWDT_ConfigCounter(0x7F);
}

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

/**
 * @brief	窗口看门狗初始化
 * @param	tr: 计数器数值
 * @param	tw: 窗口值
 * @param	fprer: 时基预分频系数,WWDT_TIME_BASE_1~WWDT_TIME_BASE_8
 * 			Fwwdt = (PCLK1 / 4096) / (2^fprer)
 * @retval	无
 */
void wwdt_init(uint8_t tr, uint8_t wr, uint32_t fprer)
{
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_WWDT);	/* 使能WWDT时钟 */
    WWDT_Enable(tr);								/* 使能窗口看门狗并设置计数器数值 */
    WWDT_ConfigTimebase((WWDT_TIME_BASE_T)fprer);		/* 配置时基预分频系数 */
    WWDT_ConfigWindowData(wr);							/* 设置窗口值 */
    wwdt_counter = tr;
    WWDT_EnableEWI();									/* 使能提前唤醒中断 */
    NVIC_EnableIRQRequest(WWDT_IRQn, 2, 0);				/* 使能中断 */
}

从上面的代码中可以看出,WWDT的初始化函数中除了使能了WWDT的时钟外,还分别执行了使能WWDT、配置WWDT的预分频系数和窗口值、使能WWDT的提前唤醒中断和使能WWDT中断的操作。随后,在WWDT计数值减少到0x40时,将会产生提前唤醒中断。
看门狗驱动中,WWDT提前唤醒中断的中断服务函数,如下所示:

/**
 * @brief	窗口看门狗提前唤醒中断服务函数
 * @param	无
 * @retval	无
 */
void WWDT_IRQHandler(void)
{
    if (WWDT_ReadFlag() == SET)				/* 判断提前唤醒中断标志 */
    {
    		WWDT_ConfigCounter(wwdt_counter);	/* 重新配置窗口看门狗计数器数值 */
    		LED1_TOGGLE();						/* 翻转LED1状态 */
    		WWDT_ClearFlag();					/* 清除提前唤醒中断标志 */
    }
}

可以看到,在窗口看门狗的提前唤醒中断服务函数中,对WWDT进行了喂狗操作,同时还对LED1的状态进行了以此翻转(方便观察)。
15.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{
    NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 设置中断优先级分组为组3 */
    sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系统时钟 */
    delay_init(168);										/* 初始化延时功能 */
    usart_init(115200);									/* 初始化串口 */
    led_init();											/* 初始化LED */
    LED0(0);												/* LED0点亮 */
    delay_ms(300);
    wwdt_init(0x7F, 0x5F, WWDT_TIME_BASE_8);
    
    while (1)
    {
    		LED0(1);	/* LED0熄灭 */
    }
}

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

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

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

相关文章

认识Mybatis并实现增删查改

目录 一.Mybatis特性 二.常见持久层技术的比较 三.搭建Mybaits环境 四.使用Mybatis 五.通过Mybatis实现增删改 六.实现数据库的查询操作 一.Mybatis特性 定制化SQL:MyBatis允许开发人员编写、优化和管理自定义的SQL语句,可以满足复杂查询和存储过程等…

Vitepress

Vitepress 版本:1.0.0-rc.1 这里使用在Vue3组件库中作为项目文档说明使用,另外版本见差异有点大,如版本不一致请参照官方文档 1、安装&初始化 1.1、安装 yarn add vitepress1.0.0-rc.11.2、初始化 PS D:\WebstromProject\chenxing>…

CloudQuery实战 | 谁说没有一款一体化数据库操作管控云平台了?

文章目录 CloudQuery询盾的地址CloudQuery主页统一入口数据库归纳SQL编辑器权限管控审计中心数据保护数据变更 CloudQuery文档中心了解CloudQuery快速入门安装步骤社区版v2.1.0操作手册1数据查询更新日志 CloudQuery社区和活动 CloudQuery线上实战线上实战主页面展示及数据操作…

CAD哪个版本最好用?学习一下CAD版本转换方法

CAD即计算机辅助设计,是一个制图软件,用于绘制建筑、机械、电子等领域的图纸。CAD文件通常被称为“图纸”或“工程图”。 CAD文件通常在以下方面使用: 1. 建筑:建筑师使用CAD文件来创建建筑物的平面图、立体图和剖面图。 2. 机…

Docker部署LNMP

Docker部署LNMP 一、安装docker1.安装docker2.镜像下载 二、部署MySQL1.获取镜像2.创建启动容器创建启动容器 huahua_mysql 三、部署PHP1.获取镜像2.创建容器3.查看信息 四、安装nginx1.获取镜像2.创建运行容器3.修改nginx配置文件 五、总结1. 安装Docker和Docker Compose&…

IO模型(阻塞IO、非阻塞IO、IO多路复用)

1.阻塞IO:最常用,最简单,效率最低 2.非阻塞 IO--->fcntl:获取或设置fd所指定的文件描述符的属性 箭头地方二选一 3.IO多路复用:允许同时对多个IO进行控制 select:内核同时检测多个IO,一…

金额千位符自定义指令

自定义指令文件 moneyFormat.js /*** v-money 金额千分位转换*/export default {inserted: inputFormatter({// 格式化函数formatter(num, util) {if(num null || num || num undefined || typeof(num) undefined){return }if(util 万元 || util 万){return formatMone…

SHELL 基础 显示字符颜色, 修改历史命令,Linux里的命令 执行顺序

echo 打印命令 : 显示字符串 : [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo "this is SHELL language" this is SH…

vue 使用nvm控制node 版本,随意切换 node 版本

1.nvm 下载安装 https://github.com/coreybutler/nvm-windows/releases 找自己版本 1.安装版本 nvm list available // 查看所有node 版本 nvm install 版本号 // 安装指定版本号2.nvm 列表展示 nvm list //展示所有版本号3.nvm 切换环境 nvm use 版本号 // 切换版本4.…

星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

目录 前言 一、监听按键并作出判断 二、持续移动 三、左右移动 总结: 前言 今天开始正式操控我们的小蜜蜂了,之前学java的时候是有一个函数监听鼠标和键盘的操作,我们通过传过来不同的值进行判断,现在来看看python是否一样的实现…

框架分析(1)-IT人必须会

框架分析(1)-IT人必须会 专栏介绍当今主流框架前端框架后端框架移动应用框架数据库框架测试框架 Angular关键特点和功能:组件化架构双向数据绑定依赖注入路由功能强大的模板语法测试友好 优缺点分析优点缺点 总结 专栏介绍 link 主要对目前市…

计算机竞赛 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

Datawhale 北邮分部成立了!

Datawhale分部 联合发起:陈玉立、陈逸涵、夏镇、李泽钜、邢植尧 蓟门以南,明光之北。杏坛向西,城垣东望。厚德博学,敬业乐群。 BYR,Datawhale北京邮电大学分部(北邮AI俱乐部)来啦! …

微信好友恢复大师两招教你找回微信好友

在使用微信的时候,一些小伙伴可能没有给好友备注的习惯,所以很容易在清理“僵尸好友”时会不小心误删。如果您没有保存对方的联系方式,并且你们之间也没有共同好友,那么该如何重新加回好友呢?今天,小编就要…

Springboot 自定义 Mybatis拦截器,实现 动态查询条件SQL自动组装拼接(玩具)

前言 ps:最近在参与3100保卫战,战况很激烈,刚刚打完仗,来更新一下之前写了一半的博客。 该篇针对日常写查询的时候,那些动态条件sql 做个简单的封装,自动生成(抛砖引玉,搞个小玩具&a…

【已解决】Please install Node.js and npm before continuing installation.

给juopyter lab安装插件时报这个错 原因是,conda本身有nodejs,但是版本很低,只有0.几 所以需要卸载掉原来的nodejs,重新安装10版本以上的nodejs # 卸载命令 pip uninstall nodejs # 安装命令 conda install nodejs14.7.0 -c cond…

从入门到精通:微信小程序跳转页面的实用指南

前言 微信小程序中页面跳转方法的灵活运用不仅可以提升用户体验,还能为应用增添更多创意和吸引力。本文将为大家详细介绍微信小程序跳转页面的方法,让你的应用与众不同,为用户带来全新的体验。 方式一:wx.navigateTo 保留当前页面…

第1步---MySQL安装和配置

第1步---MySQL安装和配置 1.下载地址 MySQL :: Download MySQL Community Server (Archived Versions) 直接下载zip形式的就可以。 2.在bin的同级目录下常见my.ini文件。 输入下面的内容 my.ini中的文本: [mysqld] #设置3306端口 port3306 character-set-server…

DELL R740 R750服务器安装Windows 11

正常安装出现如下 2、同时按下ShiftF10组合键调出管理员命令提示符窗口,依次执行下面命令,输入命令,按Enter键执行,提示操作成功完成,才可以。这些命令可以添加注册表项,绕过TPM、安全启动、CPU、内存和硬盘…

Linux常用命令——diffstat命令

在线Linux命令查询工具 diffstat 显示diff命令输出信息的柱状图 补充说明 diffstat命令用来显示diff命令输出信息的柱状图,用以显示diff命令比较两个文件的不同统计信息。用户也可以直接使用|将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示。使…