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.
工具/软件:Code Composer Studio
您好!
我遇到的问题是、在接收到的数据字符串中、MSP430FR5994会经常(但不是始终)忽略传入字符串的第一个字节(完全不接收)。 当我使用一个外部"串行端口监控器"软件时、它显示所有传入字节都是正确的。 因此问题必须在 MSP430FR5994中断函数中的某个位置、开关会忽略第一个接收到的字节。 所有其它字节都被很好地接收。 只要第一个字节是地址字节、我不知道是否接收到第一个字节、或者如果没有接收到第一个字节、就不可能说"总是忽略第一个字节、然后用第二个字节开始传输"、正如我在某些论坛中所读的那样。
如需了解相关信息、MSP430FR5994发送数据字符串的效果良好。 我将 P54和 P55与115200bps 用于此 UART。
void initUART2 (void) //UART_2
{ UCA2CTLW0 = UCSWRST;
UCA2CTLW0 |= UCSSEL_SMCLK;
UCA2BR0=2;
UCA2BR1 = 0x00;
UCA2MCTLW |= UCOS16 | UCBRF_2 | 0x0300;
UCA2CTLW0 &=~UCSWRST;
UCA2IE |= UCRXIE;
Received_bytes=0;
unsigned int i;
对于(i=0 <LENGHT_BUFFER;i++)
{recbuf[i]=0x00;}
}
#pragma vector=USCI_A2_vector
_interrupt void usart2_Rx (void)
{ recbuf[received_bytes]= UCA2RXBUF;
Received_bytes+=1;
}
int main (空)
{ ...
initPorts();
initUART2();
(笑声)
while (1)
{... //使用 recbuf[]执行某些操作
如果(没有其他可做的事情)
{LPM1;}
}
}
为了安全地接收 MSP430FR5994的所有字节、我应该更改什么?
非常感谢你的帮助。
非常感谢您提供此信息。
很遗憾、我无法使用9600对其进行测试、因为我们的传感器只能在115200bps 下工作。
2. LPM 模式似乎是问题的根源。 当我移除行"LPM1;"时、UART 再次正常工作。 未检测到丢失的第一个字节、并且所有字节均已正确接收。
有人知道使用 LPM1中的 UART 的解决方案吗? 或者、我们必须找到另一个解决方法来以不同的方式解决这个问题。
非常感谢。
您好!
以下是一些权变措施:
1.建立一个自定义 UART 协议来将第一个字节定义为虚拟数据、这样接收器就可以将其丢弃。
2.在接收 UART 数据之前、先在 UART 启动边沿前10~20us 发送 GPIO 信号、以从 LPM1中唤醒。
谢谢、
Lixin
非常感谢您的回答。
在我的情况下很难、因为有时会接收到第一个字节、有时不会接收。 此外、传感器协议由制造商确定。
2.我将尝试寻找一个具有第二个 GPIO 中断的解决方案来退出 LPM1模式。 这应该是有可能的。