您好!
我将 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;
}
}
此代码适用于我发送的其他数据包。