打印

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

[复制链接]
1168|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lowe0822|  楼主 | 2014-9-13 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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??????????

相关帖子

沙发
dirtwillfly| | 2014-9-14 17:10 | 只看该作者
默认情况下OFIFG是置位的,在程序中可以用软件清除,但是如果晶振不正常工作的话,硬件会自动从新置位OFIFG位,知道晶振稳定为止。

使用特权

评论回复
板凳
lowe0822|  楼主 | 2014-9-15 08:31 | 只看该作者
dirtwillfly 发表于 2014-9-14 17:10
默认情况下OFIFG是置位的,在程序中可以用软件清除,但是如果晶振不正常工作的话,硬件会自动从新置位OFIFG ...

我也是这样用的,晶振肯定也已经稳定,因为程序跳过延时并且16M波形和程序功能也都正常。但是就是我调试时将程序停止的时候,OFIFG一直为1.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

59

帖子

0

粉丝