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.

XT1=32.768K和XT2=2 两个晶振不起整

Other Parts Discussed in Thread: MSP430F6436

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语句里面出不来。

  • 32K一般不外接电容。片内自带吧。我从来没接过,你把循环的表达方式变换一下,原来我遇到过这种情形,换一下表达方式就好了。

  •   恩,已经搞好了,XT1电容去掉了!XT2接了个27p的,谢谢了!

  • 您好,我现在用的是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--); // 延时
    }

    }