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.

[参考译文] MSP430FR2433:电流消耗高于 LMP3模式数据表上给出的值

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1295442/msp430fr2433-current-consumption-is-higher-than-whats-given-on-data-sheet-for-lmp3-mode

器件型号:MSP430FR2433
主题中讨论的其他器件:ENERGYTRACE

您好、TI 团队:

我正在使用 TI 的微控制器 MSP430FR2433、因此该项目基本上涉及将传感器接通2秒、然后将 MSP430FR2433置于低功耗模式(LMP3) 30秒。 代码正常运行、器件进入低功耗模式、但功耗仍很高(电流消耗为18微安)。 我正在使用外部振荡器通过 RTC 时钟来降低功耗、并且我看到数据表显示 采用32768Hz 晶振的 LPM3.5实时时钟(RTC)计数器:730nA (典型值)。 为什么电流消耗如此之高。 LMP3模式至少需要1或2微安。  我已经连接了下面的代码和 Energytrace、您可以在该线程中进行检查。 同时还提到了移除的 J11跳线。  

  

#include <msp430.h>

void initGpio(void);

volatile unsigned int secondsCount = 0;
volatile unsigned int blinkCounter = 0;

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

initGpio(); // Configure GPIO

// Initialize XT1 32kHz crystal
P2SEL0 |= BIT0 | BIT1; // set XT1 pin as second function
do
{
CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag
SFRIFG1 &= ~OFIFG;
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag

// Configure RTC
RTCMOD = 32768 - 1; // Set RTC modulo for 1 second
RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1;
RTCCTL |= RTCIE;

// Configure TimerA for 1-second interrupt
TA0CCR0 = 32768 *30 - 1; // Set TimerA period to 1 second
TA0CTL = TASSEL__ACLK | MC__UP; // ACLK, Up mode
TA0CCTL0 = CCIE;
// Enter LPM3.5 mode with interrupts enabled.
__bis_SR_register(LPM3_bits | GIE);
__no_operation();

return 0;
}
#pragma vector=RTC_VECTOR
__interrupt void RTC_ISR(void)
{
switch (__even_in_range(RTCIV, RTCIV_RTCIF))
{
case RTCIV_NONE:
break;
case RTCIV_RTCIF:
secondsCount++; // Increment seconds count
RTCCTL &= ~RTCIF; // Clear RTC interrupt flag
break;
default:
break;
}
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA_ISR(void)
{
if(blinkCounter == 1)
{
P1OUT |= BIT0;
}
else
{
P1OUT &= ~BIT0;
}
blinkCounter++;
if(blinkCounter > 30)
{
blinkCounter = 0;
}

// Toggle LED
}
void initGpio(void)
{
P1DIR = 0xFF; P2DIR = 0xFF; P3DIR = 0xFF;
P1REN = 0xFF; P2REN = 0xFF; P3REN = 0xFF;
P1OUT = 0x00; P2OUT = 0x00; P3OUT = 0x00;

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

谢谢!

此致、

普赫拉吉·辛格

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

    尊敬的 Pukhraj:

    MCU 是处于调试模式还是自由运行模式?  如果在调试模式下操作 MCU、电流将更高。

    接下来、您确定32kHz 振荡器正在运行吗?  如果 LFXT 无法启动、系统将切换到使用内部 REFO 时钟源。

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

    您好、Dennis、

    是的、我取下了将调试器与 MSP430芯片集成在一起的所有跳线引脚、只有3V3和 GND 打开。 另外、我想32kHz 振荡器正在工作、因为当我从振荡器上取消引脚2.1和2.0时、LED 从不闪烁。 如果有一种方法可以再次检查它是否正常工作、您可以向我介绍一下。

    谢谢!

    此致、

    普赫拉吉·辛格

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

    尊敬的 Pukhraj:

    有趣。  您能否尝试下面的代码并测量电流?

    #include <msp430.h>
    
    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD;
    
    P1DIR = 0xFF; P2DIR = 0xFF; P3DIR = 0xFF;
    P1OUT = 0x00; P2OUT = 0x00; P3OUT = 0x00;
    
    __bis_SR_register(LPM3_bits | GIE);
    __no_operation();
    
    return 0;
    }