430设置时钟为用XT2,在进入低功耗之前关闭XT2,退出低功耗后再打开XT2,但是最后打开XT2后的时间好像不对,要比进入低功耗之前要慢


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.
你的程序是在XT2的时基上执行的么?你进低功耗用的什么时钟?退出低功耗调用的什么函数,那段程序怎么写的?
是的,进低功耗的时候,关闭了XT2,退出低功耗时又打开了XT2,退出低功耗用__low_power_mode_off_on_exit();
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Clock_Init(); //时钟初始化
Led_Init(); //LED初始化
TimerA_Init(); //定时器初始化
KeyInit(); //按键初始化
UART_Init(); //串口初始化
_EINT(); //使能中断
A7_Init(10); //A7初始化
GPRS_Init();
BCSCTL1|=XT2OFF; //关闭XT2
delay_ms(1);
__low_power_mode_3(); //进入低功耗
这是初始化,初始化结束进入低功耗
#pragma vector = PORT1_VECTOR
__interrupt void P1_IRQ(void)
{
switch(P1IFG&0x0F)
{
case 0x02:
P1IFG=0x00;
if((P1IN&BIT1)==0)
{
BCSCTL1&=~XT2OFF; //开启XT2
Start_Flag=1;
Recall_NUM=0; //重拨次数清空
KeyValue=2;
__low_power_mode_off_on_exit(); //退出低功耗
}
break;
这是进入终端退出低功耗的程序
有可能是晶振初始化失败。复位后自动启动内部1M DCO。这个时候时钟应该是变慢了
好像是串口初始化的问题,我在重新初始化始终后,又重新初始化串口,这样就好了。但是原因我还是不太明白
//串口初始化
void UART_Init(void)
{
U0CTL|=SWRST + CHAR; //复位SWRST,8位数据模式
U0TCTL|=SSEL1; //SMCLK为串口时钟
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //N=UBR+(UxMCTL)/8
U0MCTL=0x00; //微调寄存器为0,波特率9600bps
ME1|=UTXE0; //UART0发送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST;
IE1|=URXIE0; //接收中断使能位
P3SEL|= BIT4 + BIT5; //设置IO口为第二功能模式,启用UART功能
P3DIR|= BIT4; //设置TXD0口方向为输出
Receive_pointer=0;
}