TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f149的串口通信

利用usart0,通过rs232,与pc通信,接收pc发送的命令,只有一个字符时,可以正常接收,当多个字符时,接收出错,有相关例子可供参考一下吗?谢谢

Ling Zhu2:

  串口每次只能接收并处理一个字符。如果有多个字符,处理方法是开个缓存,全部接收下来再慢慢处理。以下代码供参考

#include "include.h"void Uart_Init()//串口初始化9600波特率 8-N-1
{U0CTL |= CHAR;//UART Mode,8-bits,1 stop bit,no parityU0TCTL |= SSEL0;//Source select-ACLK//波特率计算9600U0BR1 = 0x00;U0BR0 = 0x03;U0MCTL = 0x4A;UCTL0 &= ~SWRST;// Initialize USART state machineME1 |= UTXE0 + URXE0;//使能串口发送和接收IE1 |= URXIE0;//开启串口接收中断使能P3SEL |= BIT4 + BIT5;//开启IO口第二功能(作为串口收发端)
}/*串口接收中断子程序*/
#pragma vector = USART0RX_VECTOR
__interrupt void UART_RX()
{_DINT();unsigned char tp_rx;tp_rx = U0RXBUF;if(!rx_finish)//如果一帧没接收完,继续接收{if(rx_enable)//如果接收允许{buf_gps[count_gps] = tp_rx; //接收if(count_gps==4) get_gpsmode(); //接收到5个数据的时候,check modeif(tp_rx=='*'){ rx_enable = 0; rx_finish = 1;} //接收到'*'的时候,一帧结束else count_gps++;}else{if(tp_rx=='$'){ rx_enable = 1; count_gps = 0; rmc_gga = 0;}//如果接收到的字符是'$',则表示一帧的开始,使能串口接收}}if(tp_rx=='#') upload_enable = 1; //收到'#',准备上传记录_EINT();
}void UART_TX(uchar tp_tx)
{IE1 &= ~URXIE0;//关闭串口接收中断使能U0TXBUF = tp_tx;//发送数据while((IFG1 & UTXIFG0)==0);//等待发送完成IE1 |= URXIE0;//开启串口接收中断使能
}

Maka Luo:

参考TI MSPWARE例程先跑通UART功能,跑通例程后在调试和PC通信。

灰小子:

接收一个或几个字符后,如果有复杂的操作,可能影响到了串口的时序。建议采用2楼的方法

赞(0)
未经允许不得转载:TI中文支持网 » msp430f149的串口通信
分享到: 更多 (0)