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.

[参考译文] MSP430FR5994:WDT消耗的功率比额定功率高出10倍。

Guru**** 2387080 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1102576/msp430fr5994-wdt-consuming-more-10-x-power-more-than-it-is-rated

部件号:MSP430FR5994

嘿,社区,

我一直在处理一个功耗非常重要的应用程序。 所以我一直在处理即使是很小 的电力泄漏。 我发现WDT消耗的功率比额定功率高出10倍。所以请放弃您对这个问题的建议。

额定功耗数据表:0.6 uA.

实际功耗:~6uA.

注:BIT0未连接到任何设备或LED。我猜一个浮动GPIO将消耗10倍的功率。

功耗:

代码:

#include <msp430.h>

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;
    

    P1OUT = 0;
        P1DIR = 0xFF;

        P2OUT = 0;
        P2DIR = 0xFF;

        P3OUT = 0;
        P3DIR = 0xFF;

        P4OUT = 0;
        P4DIR = 0xFF;

        P5OUT = 0;
        P5DIR = 0xFF;

        P6OUT = 0;
        P6DIR = 0xFF;

        P7OUT = 0;
        P7DIR = 0xFF;

        P8OUT = 0;
        P8DIR = 0xFF;

        PJOUT = 0;
        PJDIR = 0xFFFF;


    // Configure GPIO
    P1DIR |= BIT0;                          // Set P1.0 to output direction

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    CSCTL0_H = CSKEY_H;                     // Unlock CS registers
    CSCTL1 = DCOFSEL_6;                     // Set DCO = 8MHz
    CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK; // Set ACLK = VLO, MCLK = DCO
    CSCTL3 = DIVA__1 | DIVS__8 | DIVM__8;   // Set all dividers
    CSCTL0_H = 0;

    WDTCTL = WDTPW | WDTSSEL__ACLK | WDTTMSEL | WDTCNTCL | WDTIS__128M;

    SFRIE1 |= WDTIE;                        // Enable WDT interrupt

    __bis_SR_register(LPM4_bits + GIE);     // Enter LPM0, enable interrupts
    __no_operation();                       // For debugger
}

// Watchdog Timer interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(WDT_VECTOR))) WDT_ISR (void)
#else
#error Compiler not supported!
#endif
{
    P1OUT ^= BIT0;                          // Toggle P1.0 (LED)
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看到您未能将所有未使用的针脚设置为低功耗操作的建议状态:输出。 无论如何,将它们作为浮动输入是一个坏主意。

    您的数据似乎是整个设备的最新数据,而不仅仅是WDT。 因此,LFXT运行时LPM3的值似乎是按顺序排列的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿,David,感谢 您的输入。但很遗憾,我粘贴了错误的代码。我已在"帖子"中编辑了代码,现在我将其附加到此处。因此,请浏览该代码,然后

    请告诉 我您的建议。 我将随附数据表页面,其中显示 使用LFXT晶体和 WDT时,功耗为0.5ua。

     

    #include <msp430.h>
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;
        
    
        P1OUT = 0;
            P1DIR = 0xFF;
    
            P2OUT = 0;
            P2DIR = 0xFF;
    
            P3OUT = 0;
            P3DIR = 0xFF;
    
            P4OUT = 0;
            P4DIR = 0xFF;
    
            P5OUT = 0;
            P5DIR = 0xFF;
    
            P6OUT = 0;
            P6DIR = 0xFF;
    
            P7OUT = 0;
            P7DIR = 0xFF;
    
            P8OUT = 0;
            P8DIR = 0xFF;
    
            PJOUT = 0;
            PJDIR = 0xFFFF;
    
    
        // Configure GPIO
        P1DIR |= BIT0;                          // Set P1.0 to output direction
    
        // Disable the GPIO power-on default high-impedance mode to activate
        // previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;
    
        CSCTL0_H = CSKEY_H;                     // Unlock CS registers
        CSCTL1 = DCOFSEL_6;                     // Set DCO = 8MHz
        CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK; // Set ACLK = VLO, MCLK = DCO
        CSCTL3 = DIVA__1 | DIVS__8 | DIVM__8;   // Set all dividers
        CSCTL0_H = 0;
    
        WDTCTL = WDTPW | WDTSSEL__ACLK | WDTTMSEL | WDTCNTCL | WDTIS__128M;
    
        SFRIE1 |= WDTIE;                        // Enable WDT interrupt
    
        __bis_SR_register(LPM4_bits + GIE);     // Enter LPM0, enable interrupts
        __no_operation();                       // For debugger
    }
    
    // Watchdog Timer interrupt service routine
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=WDT_VECTOR
    __interrupt void WDT_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(WDT_VECTOR))) WDT_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        P1OUT ^= BIT0;                          // Toggle P1.0 (LED)
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议确保主板上没有任何东西是最新的。

    然后,我建议您在LPM中确保没有任何时钟运行。  

    此外,如果您启用了调试器,那么这也会为您的测量增加电流。 确保您没有活动的调试会话。

    Evan