【正点原子STM32连载】 第三十章 PVD电压监控实验 摘自【正点原子】APM32F407最小系统板使用指南

2023-11-02

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

第三十章 PVD电压监控实验

本章介绍APM32F407电源电压监测器(PVD)的使用,PVD可以设置一个电压阈值,当监测到电源电压低于该阈值后,可以触发中断,以完成一些紧急处理。通过本章的学习,读者将学习到PVD的使用。
本章分为如下几个小节:
30.1 硬件设计
30.2 程序设计
30.3 下载验证

30.1 硬件设计

30.1.1 例程功能

  1. 当MCU电源电压低于2.7V时,LED1亮起,并且LCD显示相应的提示;当MCU电源电压恢复至高于2.7V时,LED1熄灭,并且LCD显示相应的提示
  2. LED0闪烁,指示程序正在运行
    30.1.2 硬件资源
  3. LED
    LED0 - PF9
    LED1 - PF10
  4. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  5. PVD
    30.1.3 原理图
    本章实验使用的PVD为APM32F407的片上资源,因此没有对应的连接原理图。
    30.2 程序设计
    30.2.1 Geehy标准库的PMU驱动
    本章实验使用的PVD为PMU的子模块,因此对PVD的操作函数都由Geehy标准库中的PMU驱动提供,使用PVD的具体步骤如下:
    ①:配置PVD电压阈值
    ②:配置PVD输出对应的EINT线
    ③:使能PVD中断,并配置其相关的中断优先级
    ④:使能PVD
    在Geehy标准库中对应的驱动函数如下:
    ①:配置PVD电压阈值
    该函数用于配置PVD的电压阈值,其函数原型如下所示:
    void PMU_ConfigPVDLevel(PMU_PVD_LEVEL_T level);
    该函数的形参描述,如下表所示:
    在这里插入图片描述

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

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

#include "apm32f4xx.h"
#include "apm32f4xx_pmu.h"

void example_fun(void)
{
    /* 配置PVD的阈值电压的2.7V */
    PMU_ConfigLVDLevel(PMU_PVD_LEVEL_2V7);
}

②:配置EINT
PVD输出对应的外部中断与事件线为EINT16,其配置方式请见第12.2.3小节中配置EINT的相关内容。
③:使能PVD中断
请见第12.2.3小节中配置中断的相关内容。
④:使能PVD
该函数用于使能PVD,其函数原型如下所示:
void PMU_EnablePVD(void);
该函数的形参描述,如下表所示:
形参 描述
无 无
表30.2.1.3 函数PMU_EnablePVD()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表30.2.1.4 函数PMU_EnablePVD()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_pmu.h"

void example_fun(void)
{
    /* 使能PVD */
    PMU_EnablePVD();
}

30.2.2 PMU驱动
本章实验的PMU驱动主要负责向应用层提供PVD的初始化函数,并实现PVD的中断回调函数。本章实验中,PMU的驱动代码包括pmu.c和pmu.h两个文件。
PMU驱动中,初始化PVD的函数,如下所示:

/**
 * @brief	初始化PVD
 * @param	pls: PVD 电压阈值
 *   @arg	PMU_PVD_LEVEL_2V0: PVD电压阈值设置为2.0V
 *   @arg	PMU_PVD_LEVEL_2V1: PVD电压阈值设置为2.1V
 *   @arg	PMU_PVD_LEVEL_2V3: PVD电压阈值设置为2.3V
 *   @arg	PMU_PVD_LEVEL_2V5: PVD电压阈值设置为2.5V
 *   @arg	PMU_PVD_LEVEL_2V6: PVD电压阈值设置为2.6V
 *   @arg	PMU_PVD_LEVEL_2V7: PVD电压阈值设置为2.7V
 *   @arg	PMU_PVD_LEVEL_2V8: PVD电压阈值设置为2.8V
 *   @arg	PMU_PVD_LEVEL_2V9: PVD电压阈值设置为2.9V
 * @retval	无
 */
void pmu_pvd_init(uint32_t pls)
{
    EINT_Config_T eint_pmu_init_struct;
    
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);			/* 使能PMU时钟 */
    PMU_ConfigPVDLevel((PMU_PVD_LEVEL_T)pls);				/* 设置PVD电压阈值 */
    
    eint_pmu_init_struct.line		= EINT_LINE_16;					/* 事件线16 */
    eint_pmu_init_struct.mode		= EINT_MODE_INTERRUPT;			/* 中断模式 */
    eint_pmu_init_struct.trigger	= EINT_TRIGGER_RISING_FALLING;	/* 双边沿触发 */
    eint_pmu_init_struct.lineCmd	= ENABLE;				/* 使能事件线16 */
    EINT_Config(&eint_pmu_init_struct);						/* 配置事件线16 */
    
    NVIC_EnableIRQRequest(PVD_IRQn, 3, 0);					/* 使能PVD中断 */
    PMU_EnablePVD();											/* 使能PVD */
}

从上面的代码中可以看到,PVD的初始化函数中,根据函数传入的参数配置了PVD的电压阈值,并开启了PVD的相关中断和使能PVD。
PMU驱动中,PVD的中断回调函数,如下所示:

/**
 * @brief	PVD中断回调函数
 * @param	无
 * @retval	无
 */
void PVD_IRQHandler(void)
{
    if (EINT_ReadIntFlag(EINT_LINE_16) == SET)	/* 判断事件线16中断标志 */
    {
    		if (PMU_ReadStatusFlag(PMU_FLAG_PVDO) == SET)
    		{
    			/* LCD显示电压低 */
    			lcd_show_string(30, 130, 200, 16, 16, "PVD Low Voltage!", RED);
    			LED1(0);							/* 点亮LED1 */
    		}
    		else
    		{
    			/* LCD显示电压正常 */
    			lcd_show_string(30, 130, 200, 16, 16, "PVD Voltage OK! ", BLUE);
    			LED1(1);							/* 熄灭LED1 */
    		}
    		
    		EINT_ClearIntFlag(EINT_LINE_16);		/* 清除事件线16中断标志 */
    }
}

从PVD的中断回调函数中可以看到,当PVD监测到电源电压小于设定的电压阈值时,会在LCD上显示电压低的提示并点亮LED1,在PVD监测到电源电压恢复至设定的电压阈值时,会在LCD上显示电压正常的提示并熄灭LED1。
虽然PVD在监测到电源电压低于设定的电压阈值时,会有相应的操作,但是由于电压过低可能导致无法观察到部分操作的现象。
30.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{
    uint8_t t = 0;
    
    NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 设置中断优先级分组为组3 */
    sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系统时钟 */
    delay_init(168);										/* 初始化延时功能 */
    usart_init(115200);									/* 初始化串口 */
    led_init();											/* 初始化LED */
    lcd_init();											/* 初始化LCD */
    /* 初始化PVD电压阈值为2.7V */
    pmu_pvd_init(PMU_PVD_LEVEL_2V7);
    
    lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);
    lcd_show_string(30, 70, 200, 16, 16, "PVD TEST", RED);
    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
    
    /* LCD默认显示电压正常 */
    lcd_show_string(30, 110, 200, 16, 16, "PVD Voltage OK! ", BLUE);
    
    while (1)
    {
    		if ((t % 20) == 0)
    		{
    			LED0_TOGGLE();
    		}
    		
    		t++;
    		delay_ms(10);
    }
}

本实验的应用代码很简单,主要就是配置了PVD的阈值电压为2.7V。
30.3 下载验证
在完成编译和烧录操作后,若系统的供电正常,便可以在LCD上看到“PVD Voltage OK!”的提示,并且LED1也处于熄灭状态;若系统的供电低于设置的PVD电压阈值2.7V时,便可以在LCD上看到“PVD Low Voltage!”的提示,并且LED1也会亮起(系统供电过低时,可能出现跟多意想不到的结果,因此可能会看不到部分现象)。
正常情况下开发板的供电都是正常的,若读者强制影响开发板的供电,可能导致不可逆的硬件损坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【正点原子STM32连载】 第三十章 PVD电压监控实验 摘自【正点原子】APM32F407最小系统板使用指南 的相关文章

  • 手动搭建webase(2)——节点管理服务

    前提条件 拉取代码 git clone https github com WeBankFinTech WeBASE Node Manager git 若因网络问题导致长时间下载失败 可尝试以下命令 git clone https gitee
  • 在uni-app中查询dom元素节点信息

    查询节点信息的对象 selectorQuery in component 将选择器的选取范围更改为自定义组件 component 内 返回一个 SelectorQuery 对象实例 初始时 选择器仅选取页面范围的节点 不会选取任何自定义组件

随机推荐

  • LableMe安装及初步使用(Mac也适用)

    环境 mac OS anaconda3 1 首先安装anaconda3 推荐此网站 下载较快https mirrors tuna tsinghua edu cn anaconda archive 下载完毕安装即可 本人之前就安装过了 在此就
  • vscode 终端无法执行pip

    1 在Windows应用中找到Windows PowerShell 右键以管理员运行 2 在命令框输入 set ExecutionPolicy RemoteSigned 回车 3 根据需要选择 这里我选择的是A 成功解决了问题 ps pow
  • Spring Boot学习之旅:(四)springboot 整合 fastjson

    springboot 默认使用的 jackson 但是听说某宝的fastjson 性能很好 而且平时用的习惯 所以来整合一下 首先在pom 中导入依赖
  • QT登陆注册界面练习

    一 界面展示 二 主要功能界面代码 include widget h include ui widget h Widget Widget QWidget parent QMainWindow parent ui new Ui Widget
  • 【Shell牛客刷题系列】SHELL13 去掉所有包含this的句子:awk与gawk命令的进阶使用

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了用于模式扫描和处理语言的gawk命令 然
  • Django 静态文件

    静态文件 1 什么是静态文件 对于前端已经写好了的文件 我们只是拿过来使用 那么这些文件都可以称之为叫 静态文件 静态文件可以是 bootstrap一类的前段框架 已经写好了的图片 css js 静态文件默认全都放在static文件夹下 s
  • vue使用Monaco editor

    1 项目中使用monaco editor首先要安装 npm install monaco editor S 2 在组件中引用并使用 初始化 更改内容 销毁
  • day 7

    封装一个学生的类 定义一个学生这样类的vector容器 里面存放学生对象 至少3个 再把该容器中的对象 保存到文件中 再把这些学生从文件中读取出来 放入另一个容器中并且遍历输出该容器里的学生 include
  • windows系统中用Python调用linux系统shell脚本

    一 windows系统先安装 1 安装python3 5 2 安装paramiko pip install paramiko 3 卸载cryptography 2 5 python m pip uninstall cryptography
  • linux+rwx+权限值,linux权限管理:rwx

    权限管理简介 r w x 对文件及目录进行权限管理 从而达到文件及目录管理 1 rwx对于文件而言 r 可读 可以使用类似cat等命令查看文件内容 w 可写 可以编辑或删除此文件 x 可执行 exacutable 可以命令提示符下当作命令提
  • 华为机试题70-矩阵乘法计算量估算

    描述 矩阵乘法的运算量与矩阵乘法的顺序强相关 例如 A是一个50 10的矩阵 B是10 20的矩阵 C是20 5的矩阵 计算A B C有两种顺序 AB C 或者 A BC 前者需要计算15000次乘法 后者只需要3500次 编写程序计算不同
  • 新手必看!最简单的MySQL数据库详解

    本篇文章主要跟大家介绍的是详解MySQL数据库 对于新手来说帮助很大的 而且MySQL是最流行的关系型数据库管理系统 在web应用方面 MySQL也是最好的RDBMS应用软件之一 因此 感兴趣的朋友记得要看完 是什么数据库 数据库 Date
  • 微信商户平台结算周期T+1是什么意思

    我们在商户平台的管理后台 有的时候 用户支付了 可是却没有看到有资金信息 这个一般是因为您的账户类似的T 1的原因 那结算周期T 1是什么意思呢 通俗的理解就是 交易日的次日 T就是today 今天的意思 的第一个字母的大写 T 1 T 2
  • C语言中的static的用法(超级详细)

    作者 云小逸 个人主页 云小逸的主页 码云 云小逸 YunXiaoYi003 motto 要敢于一个人默默的面对自己 强大自己才是核心 不要等到什么都没有了 才下定决心去做 种一颗树 最好的时间是十年前 其次就是现在 学会自己和解 与过去和
  • yii2 ajax增删改查,Yii2 中常用的增删改查操作总结

    一 新增 1 使用save model newUser model gt name test model gt phone 13000000000 model gt email 123456 qq com model gt save 2 使
  • c语言24点核心算法,24点游戏的核心算法时.doc

    24点游戏的核心算法时 24点游戏的核心算法 时间 2010 10 15 15 10 点击 873 次 24 点游戏 就是在给定的几个数字之间加入数学运算符号 使最终结果等于 24 如下图所示 算法的思路是 1 考虑没有括号的情况 运算符为
  • 「面试」拿到B站的意向书

    此次B站服务端开发面试之旅可谓惊险 不过通过对大部分面试题套路的掌握 不出意外还是拿下了 下面我们来看看这些骚题是不是常见的不能再常见的了 这些面试题看了就能面上 当然不是 只是通过这些题让自己知道所欠缺的是什么 以及可以去看看哪些资料 1
  • React 从零开始学习(二)—— JSX

    接上一篇 搭建的项目基本结构如下 上面可以看到 React 应用程序是由 组件 组成的 一个组件是 UI 用户界面 的一部分 有自己的逻辑和外观 组件可以小到一个按钮 也可以大到整个页面 JSX React 组件是返回标签的 JavaScr
  • MySQL 用户管理

    目录 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户 注意 如果发现赋权限后 没有生效 执行如下指令 回收权限 用户管理 如果我们只能使用 root 用户 这样存在安全隐患 这时 就需要使用 MySQL 的
  • 【正点原子STM32连载】 第三十章 PVD电压监控实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv