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.

[参考译文] MSP430F5438A:UART 未接收全部数据。

Guru**** 2583445 points
Other Parts Discussed in Thread: MSP430F5438A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1043480/msp430f5438a-uart-is-not-receiving-whole-data

器件型号:MSP430F5438A

您好!

我将 MSP430F5438A 微控制器用于我的应用。 我将 UCA0xxx 模块用于 UART。 因此、我想将505个十六进制值从 GUI 传输到微控制器。

但事情是、我只能接收前60个字节。 之后、我的代码停留在  while (!(UCA0IFG & UCRXIFG));loop。 因此、我无法接收完整字节。

我在中断模式下使用 UART、因此每次发送值时都会生成中断。 实际上、我作为数据包发送的整个字节。 我的数据包格式如下所示。

0x23 (标头) 0x01 0xF9 (长度- 2字节) 0xC4 (命令 ID)(... 505十六进制值...) 0x61 (CRC 校验和)。

因此、当我传输这些值时、我只能接收前60个字节、代码在  while (!(UCA0IFG & UCRXIFG))挂起;

SINT32 UART_getchar (空)

新特8人权中心;
while (!(UCA0IFG & UCRXIFG));        <<<< 接收到前60个字节后、代码在此处挂起
CHR = UCA0RXBUF;
返回 CHR;

#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)

uint8 u8ReadVal = 0;
uint32 u32LoopVar=0、u32Index;
uint16 u16PacketLen;

switch (__evo_in_range (UCA0IV、4))

情况0:中断;
案例2:
_disable_interrupt ();

操作

u8ReadVal = UCA0RXBUF;//UART_getchar ();

}while (PKT_start!= u8ReadVal);

/*商店标题*/
gau8Rad[u32LoopVar++]= u8ReadVal;
/*从 UART 读取帧的长度*/
u8ReadVal = UART_getchar ();
/*商店长度*/
gau8Rad[u32LoopVar++]= u8ReadVal;

u16PacketLen =(0xFF & u8ReadVal);

u8ReadVal = UART_getchar ();

gau8Rad[u32LoopVar++]= u8ReadVal;

u16PacketLen |=((0xFF & u8ReadVal)<< 8u);

/*存储 REST */
for (u32Index = u32LoopVar;u32Index < u16PacketLen;u32Index++)

u8ReadVal = UART_getchar ();
/*商店长度*/
gau8Rad[u32Index]= u8ReadVal;

u8Received = 1;
中断;
案例4:中断;
默认值:break;

此代码适用于我发送的其他数据包。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您设置的 UART 带隙是多少?   

    您说其他数据包都可以。 其他数据包是否长于60字节? 您是否认为此问题与数据包的长度超过60字节有关?

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,现金

    我的 UART 波特率为115200。

    不、我的另一个数据包不超过60字节。

    我不知道问题是它的字节数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您会尝试使用不同的波特率吗?

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这个问题被人所困扰。

    问题是我正在使用 Realterm 工具传输数据、但使用 GUI 时却是如此  

    我能够正确地获取数据。

    谢谢。