大家好、我正在尝试将 MSP430f5359用于我的项目、但晶体振荡器无法正常工作、我从 MSP430f5359的 Resource Explorer 下载了代码以进行测试、但它仍然无法正常工作。 此处连接的是晶体振荡器的电路。
我出了什么问题?
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用于我的项目、但晶体振荡器无法正常工作、我从 MSP430f5359的 Resource Explorer 下载了代码以进行测试、但它仍然无法正常工作。 此处连接的是晶体振荡器的电路。
我出了什么问题?
您好、Kary、
您是否正在使用定制板? 如果是、您是否为您为 XT1选择的32.768kHz 晶体提供了正确的有效负载电容? 请勿在晶体上使用示波器探针测量晶体。 相反、请使用其中一个 XT1代码示例通过 ACLK 引脚输出时钟。
您可以在《MSP430 32kHz 晶体振荡 器》应用手册中找到有关使用32kHz 外部晶体的更多信息。 此外、我建议在论坛上的此处搜索答案。 其他人也有同样的问题、因此将提供有关检查和修复内容的宝贵建议。
此致、
James
[引用 user="kary"]由于 msp430f5359没有定制板 ,我自己设计了。
在这里、定制电路板指的是除我们的开发板或目标板之外的任何内容。 现在、我知道您正在使用您自己的定制板。
我看到 RTC 代码示例使用晶体的内部负载电容器。 您是否也使用了外部负载电容器(我看到它们在原理图中是 DNP、但需要检查)? 您是否按照 SLAA322中第2.1节中的公式正确计算了有效负载电容? 您是否遵循了 SLAA322中的布局指南? 在晶体下方布线等物体可能会导致晶体压降。
当您说"它不起作用"时、您能更具体吗? 代码是否卡在特定位置、例如代码检查 XT1振荡器故障标志的位置?
此致、
James
我尝试了以下代码:
#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
}
问题可能出在哪呢? 可以解决这个问题吗?
刚发运 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
[引用 USER="Kary"]是的、它确实通过了振荡器故障、我也将晶体放置在 Q1中。
很棒!
[报价用户="Kary"]我即将使用 xtal 为我的设备使用 PWM。 您能为我提供任何相关代码吗?
请搜索论坛或为此问题创建新帖子。
[引用用户="Kary"]
P5SEL |= BIT4+BIT5;//选择 XT1
[/报价]
对于 MSP430F665x 器件、它们没有像 MSP430F5359那样的专用 XT1引脚。 因此、为 F665x 器件上的 XT1功能配置引脚、而不是 F5359器件上的 XT1功能配置引脚(因为它具有专用的 XT1引脚)、需要使用这行代码。
此致、
James