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.

[参考译文] MSP432E401Y:同步 UART TX/RX

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1312438/msp432e401y-simultaneous-uart-tx-rx

器件型号:MSP432E401Y

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define RECLEN 4
int32_t rec[RECLEN] , ite = 0;
bool chkUARTcmd = false;
void UART6_IRQHandler(void)
{
uint32_t ui32Status;
ui32Status = MAP_UARTIntStatus(UART6_BASE, true);
MAP_UARTIntClear(UART6_BASE, ui32Status);
if(ui32Status & UART_INT_RX){
while(MAP_UARTCharsAvail(UART6_BASE) )
{
rec[ite++] = MAP_UARTCharGetNonBlocking(UART6_BASE);
if (RECLEN == ite)
{
chkUARTcmd = true;
ite = 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

您好、我们需要使用 MSP432E401Y UART 接收命令并发回对所接收指令的确认。 不过、我们已确定 UART RX 和 TX 共用同一个寄存器。 在提供的代码中、当写入 RX 缓冲区时、它会被 TX 进程干扰、从而导致 RX 缓冲区被错误地写入 TX 传输数据。  我们如何解决该问题?  我们应该如何实现同步 TX/RX?

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

    尊敬的 Jia-Yu:

     UART 具有独立的 TX 和 RX 缓冲器。 调用 MAP_UARTCharGetNonBlocking 时、应从 RX 缓冲区读取该内容。 当您调用 MAP_UARTCharPutNonBlocking 时、它会将数据放在 TX 缓冲区中。 但是、我建议您使用 MAP_UARTCharGet 而不是 MAP_UARTCharGetNonBlocking 、使用 MAP_UARTCharPut 而不是 MAP_UARTCharPutNonBlocking、以查看其是否产生差异。  

     还应记住、UART 是全双工的。 在当前代码中、处于 while 循环中、该循环不断发送数据、但只有在有 RX 中断时才会接收数据。 这可能是不同步创建的。 您应该考虑在 UART6_IRQHandler 中发送数据、同时接收数据。 请参考示例。