我程序上設(shè)計(jì)是一個(gè)按鍵按下進(jìn)入待機(jī)模式,另一個(gè)按鍵按下喚醒,現(xiàn)在的問(wèn)題是第一次可以進(jìn)入待機(jī)模式,但是第二次就不能進(jìn)入,此時(shí)單片機(jī)工作電流還有大約1.1mA,以下是我的程序:
#include "debug.h"
/* Global define */
/* Global Variable */
/*********************************************************************
?* @fn? ? ? EXTI_INT_INIT
?*
?* @brief? ?Initializes EXTI collection.
?*
?* @return? none
?*/
void EXTI0_INT_INIT(void)
{
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};
? ? EXTI_InitTypeDef EXTI_InitStructure = {0};
? ? NVIC_InitTypeDef NVIC_InitStructure = {0};
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
? ? GPIO_Init(GPIOD, &GPIO_InitStructure);
? ? /* GPIOA ----> EXTI_Line3 */
? ? GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
? ? EXTI_InitStructure.EXTI_Line = EXTI_Line3;
? ? EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
? ? EXTI_InitStructure.EXTI_LineCmd = ENABLE;
? ? EXTI_Init(&EXTI_InitStructure);
? ? NVIC_InitStructure.NVIC_IRQChannel = EXTI7_0_IRQn;
? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
? ? NVIC_Init(&NVIC_InitStructure);
}
/*********************************************************************
?* @fn? ? ? main
?*
?* @brief? ?Main program.
?*
?* @return? none
?*/
int main(void)
{
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};
? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
? ? Delay_Init();
? ? Delay_Ms(1000);
? ? Delay_Ms(1000);
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? GPIO_Init(GPIOC, &GPIO_InitStructure);
? ? GPIO_Init(GPIOD, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_5 | GPIO_Pin_6;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(GPIOC, &GPIO_InitStructure);
? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 1);
? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 1);
? ? GPIO_WriteBit(GPIOC, GPIO_Pin_7, 0);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(GPIOD, &GPIO_InitStructure);
? ? EXTI0_INT_INIT();
//? ? RCC_LSICmd(ENABLE);
//? ? while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
? ? Delay_Ms(100);
? ? GPIO_WriteBit(GPIOC, GPIO_Pin_7, 1);
? ? while(1)
? ? {
? ? ? ? if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_2) == Bit_RESET)
? ? ? ? {
? ? ? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 0);
? ? ? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 0);
? ? ? ? ? ? PWR_EnterSTANDBYMode(PWR_STANDBYEntry_WFI);
? ? ? ? }
? ? }
}
void EXTI7_0_IRQHandler(void)
{
? ? if(EXTI_GetITStatus(EXTI_Line3)!=RESET)
? ? {
? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 1);
? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 1);
? ? ? ? EXTI_ClearITPendingBit(EXTI_Line3);? ? ?/* Clear Flag */
? ? }
}