MSP430 串口UART通信 通过串口调式助手接收字符串乱码,接收单个字符正常

2019-03-24 11:58发布

本帖最后由 topszk 于 2013-12-28 12:26 编辑

用MSP430F149  写了个简单的串口通信,过程很简单,接收到电脑上的串口调试助手发来的数据之后,再通过串口给电脑回复一个固定的数据(一个字节)。发送采用查询的方式,接收采用中断的方式,全部代码如下:
  1. #include <msp430x14x.h>

  2. /////////串口发送函数,一次发送一个字节///////
  3. void send_byte(unsigned char ubyte){
  4.   while(!(IFG1&UTXIFG0));
  5.   TXBUF0=ubyte;
  6. }
  7. //////////////////////////////////////////////

  8. void main(){
  9.   WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
  10.   
  11.   /////////////////////时钟初始化///////////////////////
  12.   BCSCTL1 &= ~ XT2OFF;
  13.   do{
  14.     IFG1 &= ~OFIFG;
  15.     for(unsigned char i=0xFF;i>0;i--);
  16.   }while(IFG1&OFIFG);
  17.   BCSCTL2|=SELS+SELM1;
  18.   //////////////////////////////////////////////////////
  19.   
  20.   ////串口初始化 9600 N 8 1 ACLK 发送采用查询方式,接收采用中断方式//////
  21.   UCTL0 |= SWRST;
  22.   P3SEL=0x30;
  23.   ME1|=UTXE0+URXE0;
  24.   UCTL0|=CHAR;
  25.   UTCTL0|=SSEL0;
  26.   UBR00=0x03;
  27.   UBR10=0x00;
  28.   UMCTL0=0x4A;
  29.   UCTL0 &= ~SWRST;
  30.   IE1|=URXIE0;
  31.   ///////////////////////////////////////////////////////////////////////
  32.   
  33.   while(1){
  34.     _BIS_SR(LPM3_bits+GIE);
  35.   }
  36.   
  37. }

  38. #pragma vector=USART0RX_VECTOR
  39. __interrupt void uart_rx(void){
  40.   send_byte('A');
  41. }

复制代码
现在遇到的问题是:用串口调试助手,发送一个字符给单片机,可以正常运行,单片机进入中断处理程序,给上位机回复了一个固定的字符 'A',并通过串口调试助手的界面显示出来。但如果用助手发送一个字符串给单片机,那么单片机的工作将不正常了,请老师看截图:

1.gif

2.gif

3.gif



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
shower.xu
1楼-- · 2019-03-24 14:48
 精彩回答 2  元偷偷看……
mengyu139
2楼-- · 2019-03-24 15:21
< :TI_MSP430_内容页_SA7 --> 串口的接收发送需要时间的,我用串口传输数据来代替仿真器的时候,发现不能让串口传送数据太快,否则会不准,
所以你试试楼上的方法,先接收完,再返回。

然后检查一下你的波特率 的配置,尤其是调整位
wstt
3楼-- · 2019-03-24 19:35
读一下接受缓冲或者将接受中断手动清零一下。

一周热门 更多>

相关问题

    相关文章