MFRC522唤醒STM32单片机

2019-07-21 07:18发布

各位大神,MFRC522芯片如何唤醒休眠状态的STM32单片机,有做过的可以给一下指导吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
守望冬天2018
2019-07-22 09:42
static void RTC_NVIC_Config(void)
{   
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;      //RTC全局中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   //先占优先级1位,从优先级3位
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //先占优先级0位,从优先级4位
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //使能该通道中断
    NVIC_Init(&NVIC_InitStructure);     //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
   
    /* EXTI configuration *******************************************************/
    EXTI_ClearITPendingBit(EXTI_Line22);
    EXTI_InitStructure.EXTI_Line = EXTI_Line22;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
}

void RTC_Init_Config(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
   
    /* Allow access to BKP Domain */
    PWR_BackupAccessCmd(ENABLE);
    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    RTC_NVIC_Config();
   
    if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0xA4A5)
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //①使能 PWR 和 BKP 外设时钟
        PWR_BackupAccessCmd(ENABLE); //②使能后备寄存器访问
        //BKP_DeInit(); //③复位备份区域
        RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE)
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
        {
        }
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置 RTC 时钟
        RCC_RTCCLKCmd(ENABLE); //使能 RTC 时钟
        RTC_WaitForSynchro(); //等待 RTC 寄存器同步
        /* Configure the RTC Wakeup Clock source and Counter (Wakeup event each 1 second) */
        RTC_WakeUpCmd(DISABLE);
        RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
        RTC_SetWakeUpCounter(0x7FF);
        
        /* Enable the Wakeup Interrupt */
        RTC_ITConfig(RTC_IT_WUT, ENABLE);
        
        /* Enable Wakeup Counter */
        RTC_WakeUpCmd(ENABLE);
        RTC_WriteBackupRegister(RTC_BKP_DR0, 0xA4A6);
    }
    else
    {
        RTC_WaitForSynchro(); //等待最近一次对 RTC 寄存器的写操作完成
        RTC_ClearITPendingBit(RTC_IT_WUT);
        EXTI_ClearITPendingBit(EXTI_Line22);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);
    }
}
//RTC 时钟中断
//每秒触发一次
void RTC_WKUP_IRQHandler(void)
{
    if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
    {
        RTC_ClearITPendingBit(RTC_IT_WUT);
        EXTI_ClearITPendingBit(EXTI_Line22);
    }
}
大神,我进入的是停止模式,现在退不出了


一周热门 更多>