搜索
bottom↓
回复: 0
打印 上一主题 下一主题

《ATK-DFPGL22G之FPGA开发指南_V1.0》第三十一章 待机模式实验

[复制链接]

出0入234汤圆

跳转到指定楼层
1
发表于 2023-7-14 09:57:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板
2)购买链接:https://item.taobao.com/item.htm?&id=692368045899
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-340252-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子FPGA交流群:994244016





第三十一章 待机模式实验


本章介绍APM32E103低功耗模式中的待机模式,进入待机模式后,MCU内部的电压调压器将断开1.3V电源域的电源,这意味着内核和外设都将停止工作,并且内核寄存器和内存中的数据都将丢失,但这也是功耗最低的模式,待机模式下可被WKUP引脚的上升沿唤醒。通过本章的学习,读者将学习到低功耗模式下待机模式的使用。
本章分为如下几个小节:
31.1 硬件设计
31.2 程序设计
31.3 下载验证


31.1 硬件设计
31.1.1 例程功能

1. 运行模式下,按下KEY0按键,进入待机模式,此时TFTLCD和LED0均熄灭
2. 待机模式下,按下KEY_UP按键,唤醒MCU,此时TFTLCD点亮,同时LED0闪烁,指示程序正在运行
31.1.2 硬件资源
1. LED
        LED0 - PB5
2. 按键
        KEY0 - PE4
        KEY_UP - PA0
3. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
31.1.3 原理图
本章实验介绍APM32E103低功耗模式中的待机模式,不涉及连接原理图。
31.2 程序设计
31.2.1 Geehy标准库的PMU驱动

本实验配置了KEY_UP按键(连接至WKUP引脚)唤醒待机模式,因此具体的配置步骤如下:
①:使能WKUP引脚功能
②:清除唤醒事件标志
③:进入待机模式
在Geehy标准库中对应的驱动函数如下:
①:使能WKUP引脚功能
该函数用于使能WKUP引脚功能,其函数原型如下所示:
void PMU_EnableWakeUpPin(void);
该函数的形参描述,如下表所示:
表31.2.1.1 函数PMU_EnableWakeUpPin()形参描述

该函数的返回值描述,如下表所示:
表31.2.1.2 函数PMU_EnableWakeUpPin()返回值描述

该函数的使用示例,如下所示:
#include "apm32e10x.h"
#include "apm32e10x_pmu.h"

void example_fun(void)
{
    /* 使能WKUP引脚功能 */
    PMU_EnableWakeUpPin();
}
②:清除PMU事件标志
该函数用于清除PMU的事件标志,其函数原型如下所示:
void PMU_ClearStatusFlag(PMU_FLAG_T flag);
该函数的形参描述,如下表所示:
表31.2.1.3 函数PMU_ClearStatusFlag()形参描述

该函数的返回值描述,如下表所示:
表31.2.1.4 函数PMU_ClearStatusFlag()返回值描述

该函数的使用示例,如下所示:
#include "apm32e10x.h"
#include "apm32e10x_pmu.h"

void example_fun(void)
{
    /* 清除PMU唤醒事件标志 */
    PMU_ClearStatusFlag(PMU_FLAG_WUE);
}
③:进入待机模式
该函数用于进入待机模式,其函数原型如下所示:
void PMU_EnterSTANDBYMode(void);
该函数的形参描述,如下表所示:
表31.2.1.5 函数PMU_EnterSTANDBYMode()形参描述

该函数的返回值描述,如下表所示:
表31.2.1.6 函数PMU_EnterSTANDBYMode()返回值描述

该函数的使用示例,如下所示:
#include "apm32e10x.h"
#include "apm32e10x_pmu.h"

void example_fun(void)
{
    /* 进入待机模式 */
    PMU_EnterSTANDBYMode();
}
31.2.2 PMU驱动
本章实验的PMU驱动主要负责向应用层提供进入待机模式的函数。本章实验中,PMU的驱动代码主要包括pmu.c和pmu.h两个文件。
PMU驱动中,进入待机模式的函数,如下所示:
/**
* @brief       进入待机模式
* @param       无
* @retval      无
*/
void pmu_enter_standby(void)
{
        /* 进入待机模式前,需先关闭EMMC时钟 */
    RCM->AHBCLKEN_B.EMMC = DISABLE;
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU); /* 使能PMU时钟 */
/* 配置KEY_UP按键用于唤醒MCU */
    PMU_EnableWakeUpPin();
    PMU_ClearStatusFlag(PMU_FLAG_SB);               /* 清除待机标志 */
    PMU_ClearStatusFlag(PMU_FLAG_WUE);              /* 清除唤醒标志 */
    PMU_EnterSTANDBYMode();                         /* 进入待机模式 */
}
从上面的代码中可以看出,在进入待机模式前还关闭了EMMC的时钟,这点非常重要,若进入待机模式时,EMMC的时钟为使能状态,则无法正常进入待机模式。随后还依次使能了WKUP引脚功能和清除唤醒标志,最后调用函数PMU_EnterSTANDBYMode()进入待机模式。
31.2.3 实验应用代码
本实验的应用代码,如下所示:
int main(void)
{
    uint8_t key;
    uint8_t t = 0;
   
    NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  /* 设置中断优先级分组为组4 */
    sys_apm32_clock_init(15);                         /* 配置系统时钟 */
    delay_init(120);                                  /* 初始化延时功能 */
    usart_init(115200);                               /* 初始化串口 */
    led_init();                                       /* 初始化LED */
    lcd_init();                                       /* 初始化LCD */
    key_init();                                       /* 初始化按键 */
    lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);
    lcd_show_string(30, 70, 200, 16, 16, "STANDBY TEST", RED);
    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
    lcd_show_string(30, 110, 200, 16, 16, "KEY0:Enter STANDBY MODE", RED);
    lcd_show_string(30, 130, 200, 16, 16, "KEY_UP:Exit STANDBY MODE", RED);
    while (1)
    {
        key = key_scan(0);
        if (key == KEY0_PRES)
        {
            pmu_enter_standby();                      /* 进入待机模式 */
        }
        
        if ((t % 20) == 0)
        {
            LED0_TOGGLE();
        }
        t++;
        delay_ms(10);
    }
}
从上面的代码中可以看出,在完成相关的初始化操作后,便不断地扫描按键,若扫描到KEY0按键被按下,则会进入待机模式,进入待机模式后LED0便不再闪烁,说明此时程序已经停止运行,进入了待机模式,此时可以按下KEY_UP按键进行待机模式唤醒,随后便可看到LED0恢复闪烁,说明程序再次运行。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 15:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表