我用的是MSP4305438A,打算外接个25M的外部晶振。初始化时钟程序如下:
void Clck_Init()
{
unsigned int i;
P4DIR |= BIT0;//初始化P4.0
P5SEL |= 0X0C;//选择外部高频晶振
UCSCTL6 &=~ XT2OFF;//XT2振荡器使能
UCSCTL3 |= SELREF_2;//FLLref = REFO
UCSCTL4 |= SELA_2;//ACLK=REFO,SMCLK=DCO,MCLK=DCO
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG;//清楚错误标志位
}while(SFRIFG1 & OFIFG);//判断是否正确起振
P4OUT &=~ BIT0;//起振指示
for(i=0; i<0XFFFF; i++);
for(i=0; i<0XFFFF; i++);
P4OUT |= BIT0;
UCSCTL6 |= XT2DRIVE_3;//选择外部振荡器频率范围
UCSCTL4 |= SELM_5 + SELS_5 + SELA_3;//MCLK=25M,SMCLK=25M,ACLK=DCO
}
用25M的晶振使LED灯每秒翻转一次,结果程序卡死在delay函数中。如果把这个函数注释掉来使用默认晶振LED是可以翻转的。之前外接8M的晶振,用同样的Clck_init()函数没出过问题。本来觉得是晶振的问题,可是换了以后还是这样。项目过几天就要收工了,现在卡死在这里很急。求助下各路大神,是这段程序有问题么?
此帖出自
小平头技术问答
一周热门 更多>