新手求助:关于msp430晶振不起振的问题
第一次学单片机,msp430外部采用两个晶振,第一个是32768晶振 第二个是16m的晶振。在电路板上电后测的32768晶振管脚输出一个32768hz的正弦信号,而16m管脚上什么也没有啊,这样能不能判定该16m的晶振没有起振?如果不起振那是什么原因呢?附程序代码:
#include"msp430x26x.h"
unsigned char i;
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //stop the watch dog
P5DIR|=0X38; // seting the pin direction
P5SEL|=0X38; //
BCSCTL1&=~XT2OFF; // enable xt2
// BCSCTL1|=XTS;
do
{
IFG1&=~OFIFG;
for(i=0xFF;i>0;i--);
} // stable time delay
while((IFG1&OFIFG)!=0);
BCSCTL2 |= SELM1; // MACLK=xt2
BCSCTL2 |= SELS; // SAclk= xt2
while(1);
}
程序下载后 发现xt2 晶振一脚的输出为600mv的直流电压,而我用的电容大小为22pf。为什么还不起振呢? 看看寄存器的配置,有的系列之间寄存器不一样 我用的249,同样的问题,但是用手碰碰某些引脚就起振了,不明原因。。。不知LZ找到解答没了 不知楼主解决问题了没有,我也遇到这个问题挺纠结的啊。。。。。 我有块F2618的板子 8M晶振也起振不了 郁闷死了 想搞个高速模式都没办法,应该是晶振坏了吧 刚开始用时我也遇到LZ的问题了,后来参考了一些资料,原来外部晶起振是需要时间的,430本身有检测起振的检测位,在初始化时等待起振就可以。以下是我以前写的149一段初始化程序,里面含外部晶振起振等待代码,可以参考一下.
//=================================
void init(void)
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
DCOCTL=DCO0+DCO1+DCO2; //最大DCO
BCSCTL1=RSEL0+RSEL1+RSEL2; //最大RSEL,4-4.9M
//---------外部晶震起震------------
/*BCSCTL1&=~XT2OFF; //开启外部振荡器XT2
do
{
IFG1&=~OFIFG;
delay(1);
}
while((IFG1&OFIFG)); //检测外部震荡器是否正常
BCSCTL2|=SELM_2;*/
//---------------------------------
//BCSCTL2|=SELS; //SMCLK=XT2CLK
P2OUT=0xff;
P2DIR=0xff;
P3OUT=0xff;
P3DIR=0xff;
P5DIR=0x90;
P5SEL=0x10;
} 问题可能是出在IFG1&=~OFIFG;后面的延时语句问题,我用的delay(1)大概是延时1ms。
void delay(uint k) //4-5M频率的1MS延时函数
{
uint i,j;
for(i=k;i>0;i--){
for(j=1200;j>0;j--)
{;}}
} 应该是硬件上的问题。我也遇到过换了一块板子就好用了。。。 同意7楼的说法,应该是电路的设计问题,楼主对照别人的板子对照检查一下
还有就是16M的晶振不适合MSP430,不稳定 yun,16M的只有1xx和早期的4xx不能用,其他型号都能有,哪有啥不问题的情况.
换晶体和电容.稍微注意下晶体周围的地,干净点. 检查焊接是否可靠,上次我焊接430时候,用了焊锡油,很好用,焊好后也发现这问题,搞了好久才发现,焊锡油在管脚很近时会导电,晕…………用酒精洗了洗,搞定…… 这问题我也遇到过。方法马克一下。。。 检查下电容
页:
[1]