Thread 中讨论的其他器件:SysConfig
我使用的是 simpleLink SDK 版本4.10
我在非阻塞模式下使用的 UART 端口初始化如下:
UART_Handle InitTerm (void)
{
UART_Params uartParams;
int32_t semStatus;
/*创建信标*/
semStatus = SEM_INIT (&SEM、0、0);
if (semStatus!= 0){
/*创建信标时出错*/
while (1);
}
UART_INIT();
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readMode = UART_MODE_CALLACK;
uartParams.readTimeout = 1000;
uartParams.readCallback = callbackFxn;
uartParams.baudrate = 115200;
uartHandle = UART_open (CONFIG_UART_0、uartParams);
IF (uartHandle)
GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
/*从 LPDS 依赖项中删除 UART 接收*/
UART_CONTROL (uartHandle、UART_CMD_RXDISABLE、空);
return (uartHandle);
}
回调函数如下定义:
void callbackFxn (UART_Handle handle、void * buffer、size_t count、
void * userArg, int_fast16_t status)
{
if (status!= UART_STATUS_SUCCESS){
/* UART2_READ()中出现 RX 错误*/
while (1);
}
numBytesRead = count;
SEM_post (&SEM);
}
我正在尝试使用如下所示的读取函数接收数据:
int GetRawCmd (char * pcBuffer、unsigned int uiBufLen)
{
char cChar;
buffint index = 0;
uint32_t status = UART_STATUS_SUCCESS;
while (1){
numBytesRead = 0;
/*对 bytesRead 传递 NULL,因为它未在本示例中使用*/
状态= UART_READ (uartHandle、&cChar、1);
display_printf (display、0、0、"out of ready\r\n");
if (status!= UART_STATUS_SUCCESS){
/* UART_READ()失败*/
display_printf (display、0、0、"read failed\r\n");
while (1);
}
display_printf (display、0、0、"正在等待回叫\r\n);
/*在执行读回调之前不要写入*/
SEM_WAIT (SEM);
display_printf (display、0、0、"callback recv\r\n");
if ((cChar ='\r')||(cChar ='\n')){
pcBuffer[buffindex]='\0';
中断;
}否则{
pcBuffer[buffindex]= cChar;
buffindex++;
}
}
返回 buffindex;
}
我正在使用第二个 UART 端口来执行调试语句。 将显示以下调试语句:
读数不正确
正在等待回调
未接收到进一步的调试语句。 这意味着它一直在等待在回调函数中释放的信标。 即使 我从 PC 上的 Tera Term 发送了字符、也不会接收回调、我正在使用 USB 转串行转换器将第二个 UART 端口连接到 PC。 如果我使用阻塞 UART 模式、此设置功能正常。
请帮助进行调试、以了解为何未收到回调函数。