This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教,这个UART通信程序错在哪?



#include <msp430x14x.h>
#include <string.h>

int main (void)
{
  WDTCTL=WDTPW+WDTHOLD;        //关狗
  P3SEL|=BIT4+BIT5;            //设置P3.4--TX、P3.5--RX
  ME1|=UTXE0+URXE0;            //开启发送数据使能、接收数据使能
  U0TCTL|=SSEL0;               //设置BRCLK时钟源:ACLK
  U0CTL|=CHAR;                 //设置数据长度:8位
  U0BR0=0x03;                  //设置波特率9600
  U0BR1=0x00;                  //设置波特率9600
  U0MCTL=0x4A;                 //设置波特率9600
  U0CTL&=~SWRST;               //清除复位状态
  IE1|=URXIE0;                 //开启接收数据中断使能
  _EINT();
  LPM3;                        //进入休眠,等待接收中断
}

#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  static char a[50],i=0,b[]="abcd";
  a[i]=U0RXBUF;            
  if((a[i]=='\0')&&(strcmp(a,b)==0))
  {
    P3DIR|=BIT0;     
    P3OUT&=~BIT0;       //接蜂鸣器-响
    i=0;
  }
  i++;
}

我用串口调试发送abcd,为什么蜂鸣器不会响?问题出在哪?

  • 楼主,

      你可以现在中断程序里面设置个断点,看看UART的接收中断能不能进入,从而来确定你的UART是否配置正确。如果可以,那就继续单步仿真,看看你设置的比较字符串的逻辑对不对了。如果不能进中断,首先查查串口通信的各个特征值是否和你上位机的设置一样,波特率,数据位,停止位,校验位之类的。一步步检查看下,这个程序还是挺简单的。

    谢谢

  • Ken Wang 说:

    楼主,

      你可以现在中断程序里面设置个断点,看看UART的接收中���能不能进入,从而来确定你的UART是否配置正确。如果可以,那就继续单步仿真,看看你设置的比较字符串的逻辑对不对了。如果不能进中断,首先查查串口通信的各个特征值是否和你上位机的设置一样,波特率,数据位,停止位,校验位之类的。一步步检查看下,这个程序还是挺简单的。

    谢谢

    没有仿真器。。。。

  • 大哥,

    你时钟呢?

    你如何设置的时钟呢?你是用32768的低频时钟还是高频时钟作为UART的时钟信号呢?

    把你的原理图贴出来吧

  • 你好,

    建议你购买Ti launchpad demo 板,便宜而且自带仿真器。

  • kqian0327 说:

    大哥,

    你时钟呢?

    你如何设置的时钟呢?你是用32768的低频时���还是高频时钟作为UART的时钟信号呢?

    把你的原理图贴出来吧

    32768hz,估计是电脑端的串口调试助手发送文本不带空字符,我把程序改成不检测空字符就可以接收

  • 好吧,

    如果我们有帮到你解决问题,请结掉该贴,谢谢。