STM32F030使用RTC周期性唤醒STOP模式
2017-04-24 09:25
2421 查看
首先,F030与F072的RTC唤醒功能是不一样的,在相关定义文件stm32f0xx_exti.h中有如下定义:
#define EXTI_Line17 ((uint32_t)0x00020000) /*!< Internal interrupt line 17
Connected to the RTC Alarm
event */
#define EXTI_Line20 ((uint32_t)0x00100000) /*!< Internal interrupt line 20
Connected to the RTC wakeup
event, only applicable for
STM32F072 devices */
也就是最好用最正宗的RTC唤醒功能(EXTI_Line20)只能用在F072上,不能用于F030,所以只能使用RTC Alarm( EXTI_Line17) 方式来唤醒RTC。
RTC设置流程如下:
1.初始设置RTC的秒时钟:
RTC_InitStructure.RTC_AsynchPrediv
RTC_InitStructure.RTC_SynchPrediv
计算方法:LSI=40000HZ;
LSI/(RTC_AsynchPrediv+1)/(RTC_SynchPrediv +1) =1
2.开启RTC中断及NVIC
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
3.每次进入休眠之前,都要设置闹钟RTC Alarm
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x01;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x00;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = nDelayCNT;//0x05;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
其中nDelayCNT就是需要达到的唤醒时间长度,单位是秒(s).
至此,就算是把RTC唤醒搞定了 ,当然还有包括其他比如时钟RCC的设置,暂时以官方例程为准。
#define EXTI_Line17 ((uint32_t)0x00020000) /*!< Internal interrupt line 17
Connected to the RTC Alarm
event */
#define EXTI_Line20 ((uint32_t)0x00100000) /*!< Internal interrupt line 20
Connected to the RTC wakeup
event, only applicable for
STM32F072 devices */
也就是最好用最正宗的RTC唤醒功能(EXTI_Line20)只能用在F072上,不能用于F030,所以只能使用RTC Alarm( EXTI_Line17) 方式来唤醒RTC。
RTC设置流程如下:
1.初始设置RTC的秒时钟:
RTC_InitStructure.RTC_AsynchPrediv
RTC_InitStructure.RTC_SynchPrediv
计算方法:LSI=40000HZ;
LSI/(RTC_AsynchPrediv+1)/(RTC_SynchPrediv +1) =1
2.开启RTC中断及NVIC
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
3.每次进入休眠之前,都要设置闹钟RTC Alarm
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x01;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x00;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = nDelayCNT;//0x05;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
其中nDelayCNT就是需要达到的唤醒时间长度,单位是秒(s).
至此,就算是把RTC唤醒搞定了 ,当然还有包括其他比如时钟RCC的设置,暂时以官方例程为准。
相关文章推荐
- 【程序】STM32L476RG实现在STOP2模式下使用LPTIM,5秒钟从STOP2唤醒
- 使用stm32L151C8T6芯片,用rtc唤醒低功耗,三种模式详细介绍,并付代码。
- STM32L151C8周期性从待机模式唤醒(RTC Wakeup Timer)
- 关于STM32使用RTC唤醒停止模式的设置
- 在 Parallels Desktop 中,全屏模式使用 Win7,唤醒时黑屏
- 为什么32的嘀嗒定时器在低功耗stop模式唤醒后会比较缓慢
- avr单片机的进入各种睡眠模式,并使用INT2唤醒代码
- STM32,RTC周期性唤醒(wakeup)中断
- gdb 使用设置non-stop模式
- F429的RTC当做stop模式下的唤醒源(FreeRTOS)
- stm32f103 RTC周期性待机唤醒(一)
- stm32f103 RTC周期性待机唤醒(一)
- RTC_WakeUp中断唤醒STM32F4停止模式
- STM32CubeMX(stm32F030C8T6) 之RTC闹钟唤醒停机模式-STM32开发实战 (2)
- 在 Parallels Desktop 中,全屏模式使用 Win7,唤醒时黑屏
- 使用 rtcwake 定时唤醒休眠的linux
- STM32 低功耗模式STOP、STANDBY配合RTC应用实例
- stm32f103 RTC周期性待机唤醒(一)
- STM32使用标准库,有时候在SLEEP模式下无法唤醒问题
- 使用xbmc/kodi作为dlna render设备时,连接到某些wifi热点/路由器上,不能被dlna control找到发现的问题——原因是WIFI模组深度优化后,从省电模式唤醒时,会丢失组播包