MSP 430的时钟初始化的问题。
下面的程序是我的时钟初始化程序,但是有一个问题,那就是,每次系统运行,都会卡在while()那里循环,不能向下继续执行,也就是说,检查晶振一直是异常的,但是我一点停止,然...
下面的程序是我的时钟初始化程序,但是有一个问题,那就是,每次系统运行,都会卡在while ()那里循环,不能向下继续执行,也就是说,检查晶振一直是异常的,但是我一点停止,然后点继续运行,它就可以运行下去了。也就是说,这时候时钟出错标志没有了。这个是为什么呢? 而且有时候用在别的主程序程序上又好像没有这个问题。
void Clock_Init(void)
{
//DIVA1,0=0:ACLK divider number=1
//XTS=0:LFXT1 low Freq. XT2OFF=0:XT2 Oscilator ON,XT5V=0: should always be reset
/*BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;//0Xx87;;
BCSCTL1 &=~ (XT2OFF + XTS + XT5V);
//SELM1,0=2:MCLK source select DCOCLK, DIVM1,0=0:MCLK divider number=1,
//SELS=0: SMCLK resource select XT2CLK, DEIS1,0=0:SMCLK divider number=1
//DCOR=0: Internal resistor enable(DCO start)
BCSCTL2 = SELS + DIVS_0 + SELM_0 + DIVM_0;//0x08;
*/
uint i;
P11DIR = BIT2 + BIT1 + BIT0; // P11.2,1,0 to output direction
P11SEL = BIT2 + BIT1 + BIT0;
P7SEL|=BIT0+BIT1;
P5SEL |= BIT2 + BIT3; // 启动XT1 XT2
UCSCTL6&=~(XT1OFF+XT2OFF+XT2BYPASS);
UCSCTL6|=XT2DRIVE_3;
/*****************************************************************/
while (SFRIFG1 & OFIFG) // 等待时钟系统正常工作
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); //清各时钟出错标志位
SFRIFG1 &= ~OFIFG; //清总时钟标志位
//for(i = 0; i <100; i++);
__delay_cycles(6000);
}
/*************************************************************/
UCSCTL4= SELM_5+ SELA_5 + SELS_5; // 设置时钟源
UCSCTL0=0X0000;
UCSCTL1=0X0071;
UCSCTL2=0X0008;
UCSCTL3=0X0054;
//UCSCTL5|=DIVM__32;
} 展开
void Clock_Init(void)
{
//DIVA1,0=0:ACLK divider number=1
//XTS=0:LFXT1 low Freq. XT2OFF=0:XT2 Oscilator ON,XT5V=0: should always be reset
/*BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;//0Xx87;;
BCSCTL1 &=~ (XT2OFF + XTS + XT5V);
//SELM1,0=2:MCLK source select DCOCLK, DIVM1,0=0:MCLK divider number=1,
//SELS=0: SMCLK resource select XT2CLK, DEIS1,0=0:SMCLK divider number=1
//DCOR=0: Internal resistor enable(DCO start)
BCSCTL2 = SELS + DIVS_0 + SELM_0 + DIVM_0;//0x08;
*/
uint i;
P11DIR = BIT2 + BIT1 + BIT0; // P11.2,1,0 to output direction
P11SEL = BIT2 + BIT1 + BIT0;
P7SEL|=BIT0+BIT1;
P5SEL |= BIT2 + BIT3; // 启动XT1 XT2
UCSCTL6&=~(XT1OFF+XT2OFF+XT2BYPASS);
UCSCTL6|=XT2DRIVE_3;
/*****************************************************************/
while (SFRIFG1 & OFIFG) // 等待时钟系统正常工作
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); //清各时钟出错标志位
SFRIFG1 &= ~OFIFG; //清总时钟标志位
//for(i = 0; i <100; i++);
__delay_cycles(6000);
}
/*************************************************************/
UCSCTL4= SELM_5+ SELA_5 + SELS_5; // 设置时钟源
UCSCTL0=0X0000;
UCSCTL1=0X0071;
UCSCTL2=0X0008;
UCSCTL3=0X0054;
//UCSCTL5|=DIVM__32;
} 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
硬件电路没错吗?问一下XT1、XT2接的多少M的晶振? 时钟初始化前面加上
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// sourcing FLL with LFXT1 can cause
// XT1OFFG flag to set
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
试试
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// sourcing FLL with LFXT1 can cause
// XT1OFFG flag to set
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
试试
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询