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

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

作者: 黄开通 | 来源:发表于2020-11-23 17:42 被阅读0次

    官方提高的待机模式例程不能正常工作,烧写后造成进入待机模式无法唤醒,同时还导致无法再次烧写程序。后来我通过官方的MM32-LINK尝试了半天,才把程序擦除,否则就要把芯片吹下来重新焊一颗了。
    我对例程做了两点修改:
    1 增加状态指示灯。当芯片进入待机模式后,指示灯就会停止闪烁;
    2 在main函数内增加WKUP_Init调用,实现芯片待机后,通过PA0-WKUP功能唤醒芯片。mm32f003从待机模式唤醒后,会自动重启。

    代码主要分为待机模式设置、唤醒设置和main函数流程三个部分。

    1 待机模式设定

    在main函数中调用PWR_EnterSTANDBYMode();函数即可马上进入待机模式。

    2 唤醒设置

    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_IPD;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
        SYSCFG_EXTILineConfig( EXTI_PortSourceGPIOA, EXTI_PinSource0);
    
        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 = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        PWR_WakeUpPinCmd(ENABLE);                                                   //enable wakeup
    }
    void EXTI0_1_IRQHandler(void)
    {
        EXTI_ClearITPendingBit(EXTI_Line0);
    }
    

    3 main函数流程

    int main(void)
    {
        RCC_ConfigInit();
        GPIO_ConfigInit();
        Uart_ConfigInit(9600);
        UartSendGroup((u8*)printBuf, sprintf(printBuf, "sprintf ok\r\n"));
        delay_init();
        LED_Init();
    
            LED1_ON();
            delay_ms(2000);
            LED1_OFF();
            delay_ms(2000);             
            LED1_ON();
            delay_ms(2000);             
        
            WKUP_Init();
        PWR_EnterSTANDBYMode();
        while(1) {
                LED1_ON();
                delay_ms(500);
                LED1_OFF();
                delay_ms(500);              
                LED1_ON();
                delay_ms(500);                  
        }
    }
    

    由于待机模式会造成内存和寄存器数据丢失,所以唤醒后会自动重启。

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

    相关文章

      网友评论

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

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