找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5015|回复: 1
收起左侧

MSP-EXP430G2串口调试问题

[复制链接]
ID:70976 发表于 2014-12-24 13:25 | 显示全部楼层 |阅读模式
好久之前就弄过这个开发板了,感觉是没什么问题。串口实验也做过,不料今天再次使用,却出现这么严重的问题。
程序如下,
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,和刚才的错误数据一样。从新编译,烦了,这次全速吧,意外,

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

搞不明白在主循环不能单步,在中断却行?先记下这个问题,只能慢慢解决了!

回复

使用道具 举报

ID:81990 发表于 2015-6-4 09:52 | 显示全部楼层
很认真呀,加油欧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表