RTC_WakeUp中断唤醒STM32F4停止模式

发布者:Jikai最新更新时间:2019-07-17 来源: eefocus关键字:RTC_WakeUp  中断唤醒  STM32F4  停止模式 手机看文章 扫描二维码
随时随地手机看文章

RTC_WakeUp唤醒STM32F4停止模式(借鉴的是原子哥写的代码): 

首先我们先初始化RTC配置:


//RTC初始化

u8 MyRTC_Init(void)

{

    RTC_InitTypeDef RTC_InitStructrue;

    u16 retry=0x1FFF;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR时钟

    PWR_BackupAccessCmd(ENABLE);//使能后备寄存器

    if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050)

    {

        RCC_LSEConfig(RCC_LSE_ON);//开启低速外部时钟

        if(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)//读取外部低速时钟是否准备就绪

        {

            retry++;

            delay_ms(10);

        }

        if(retry==0)

            return 1;//LSE开启失败

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//选择LSE作为RTC时钟

        RCC_RTCCLKCmd(ENABLE);//使能RTC时钟


        RTC_InitStructrue.RTC_AsynchPrediv=0x7F;//RTC异步分频系数127

        RTC_InitStructrue.RTC_SynchPrediv=0xFF;//RTC同步分频系数255

        RTC_Init(&RTC_InitStructrue);//RTC初始化函数

        RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);

    }

    return 0;

}



然后配置RTC_WakeUp:


void RTC_Set_WakeUp(u16 waketime)

{

    EXTI_InitTypeDef EXTI_InitStruct;

    NVIC_InitTypeDef NVIC_InitStruct;


    RTC_WakeUpCmd(DISABLE);//关闭Wake Up

    RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);//时钟选择1Hz

    RTC_SetWakeUpCounter(waketime);//设置WakeUp自动重装载值

    RTC_ClearITPendingBit(RTC_IT_WUT);//清除WakeUp中断标志

    EXTI_ClearITPendingBit(EXTI_Line22);//清除Line22中断标志

    RTC_ITConfig(RTC_IT_WUT,ENABLE);//开启WakeUp中断标志

    RTC_WakeUpCmd(ENABLE);//开启WakeUp


    EXTI_InitStruct.EXTI_Line=EXTI_Line22;//LINE22

    EXTI_InitStruct.EXTI_LineCmd=ENABLE;

    EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;

    EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发

    EXTI_Init(&EXTI_InitStruct);


    NVIC_InitStruct.NVIC_IRQChannel=RTC_WKUP_IRQn;//选择WakeUp中断

    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x01;

    NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;

    NVIC_Init(&NVIC_InitStruct);

}


编写RTC_WakeUp中断函数(记得初始化系统时钟):


void RTC_WKUP_IRQHandler()

{

    while(RTC_GetFlagStatus(RTC_FLAG_WUTF)!=RESET)

    {

        RTC_ClearFlag(RTC_FLAG_WUTF);

        SystemInit();

        LED1=!LED1;

    }

    EXTI_ClearITPendingBit(EXTI_Line22);

}


然后就是main函数了:


int main(void)

    u8 t=0;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

    delay_init(168);      //初始化延时函数

    uart_init(9600);        //初始化串口波特率为9600


    LED_Init();                   //初始化LED         

    KEY_Init();

    MyRTC_Init();

    while(1)

   {

        LED0=!LED0;

        RTC_Set_WakeUp(5);//时钟频率选的1Hz,5S产生一次RTC_WakeUp中断

        printf("t=%dnr",t);

        PWR_EnterSTOPMode(PWR_LowPowerRegulator_ON,PWR_STOPEntry_WFI);

        t++;

        if(t>30)

         t=0;

    }



把USART1接串口调试助手上,变量t从0开始每5秒加1,同时LED每5秒反转一次状态. 

**注意哈: 

停止模式是烧录不进程序的,要烧录程序的话,要先按住RESET键,点download后,松手就能下进去了.**


关键字:RTC_WakeUp  中断唤醒  STM32F4  停止模式 引用地址:RTC_WakeUp中断唤醒STM32F4停止模式

上一篇:为什么32的嘀嗒定时器在低功耗stop模式唤醒后会比较缓慢
下一篇:stm32f070 stop 模式 rtc定时启动调试总结

推荐阅读最新更新时间:2024-11-16 22:27

STM32F407 SPI flash
STM32F407 SPI 接口: STM32F4XX时钟计算 HCLK=168M PCLK1 =HCLK/4 =42M PCLK2 =HCLK/2 =84M SPI2、SPI3在PCLK1,最大时钟为42M SPI1在PCLK2,最大时钟为84M STM32F4 支持的最大SPI时钟为37.5Mbits/s 因此需要分频。 例程选择SPI2 分频后为21M 串行Flash W25Q64BVSSIG (最高支持80MHz)。 测试: 全部写入0XAA 数据长度8192K 擦除:20.798 写入耗时42.599S 读:9.008S 百度的参照时间 擦除:8.9S 写入
[单片机]
<font color='red'>STM32F4</font>07 SPI flash
使用DMA可以较好地避免将采集到的数据丢失的方法
ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据丢失。当ADC的DMA功能被使能的时候,每个通道转换完毕时都会发出一个DMA请求。DMA方式也不能完全避免数据丢失问题,要实现数据不丢失需要在DMA的同时开启OVERRUN模式,当数据丢失时就停止数据转换。我们只需要检测是否有OVR时间发生,就能解决采样数据丢失造成的问题。比如,通道错位什么的。 在STM32F4的Reference manual中可以查到ADC1 的DMA映射在DMA1、CH0、Stream0上。 【实验1、DMA方式采集单一通道数据】 配置ADC1的DMA初始化设置如下: //DMA初始化
[单片机]
基于STM32F407的FreeRTOS学习笔记(4)
CPU工作的时候,各个任务运行会占用CPU的资源,在Windows系统中我们可以通过任务管理器来看各任务(进程)占用系统资源的情况。 那么,FreeRTOS怎么实现这个功能呢? 我们翻阅FreeRTOS官网,查询API文档,在内核控制函数部分找到了相关的函数。 文档指出实现运行时间功能需要配置外设定时器,即32板载定时器,计时器频率应为滴答计时器(1ms)的至少10倍。 传入参数为pcWriteBUffer,其实是一个char类型的数组用以存储相关信息。 我们现在工程上调用这个函数。 char informationbuff ; void Get_info(void * pvParameters) {
[单片机]
基于<font color='red'>STM32F4</font>07的FreeRTOS学习笔记(4)
STM32F407 定时器TIM3 出现
今天准备用STM32F407定时器做个 定时周期扫描,想偷个懒,于是乎在在战舰的开发历程中复制出来一段,结果无尽的折磨人来了。首先看我复制的代码。 根据实际需要 我把代码改成这样了 几乎就是没动了。然而就是这么简单的 事出现问题了。 点击运行 本想看着小灯狂闪,结果坑爹了 进这个异常中断里了,这是什么鬼? 打开 fault report 并没有啥有用信息 右键 hardFault_Hander 并没有定位到问题。 在群里问来问去 ,都是一副高高在上的样子,认为问题很简单,程序问题(这不是废话吗,我也知道是程序问题,不知道是哪的问题)。折磨一下午。各种删 各种尝试 。无果。 无意间 中断里的屏
[单片机]
<font color='red'>STM32F4</font>07 定时器TIM3 出现
2. Stm32f407 led闪烁示例
硬件平台: stm32f407ve 软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise OS Version: 10.0.18363 N/A Build 18363) Keil5 5.26.2 HAL库版本: 2.14.0(目前下载的最新的) 实验介绍: 本次是使用hal库进行led闪烁实验。(根据之前建立的模板操作,这里不再建立工程模板) Led闪烁的原理,就是循环的亮和灭,工程模板已经是点亮了led,这个时候,我需要做的就是在循环中不断的点亮和熄灭,而且点亮和熄灭要注意一定的时间间隔,也就
[单片机]
2. <font color='red'>Stm32f4</font>07 led闪烁示例
基于STM32F417的物联网嵌入式网关的设计
1、引言 随着物联网技术的飞速发展,物联网技术中一个重要的实现就是要将各类传感器控制节点采集到的数据通过Internet网上传到用户手机或者PC机,为了满足这一需求,需要设计出一种既能作为无线传感器网络的协调器,又能实现远程GPRS传输和网络连接的网关设备。 针对以上需求,本设计采用STM32F417作为主设备控制芯片,片上运行μC/OS-II实时系统作为设备管理系统,使用uIP作为TCP/IP网络协议栈,主设备同时具有键盘操作及显示功能,可以进行本地设置,也可以使用PC机远程设置。嵌入式网关中的GPRS模块通过串口与嵌入式主设备相连,无线协调器通过串口将采集来的数据上传到嵌入式主设备,主设备也可以将命令下发给无线协调器,无线
[单片机]
基于<font color='red'>STM32F4</font>17的物联网嵌入式网关的设计
学习STM32F429时钟系统笔记
1.为什么 STM32 要有多个时钟源呢? 因为首先 STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率, 比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁 干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。 2.哪几种重要的时钟源? 在stm32f429,HSI、HSE、LSI、LSE、PLL五个重要时钟源, 其中 PLL实际是分为三个时钟源,分别为主 PLL 和 I2S 部分专用 PLLI2S 和 SAI 部分专用 PLLSAI。 ①、LSI 是低速内部时钟,RC 振荡器,频率为 32kHz 左右。供独立看
[单片机]
stm32f407discovery 的keil 4.60ST-linkII不能用解决方法
1 、用资源中的STLink文件替换 C:\Keil\ARM\STLink, 记得备份原来的文件, 2、C:\Keil\TOOLS.INI改成如下的 ORGANIZATION= cs2c NAME= jianzhong , cui EMAIL= cjzswust@gmail.com ARMSEL=1 BOOK0=UV4\RELEASE_NOTES.HTM( uVision Release Notes ) PATH= C:\Keil\ARM VERSION=4.60 PATH1= C:\Program Files\arm-none-eabi-gcc-4_6\ TOOLPR
[单片机]
<font color='red'>stm32f4</font>07discovery 的keil 4.60ST-linkII不能用解决方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved