求助,STM32L151中的RTC唤醒stm32中断唤醒问题

STM32L151定时从Stop模式定时唤醒
> STM32L151定时从Stop模式定时唤醒
STM32L151定时从Stop模式定时唤醒
void StopRTCLSIMode(int count)本文引用地址:{EXTI_InitTypeDef EXTI_InitSPWR_RTCAccessCmd(ENABLE);//Allow access to RTCRCC_LSICmd(ENABLE);//LSI Enablewhile(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//wait till LSI is readyRCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//RTC Clock Source SelectionRCC_RTCCLKCmd(ENABLE);//Enable RTC clockRTC_WaitForSynchro();//wait for RTC APB registers synchronisationEXTI_ClearITPendingBit(EXTI_Line20);//配置唤醒中断EXTI_InitStructure.EXTI_Line = EXTI_Line20;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_IEXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_REXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);RTC_WakeUpCmd(DISABLE);//禁止唤醒计数器RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);//唤醒时钟16分频RTC_SetWakeUpCounter(count);//设置唤醒计数器RTC_ITConfig(RTC_IT_WUT,EBANLE);//使能唤醒中断RTC_WakeUpCmd(ENABLE);//使能唤醒计数器}//唤醒中断void RTC_WKUP_IRQHandler(void){if(RTC_GetITStatus(RTC_IT_WUT)!=RESET){RTC_ClearITPendingBit(RTC_IT_WUT);EXTI_ClearITPendingBit(EXTI_Line20);Systeminit();StopRTCLSIMode(2312)//~1S 再次初始化定时唤醒时间//重新初始化外设isWKUP = 1;}}在主函数中int main(void){//TO DO//1.初始化定时唤醒//2.进入低功耗模式while(1){if(isWKUP){isWKUP = 0;//TO DO 唤醒后干一些事情StopRTCLSIMode(2312)//~1S 再次初始化定时唤醒时间//进入低功耗模式}}}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一&&该文档是本人做一个睡眠+RTC唤醒的低功耗项目总结心得,如有出入请指出。
&&STM32L提供5种低功耗模式:低功耗运行模式、睡眠模式、低功耗睡眠模式、停止模式、待机模式。
&&待机模式电流最低,但是待机模式时MCU处于不受控制的状态,所有的IO都工作在高阻抗的状态下,只有几个专用的引脚能够将mcu唤醒,而且每次唤醒相当于系统复位,RAM中的数据全部丢失,在有外部器件连接的情况下,器件引脚可能会吸收大量的电流,反而达不到低功耗要求。所以最好别用待机模式。
&&&待机模式时MCU有一些缺点,就选择了停止模式。停止模式的功耗仅次于待机模式。在STOP模式下,PLL、HSI、HSE都被停止,RAM和寄存器的值保留。
&&&网上有些开发经验说,外部器件能用IO口供电的就尽量用IO口供电,在stop模式下,CPU的IO口的状态是保持的,这样外围器件的供电开关很容易控制。像外部存储芯片可以用IO口供电。有些外围芯片不适合用IO口供电的,像有些射频芯片,因为这些射频芯片上电启动要相当长的时间。(此经验未验证)
&&&如果MCU外围有器件连接,且没有用IO供电,一定要将CPU与器件相连的IO口设置成适当的模式,否则这些引脚可能会吸收很大的电流。ST公司给的例程中建议设置成模拟输入,但是我MCU的IO口都设置成模拟输入功耗达不到理想要求。经过多次实验,总结为没有用到的IO口设置为模拟输入,有用到MCU的IO口要根据外围器件在MCU处于停止状态时的电平。外围器件高时,MCU在进入停止状态时,就设置输出模式,电平为高,反之设置为低。所以产品说明书中应该要注明当模块设置为休眠状态时,各个引脚的电平,客户如果用产品做二次开发时,他们自己MCU跟产品对接的IO电平要一致。
&&&RTC唤醒时,在RTC中断中要清除一下标志; 在官方网的例子RTC唤醒时,RTC中断函数中没有清除唤醒标志位。调试分析:刚开始用官方例子时调试待机模式+RTC定时唤醒时,第一次进入RTC时功耗为3.多uA,第二次进入RTC时就5.8uA左右,以后都是5.8左右uA。每次进入RTC的初始化时一样,所以当时就觉得可能是在第一次退出RTC时,哪里没有处理好,经过多次调试,清除了唤醒标志位后,功耗就降下来。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1478次
排名:千里之外
原创:12篇21ic官方微信-->
后使用快捷导航没有帐号?
查看: 6223|回复: 5
求助!!STM32L151中的RTC唤醒(wake up)中断问题
&&未结帖(20)
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
主题帖子积分
专家等级:结帖率:50%
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
各位大大,我最近在做STM32L151时出现了一个问题,就是RTC唤醒(wake up)中断不会中断啊,不知道为什么。下面是我的部分程序:
&&void RTC_Configuration(void)
/* Enable PWR and BKP clock */
&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);& && && && && && &
&&/* Allow access to BKP Domain */
&&PWR_RTCAccessCmd(ENABLE);& && && && && && && && && && && && && &
& && && && && && && && && && && && && && && && && && && &
& &/* Enable the LSE OSC */
&&RCC_LSEConfig(RCC_LSE_ON);
&&/* Wait till LSE is ready */&&
&&while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
&&/* Select the RTC Clock Source */
&&RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
&&RCC_RTCCLKCmd(ENABLE);
&&/* Wait for RTC APB registers synchronisation */
&&RTC_WaitForSynchro();
&&RTC_InitStructure.RTC_AsynchPrediv = 0x06;
&&RTC_InitStructure.RTC_SynchPrediv&&= 0x66;
&&RTC_InitStructure.RTC_HourFormat& &= RTC_HourFormat_24;
&&RTC_Init(&RTC_InitStructure);
/* Configure the RTC WakeUp Clock source: CK_SPRE (1Hz) */
&&RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
&&RTC_SetWakeUpCounter(0x0);
/* Enable the RTC Wakeup Interrupt */
&&RTC_ITConfig(RTC_IT_WUT, ENABLE);
/* Enable Wakeup Counter */
&&RTC_WakeUpCmd(ENABLE);
& && && && && && && && && && && && && && && && && && && && && && && && && && &&&
&&void NVIC_Configuration(void)
&&NVIC_InitTypeDef NVIC_InitS
// Set the Vector Table base location at 0x */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);& &
// 1 bits for Preemption Priority and 3 bits for Sub Priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;& && && && && && &
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
时钟用的是LSE,就是外部低速晶振(32.768K)的
一直不能产生中断,各位大大,帮我看看是怎么回事吧,小弟在此谢过了...
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
可以参考ST给出的例子
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
主题帖子积分
专家等级:结帖率:50%
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
我这个就是参考例子来的,就是不行啊,而且我仿真的时候发现,例子那个程序好像也不能产生中断
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
主题帖子积分
专家等级:结帖率:50%
主题帖子积分
实习生, 积分 33, 距离下一级还需 17 积分
实习生, 积分 33, 距离下一级还需 17 积分
有木有人可以帮帮我咧~~~
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
通过编译器查看代码执行顺序&&看看到底是哪里出了问题& &看看是否是语法错误&&或者寄存器设置出错& &亦或逻辑有问题&&呵呵
主题帖子积分
助理工程师, 积分 1399, 距离下一级还需 601 积分
助理工程师, 积分 1399, 距离下一级还需 601 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:3.00
主题帖子积分
助理工程师, 积分 1399, 距离下一级还需 601 积分
助理工程师, 积分 1399, 距离下一级还需 601 积分
也犯同样的错误,要借用Exit中断。才行!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术新星奖章
人才类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
技术奇才奖章
人才类勋章
奔腾之江水
发帖类勋章
无冕之王奖章
等级类勋章
时间类勋章
欢快之小溪
发帖类勋章
时间类勋章
社区建设奖章
等级类勋章求助!!STM32L151中的RTC唤醒(wake up)中断问题 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 8534|回复: 8
求助!!STM32L151中的RTC唤醒(wake up)中断问题
在线时间0 小时
主题帖子好友
新手上路, 积分 6, 距离下一级还需 44 积分
新手上路, 积分 6, 距离下一级还需 44 积分
各位大大,我最近在做STM32L151时出现了一个问题,就是RTC唤醒(wake up)中断不会中断啊,不知道为什么。下面是我的部分程序:
void RTC_Configuration(void)
/* Enable PWR and BKP clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to BKP Domain */
PWR_RTCAccessCmd(ENABLE);
/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
RTC_InitStructure.RTC_AsynchPrediv = 0x06;
RTC_InitStructure.RTC_SynchPrediv
RTC_InitStructure.RTC_HourFormat
= RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
/* Configure the RTC WakeUp Clock source: CK_SPRE (1Hz) */
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(0x0);
/* Enable the RTC Wakeup Interrupt */
RTC_ITConfig(RTC_IT_WUT, ENABLE);
/* Enable Wakeup Counter */
RTC_WakeUpCmd(ENABLE);
void NVIC_Configuration(void)
NVIC_InitTypeDef NVIC_InitS
// Set the Vector Table base location at 0x */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
// 1 bits for Preemption Priority and 3 bits for Sub Priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
时钟用的是LSE,就是外部低速晶振(32.768K)的
一直不能产生中断,各位大大,帮我看看是怎么回事吧,小弟在此谢过了...
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间2 小时
主题帖子好友
新手上路, 积分 25, 距离下一级还需 25 积分
新手上路, 积分 25, 距离下一级还需 25 积分
如果你是由待机模式唤醒的话不会进入中断,他相当于复位直接由程序开始运行
你可以在正常运行模式下使能唤醒,就会进入中断
在线时间0 小时
主题帖子好友
新手上路, 积分 6, 距离下一级还需 44 积分
新手上路, 积分 6, 距离下一级还需 44 积分
回复:求助!!STM32L151中的RTC唤醒(wake up)中断问题
哪位大神可以帮帮我的咧~~~
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间1 小时
主题帖子好友
新手上路, 积分 25, 距离下一级还需 25 积分
新手上路, 积分 25, 距离下一级还需 25 积分
回复:求助!!STM32L151中的RTC唤醒(wake up)中断问题
回复第 2 楼 于 16:22:32发表:
哪位大神可以帮帮我的咧~~~
你在stm32l1xxit.h文件中有加中断程序吗?这里貌似有这个中断。。不过我刚开始学,也不清楚这些。
在线时间4 小时
主题帖子好友
RE:求助!!STM32L151中的RTC唤醒(wake up)中断问题
RTC中断和代码开起了吗?
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子好友
新手上路, 积分 3, 距离下一级还需 47 积分
新手上路, 积分 3, 距离下一级还需 47 积分
回复:求助!!STM32L151中的RTC唤醒(wake up)中断问题
楼主问题解决了吗
在线时间39 小时
主题帖子好友
中级会员, 积分 481, 距离下一级还需 19 积分
中级会员, 积分 481, 距离下一级还需 19 积分
RTC中断配置程序有写吗?
/* EXTI configuration *******************************************************/
&&EXTI_ClearITPendingBit(EXTI_Line20);
&&EXTI_InitStructure.EXTI_Line = EXTI_Line20;
&&EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
&&EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_R
&&EXTI_InitStructure.EXTI_LineCmd = ENABLE;
&&EXTI_Init(&EXTI_InitStructure);
&&官网上下载的STM32L固件库中就有RTC中断的例子,你可以参考。
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间1 小时
主题帖子好友
新手上路, 积分 15, 距离下一级还需 35 积分
新手上路, 积分 15, 距离下一级还需 35 积分
我正在愁这个呢,无法使用RTC唤醒。
在线时间502 小时
ST金币1400
主题帖子好友
我正在愁这个呢,无法使用RTC唤醒。
什么问题,发帖说明情况。
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
站长推荐 /3
为让大家更好的使用STM32单片机,特别是学生群体有进一步的提升,特推出本次助学计划。愿开发板可以物尽其用,发挥最大价值。
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by

我要回帖

更多关于 linux 中断唤醒 的文章

 

随机推荐