美文网首页
灵动微MM32F003硬件最小系统 --- 停机模式例程解析【1

灵动微MM32F003硬件最小系统 --- 停机模式例程解析【1

作者: 黄开通 | 来源:发表于2020-11-24 09:52 被阅读0次

    下图是mm32f003的低功耗模式一览:


    低功耗模式一览表

    停机模式比待机模式功耗略大,比较明显的区别是:停机模式唤醒后,程序可以继续运行。例程运行后LED慢闪,然后进入停机模式,LED状态保持常亮,按键通过外部中断唤醒后,LED快闪。说明停机模式,可以保存当前运行状态,使得程序能够继续运行。
    停机模式与待机模式的配置方式大体相似,指示调用不同接口即可进入对应的工作模式。

    1 停机模式的配置

    在main函数调用PWR_EnterSTOPMode(0, PWR_STOPEntry_WFI);函数即可。

    2 停机模式唤醒的相关配置

    void EXTI0_1_IRQHandler(void)
    {
        EXTI_ClearITPendingBit(EXTI_Line0);                                         // Çå³ýLINE10ÉϵÄÖжϱê־λ
    }
    
    void WKUP_Init(void)
    {
        GPIO_InitTypeDef  GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
    
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,  EXTI_PinSource0);
    
    #if (0)
        EXTI_InitStructure.EXTI_Line = EXTI_Line2;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;                             //config event line
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
    
    #else
        EXTI_InitStructure.EXTI_Line = EXTI_Line0;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                         //config interrupt line
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
    
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    #endif
    }
    

    停机模式用的普通外部中断功能,而待机模式用的是PA0的WKUP功能。

    3 main函数流程

    int main(void)
    {
        RCC_ConfigInit();
        GPIO_ConfigInit();
        delay_init();
        LED_Init();
    
            LED1_ON();
            delay_ms(2000);
            LED1_OFF();
            delay_ms(2000);             
            LED1_ON();
            delay_ms(2000);         
        WKUP_Init();
    
        PWR_EnterSTOPMode(0, PWR_STOPEntry_WFI);
        while(1) {
    
                LED1_OFF();
                delay_ms(100);              
                LED1_ON();
                delay_ms(100);          
        }
    }
    

    官方例程的修正已基本完成,需要程序的同学可以到百度网盘下载。
    提取码:0o5i

    相关文章

      网友评论

          本文标题:灵动微MM32F003硬件最小系统 --- 停机模式例程解析【1

          本文链接:https://www.haomeiwen.com/subject/xjfiiktx.html