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.

[参考译文] MSP430F5359:外部晶振 XT1无法正常工作

Guru**** 661510 points
Other Parts Discussed in Thread: MSP430F5359
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/746371/msp430f5359-external-crystal-xt1-is-not-working-properly

器件型号:MSP430F5359

大家好、我正在尝试将 MSP430f5359用于我的项目、但晶体振荡器无法正常工作、我从 MSP430f5359的 Resource Explorer 下载了代码以进行测试、但它仍然无法正常工作。 此处连接的是晶体振荡器的电路。

我出了什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kary、

    您是否正在使用定制板? 如果是、您是否为您为 XT1选择的32.768kHz 晶体提供了正确的有效负载电容? 请勿在晶体上使用示波器探针测量晶体。 相反、请使用其中一个 XT1代码示例通过 ACLK 引脚输出时钟。

    您可以在《MSP430 32kHz 晶体振荡 器》应用手册中找到有关使用32kHz 外部晶体的更多信息。 此外、我建议在论坛上的此处搜索答案。 其他人也有同样的问题、因此将提供有关检查和修复内容的宝贵建议。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     由于没有针对 msp430f5359的定制板,我自己设计了。  我为 32.768kHz 晶体提供了正确的有效负载电容。 我在 Resource Explorer 的实时时钟模式示例中使用了 RTC_B 来对其进行测试。 以下是代码示例的链接:

    此处连接的是我使用的电路:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="kary"]由于 msp430f5359没有定制板 ,我自己设计了。

    在这里、定制电路板指的是除我们的开发板或目标板之外的任何内容。 现在、我知道您正在使用您自己的定制板。

    我看到 RTC 代码示例使用晶体的内部负载电容器。 您是否也使用了外部负载电容器(我看到它们在原理图中是 DNP、但需要检查)? 您是否按照 SLAA322中第2.1节中的公式正确计算了有效负载电容? 您是否遵循了 SLAA322中的布局指南? 在晶体下方布线等物体可能会导致晶体压降。

    当您说"它不起作用"时、您能更具体吗? 代码是否卡在特定位置、例如代码检查 XT1振荡器故障标志的位置?

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的晶体振荡器在大约27KHZ 上振荡、 我没有使用  内部负载电容器、而是硬件连接。 问题可能出在哪呢?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试了以下代码:

    #include

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT
    while (BAKCTL 和 LOCKBAK)//解锁 XT1引脚以进行操作
    BAKCTL &=~(LOCKBAK);
    UCSCTL6 &=~(XT1OFF);// XT1打开
    UCSCTL6 |= XCAP_3;//内部负载电容
    //循环直到 XT1故障标志被清除
    操作

    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG;//清除故障标志
    } while (SFRIFG1&OFIFG);//测试振荡器故障标志

    P1DIR |= 0x01;// P1.0输出
    TA1CCTL0 = CCIE;// CCR0中断被启用
    TA1CCR0 = 1000-1;
    TA1CTL = tassel_1 | MC_1 | TACLR;// ACLK、upmode、clear TAR

    _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、启用中断
    __no_operation();//用于调试器

    // Timer1 A0中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=Timer1_A0_vector
    _interrupt void Timer1_A0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(Timer1_A0_vector)) Timer1_A0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

    P1OUT ^= 0x01;//切换 P1.0

    结果 LED 不闪烁、我再次累了删除 LED 闪烁晶体部件的相同代码。 该电路可能会出现什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡里:

    除非您对电池做一些神奇的操作、否则 XT1将无法运行
    备份子系统。 (这在文档中并不完全清楚。)

    以下是我在发现源代码时嵌入的注释:

    * o 未描述电池备份子系统的解锁
    所需的任何 TI 文档或示例代码中
    但对 XT1振荡器或其旁路模式当然会进行编程
    *如果您不这样做、则不起作用。
    *
    *请参阅:
    *
    * o e2e.ti.com/.../683218
    *
    * o e2e.ti.com/.../1682900
    *
    *
    * o 该网站上的其他说明描述了有一个计数器
    必须对8192个无故障时钟进行计数的*(也是未记录的)
    *可以清除"振荡器故障"之前的周期。 针对
    * 32、768 Hz XT1、这意味着需要1/4秒才能识别
    *已清除"振荡器故障"。 'scope measurements
    *确认这一点;故障清除循环运行250ms。

    希望这对您有所帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有得到这个,您能否为我提供一个有效的示例代码? 我不知道我做了些什么、但我无法通过所附的参考文献使其正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430F5359

    工具/软件:Code Composer Studio

    我尝试运行此代码、但它不起作用:

    #include

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT
    while (BAKCTL 和 LOCKBAK)//解锁 XT1引脚以进行操作
    BAKCTL &=~(LOCKBAK);
    UCSCTL6 &=~(XT1OFF);// XT1打开
    UCSCTL6 |= XCAP_3;//内部负载电容
    //循环直到 XT1故障标志被清除
    操作

    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG;//清除故障标志
    } while (SFRIFG1&OFIFG);//测试振荡器故障标志

    P1DIR |= 0x01;// P1.0输出
    TA1CCTL0 = CCIE;// CCR0中断被启用
    TA1CCR0 = 1000-1;
    TA1CTL = tassel_1 | MC_1 | TACLR;// ACLK、upmode、clear TAR

    _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、启用中断
    __no_operation();//用于调试器

    // Timer1 A0中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=Timer1_A0_vector
    _interrupt void Timer1_A0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(Timer1_A0_vector)) Timer1_A0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

    P1OUT ^= 0x01;//切换 P1.0

     问题可能出在哪呢? 可以解决这个问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kary、

    在您共享的代码中、如果有振荡器故障标志、它将不会继续切换 LED 的代码部分。 看看您分享的图片、我们不建议您将晶体焊接到目标板上。 由于您观察到的频率为~27kHz、因此有一些因素会影响晶体、我怀疑它与硬件相关、而不是与软件相关。

    由于您使用的是 MSP430F5359、因此我假设图片中显示的目标板是 MSP-TS430PZ100C。 您不能将 XT1晶振焊接到目标板上的 Q1位置而不能将其焊接到接头下方是否有具体原因?

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该板无法安装在 Q1位置。 当我执行之前 的代码时、LED 会亮起、但不会闪烁。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Kary">Q1位置上没有可安装的位置。 当我执行之前 的代码时、LED 会亮起、但不会闪烁。

    我明白了。 遗憾的是、此电路板不是我们的目标板、因此使用此电路板测试您的晶体将具有挑战性、尤其是由于晶体离 MCU 太远、大量焊料将影响电容以及长跳线等 您可能无法使用此硬件越过振荡器故障标志。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    刚发运 TI 电路板、我甚至无法通过该硬件中的振荡器故障。 此处是 我从 Resource Explorer 中尝试的硬件和代码。

    #include

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT
    while (BAKCTL 和 LOCKBAK)//解锁 XT1引脚以进行操作
    BAKCTL &=~(LOCKBAK);
    UCSCTL6 &=~(XT1OFF);// XT1打开
    UCSCTL6 |= XCAP_3 | XT1BYPASS;//内部负载电容 UCSCTL3 = 0;
    // XT1源自外部时钟信号
    //循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT1和 DCO 稳定
    操作

    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | XT1HFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG;//清除故障标志
    } while (SFRIFG1&OFIFG);//测试振荡器故障标志

    UCSCTL6 &=~(XT1DRIVE_3);// XTAL 现在稳定、降低驱动强度

    P1DIR |= 0x01;// P1.0输出
    TA1CCTL0 = CCIE;// CCR0中断被启用
    TA1CCR0 = 1000-1;
    TA1CTL = tassel_1 | MC_1 | TACLR;// ACLK、upmode、clear TAR

    _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、启用中断
    __no_operation();//用于调试器

    // Timer1 A0中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=Timer1_A0_vector
    _interrupt void Timer1_A0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(Timer1_A0_vector)) Timer1_A0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

    P1OUT ^= 0x01;//切换 P1.0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kary、

    当您发布代码时、如果使用语法 Highlighter 工具(类似于" ")找到"插入代码、附加文件等..." 单击"回复"按钮后显示的链接。

    UCSCTL6 |= XCAP_3 | XT1BYPASS;//内部负载电容 UCSCTL3 = 0; 

    为什么在尝试使用外部晶体时设置 XT1BYPASS? 这可能是您看到振荡器故障的原因、因为它禁用了 XT1模块。

    [报价用户="Kary"]此处是 我从 Resource Explorer 尝试的硬件和代码。

    很高兴看到这个。 但是、我不确定您为什么没有将晶体焊接到 Q1板上的通孔。 我不确定您复制了哪个示例或示例、因为您没有指定。

    请尝试运行以下代码示例、以查看您是否可以越过振荡器故障。

    msp430f665x_UCS_06.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F665x 演示- XT1 Sources ACLK
    //
    //说明:此程序演示使用 XT1作为 ACLK 的时钟源
    // ACLK = LFXT1 = 32、768Hz
    //////////////* ACLK 需要 XIN 和 XOUT 之间的外部观察晶体*//
    
    //// MSP430F665x
    // --------
    // /|\| XIN|-
    // || | 32kHz
    // ---|RST XOUT|-
    // | |
    // | P1.0|->ACLK =~32kHz
    // | |
    //
    P.Thanigai
    // Texas Instruments Inc.
    // 2012年10月
    //使用 IAR 嵌入式工作平台构建版本:5.40和 CCS v5.2
    //*********
    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    P1DIR |= BIT0; // ACLK 设置为引脚
    P1SEL |= BIT0;
    P5SEL |= BIT4+BIT5; //选择 XT1
    
    while (BAKCTL & LOCKBAK) //解锁 XT1引脚以进行操作
    BAKCTL &=~(LOCKBAK);
    UCSCTL6 &=~(XT1OFF); //
    UCSCTL6上的 XT1 |= XCAP_3; //内部负载电容
    //循环直到 XT1故障标志被清除
    DO
    {
    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志
    
    UCSCTL6 &=~(XT1DRIVE_3); // XTAL 现在是稳定的、减少 UCSCTL4的驱动强度
    
    |= SE拉美_0; // ACLK = LFTX1 (默认)
    
    _bis_SR_register (LPM3_bits); //输入 LPM3
    __NO_OPERATION (); //对于调试器
    } 

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、它确实通过了振荡器故障、我也将晶体放置在 Q1中。 我将使用 xtal 为我的器件使用 PWM。 您能为我提供任何相关代码吗?
    但是、我不理解这一行:

    P5SEL |= BIT4+BIT5;//选择 XT1

    msp430f5359中的5.4和5.5没有任何内容。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Kary"]是的、它确实通过了振荡器故障、我也将晶体放置在 Q1中。

    很棒!

    [报价用户="Kary"]我即将使用 xtal 为我的设备使用 PWM。 您能为我提供任何相关代码吗?

    请搜索论坛或为此问题创建新帖子。

    [引用用户="Kary"]

    P5SEL |= BIT4+BIT5;//选择 XT1

    msp430f5359中的5.4和5.5没有任何 内容。  

    [/报价]

    对于 MSP430F665x 器件、它们没有像 MSP430F5359那样的专用 XT1引脚。 因此、为 F665x 器件上的 XT1功能配置引脚、而不是 F5359器件上的 XT1功能配置引脚(因为它具有专用的 XT1引脚)、需要使用这行代码。

    此致、

    James