完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大大,我最近在做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_InitStructure; // Set the Vector Table base location at 0x08000000 */ 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)的 一直不能产生中断,各位大大,帮我看看是怎么回事吧,小弟在此谢过了... |
|
相关推荐
10个回答
|
|
|
|
|
|
哪位大神可以帮帮我的咧~~~
|
|
|
|
回复第 2 楼 于2013-02-27 16:22:32发表:
哪位大神可以帮帮我的咧~~~ 你在stm32l1xxit.h文件中有加中断程序吗?http://www.amobbs.com/thread-5004198-1-1.html这里貌似有这个中断。。不过我刚开始学,也不清楚这些。 |
|
|
|
RTC中断和代码开起了吗?
|
|
|
|
楼主问题解决了吗
|
|
|
|
RTC中断配置程序有写吗?
例如: /* EXTI configuration *******************************************************/ EXTI_ClearITPendingBit(EXTI_Line20); EXTI_InitStructure.EXTI_Line = EXTI_Line20; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); 官网上下载的STM32L固件库中就有RTC中断的例子,你可以参考。 |
|
|
|
我正在愁这个呢,无法使用RTC唤醒。
|
|
|
|
|
|
|
|
以STM32F207VE中的RTC为例。
第一,所有的RTC中断都必须由EXTI产生,手册上面有这样一句话: All RTC interrupts are connected to the EXTI controller. 第二,既然是EXTI在产生,所以他不同于一般的中断。一般的中断是只要标志位为1,就一直触发中断,直到标志位被清零,这是电平触发(例如TIM_IT_Update就属于此类)。EXTI只能检测上升沿和下降沿,不能直接通过电平触发。因此,如果开机的时候一来RTC_FLAG_WUTF就已经置位,那么EXTI_Line22将永远是高电平,不会有上升沿,因此永远也不会触发中断。解决方案是在开中断前手动清除标志位: 第三,启动文件startup_stm32f2xx.s里面所定义的RTC_WKUP_IRQHandler、RTC_Alarm_IRQHandler和TAMP_STAMP_IRQHandler这几个中断函数实质上分别是EXTI22、EXTI17和EXTI21的中断函数,都只能通过对应的RTC_FLAG_xx标志位的上升/下降沿(也就是0-1跳变)触发,且在不清除RTC标志位的前提下只能触发一次(EXTI_PR标志位已清除)! 第四,RTC_ITConfig(RTC_IT_WUT, ENABLE)和EXTI_Init(&exti)要同时打开。并且RTC_IT_WUT有记忆性,系统复位后不会关闭该中断。手动执行RTC_ITConfig(RTC_IT_WUT, DISABLE)后中断不再有效。 |
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2201 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2027 浏览 3 评论
4633 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2171 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2705 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 01:08 , Processed in 0.812660 second(s), Total 92, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号