1264|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP-EXP430G2串口调试问题 [复制链接]

好久之前就弄过这个开发板了,感觉是没什么问题。串口实验也做过,不料今天再次使用,却出现这么严重的问题。
程序如下,
uchar txbuf[6]={0x01,0x02,0x03,0x04,0x05,0x06};
void Uart_Init(void)
{
  P1DIR |= BIT2;
  P1DIR &=~BIT1;
  P1SEL |= BIT1+BIT2;
  P1SEL2|=BIT1+BIT2;
  //UCA0CTL0|=UCMSB;
  UCA0CTL1|=UCSWRST;
  UCA0CTL1|=UCSSEL_2;
  //UCA0STAT|=UCLISTEN;
  UCA0BR0 = 833%256;
  UCA0BR1 = 833/256;
  UCA0MCTL= UCBRS1;
  UCA0CTL1&=~UCSWRST;
  IE2|=UCA0RXIE;
}
int main( void )
{
  uchar i=0;
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1=CALBC1_16MHZ;
  BCSCTL2|=DIVS0;
  DCOCTL=CALDCO_16MHZ;
  Uart_Init();
  _EINT();
  while(1)
  {
    UCA0TXBUF=txbuf;
    i++;
    if(i==6)i=0;
    while(!(IFG2&UCA0TXIFG));
    IFG2&=~UCA0TXIFG;
  }
}
感觉网上大都是这样程序,官方例程也不过如此!不知怎么,串口助手总是收到错误的数据。

当然,这是单步调试的结果,数组的两次循环。最后基本稳定的是D0 40 A0 20 D0 41(对应上面的数组)。
感觉好像波特率不对,用其他频率来产生波特率吧,一样的结果。

好吧,测试一下接收吧,
接收中断如下
#pragma vector=USCIAB0RX_VECTOR
__interrupt void RX_ISP(void)
{
  UCA0TXBUF=UCA0RXBUF;
  IFG2&=~UCA0RXIFG;
}
接收中断打个断点吧,好家伙,收到之后发出去竟然没有问题,

这不是坑嘛,波特率是对的啊,接收再发送没有问题。继续改接收中断服务函数

#pragma vector=USCIAB0RX_VECTOR
__interrupt void RX_ISP(void)
{
  UCA0TXBUF=0x03;
  IFG2&=~UCA0RXIFG;
}
接收还是没有问题,把这个放到主函数运行吧,改主循环
while(1)
  {
    UCA0TXBUF=0x03;
    i++;
    if(i==6)i=0;
    while(!(IFG2&UCA0TXIFG));
    IFG2&=~UCA0TXIFG;
  }
继续单步,串口助手收到A0,和刚才的错误数据一样。从新编译,烦了,这次全速吧,意外,

结果居然是对的,好吧,在试试全速->单步->全速,第一个全速可以接收正确的数据,然后单步数据出错,在全速还是错误的数据。还是试试接收中断来个单步,数据没有问题,

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表