打印
[STM32F3]

STM32F303-按键中断唤醒STOP模式

[复制链接]
1945|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energyplants|  楼主 | 2016-1-31 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用按键中断来实现进入STOP休眠关机和使用按键中断退出STOP模式比较多,这个测试程序实现,按下开发板的蓝色按键进入STOP模式休眠再次按下唤醒STOP模式休眠的功能,程序正常运行时串口每秒打印一次运行记录。

STM32F303RE开发板上的蓝色的USER使用的是PC13,我们只需要配置相应的中断线,设置中断优先级即可实现中断相应。
因为STOP模式唤醒后使用内部时钟所以在中断函数中调用了恢复系统时钟的函数,STOP模式的工作模式和上个帖子里说的一样。

中断函数比较简单:
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line13) != RESET)
    {
        SYSCLKConfig_STOP();
        g_keyWorkMode = IO_MODE;
        KEY_CheckMode(IO_MODE);
        printf("\n\r-----按键中断唤醒MCU--------\n\r\n\r");
        EXTI_ClearITPendingBit(EXTI_Line13);
    }
}
main函数扫描按键及打印程序运行信息:
int main(void)
{
    u8 key, t = 0;
    u8 led_sta = 0;
    LED_Init();
    delay_init();
    USART2_Init();
    KEY_CheckMode(IO_MODE);
    delay_ms(1500);
    delay_ms(1500);

    while(1)
    {
        key = Key_Scan();

        if(key == KEY_PRESS)
        {
            LED(ON);
            g_keyWorkMode = EXTI_MODE;
            KEY_CheckMode(EXTI_MODE);
            printf("\n\r-----系统进入STOP休眠模式-----\n\r\n\r");
            PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
        }

        delay_ms(10);
        t++;

        if(t == 100)
        {
            t = 0;
            printf("\n\r-----系统正在运行-----\n\r\n\r");
            led_sta = !led_sta;
            LED(led_sta);
        }


    }
}



沙发
energyplants|  楼主 | 2016-1-31 16:19 | 只看该作者
程序正常运行时每秒打印一次运行信息,LED每秒亮灭反转一次,进入STOP模式后LED长亮,串口打印进入STOP信息,再次按下按键唤醒后串口输出唤醒信息,然后程序继续正常运行并不断的输出信息。
运行记录如下:



测试代码:

F303RE_EXTI_STOP.rar

557.02 KB

使用特权

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

本版积分规则

21

主题

123

帖子

2

粉丝