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.
void check_clk(void)
{
unsigned int i;
P5SEL|=BIT2+BIT3; //P52 P53XT2
P5DIR&=~BIT2;
P7SEL|=BIT0+BIT1; //P70 P71XT1
P7DIR&=~BIT0;
UCSCTL1|=DCORSEL_7;
UCSCTL2|=FLLD_1;
UCSCTL3|=FLLREFDIV_1;
UCSCTL4 |= SELA_0 + SELS_5 + SELM_5; // SMCLK=MCLK=XT2
UCSCTL5|=DIVPA_0+DIVS_0+DIVM_0; //ACLK=32768/1 MCLK=SMCLK=XT2=25M/n;
UCSCTL6&= ~(XT2OFF+XT2OFF); //打开XT1 XT2
UCSCTL6 |= XT2DRIVE_3+XT2BYPASS+XT1DRIVE_1+XT1BYPASS;
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG );
SFRIFG1 &= ~OFIFG; // 清除振荡器失效标志
for (i = 0xFF; i > 0; i--); // 延时,等待XT2起振
} while (SFRIFG1 & OFIFG); // 判断XT2是否起振
UCSCTL4 |= SELA_0 + SELS_5 + SELM_5; // SMCLK=MCLK=XT2
}
电容=22p 晶振都换的几个但是XT1和XT2都没起振,示波器也检测不到(一端接地,一端接晶振)
程序会一直在while语句里面出不来。
您好,我现在用的是MSP430F6系列单片机,配置XT1和XT2 需要置位XT2BYPASS和XT1BYPASS吗? 关键是我现在置位不置位,这些故障标志都置位,示波器也量不到,请问你最后程序还是没变化,只是去掉电容吗?
你好,我用MSP430F6436,两个晶振都不起振,故障标志全置位,你看我这么配置对吗?
void Init_Clk()
{
unsigned int i;
P7SEL |=0x0f; //开启XT1,XT2 P7.3,P7.2对应XT2 P7.1,P7.0对应XT1
UCSCTL4 |= SELS_5 + SELM_5; //MCLK=XT2CLK,SMCLK=XT2CLK,UCSCTL4 默认ACLK=XT1CLK 时钟源发生错误,ACLK会自动选择REFOCLK
UCSCTL6 &= ~(XT1OFF + XT2OFF );// enalbe XT1 XT2
UCSCTL6 |= XT2DRIVE_1+XT1DRIVE_0;
while(SFRIFG1&OFIFG)
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
for (i = 0xFF; i > 0; i--); // 延时
}
}