TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3220SF UART回调模式异常

你好,我使用CC3220SFMOD模块,发现,在使用UART 读取串口数据时,会发生[ERROR] – FATAL ERROR: Async event timeout detected 事件,然后整个系统就卡死了。

下面是我的UART配置:

uartParams_1.baudRate = 3000000; //波特率
uartParams_1.writeMode=UART_MODE_CALLBACK; //写模式使用回调模式
uartParams_1.writeCallback = cs_write_call_back;//回调函数
uartParams_1.writeDataMode = UART_DATA_BINARY;
uartParams_1.readDataMode = UART_DATA_BINARY;
uartParams_1.dataLength = UART_LEN_8;
uartParams_1.stopBits = UART_STOP_ONE; 
uartParams_1.readMode = UART_MODE_CALLBACK;
uartParams_1.readEcho = UART_ECHO_OFF; 
uartParams_1.readCallback = cs_read_call_back; 
uartParams_1.parityType = UART_PAR_NONE;

此串口读取是在一个线程中进行,读与写都是回调模式,因为另一方不时会发送数据过来,有时CC3220SFMOD模块发起uart_read后另一方发送数据给模块但是模块无法读取到数据

Kevin Qiu1:

你在哪个例程中进行读取的
根据返回的错误,SimpleLinkFatalErrorEventHandler产生了错误
This handler gets called whenever a socket event is reportedby the NWP / Host driver. After this routine is called, the user'sapplication must restart the device in order to recover.

,

user6458813:

你好,我是按照uart2callback的方法,自己使用uart编写的。并且我在这次传输中使用了uart流控。并且注意到,当出现上述无法读取到数据的情况时,MOD模块中的uart_RTS引脚一直输出为高电平,意味着这个模块无法进行UART_Read操作。我想这应该是触发错误事件的原因

,

Kevin Qiu1:

看来是流控部分的问题,所以没有接收到数据

,

user6458813:

你好,我修改了程序添加了一些校验位避免多次使用Uart_read这个API函数之后单独测试这个模块没有问题。但是当整合进去自己的工程里面又出现了无法接收UART接口的数据。这里我简单说下,我开启了2个线程,一个是单独的WIFI-TCP发送线程,另一个就是接收TCP数据通过UART_Write发出,同时一有UARE_read数据,就打印在串口调试助手上。两个线程之间通过sem信号量分享CPU时间。发现只要开启WIFI-TCP发送,UART线程就只能进行UART_WRITE,而无法使用UART_read,观察RTS引脚一直为低电平。。。感觉问题更加棘手了

,

Kevin Qiu1:

单独测试正常,无法读取感觉像是线程调度的问题
单步调试看一下具体哪里出现异常

,

user6458813:

我单线程运行是没有问题的,我将UART发起读取、回调中都设置了打印。其结果都符合读(设置)-写(设置)-写(完成)-读(完成)的顺序,但是多线程就会出现当TCP发送时UART_read无法返回的问题,只打印出了写(设置)-读(设置)-写(完成),并且在这个过程中RTX没有拉高。

,

Kevin Qiu1:

多线程uart看下e2e.ti.com/…/ccs-cc3220sf-launchxl-how-to-read-write-uart-data-with-multi-thread

,

user6458813:

谢谢,在后续发现还是因为发起两次UART_read的原因,通过修改程序后运行成功了。

,

Kevin Qiu1:

好的

赞(0)
未经允许不得转载:TI中文支持网 » CC3220SF UART回调模式异常
分享到: 更多 (0)