RTC wake sotp

static void RTC_Config(void)
{
    RTC_InitTypeDef   RTC_InitStructure;
    RTC_TimeTypeDef   RTC_TimeStructure;
    uint32_t LSIFreq = 0;
    RCC_BackupResetCmd(ENABLE);RCC_BackupResetCmd(DISABLE);//增加避免 复位脚引起初始化不通过!
 
    /* Enable the PWR clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

    /* Allow access to Backup Domain */
    PWR_BackupAccessCmd(ENABLE);

    /* Disable wake-up source(ALARM) to guarantee free access to WUT level-OR input */
    RTC_ITConfig(RTC_IT_ALRA, DISABLE);

    

    /* Enable wake-up source(ALARM) to guarantee free access to WUT level-OR input */
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    /* Enable the LSI OSC */
    RCC_LSICmd(ENABLE);

    /* Wait till LSI is ready */
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
    {}
        /* Clear Wakeup flag */
    PWR_ClearFlag(PWR_FLAG_WU);
    /* Check if the StandBy flag is set */
    if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
    {
        /* Clear StandBy flag */
        PWR_ClearFlag(PWR_FLAG_SB);

        /* Check if the StandBy flag is cleared */
        if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
        {
            while (1);
        }

        RTC_WaitForSynchro();

        /* No need to configure the RTC as the RTC config(clock source, enable,
        prescaler,...) are kept after wake-up from STANDBY */
    }
    else
    {
        /* RTC Configuration ******************************************************/
        /* Reset Backup Domain */
        RCC_BackupResetCmd(ENABLE);
        RCC_BackupResetCmd(DISABLE);

        /* Select the RTC Clock Source */
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

        /* Enable the RTC Clock */
        RCC_RTCCLKCmd(ENABLE);

        /* Wait for RTC APB registers synchronisation */
        RTC_WaitForSynchro();

        /* Get the LSI frequency:  TIM14 is used to measure the LSI frequency */
        LSIFreq = GetLSIFrequency();

        RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
        RTC_InitStructure.RTC_AsynchPrediv = 99;
        RTC_InitStructure.RTC_SynchPrediv = (LSIFreq / 100) - 1;

        RTC_Init(&RTC_InitStructure);

        /* Set the time to 01h 00mn 00s AM */
        RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
        RTC_TimeStructure.RTC_Hours   = 0x01;
        RTC_TimeStructure.RTC_Minutes = 0x00;
        RTC_TimeStructure.RTC_Seconds = 0x00;

        RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
    }
}

/**
  * @brief  Enters STANDBY mode, RTC Alarm within 3 second or an external RESET
  *         will wake-up the system from STANDBY
  * @param  None
  * @retval None
  */
//static void EnterSTANDBYMode(void)
static void EnterSTOPMode(void)
{
    RTC_AlarmTypeDef  RTC_AlarmStructure;
    RTC_TimeTypeDef   RTC_TimeStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

    /* Disable the Alarm A */
    RTC_AlarmCmd(RTC_Alarm_A, DISABLE);

    /* Get the current time */
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);

    /* Set the alarm to current time + 3s */
    RTC_AlarmStructure.RTC_AlarmTime.RTC_H12     = RTC_TimeStructure.RTC_H12;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours   = RTC_TimeStructure.RTC_Hours;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = RTC_TimeStructure.RTC_Minutes;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = (RTC_TimeStructure.RTC_Seconds + 0x5) % 60;
    RTC_AlarmStructure.RTC_AlarmDateWeekDay = 31;
    RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
    //RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Hours | RTC_AlarmMask_Minutes;
    RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All-RTC_AlarmMask_Seconds   ;
  
    RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
  /* Set AlarmA subseconds and enable SubSec Alarm : generate 8 interripts per Second */
//  RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_5);
  
    /* Enable RTC Alarm A Interrupt: this Interrupt will wake-up the system from
    STANDBY mode (RTC Alarm IT not enabled in NVIC) */
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    /* Enable the Alarm A */
    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);

    /* Clear RTC Alarm Flag */
    RTC_ClearFlag(RTC_FLAG_ALRAF);
        
        
//        RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);

    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
    RTC_ClearITPendingBit(RTC_IT_ALRA);
    PWR_ClearFlag(PWR_FLAG_WU);
        
        
        
        EXTI_ClearITPendingBit(EXTI_Line17);
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_Line = EXTI_Line17;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource14);//PC14_RTC_ALARM_OUT
    /* NVIC configuration */
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
    NVIC_Init(&NVIC_InitStructure);
        
    SysTick->CTRL=0;
    /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
  //  PWR_EnterSTANDBYMode();
     RTC_ClearITPendingBit(RTC_IT_ALRA); EXTI_ClearITPendingBit(EXTI_Line17);
//    __WFI();//3.4mA
  PWR_EnterSTOPMode(  PWR_Regulator_LowPower, PWR_STOPEntry_WFI  );
}

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

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

相关文章

每日算法打卡:机器人跳跃 day 11

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例1:输出样例1:输入样例2:输出样例2:输入样例3:输出样例3: 题目分析示例代码 原题链接 730. 机器人跳跃问题 题目难度:中等 题目来…

【2024.1.12】C++STL容器常用方法

Vector 1.构造函数 #include <vector> //直接通过数组创建一个vector vector<int> vecA {1, 2, 3, 4};//复制迭代器区间内的元素到vector中 vector<int> vecB(vecA.begin(), vecA.end());//复制另一个数组的元素到vector中 int Array[4] {1, 2, 3, 4}; v…

Pandas实战100例 | 案例 2: 数据探索 - 查看和理解数据

案例 2: 数据探索 - 查看和理解数据 知识点讲解 在数据分析的早期阶段&#xff0c;对数据进行初步的探索是非常重要的。这包括查看数据的基本信息、统计摘要、以及数据的形状。 示例代码 查看数据的基本信息 # 显示 DataFrame 的基本信息&#xff0c;包括列名、非空值数量…

RK3568驱动指南|第十一篇 pinctrl 子系统-第126章 通过pinctrl状态设置引脚复用实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

电影《艾里甫与赛乃姆》简介

电影《艾里甫与赛乃姆》由天山电影制片厂于1981年摄制&#xff0c;该片由傅杰执导&#xff0c;由买买提祖农司马依、布维古丽、阿布里米提沙迪克、努力曼阿不力孜、买买提依不拉音江、阿不都热合曼艾力等主演。 该片改编自维吾尔族民间爱情叙事长诗《艾里甫与赛乃姆》&#xf…

postgre数据库清除表数据,保留表结构,并且自增列重新从1自增

1.mysql mysql中如果需要清空表&#xff0c;只需要 TRUNCATE table_name;即可&#xff0c;如果有自增的 id 字段&#xff0c;也会还原回 1 2. postgresql 与 mysql 稍有不同&#xff0c;postgresql 的自增字段 是通过 序列 sequence来实现的 所以在清空表的时候&#xff0c…

如何正确使用高速探头前端--probe head

目前市面上的高速有源探头种类丰富&#xff0c;使用灵活&#xff0c;如下图所示&#xff0c;结构多为放大器焊接前端的组合&#xff0c;以E2677B探头前端为例&#xff0c;其焊接前端电阻有三种选择&#xff0c;91ohm时可实现全带宽使用&#xff08;12GHz&#xff09;&#xff0…

【嵌入式——C语言】共用体

【嵌入式——C语言】共用体 定义&#xff1a;共用体和结构体类似&#xff0c;也是一种构造类型的数据结构&#xff0c;在进行某些算法时&#xff0c;需要使用几种不同类型的变量存到同一段内存单元中&#xff0c;几个变量所使用空间相互重叠&#xff0c;这几个不同的变量共同占…

nginx相关-nginx启动、nginx关闭、nginx地址重定向

笔记贴 记录下nginx相关的知识点 1.启动 注意&#xff1a;路径不要用中文名 否则启动不了 打开conf里面nginx.conf文件修改端口等一些配置项 在nginx.exe对应的文件夹cmd&#xff0c;然后输入nginx.exe执行 浏览器打开配置的端口就能浏览了 比如localhost:8083 2.关闭 windo…

飞天使-k8s知识点10-kubernetes资源对象3-controller

文章目录 pod探针 控制器 pod 概述&#xff1a; 1. pod是k8s中的最小单元 2. 一个pod中可以运行一个容器&#xff0c;也可以运行多个容器 3. 运行多个容器的话&#xff0c;这些容器是一起被调度的 4. Pod的生命周期是短暂的&#xff0c;不会自愈&#xff0c;是用完就销毁的实体…

互联网 HR 眼中的好简历是什么样子的?

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

Redis 分布式锁有什么缺陷?

Redis 分布式锁有什么缺陷&#xff1f; 虽然 Redis 分布式锁是一种常见的实践&#xff0c;但它也存在一些潜在的缺陷和问题。下面是一些可能的缺陷&#xff0c;以及在使用 Redis 分布式锁时应该考虑的因素&#xff1a; 时钟漂移问题&#xff1a; 如果多个 Redis 节点的系统时间…

JavaScript-DOM-笔记

1.JavaScript的组成 1&#xff09;ECMAScript ECMAScript规定了JS的编程语法和基础核心知识&#xff0c;如语法、类型等等。 2&#xff09;DOM——文档对象模型 文档对象模型可以对页面上的各种元素进行操作&#xff08;大小、位置、颜色等&#xff09; 3&#xff09;BOM——浏…

PaddleSeg的训练与测试推理全流程(超级详细)

LeNet模型量化 参考文档一.下载项目地址&#xff1a;https://gitee.com/paddlepaddle/PaddleSeg/tree/release%2F2.5/特别注意下载版本&#xff1a; 二.paddlepaddle-gpu安装1.环境安装参考文档&#xff1a;https://gitee.com/paddlepaddle/PaddleSeg/blob/release/2.8/docs/in…

JetPack组件学习ViewModel

目录 ViewModel的使用 简要分析 问答 如何实现旋转屏幕数据保持不变&#xff1f; 和之前的Presenter有什么区别 ViewModel的使用 1.需要先创建ViewModel类&#xff0c;继承自ViewModel重写onclear方法&#xff0c;使得页面销毁的时候能够走到自定义的onClear方法中 clas…

ALIENWARE:卓越游戏体验,源自创新基因

美国拉斯维加斯当地时间1月9日&#xff0c;CES 2024在万众期盼中如约而至。 作为全球消费电子领域一年一度的盛宴和行业风向标&#xff0c;CES 2024汇聚了来自全球的众多消费电子企业以及令人目不暇接的最新科技产品&#xff0c;因而受到了全球广大消费者的密切关注。 众所周知…

日期类的实现|运算符重载的复用

前言 通过前面C入门与类与对象的学习&#xff0c;今天我们将运用所学的知识点完成一个Date类。 本节目标 运用所学知识完成Date类。详细讲解运算符各种重载。理解运算符重载的复用。 一、Date类的六个默认成员函数 六个成员函数&#xff0c;Date类只需要自己实现构造函数即可…

数据库mysql no.4

1.流程控制函数 ①if(条件表达式&#xff0c;表达式1&#xff0c;表达式2)&#xff1a; 如果条件表达式成立&#xff0c;返回表达式1&#xff0c;否则返回表达式2 case情况1 case 变量或表达式或字段 when 常量1 then 值1 when 常量2 then 值2 ... else 值n end case情况2…

新一代工厂融合广播系统,助力工业行业可持续发展

在当今高度竞争的工业环境中&#xff0c;工厂的运营效率和生产安全至关重要。为了实现这一目标&#xff0c;新一代工厂融合广播系统应运而生&#xff0c;将指挥中心、值班中心、融合通信调度主机、厂区终端和防爆话机紧密连接&#xff0c;构建了一个全面、高效的通信网络。 系统…

Linux进程管理、ps命令、kill命令

每一个程序在运行的时候都会被操作系统注册为系统中的一个进程 补充一下操作系统的内容&#xff1a; 进程实体&#xff08;又称进程映像&#xff09;&#xff1a;程序段、相关数据段、PCB三部分构成 进程是进程实体的运行过程&#xff0c;是系统进行资源分配的一个独立单位 …