本帖最后由 未知1908 于 2017-3-29 14:12 编辑
请教大家一个问题
为什么我的程序不能唤醒闹钟。
我配置好RTC和闹钟,再不进入待机模式时,时钟能走,设定的闹钟时间一到也能进闹钟中断RTC_Alarm_IRQHandler。
但是如果单片机进入待机状态就不能唤醒,
使用的是内部的LSI时钟,进入待机之前按照手册先关闭闹钟中断,再进行清除标志位
RTC_ITConfig(RTC_IT_ALRA, DISABLE);
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_ClearFlag(RTC_FLAG_ALRAF);
PWR_ClearFlag(PWR_FLAG_WU);
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
但是还是不行。
实在是没有头绪了,所以请教大家,应该如何实现使用闹钟唤醒单片机。谢谢各位了
程序见附件,用LED做的运行的指示,使用的是STM32L152
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
感谢帮顶,问题解决了。但时现在想想还是定时唤醒好,闹钟唤醒每次唤醒之后RTC会被重置,闹钟也就没啥意义了。
定时唤醒代码如下:需要的可以参考一下
void StandbyRTCLSIMode_Measure(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Enable PWR APB1 Clock */
PWR_RTCAccessCmd(ENABLE); /* Allow access to RTC */
RCC_RTCResetCmd(ENABLE); /* Reset RTC Domain *///¸′λRTCÇøóò
RCC_RTCResetCmd(DISABLE);
PWR_RTCAccessCmd(ENABLE);/* Allow access to RTC */
RCC_LSICmd(ENABLE);/*!< LSI Enable */
while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) /*!< Wait till LSI is ready */
{}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);/*!< RTC Clock Source Selection */
RCC_RTCCLKCmd(ENABLE);/* Enable the RTC Clock */
RTC_WaitForSynchro(); /* Wait for RTC APB registers synchronisation */
PWR_UltraLowPowerCmd(ENABLE);/* Enable Ultra low power mode */
/* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~4s
RTC Clock Source LSI ~37KHz
*/
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
RTC_SetWakeUpCounter(0x8421);
RTC_ITConfig(RTC_IT_WUT, ENABLE);/* Enable the Wakeup Interrupt */
RTC_WakeUpCmd(ENABLE); /* Enable Wakeup Counter */
RTC_ClearFlag(RTC_FLAG_WUTF);/* Clear WakeUp (WUTF) pending flag */
PWR_EnterSTANDBYMode();/* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
}
一周热门 更多>