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.

430g2553内部DCO时钟配置问题

Other Parts Discussed in Thread: MSP430G2553

代码功能:设置DCO频率,将MCLK和SMCLK设置为DCO,,调用定时器——A比较功能。时钟输入设置为SMCLK,输出PWM波, 
 存在问题 : 通过配置寄存器,理论上上输出频率为DCO频率1/10,可是设置DCO为16MHZ时,输出为2.89KHZ,
                    设置DCO为1MHZ时,输出为2.25KHZ。。希望指点。。

编译环境:IAR

包涵头文件:msp430g2553.h

程序:
              
void main( void )
{
  int i;
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  while(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0XFF);
  BCSCTL1=CALBC1_1MHZ;
  DCOCTL=CALDCO_1MHZ;
  BCSCTL2|=SELM_1+DIVM_0+SELS+DIVS_0;
  BCSCTL3|=LFXT1S_2;                     //时钟配置
   while(IFG1 & OFIFG)
  {
    IFG1 &= ~OFIFG; //清除OSCFault 标志
    for(i= 0xff; i>0; i--); //延时,待稳定. 
  }
  
P1SEL |= BIT2;  //TA1从P1.2输出  
P1DIR |= BIT2;  //TA1从P1.2输出 

TACTL |= MC_1 + TASSEL_2;    以MSCLK为输入
TACCTL1 = OUTMOD_3;    
TACCR0 = 10 ;    //频率大概为定时器输入时钟频率1/10
TACCR1 = 5; 


  _EINT();
  while(1);
}

  • BCSCTL3|=LFXT1S_2;                     //时钟配置

    这句是用VLO做时钟,把它去了.

  • 谢谢你的回复,我也按照你的建议间那条语句去掉。

    出现了问题:

    这个是设置为1mhz时的波形:不稳定。而且把手放在芯片上时波形频率会发生变化!

    希望您指点下,谢谢!

    忘记说明了,我用的是TI的LaunchPad。电子竞赛学习板;

    而且经常在OFIFG的清除处出了循环。。。。。。

  • void main( void )
    {
      int i;
      // Stop watchdog timer to prevent time out reset
      WDTCTL = WDTPW + WDTHOLD;                                   // 停止开门狗
      while(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0XFF);                // 检查校准信息是否被擦除
      BCSCTL1=CALBC1_1MHZ;                                        // 设置SELX的范围
      DCOCTL=CALDCO_1MHZ;                                         // 设置DCOX的值和频率调整值MODX
      BCSCTL2|=SELM_1+DIVM_0+SELS+DIVS_0;                         // MCLK=DCO频率 ,不分频。 SMCLK为VLO频率,不分频
      BCSCTL3|=LFXT1S_2;                                          // VLO作为低频时钟源
       while(IFG1 & OFIFG)
      {
        IFG1 &= ~OFIFG; //清除OSCFault 标志
        for(i= 0xff; i>0; i--); //延时,待稳定. 
      }
      
    P1SEL |= BIT2;  //TA1从P1.2输出  
    P1DIR |= BIT2;  //TA1从P1.2输出 

    TACTL |= MC_1 + TASSEL_2;                                     // up 模式,SMCLK为时钟源
    TACCTL1 = OUTMOD_3;                                           // toggle 模式
    TACCR0 = 10 ;                                                 // 频率大概为定时器输入时钟频率1/10
    TACCR1 = 5; 


      _EINT();
      while(1);
    }
    亲,你明白自己写的程序木。。,有时间的话好好看看相应寄存器的功能吧!

    可以看看《MCU工程师炼成记》这本书这里有详细完整的介绍,针对TI的MSP430LaunchPad..

  • 谢谢你的提示.....,,,