CH573 EVT板测试串口遇到的奇怪问题

如图所指示,有些不理解;使用的是透传例程,因为我做的透传模块需要接受AT指令并解析,所以进行指令解析测试;利用了串口超时中断对数据包进行处理;另外串口超时机制也是很疑惑,如果我不用4字节触发,直接屏蔽case UART_II_RECV_RDY的话,超时也无法触发了,不屏蔽的话又会产生一个数据包不完整的无效中断,所以我将程序改成了第二章图的样子;这两张图是我现在的测试代码,出现了图1描述的奇怪现象。。。;请哪位大神帮忙看下,搞了半天了没搞明白串口机制j_0065.gif,感谢;图中所说的发送“AT+TEST”是指发送的“AT+TEST\r\n”



2022.08.12更新:熬夜到3点钟算是有点理解串口工作机制了:超时中断必须以触发中断为前提,如果触发设置为4字节,只发送四字节数据是会产生触发中断,也就是数据有效中断,但不会触发超时中断,发送5个字节产生一次数据有效中断和一次超时中断,这样我发送一个20字节的数据要触发5次数据有效中断。。。,每一次中断都会置位串口接收标志,也就是在原SDK中执行了5次TMOS UART_TO_BLE_SEND_EVT。虽然有些理解了,但还是有一个问题,我们一直应用的AT指令的问题,串口发送来的AT指令,我需要做解析才能确定是否透传或者设置蓝牙本身工作状态,所以我将触发字节设置为1,一直接收数据,判断接收到\r\n才认为接收完成,判断数据是指令还是透传数据,是指令的话执行操作,是数据的话去掉AT指令前缀,将数据一次透传过去。但是这样却会导致不断重启。。。。,难受,请问根据我的项目需求,有没有好的方案,感谢

image.png

????????????????????????????????????????????????????????????????????????????????????????????图1 Uart数据处理函数

image.png

????????????????????????????????????????????????????????????????????????????????????????????????????图2 Uart3中断处理函数

只要FIFO中缓存有数据就会置位_TOUT标志,只发送一个字节数据也会置位_TOUT标志。如果要区分_RDY和_TOUT,以_TOUT为一帧数据接收完的提示,可以在缓存数据到达FIFO触发点时,留一个字节先不接收,确保置位_TOUT标志。参考UART1例程中断接收方式做修改,测试如下。

caf4ee3e6c680909a9bf3f1c7a26bd6.png

c8d086dafc496ce5729fce24657f1a0.png



只有登录才能回复,可以选择微信账号登录