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

2020-11-23  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读