[讨论] 关于MSP430F5529单片机的串口问题

火辣西米秀   2020-9-5 17:12 楼主

要疯了,,现在的问题是,使用的串口调试助手来调试的,开发环境从IAR低版本到高版本以及CCS,程序是官方程序和自己编写的,以及网友的。板子是标准板,还有个自己的板子。USB转串口线两条。但是结果都一样。
主要是使用串口调试助手发送字符串,然后接收相同的。结果是,如果我发较长的字符串,前四位会丢失。单个发送字符,根本没有任何返回信息。我简直要疯了,真的不知道原因了,期待大神拯救啊
代码如下:
#include

int main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // Put state machine in reset
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
P4OUT=0;
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
interrupt void USCI_A0_ISR(void)
{
switch(even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character

break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}

回复评论 (2)

显然是程序编制有错,先检查串口设置,再检查串口接收和转发程序,从每次一个字节开始调试,多字节需要采取定长、无信号时间或基于协议来判断。

上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2020-9-5 18:18

想想5529刚出炉的时候自己也是这么折腾的,这么多年过去了,代码基本看不下去了,给个思路:来个从简到繁,从硬件调到到软硬结合;先将收发短接,用串口调试助手类软件测试转换器是否正常(按你的描述,这一步可以不用,你的硬件应该是正常的);其次采用最简单的先发送再收发:先定时发送单个字符,调试成功后在尝试向电脑发送字符串,发送正常后,开始测试单个字符接收并转发,进一步测试整个字符串收发,慢慢来!最后,才是开始真正意义上的收发通讯

点赞  2020-9-5 23:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复