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.

MSP430F149时钟

Other Parts Discussed in Thread: MSP430F149

在做MSP430F149系统板(PCB做板),在测试时,首先不焊接外部高速晶振XT2与低速晶振,并下载程序,发现149并没有起振工作,然后再把高速(8M)与低速晶振(32768)焊接149才正常运行程序。

149内部不是有DCO时钟模块吗,在没有启动外部晶振作为主系统时钟时,149不是自动设置内部DCO并作为主系统时钟的吗

  • 不知道您的程序是怎么设置的?起振工作是什么意思,没有晶振,怎么起振。。我想您的意思是430没有工作?如何确认没有工作?

  • 我没有接任何的外部晶体振荡器,程序内部也没有设置使用外部晶体的代码,几时简单的驱动LCD的代码,我说的起振是149没有工作,

  • 我的意思的是在硬件连接上不接任何的外部晶体振荡器,想使用其内部的DCO来使149工作,这样可以吗,我之前做过好多的149板子,都是直接连接XT2与手表晶体。这次是在焊接PCB时突然想到的问题,发现硬件不连接这两个外部晶体时,系统竟没有工作,不解

  • 这是源码,

    /*********************************************************

    程序功能:MCU的片内ADC对P6.0端口的电压进行转换

    *********************************************************/

    #include  <msp430x14x.h>

    #include  "Uart.h"

    //typedef unsigned char uchar;

    //typedef unsigned int  uint;

    #define   Num_of_Results   16

    static uint results[Num_of_Results];          //保存ADC转换结果的数组                                                     // is not used for anything.

    void Trans_val(uint Hex_Val);

    /************************主函数****************************/

    void main(void)

    {

       WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗

     /*下面六行程序关闭所有的IO口*/

       P1DIR = 0XFF;P1OUT = 0XFF;

       P2DIR = 0XFF;P2OUT = 0XFF;

       P3DIR = 0XFF;P3OUT = 0XFF;

       P4DIR = 0XFF;P4OUT = 0XFF;

       P5DIR = 0XFF;P5OUT = 0XFF;

       P6DIR = 0XFF;P6OUT = 0XFF;

     P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换

     P6SEL |= 0x01;                            // 使能ADC通道

     P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口

     ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // 打开ADC,设置采样时间

     ADC12CTL1 = SHP+CONSEQ_2;                 // 使用采样定时器

     ADC12IE = 0x01;                           // 使能ADC中断

     ADC12CTL0 |= ENC;                         // 使能转换

     ADC12CTL0 |= ADC12SC;                     // 开始转换

     _EINT();                                  //全局中断

     LPM0;

    }

    /*******************************************

    函数名称:ADC12ISR

    功    能:ADC中断服务函数,在这里用16次平均的

             计算P6.0口的模拟电压数值

    参    数:无      

    返回值  :无

    ********************************************/

    #pragma vector=ADC_VECTOR

    __interrupt void ADC12ISR (void)

    {

     static uint index = 0;

     results[index++] = ADC12MEM0;               // Move results

     if(index == Num_of_Results )

     {

           uchar i;

           unsigned long sum = 0;

           index = 0;

           for(i = 0; i < Num_of_Results; i++)

           {

               sum += results[i];

           }

            sum  = sum >> 4;                            //除以16求平均

           Trans_val(sum);

     }

    }

    /*******************************************

    函数名称:Trans_val

    功    能:将16进制ADC转换数据变换成三位10进制

             真实的模拟电压数据

    参    数:Hex_Val--16进制数据

             n--变换时的分母等于2的n次方      

    返回值  :无

    ********************************************/

    void Trans_val(uint Hex_Val)

    {

       unsigned long caltmp;

       uint Curr_Volt;

       uchar t1;

       uchar n = 4;

       uchar str[4];

       caltmp = Hex_Val;

       caltmp = (caltmp << 5) + Hex_Val;           //caltmp = Hex_Val * 33

       caltmp = (caltmp << 3) + (caltmp << 1);     //caltmp = caltmp * 10

       Curr_Volt = caltmp >> 12;                   //Curr_Volt = caltmp / 2^n

       str[0] = Curr_Volt / 100;                   //Hex->Dec变换

       t1 = Curr_Volt - (str[0] * 100);

       str[2] = t1 / 10;

       str[3] = t1 - (str[2] * 10);

       str[1] = 0x2e;                                //对应符号"."

    dis(str,n);

    }

  • dis(str,n)是1602的显示函数,具体引脚配置源码没有贴出

    谢谢

  • 请专家帮帮分析

  • liu liu,你好!F149内部有DCO时钟模块,不接外部晶振,也是可以工作的。为了验证这一点,我建议你把自己的程序逐步测试,就是先写一个最简单的程序,例如上电后只亮个LED,看不接外部晶振是否可以正常工作。若可以,就在此程序的基础上再逐步吧ADC模块加上,工作正常后,再将UART程序模块加上,直至全部可以正常工作。在逐步测试过程中,可以逐步定位原来不能正常工作的原因。希望我的建议对你有帮助。

  • 再问一个问题,在不接外部晶振的情况下,内部DCO在代码中不设置,430F149是可以自动启用内部DCO时钟的吧,以为我之前的代码都是这样操作的,只有这次出了问题

  • liu liu,是的,在不接外部晶振的情况下,内部DCO即使在代码中不设置,也是可以自动启用的,约为MCLK= SMCLK= default DCO ~800k。