在STM32L100Rc上退出停止模式

在STM32L100Rc上退出停止模式,stm32,power-management,stm32ldiscovery,Stm32,Power Management,Stm32ldiscovery,我是一个使用STM32L100RC发现板的新编码器。因此,我认为我的问题很简单;我无法使用唤醒引脚PA0上的外部触发器退出停止模式。该代码作为空闲:PC9引脚上的LED亮起,我进入停止模式,一旦按下PA0按钮使用唤醒命令,LED将熄灭几秒钟。现在我知道使用for循环不是等待几秒钟的正确方法,不需要指出这一点。如果有人能解释我做错了什么,我将不胜感激。以下是我迄今为止所做的工作: void Button_Initialization (void) { RCC_APB2PeriphClock

我是一个使用STM32L100RC发现板的新编码器。因此,我认为我的问题很简单;我无法使用唤醒引脚PA0上的外部触发器退出停止模式。该代码作为空闲:PC9引脚上的LED亮起,我进入停止模式,一旦按下PA0按钮使用唤醒命令,LED将熄灭几秒钟。现在我知道使用for循环不是等待几秒钟的正确方法,不需要指出这一点。如果有人能解释我做错了什么,我将不胜感激。以下是我迄今为止所做的工作:

void Button_Initialization (void)

{



RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);



// Configure PC9 as push-pull output

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

GPIO_Init(GPIOC, &GPIO_InitStruct);



GPIO_InitTypeDef GPIO_InitStructA;

GPIO_InitStructA.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructA.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructA.GPIO_Mode = GPIO_Mode_AF;

GPIO_PinAFConfig(GPIOA, GPIO_Pin_0, GPIO_AF_WKUP);

GPIO_Init(GPIOA, &GPIO_InitStructA);

PWR_WakeUpPinCmd(PWR_WakeUpPin_1, ENABLE);





GPIO_InitTypeDef GPIO_InitStructButton;

// GPIO_InitStructButton.GPIO_Pin = ;

GPIO_InitStructButton.GPIO_Speed = GPIO_Speed_400KHz;

GPIO_InitStructButton.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStructButton.GPIO_PuPd = GPIO_PuPd_DOWN;

GPIO_Init(GPIOA, &GPIO_InitStructButton);



EXTI_InitTypeDef EXTI_InitStruct;

EXTI_InitStruct.EXTI_Line = EXTI_Line1;

EXTI_InitStruct.EXTI_LineCmd = ENABLE;

EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Event;

EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_Init( &EXTI_InitStruct);

}



int main(void)

{

Button_Initialization();

while(1)

{

// Turn off LED on PC9

GPIO_SetBits(GPIOC, GPIO_Pin_9);





PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFE);


GPIO_ResetBits(GPIOC, GPIO_Pin_9);

for (int i = 0; i < 1000000; i++)

{

}

}

}
void按钮\u初始化(void)
{
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOC,启用);
RCC_APB1PeriphLockCmd(RCC_APB1Periph_压水堆,启用);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,启用);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,启用);
//将PC9配置为推拉输出
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_Uinitstruct.GPIO Pin=GPIO_Pin 9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_Init(GPIOC和GPIO_InitStruct);
GPIO_InitTypeDef GPIO_InitStructA;
GPIO_InitStructA.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructA.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructA.GPIO_Mode=GPIO_Mode\u AF;
GPIO_引脚配置(GPIOA、GPIO_引脚0、GPIO_AF_工作);
GPIO_Init(GPIOA和GPIO_Init结构);
PWR_WakeUpPinCmd(PWR_WakeUpPin_1,启用);
GPIO_InitTypeDef GPIO_initstruct按钮;
//GPIO_InitStructButton.GPIO_引脚=;
GPIO_InitStructButton.GPIO_Speed=GPIO_Speed_400KHz;
GPIO_UinitStructButton.GPIO_Umode=GPIO_Mode IN;
GPIO_InitStructButton.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOA和GPIO_InitStructButton);
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line=EXTI_Line 1;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_事件;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger\u上升;
EXTI_Init(&EXTI_InitStruct);
}
内部主(空)
{
按钮_初始化();
而(1)
{
//关闭PC9上的LED
GPIO_挫折(GPIOC,GPIO_引脚9);
压水堆进入停止模式(压水堆调节器打开,压水堆停止进入WFE);
GPIO_复位位(GPIOC、GPIO_引脚_9);
对于(int i=0;i<1000000;i++)
{
}
}
}

对于您的配置,您没有wakup源:

PWR_WakeUpPinCmd(PWR_WakeUpPin_1,启用)仅在您想将uC从待机状态唤醒,而不是从停止模式唤醒时可用。(请参阅参考手册章节
5.3.8待机模式
5.4.2压水堆功率控制/状态寄存器(压水堆CSR)

进入停止模式,如下
PWR\U进入停止模式(PWR\U调节器打开,PWR\U停止进入WFE)您需要一个合格的事件来唤醒uC。要实现这一点,只需将
PA0
配置为激活EXTI-line事件(即
EXTI-line 0
)的输入(而不是备用唤醒功能)


此外,在进入停止模式之前,您必须确保所有中断、EXTI线路和RTC挂起位都已清除。否则,输入停止模式将被忽略。

对于您的配置,您没有wakup源:

PWR_WakeUpPinCmd(PWR_WakeUpPin_1,启用)仅在您想将uC从待机状态唤醒,而不是从停止模式唤醒时可用。(请参阅参考手册章节
5.3.8待机模式
5.4.2压水堆功率控制/状态寄存器(压水堆CSR)

进入停止模式,如下
PWR\U进入停止模式(PWR\U调节器打开,PWR\U停止进入WFE)您需要一个合格的事件来唤醒uC。要实现这一点,只需将
PA0
配置为激活EXTI-line事件(即
EXTI-line 0
)的输入(而不是备用唤醒功能)

此外,在进入停止模式之前,您必须确保所有中断、EXTI线路和RTC挂起位都已清除。否则,将忽略输入停止模式