打印
[STM32F0]

F030F4P6芯片,从STOP模式唤醒后打印不了?

[复制链接]
1082|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxm19820916|  楼主 | 2016-3-21 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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!这句能打印,唤醒后,再打印不了了。

沙发
zxm19820916|  楼主 | 2016-3-21 16:30 | 只看该作者
进入STOP模式之前,将IO脚全部配置为下拉输入,唤醒后,重新调用GPIO初始化函数。但是打印不了了。之前都能正常打印,就是进入STOP模式之后再唤醒,就不能打印了。是否需要唤醒后配置哪个地方?

使用特权

评论回复
板凳
DreamofOven| | 2016-3-21 20:17 | 只看该作者
知道从唤醒后程序跑到什么位置了吗?

使用特权

评论回复
地板
643757107| | 2016-3-21 22:27 | 只看该作者
唤醒后最好重新调取初始化函数,对模块初始化操作。

使用特权

评论回复
5
zxm19820916|  楼主 | 2016-3-22 11:42 | 只看该作者
DreamofOven 发表于 2016-3-21 20:17
知道从唤醒后程序跑到什么位置了吗?

唤醒时从stop处继续运行。

使用特权

评论回复
6
zxm19820916|  楼主 | 2016-3-22 11:43 | 只看该作者
643757107 发表于 2016-3-21 22:27
唤醒后最好重新调取初始化函数,对模块初始化操作。

有对USART的管脚重新初始化,难道USART也要重新配置?
void CONSOL_Port_Init(void)
{
        USART_InitTypeDef USART_InitStructure;
        //NVIC_InitTypeDef NVIC_InitStructure;

        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(CONSOL_USART, &USART_InitStructure);

        USART_Cmd(CONSOL_USART, ENABLE);

//        CONSOL_PORT_TX();//GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)0x0);//L: send
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

299

帖子

2

粉丝