This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

为什么我的MSP432在LPM3中断到达后会复位?



uart0_Init();/
uart0_SendString((uint8_t*)"MCU reset\r\n");
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5,GPIO_PIN6);//power off

MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,BIT1|BIT4|BIT5|BIT6|BIT7);

MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P6,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P7,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P8,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P9,PIN_ALL8);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P10,PIN_ALL8);

GPIO_setAsOutputPin(GPIO_PORT_P1,BIT1|BIT4|BIT5|BIT6|BIT7);
GPIO_setAsOutputPin(GPIO_PORT_P2,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P3,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P4,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P5,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P6,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P7,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P8,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P9,PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P10,PIN_ALL8);
io_Init();
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster(); 
PCM_gotoLPM3();
while(1)
{
for(i=0;i<10;i++)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
delay_WaitMs(500);
}
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
PCM_gotoLPM3();

}

void io_Init(void)
{
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);//ÅäÖÃP1.0ΪÊä³ö
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
//°´¼üÖжÏ
MAP_GPIO_setAsInputPin(GPIO_PORT_P1,GPIO_PIN1);
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);

}

以上是代码,我用LUANCHPAD做低功耗测试,使用了LPM3模式,保留了P1.1的按键中断,

现在我的问题是,MCU启动后,按下按键,这个时候灯会正常闪烁,然后再次进入低功耗

可是我再次按下MCU的时候,MSP432就复位了。

请问这个是什么原因?

例外,如果我使用的是RTC中断,会有一样的问题

  • There are multiple sources of wake up from LPM3 and LPM4 modes. Please refer to Table 7-8 for all
    possible wake up sources from LPM3 and LPM4 modes. Post wakeup, the device returns back to the
    active mode from which LPM3 and LPM4 entry was initiated.

    参考TI用户手册,退出LPM3应该是返回进入LPM3时状态。

    出现复位可能是硬件产生其它复位请求:

    可以监控一下VCC看电压是否产生波动在按键按下的情况下?

    复位引脚是否有信号干扰进去?

    RTC 也是可以唤醒LPM3 deep sleep mode.

    zhengs lin 说:

    uart0_Init();/
    uart0_SendString((uint8_t*)"MCU reset\r\n");
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5,GPIO_PIN6);//power off

    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,BIT1|BIT4|BIT5|BIT6|BIT7);

    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P6,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P7,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P8,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P9,PIN_ALL8);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P10,PIN_ALL8);

    GPIO_setAsOutputPin(GPIO_PORT_P1,BIT1|BIT4|BIT5|BIT6|BIT7);
    GPIO_setAsOutputPin(GPIO_PORT_P2,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P3,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P4,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P5,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P6,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P7,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P8,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P9,PIN_ALL8);
    GPIO_setAsOutputPin(GPIO_PORT_P10,PIN_ALL8);
    io_Init();
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_Interrupt_enableSleepOnIsrExit();
    MAP_Interrupt_enableMaster(); 
    PCM_gotoLPM3();
    while(1)
    {
    for(i=0;i<10;i++)
    {
    MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
    delay_WaitMs(500);
    }
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    PCM_gotoLPM3();

    }

    void io_Init(void)
    {
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);//ÅäÖÃP1.0ΪÊä³ö
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
    //°´¼üÖжÏ
    MAP_GPIO_setAsInputPin(GPIO_PORT_P1,GPIO_PIN1);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);
    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
    MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);

    }

    以上是代码,我用LUANCHPAD做低功耗测试,使用了LPM3模式,保留了P1.1的按键中断,

    现在我的问题是,MCU启动后,按下按键,这个时候灯会正常闪烁,然后再次进入低功耗

    可是我再次按下MCU的时候,MSP432就复位了。

    请问这个是什么原因?

    例外,如果我使用的是RTC中断,会有一样的问题