430F2x 晶振错误标志一直置位

2019-08-02 21:00发布

本帖最后由 lowe0822 于 2014-9-15 08:52 编辑

20140915修改新发现。
430f2619

外接XT2 16M  

void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

_BIS_SR(OSCOFF+SCO0);//将XT1和DCO关掉,因为这些晶振不接开着也会产生OFIFG=1;

P5DIR |= 0x10; P5SEL |= 0x10; //IO管脚配置为MCLK输出,查看16M

BCSCTL1 &= ~XT2OFF;//开启XT2

do
{
IFG1 &= ~OFIFG; //清晶振错误标志
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG)); //等待晶振无错误,稳定。

BCSCTL2 |= SELM_2; // MCLK= XT2
}

void main()
{
for(i=0;i<10000;i++)
{
nop();
}
tx_char(0x01);
tx_char(0x02);
tx_char(0x03);
tx_char(0x04);
}
main程序能够正常工作,IO管脚输出波形也很好,为16M,但是调试时将程序打断点停下,发现OFIFG=1。
单步执行,初始化后执行无数个NOP都不会发生OFIFG=1,只有当发送串口时大概发送个十个左右会出现OFIFG=1。
我的XT2肯定是没问题的,OFIFG也不会因为XT1,DCO未接从而置1。

给我的感觉是好像串口导致的,波特率应该是对的,波特率设置  R1=0x06 R0=0x82 MCL=0x0c ,因为接收端打印无错误。串口开RX中断未开TX中断。

难道因为波特率时钟精度不够导致的判断为OFIFG=1??????????

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
dirtwillfly
2019-08-02 21:58
默认情况下OFIFG是置位的,在程序中可以用软件清除,但是如果晶振不正常工作的话,硬件会自动从新置位OFIFG位,知道晶振稳定为止。

一周热门 更多>