OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2542|回复: 2

STM32l151 RTC唤醒中断进不去,求指导,谢谢

[复制链接]

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2019-3-12
在线时间
37 小时
发表于 2020-7-10 14:45:49 | 显示全部楼层 |阅读模式
5金钱
下面是RTC代码配置,选择的是用内部LSI时钟
void RtcWakeUpConfig(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    RTC_WakeUpCmd(DISABLE);
    RTC_ClearFlag(RTC_FLAG_WUTF);
    RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);     //???????32.768KHz 8??
    RTC_SetWakeUpCounter(10);         //??500ms
    RTC_ClearITPendingBit(RTC_IT_WUT);
   EXTI_ClearITPendingBit(EXTI_Line20);//清除LINE22上的中断标志位
    RTC_ITConfig(RTC_IT_WUT,ENABLE);    //??????,???????
    RTC_WakeUpCmd(ENABLE);

   
    /* 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);
    /* Enable the RTC Wakeup Interrupt */
    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);
}
u8 RtcInit(void)
{
    //????????????
    u8 flag = 0;
    if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x5050)      //??????????????:??????????????
    {
        /* RTC configuration  */
        flag = RtcConfig();
        if(flag == 0)
        {
            RTC_WriteBackupRegister(RTC_BKP_DR0, 0x5050);
        }
        else
            return flag;
    }
    else
    {
        /* Enable the PWR clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
        /* Allow access to RTC */
        PWR_RTCAccessCmd(ENABLE);
        /* Wait for RTC APB registers synchronisation */
        RTC_WaitForSynchro();
    }
    return 0; //ok
}   
/**
  * @brief  Configure the RTC peripheral by selecting the clock source.
  * @param  None
  * @retval None
  */
u8 RtcConfig(void)
{
    /* Enable the PWR clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
    /* Allow access to RTC */
    PWR_RTCAccessCmd(ENABLE);
    /* Enable the LSE OSC */
//    RCC_LSEConfig(RCC_LSE_ON);
      RCC_LSICmd(ENABLE);//开启内部低速晶振LSI
    /* Wait till LSE is ready */
    u32 temp = 0;
    while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
    {
        temp++;
        delay_ms(10);
        if(temp >= 250) return 1;//???????,?????,32768????????1-5S
    }
    /* Select the RTC Clock Source */
//    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
    /* Enable the RTC Clock */
    RCC_RTCCLKCmd(ENABLE);
    /* Wait for RTC APB registers synchronisation */
    RTC_WaitForSynchro();
    /* Configure the RTC data register and RTC prescaler */
    RTC_InitTypeDef RTC_InitStructure;
    RTC_InitStructure.RTC_AsynchPrediv = 0x63;
    RTC_InitStructure.RTC_SynchPrediv = 0x18F;
    RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
    RTC_Init(&RTC_InitStructure);
    return 0;
}


void RTC_WKUP_IRQHandler(void)
{
    if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
    {
        EXTI_ClearITPendingBit(EXTI_Line20);

        RTC_ClearITPendingBit(RTC_IT_WUT);


    }

}


最佳答案

查看完整内容[请看2#楼]

找到问题了,程序下载完成要重启才能生效
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2019-3-12
在线时间
37 小时
 楼主| 发表于 2020-7-10 14:45:50 | 显示全部楼层
找到问题了,程序下载完成要重启才能生效
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-7-11 02:31:14 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 22:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表