TI中文支持网
TI专业的中文技术问题搜集分享网站

进入低功耗模式,电流下不来

用的MSP430F5438A,最小系统,没有外面电路,直接用3V的稳压电源供电的,

程序设置进入低功耗模式LMP3,但是电流一直在3mA,和没有进低功耗模式一样的。IO口配置成输入或者出入都是电流在3mA左右。

晶振使用的内部或者外面的32.768KHZ都一样的

测试如下:

#include <msp430F5438A.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int

#define CPU_F ((double)1045000UL) //XT2 –> 24MHZ
#define Delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时1us
#define Delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时1ms

#define INPUT 0
#define OUTPUT 1

#define HIGH 1
#define LOW 0

#define PORT_DIR INPUT
#define OUT_LEVEL LOW

void Set_Vcore(uint level);
void SysClock_Init();
void GPIO_Init();
void SVSM_Off(void);

/******************************************************************************/
char i=0;

void main(void) //主函数{ /* 1. 关闭看门狗 */ WDTCTL = WDTPW + WDTHOLD;

/* 2. 初始化系统时钟和设置内核电压 */
// Set_Vcore(PMMCOREV_1);
SysClock_Init();

/* 3. 初始化外设状态 */
GPIO_Init();

// /* 4. 开中断 */
__bis_SR_register(GIE);

/* 5. 执行循环 */
while(1)
{
i++;
SVSM_Off();  //关闭SVS ,SVM
__bis_SR_register(LPM4_bits);
__no_operation();
i++;
if ( i > 10 )
i = 0;
}
}/************************************END***************************************/

/******************************************************************************
函数: void SysClock_Init()
功能: 初始化时钟,使用内部晶振32768HZ作为:ACLK、MCLK、SMLK
参数: 无
返回值:无
说明:
******************************************************************************/
void SysClock_Init()
{

       UCSCTL4 |= SELA__XT1CLK + SELM__XT1CLK + SELS__XT1CLK; //选择ACLK、MCLK、SMCLK为REFOCLK

}

/******************************************************************************
函数: void GPIO_Init()
功能: 端口初始化
参数:返回值:
说明:
******************************************************************************/
void GPIO_Init()
{
//P1
P1SEL = 0;
P1DIR = PORT_DIR;
P1OUT = OUT_LEVEL;
P2SEL = 0;
P2DIR = PORT_DIR;
P2OUT = OUT_LEVEL;
P3SEL = 0;
P3DIR = PORT_DIR;
P3OUT = OUT_LEVEL;
P4SEL = 0;
P4DIR = PORT_DIR;
P4OUT = OUT_LEVEL;
P5SEL = 0;
P5DIR = PORT_DIR;
P5OUT = OUT_LEVEL;
P6SEL = 0;
P6DIR = PORT_DIR;
P6OUT = OUT_LEVEL;
P7SEL |= BIT0 + BIT1;
// P7DIR = PORT_DIR;
// P7OUT = OUT_LEVEL;
P8SEL = 0;
P8DIR = PORT_DIR;
P8OUT = OUT_LEVEL;
P9SEL = 0;
P9DIR = PORT_DIR;
P9OUT = OUT_LEVEL;
P10SEL = 0;
P10DIR = PORT_DIR;
P10OUT = OUT_LEVEL;
P11SEL = 0;
P11DIR = PORT_DIR;
P11OUT = OUT_LEVEL;
PJDIR = PORT_DIR;
PJOUT = OUT_LEVEL;
// P1DIR |= BIT3 + BIT4 + BIT5 + BIT6; //LED IO设置为输出
// P1OUT &= ~(BIT3 + BIT4 + BIT5 + BIT6); //LED灭
}

/******************************************************************************
函数: void Set_Vcore(uint level)
功能: 设置内核电压
参数: Power Management M
返回值:
说明:
******************************************************************************/
void Set_Vcore(uint level)
{ PMMCTL0_H = PMMPW_H; // Open PMM registers for write SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVS/SVM high side new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Set SVM low side to new level while ((PMMIFG & SVSMLDLYIFG) == 0); // Wait till SVM is settled PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Clear already set flags PMMCTL0_L = PMMCOREV0 * level; // Set VCore to new level if ((PMMIFG & SVMLIFG)) // Wait till new level reached
while ((PMMIFG & SVMLVLRIFG) == 0);
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Set SVS/SVM low side to new level PMMCTL0_H = 0x00; // Lock PMM registers for write access
}

void SVSM_Off(void)
{
PMMCTL0_H = PMMPW_H; SVSMHCTL &= ~(SVMHE + SVSHE);
SVSMLCTL &= ~(SVSLE + SVMLE); PMMCTL0_H = 0x00;}

灰小子:

你是怎么测量的工作电流?

Jacky Xu:

要配置成输出固定电平

你为什么配置成输入了。。。

DIR全部配1

赞(0)
未经允许不得转载:TI中文支持网 » 进入低功耗模式,电流下不来
分享到: 更多 (0)