你好
之前在使用149和lunchpad的时候晶振都用的比较小,现在在用5438a和6638用xt2作为时钟源(晶振接25M)调试程序的时候遇见一个非常麻烦的问题,下面叙述一下问题。
开始直接打开xt2(用的是ti例程打开的)当为时钟源的时候程序老是跑飞,如果单步运行然后执行程序有时候单片机工作正常,如果一开始就点击运行程序那么一定会跑飞。最开始我怀疑是程序的问题,后面检测很久发现不会是程序问题,然后发现经过初始化时钟程序的时候就有可能跑飞所以怀疑是晶振的问题。后来我用dco配置时钟,发现程序正常了,也不跑飞了,然后我单片机不断电直接将程序改为用xt2来当时钟源这时候发现程序正常了设置的时钟也对了,假如我给单片机断电然后又上电这时候刚刚可以输出波形,现在就不能输出波形了,如果再下载一次程序又会跑飞了。这就是我遇到的问题,不知道该怎么处理这个时钟问题了,请问有没有好一点的办法或者例程来解决这个问题啊?
user3917511:
TI没有提供MSP430F5438A的例程,事实上MSP430F5438和MSP430F5438A没有太大的差别,直接使用MSP430F5438的例程即可。“A”版本的MSP430F5438在晶圆上提供了更好的性能、功耗和MSP430F5xx家族所标称的所有功能。MSP430F5438和MSP430F5438A主要差异见下表:
我以前设置的代码,你可以看下
#include "msp430x54x.h"void main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT P11DIR = BIT2 + BIT1 + BIT0; // P11.2,1,0 to output direction P11SEL = BIT2 + BIT1 + BIT0; // P11.2 to output SMCLK, P11.1 // to output MCLK and P11.0 to // output ACLK P5SEL |= 0x0C; // Port select XT2 P7SEL |= 0x03; // Port select XT1 UCSCTL6 &= ~(XT1OFF + XT2OFF); // Set XT1 & XT2 On UCSCTL6 |= XCAP_3; // Internal load cap // Loop until XT1,XT2 & DCO stabilizes do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to // expected frequency UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2 while(1); // Loop in place}
tianhong wang:
回复 user3917511:
你好,谢谢你的答复啊,我之前按照例程写的程序,和你给出的程序差不多,只是没有像这样同时打开xt1和xt2,我只是单独打开了xt2,并且把最后那个while(1)语句去掉了,所以我现在在想的就是该怎么让系统在25M的时候稳定下来。。