初级会员

- 积分
- 86
- 金钱
- 86
- 注册时间
- 2019-9-21
- 在线时间
- 7 小时
|
发表于 2019-11-30 15:16:39
|
显示全部楼层
我也遇到类似问题:
一个简单的小试验, 用PA0脚接地进入Standby, 再将PA0接高电平唤醒STM32.
结果唤醒后, 如果PA0不一直接高电平, 处理器又会进入Standby状态.
看起来好像是唤醒后的PA0内部上拉没有起作用.
用硬件复位就能正常运行.
以下是代码:
#include "stm32f0xx.h"
#include <stdio.h>
#define Working_LED GPIOA, GPIO_Pin_4
#define Input0_Pin GPIOA, GPIO_Pin_0
void GPIO_Config( void );
void delay_ms( int );
int main( void )
{
RCC_APB1PeriphClockCmd( RCC_APB1Periph_PWR, ENABLE );
GPIO_Config();
if( PWR_GetFlagStatus( PWR_CSR_WUF ) )
{
PWR_ClearFlag( PWR_CSR_WUF );
// 如果是唤醒状态,则LED亮3秒
GPIO_ResetBits( Working_LED ); // 点亮LED灯
delay_ms( 3000 );
}
while ( GPIO_ReadInputDataBit( Input0_Pin ) )
{
GPIO_SetBits( Working_LED ); // 熄灭LED灯
delay_ms( 300 );
GPIO_ResetBits( Working_LED ); // 点亮LED灯
delay_ms( 300 );
}
PWR_WakeUpPinCmd( PWR_WakeUpPin_1, ENABLE ); // 使能唤醒引脚,默认PA0
PWR_EnterSTANDBYMode(); // 进入Standby模式
// 进入Standby状态后就执行不到这里了
}
void GPIO_Config( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
//LED
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init( GPIOA, &GPIO_InitStructure );
//Input Pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( GPIOA, &GPIO_InitStructure );
}
void delay_ms( int msec )
{
unsigned long int i,j;
j = (unsigned long)( SystemCoreClock / 6000 * msec );
for ( i=0; i<j; i++ );
}
难道是唤醒后, 有些寄存器没有恢复Reset状态?
|
|