STM32Standby低功耗模式示例_第1页
STM32Standby低功耗模式示例_第2页
STM32Standby低功耗模式示例_第3页
STM32Standby低功耗模式示例_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32Standby1.基本流程1)初始化RTC2)配置外部中断(不是必需的)3)设置Alarm时间4)进入Standby2.几个需要注意的问题1)从Standby退出后,代码将重新运行,相当于执行了软复位。其实也容易理解,因为进入Standby后,内核的所有功能都已经停止(断电),RAM内的所有数据将消除,因此,从Standby退出后,需要重新执行所有程序。2)如果有必要,可在进入Standby之前将重要数据存入BACKUPRAM或RTC的19个备份寄存器中,退出Standby时再将数据读出。3)进入Standby后,如果Alarm事件发生,虽然可以退出Standby模式,但即使配置了外

2、部中断,发系统也无法响应外部中断,因为,从Standby退出后发生了系统复位。4)虽然,导致系统从Standby退出的Alarm事件不能用于触发外部中断(注:仅仅是导致系统从Standby退出的那个特定事件不能触发外部中断,而系统正常运行后,Alarm事件还是可以正常触发外部中断的),但即使不需要Alarm触发外部中断的功能,也必须配置使能Alarm中断,否则系统将无法从Standby退出。5)使能Alarm中断之前,最好先清除中断标志位,否则在循环进入或推出Standby的操作就会失败(原因有待研究)。3.示例代码3.1.RTCstaticint32uDrvRtclnit(void)RTC_

3、InitTypeDefRTC_InitStructure;/*EnabletheLSIOSC*/RCC_LSICmd(ENABLE);/*WaittillLSIisready*/while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)=RESET);/*EnablethePWRclock*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);/*AllowaccesstoRTC*/PWR_BackupAccessCmd(ENABLE);/*SelecttheRTCClockSource*/RCC_RTCCLKConfig(

4、RCC_RTCCLKSource_LSI);/*EnabletheRTCClock*/RCC_RTCCLKCmd(ENABLE);/*CalendarConfigurationwithLSIsupposedat32KHz*/RTC_InitStructure.RTC_AsynchPrediv=0 x7F;RTC_InitStructure.RTC_SynchPrediv=0 xFF;/*(32KHz/128)-1=0 xFF*/RTC_InitStructure.RTC_HourFormat=RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);RTC_

5、ClearITPendingBit(RTC_IT_ALRA);RTC_ITConfig(RTC_IT_ALRA,ENABLE);/*DisabletheRTCClock*/PWR_BackupAccessCmd(DISABLE);returnNCC_OK;3.2.配置外部中断voidRTC_EXTI_INITIAL(FunctionalStatenewState)NVIC_InitTypeDefNVIC_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;/EnableSYSCFGclockRCC_APB2PeriphClockCmd(RCC_AP

6、B2Periph_SYSCFG,ENABLE);/EXTI配置EXTI_InitStructure.EXTI_Line=EXTI_Line17;EXTIInitStructure.EXTILineCmd=newState;EXTI_lnitStructure.EXTI_Mode=EXTI_Modenterrupt;EXTI_lnitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_Init(&EXTI_InitStructure);/设置中断NVICnitStructure.NVIC_IRQChannel=RTC_AlarmRQn;/RTC_Ala

7、rmRQnRTC_WKUP_IRQnNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=newState;NVIC_Init(&NVIC_InitStructure);/*外部中断响应函数*/voidRTC_AlarmRQHandler(void)if(SET=RTC_GetITStatus(RTC_IT_ALRA)RTC_ClearITPendingBit(RTC_

8、IT_ALRA);EXTI_ClearITPendingBit(EXTI_Line17);/DrvLedCmd(GPIO_Pin_3,bLedState);3.3.AlarmvoidRTC_SET_ALARM(uint8_tsec)RTC_TimeTypeDefRTC_TimeStructure;RTC_DateTypeDefRTC_DateStructure;RTC_AlarmTypeDefRTC_AlarmStructure;PWR_BackupAccessCmd(ENABLE);/FillseachRTC_TimeStructmemberwithitsdefaultvalueRTC_Ti

9、meStructInit(&RTC_TimeStructure);/FillseachRTC_DateStructmemberwithitsdefaultvalueRTC_DateStructInit(&RTC_DateStructure);/setrtctimeRTC_SetTime(RTC_Format_BCD,&RTC_TimeStructure);/setrtcdataRTCSetDate(RTCFormatBCD,&RTCDateStructure);/setalarmtimebyaddsomesecRTC_TimeStructure.RTC_Seconds+=sec;/Fillth

10、eRTC_AlarmStructureRTC_AlarmStructure.RTC_AlarmDateWeekDay=RTC_DateStructure.RTC_Date;RTC_AlarmStructure.RTC_AlarmDateWeekDaySel=RTC_AlarmDateWeekDaySel_Date;RTC_AlarmStructure.RTC_AlarmMask=RTC_AlarmMask_None;RTC_AlarmStructure.RTC_AlarmTime=RTC_TimeStructure;/DisablealarmAif(RTC_AlarmCmd(RTC_Alarm_A,DISABLE)=ERROR)return;/settheala

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论