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.
#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; } } } } void UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count) { while(ui32Count--) { MAP_UARTCharPutNonBlocking(UART6_BASE, *pui8Buffer++); } } int main(void) { initUART(); //Initialize UART settings, content omitted. while(1) { if(chkUARTcmd){ UARTSend((uint8_t *)"ABCDEFGH", 8); chkUARTcmd = false; } } }
您好、我们需要使用 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 中发送数据、同时接收数据。 请参考示例。