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

关于MSP430串口通信UART多字节收发的问题

我使用的是EXP430F5529,我想实现的功能是蓝牙与板子之间的汉字传输控制。

手机通过蓝牙已经可以和430正常通信。但是只能实现1个字节的通信。

一个汉字有3个字节,每次从UCA1RXBUF读取到的都是最后一个字节。

我知道大概的思路是:接收到一个字符,先存储在数组里,依次接收三个。

只是我不知道应该怎么区分每个字符,因为当触发接收中断以后,UCA1RXBUF里面就只有最后一个字节了。

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // 中断向量 0 – 无中断
case 2: // 中断向量 2 – 接收中断
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF = UCA1RXBUF;
data_rx = UCA1RXBUF;
break;
case 4:break; // 中断向量 4 – 发送中断
default: break;
}
}

我用的是Code Composer Studio 6.0.0,目前是初学者。

希望有了解的前辈给我详细一点的解答,谢谢啦。

灰小子:

或者你可以设计一个协议,设置一个特定的字符。当下位机接收到这个特定的字符的时候,后续的三个字符就是一个汉字

,

Maka Luo:

BUF每次满了后都会产生中断,你能读取BUF中的数据。

如果数据出现覆盖是,是你的程序没有及时响应UART中断。

,

zhifang yang1:

1 汉字或者英文ASCII对于 UART来说没有区别,所以你说的“UCA1RXBUF里面就只有最后一个字节了“ 这个现象应该是因为之前的传送的字符没有即时取走造成的。

比如115200 波特率的uart传输,约86us一个字节,如果你整个程序中存在任何执行时间超过86us的中断程序,就会造成UART RX丢数据。

2 中断程序里尽量不要用while 循环,会造成如上所说的中断执行时间过长的问题。

while (!(UCA1IFG&UCTXIFG));UCA1TXBUF = UCA1RXBUF;

这一句的最长执行时间就已经接近86us了。。。

建议:

case 2: // 中断向量 2 - 接收中断
rxbuff[ rxcount ] = UCA1RXBUF;
rxcount ++ ;
if((rxcount == 3 ) || (UCA1RXBUF == 0x0D ) )
{rxflag = 1;
}

中断程序里只缓存数据,当检测到特定字符或者到一定数量之后,竖一个flag,然后根据这个flag 在主程序里处理 buff的数据。 这样不易造成数据丢失。

如果你程序中不可避免的有超过86us的中断程序,那么建议用DMA模块,直接将UART RX缓存到内存固定区域。

,

Mathilda Chen:

zhifang yang1 说:

1 汉字或者英文ASCII对于 UART来说没有区别,所以你说的“UCA1RXBUF里面就只有最后一个字节了“ 这个现象应该是因为之前的传送的字符没有即时取走造成的。

比如115200 波特率的uart传输,约86us一个字节,如果你整个程序中存在任何执行时间超过86us的中断程序,就会造成UART RX丢数据。

2 中断程序里尽量不要用while 循环,会造成如上所说的中断执行时间过长的问题。

while (!(UCA1IFG&UCTXIFG));UCA1TXBUF = UCA1RXBUF;

这一句的最长执行时间就已经接近86us了。。。

建议:

case 2: // 中断向量 2 - 接收中断
rxbuff[ rxcount ] = UCA1RXBUF;
rxcount ++ ;
if((rxcount == 3 ) || (UCA1RXBUF == 0x0D ) )
{rxflag = 1;
}

中断程序里只缓存数据,当检测到特定字符或者到一定数量之后,竖一个flag,然后根据这个flag 在主程序里处理 buff的数据。 这样不易造成数据丢失。

如果你程序中不可避免的有超过86us的中断程序,那么建议用DMA模块,直接将UART RX缓存到内存固定区域。

,

li dong:

我发现TI自己的UART_READ, 光串口中断的处理时间就花费挺大。。。

波特率高的话就实时不了了

,

Xu Yuchen:

您好,我也是相同的问题,总共需要接收9组字节数组,但是每次都只能接收最后一个。我的中断程序里面没有while循环,请问这是什么原因呢

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430串口通信UART多字节收发的问题
分享到: 更多 (0)