工具/软件:Code Composer Studio 、SDK 4_30_00_54
您好!
我使用 UART2模块在 RS485接口上工作。 作为 RS485驱动器、我使用 TD331S485H-E 微电路。 微电路有一个控制引脚- CON (程序中为 CONFIG_GPIO_485_DIR)、如果它为1、则 RX 工作、如果为0、则 TX 工作。

程序代码如下:
//…
/*在回调读取模式下创建 UART */
UART2_Params_init (& uartParams);
uartParams.readMode = UART2_Mode_callback;
uartParams.readCallback = callbackFxnR;
uartParams.baudrate = 115200;
UART = UART2_open (CONFIG_UART2_0和 uartParams);
if (UART == NULL){
/* UART2_open ()失败*/
while (1);
}
//
/*循环永久回显*/
while (1){
numBytesRead = 0;
/*传递字节为空,因为它未在本示例中使用*/
GPIO_WRITE (CONFIG_GPIO_485_DIR、1);
STATUS = UART2_READ (UART、&输入[0]、10、NULL);
如果(状态! = UART2_STATUS_SUCCESS){
/* UART2_READ ()失败*/
while (1);
}
/*在读取回调执行之前不要写入*/
SEM_WAIT (& SEM);
if (numBytesRad>0){
//... 用数据填充255字节输入缓冲区
GPIO_WRITE (CONFIG_GPIO_485_DIR、0);
STATUS = UART2_WRITE (UART、& INPUT [0]、255和 numBytesWritten);
如果(状态! = UART2_STATUS_SUCCESS){
/* UART2_WRITE ()失败*/
while (1);
}
}
}
/*
*==== callbackFxnR ===
*/
void callbackFxnR (UART2_Handle handle、void * buffer、size_t count、
void * userArg, int_fast16_t status)
{
如果(状态! = UART2_STATUS_SUCCESS){
/* UART2_READ ()中发生 RX 错误*/
while (1);
}
numBytesRead = count;
SEM_post (& SEM);
}
在回调模式下读取 UART、在阻塞模式下写入。
问题如下:执行 UART2_WRITE 后、程序进入 while (1)循环的开头、CON 输入切换为使用命令"GPIO_WRITE (CONFIG_GPIO_485_DIR、1)"接收数据、我们看到 UART 实际传输的数据约为191字节、而不是255字节。 结果是、在传输完所有数据之前执行从函数退出。 如果在执行 UART2_WRITE 后出现延迟、例如睡眠(2)、则将传输所有数据。 从这个结论中、我认为在传输所有数据之前执行 UART2_WRITE 返回。
如何解决此问题?
P.S. 如果在回调模式下使用写入、结果是相同的-在传输所有数据之前执行回调。
谢谢!