本帖最后由 zxm19820916 于 2016-3-21 16:39 编辑
进入STOP模式之前,将IO脚全部配置为下拉输入,唤醒后,重新调用GPIO初始化函数。但是打印不了了。之前都能正常打印,就是进入STOP模式之后再唤醒,就不能打印了。是否需要唤醒后配置哪个地方?
void Loc_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//DI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/* ¿ìËÙ²âÊԽţ¬Õý³£ÉÏÀµ½¸ß£¬¶¨Ê±1Сʱ£¬2Сʱ¡£Éú²ú²âÊÔʱÍⲿ½ÓµØ£¬¶ÔÓ¦5s£¬10s */
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOF, &GPIO_InitStructure);//PF0-OSC_IN, PF1-OSC_OUT×÷ΪÆÕͨ
//DO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#if SCL_DEBUG
//USART
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
/* USART1_TX -> PA9, USART1_RX -> PA10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#endif
}
void GPIO_Set_STOP(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_Mode_AN; //ÅäÖóÉAN£¬µ¼ÖÂOFFºó£¬»½ÐѲ»ÁËMCU
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void Sys_Stop_Mode(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOF, DISABLE);
EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line3 | EXTI_Line4 | EXTI_Line5);
EXTI_ClearFlag(EXTI_Line0 | EXTI_Line3 | EXTI_Line4 | EXTI_Line5);
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}
void Sys_Stop_WakeUp(void)
{
PWM_Pulse_Set(0);
LED1_2_OFF();
GPIO_Set_STOP();
/* enter stop mode */
Sys_Stop_Mode();
/* waked up from stop mode */
Sys_WakeUp();
}
void Sys_WakeUp(void)
{
SYSCLKConfig_STOP(); /* ϵͳʱÖÓ»Ö¸´ */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOF, ENABLE);
/* ³ýÁËON-OFF״̬£¬ÆäËü»Ö¸´µ½³õʼÉϵç״̬ */
TIMER_Flag = TIMER_CANCEL;
DIMMER_Flag = HALF_LM;
timer_cancel_Flag = 0x0;
long_short_Flag = SHORT;
long_short_Start = 0x0;
long_short_Cnt = 0;
Loc_GPIO_Init();
}
else
{
Uart_Printf("OFF, system is in stop mode!\n");
Sys_Stop_WakeUp();
}
第一次进STOP模式,OFF, system is in stop mode!这句能打印,唤醒后,再打印不了了。
|