stm32f030f4p6进入stop模式再次唤醒时钟变慢

2019-07-14 17:01发布

          这几天在调试STM32f030f4p6这颗芯片进入stop模式,然后被唤醒,我是用PA1做的,PA1配置成外部下降沿中断,来做开关键:板子开机  ->  按下PA1  ->  芯片进入stop模式  ->  按下PA1  ->  外部中断将芯片唤醒   。。。

程序处理如下:
void EXti0_1_IRQHandler(void)

{
        if(EXTI_GetITStatus(EXTI_Line1)!= RESET )
        {               
            if(mcu_state == MCU_IS_RUNNING)
                         mcu_state = MCU_IS_STOP;
                else if(mcu_state == MCU_IS_STOP)
                         mcu_state = MCU_IS_RUNNING;
                b_mcu_exti_has_intterrupt = 1;
                EXTI_ClearITPendingBit(EXTI_Line1);
        }

}
然后在main里面:
void MCU_State_Change(void)
{
    if(b_mcu_exti_has_intterrupt)  
    {
        b_mcu_exti_has_intterrupt = 0;
        if(mcu_state == MCU_IS_RUNNING)
                {                  
                  
                }
                else if(mcu_state == MCU_IS_STOP)
                {                    
                    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
                        NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);
                        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);                        
                        PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
                }
        }
}
现在发现两个问题:
1.感觉按键不是很灵敏,有时要按几下才能进入休眠,有时休眠要按几下才能唤醒,外部中断我仿真过,每次按下按键都能进到中断里面。

2.芯片进入stop模式之后被唤醒,时钟明显感觉变慢了,我在数码管上做了TIM16计数,我后来在:
if(mcu_state == MCU_IS_RUNNING)
{
          TIM16_For_Tick_Start();                                                  /*开定时器*/
}
这里又将TIM16初始化了一次,感觉还是慢了,不知道是什么问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
60user142
1楼-- · 2019-07-15 19:56
亲爱的娜娜 发表于 2018-10-11 09:01
本帖最后由 creep 于 2015-6-2 10:37 编辑

这个是官方提供的一个函数,你可以试着让系统启动后自动进入休眠模式然后再自动唤醒或者按键唤醒,这个可以测试是不是按键的问题。

我仿真看了下,有的时候连着发生了两次中断,这才是问题的根源,暂时还没想到什么办法
亲爱的娜娜
2楼-- · 2019-07-15 23:37
60user142 发表于 2018-10-11 09:13
我仿真看了下,有的时候连着发生了两次中断,这才是问题的根源,暂时还没想到什么办法

进入按键唤醒中断后马上调用恢复系统时钟函数SYSCLKConfig_STOP,然后重新初始化该按键引脚关闭掉中断使能,等需要进入时再次配置为中断引脚。
60user142
3楼-- · 2019-07-16 00:57
 精彩回答 2  元偷偷看……
60user142
4楼-- · 2019-07-16 03:09
亲爱的娜娜 发表于 2018-10-11 09:21
进入按键唤醒中断后马上调用恢复系统时钟函数SYSCLKConfig_STOP,然后重新初始化该按键引脚关闭掉中断使能,等需要进入时再次配置为中断引脚。

你这种做法不对,我是做开关按键,所以不适用,我为了消抖,在按键按下进入中断之后,又开了一个定时器,定时时间为10ms,如果定时器时间到,就到定时器中断里面去处理进入stop模式,这么做进入stop模式很灵了,但是外部中断无法唤醒芯片了,我用了EXTI0和EXTI1这两个中断,都没办法唤醒了
nyvvhxcs
5楼-- · 2019-07-16 04:11
学习了。。。。
亲爱的娜娜
6楼-- · 2019-07-16 09:26
60user142 发表于 2018-10-11 09:52
你这种做法不对,我是做开关按键,所以不适用,我为了消抖,在按键按下进入中断之后,又开了一个定时器,定时时间为10ms,如果定时器时间到,就到定时器中断里面去处理进入stop模式,这么做进入stop模式很灵了,但是外部中断无法唤醒芯片了,我用了EXTI0和EXTI1这两个中断,都没办法唤醒了 ...

你感觉对就行。
我也是作为开关机按键使用的,感觉特别灵敏,无论开机关机都没有误操作过。

一周热门 更多>