请问NUC029LAN如何才能做到微安级静态电流,我把所有都关了,但电流还是有2.7mA, 我的程序如下:
#include <stdio.h>
#include "NUC029xAN.h"
/*---------------------------------------------------------------------------------------------------------*/
/* Global variables */
/*---------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------*/
/* Define functions prototype */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void);
void PowerDownFunction(void)
{
SCB->SCR = 4;
CLK->PWRCON = (CLK->PWRCON & ~(CLK_PWRCON_PWR_DOWN_EN_Msk | CLK_PWRCON_PD_WAIT_CPU_Msk)) |
CLK_PWRCON_PD_WAIT_CPU_Msk | CLK_PWRCON_PD_WU_INT_EN_Msk;
CLK->PWRCON |= CLK_PWRCON_PWR_DOWN_EN_Msk;
__WFI();
}
void GPIOP0P1_IRQHandler(void)
{
P0->ISRC = P0->ISRC;
P1->ISRC = P1->ISRC;
}
void SYS_Init(void)
{
//---------------------------------------------------------------------------------------------------------
// Init System Clock
//---------------------------------------------------------------------------------------------------------
// Enable external XTAL 12MHz clock
CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
// Waiting for external XTAL clock ready
CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);
// Switch HCLK clock source to Internal RC and HCLK source divide 1
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HXT, CLK_CLKDIV_HCLK(1));
//CLK_DisableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
//CLK_DisableXtalRC(CLK_PWRCON_OSC10K_EN_Msk);
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
SystemCoreClockUpdate();
}
/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{
uint8_t i;
GPIO_SetMode(P1, BIT6, GPIO_PMD_OUTPUT);
P16 = 0;
/* Unlock protected registers */
SYS_UnlockReg();
/* Init System, IP clock and multi-function I/O */
SYS_Init();
/* Lock protected registers */
SYS_LockReg();
GPIO_SetMode(P1, BIT5, GPIO_PMD_INPUT);
GPIO_EnableInt(P1, 5, GPIO_INT_FALLING);
NVIC_EnableIRQ(GPIO_P0P1_IRQn);
GPIO_SetMode(P1, BIT0, GPIO_PMD_OUTPUT);
P10 = 0;
GPIO_SetMode(P1, BIT1, GPIO_PMD_OUTPUT);
P11 = 0;
GPIO_SetMode(P1, BIT2, GPIO_PMD_OUTPUT);
P12 = 0;
GPIO_SetMode(P1, BIT3, GPIO_PMD_OUTPUT);
P13 = 0;
GPIO_SetMode(P1, BIT4, GPIO_PMD_OUTPUT);
P14 = 0;
GPIO_SetMode(P1, BIT6, GPIO_PMD_OUTPUT);
P16 = 0;
GPIO_SetMode(P1, BIT7, GPIO_PMD_OUTPUT);
P17 = 0;
//GPIO_SetMode(P3, BIT0, GPIO_PMD_OUTPUT);
P30 = 1;
GPIO_SetMode(P3, BIT1, GPIO_PMD_OUTPUT);
P31 = 0;
GPIO_SetMode(P3, BIT2, GPIO_PMD_OUTPUT);
P32 = 0;
GPIO_SetMode(P3, BIT3, GPIO_PMD_OUTPUT);
P33 = 0;
GPIO_SetMode(P3, BIT4, GPIO_PMD_OUTPUT);
P34 = 0;
GPIO_SetMode(P3, BIT5, GPIO_PMD_OUTPUT);
P35 = 0;
GPIO_SetMode(P3, BIT6, GPIO_PMD_OUTPUT);
P36 = 0;
GPIO_SetMode(P3, BIT7, GPIO_PMD_OUTPUT);
P37 = 0;
GPIO_SetMode(P0, BIT0, GPIO_PMD_OUTPUT);
P00 = 0;
GPIO_SetMode(P0, BIT1, GPIO_PMD_OUTPUT);
P01 = 0;
GPIO_SetMode(P0, BIT2, GPIO_PMD_OUTPUT);
P02 = 0;
GPIO_SetMode(P0, BIT3, GPIO_PMD_OUTPUT);
P03 = 0;
GPIO_SetMode(P0, BIT4, GPIO_PMD_OUTPUT);
P04 = 0;
GPIO_SetMode(P0, BIT5, GPIO_PMD_OUTPUT);
P05 = 0;
GPIO_SetMode(P0, BIT6, GPIO_PMD_OUTPUT);
P06 = 0;
GPIO_SetMode(P0, BIT7, GPIO_PMD_OUTPUT);
P07 = 0;
GPIO_SetMode(P2, BIT0, GPIO_PMD_OUTPUT);
P20 = 0;
GPIO_SetMode(P2, BIT1, GPIO_PMD_OUTPUT);
P21 = 0;
GPIO_SetMode(P2, BIT2, GPIO_PMD_OUTPUT);
P22 = 0;
GPIO_SetMode(P2, BIT3, GPIO_PMD_OUTPUT);
P23 = 0;
GPIO_SetMode(P2, BIT4, GPIO_PMD_OUTPUT);
P24 = 0;
GPIO_SetMode(P2, BIT5, GPIO_PMD_OUTPUT);
P25 = 0;
GPIO_SetMode(P2, BIT6, GPIO_PMD_OUTPUT);
P26 = 0;
GPIO_SetMode(P2, BIT7, GPIO_PMD_OUTPUT);
P27 = 0;
GPIO_SetMode(P4, BIT0, GPIO_PMD_OUTPUT);
P40 = 0;
GPIO_SetMode(P4, BIT1, GPIO_PMD_OUTPUT);
P41 = 0;
GPIO_SetMode(P4, BIT2, GPIO_PMD_OUTPUT);
P42 = 0;
GPIO_SetMode(P4, BIT3, GPIO_PMD_OUTPUT);
P43 = 0;
GPIO_SetMode(P4, BIT4, GPIO_PMD_OUTPUT);
P44 = 0;
GPIO_SetMode(P4, BIT5, GPIO_PMD_OUTPUT);
P45 = 0;
CLK_DisableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
for( i = 0 ; i < 200; i++);
while(1)
{
PowerDownFunction();
}
}
所有I/O都没有接外部元件,只有P1.5接了拉高电阻。外部接了12M的晶振。 |
共1人点赞
|