Other Parts Discussed in Thread: MSP430F5359
大家好、我正在尝试将 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.
Other Parts Discussed in Thread: MSP430F5359
大家好、我正在尝试将 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