目前我使用Uart2与PC通信,配置了Tx和Rx,尝试将板子上的信息每包1.2k分多次发送至PC侧。
但发现一个问题:有时板子已经发送了数据(数据大小、内容正确),但是PC侧数据却接收不全。
是什么原因呢?
帮托各位大神帮帮我~
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.
目前我使用Uart2与PC通信,配置了Tx和Rx,尝试将板子上的信息每包1.2k分多次发送至PC侧。
但发现一个问题:有时板子已经发送了数据(数据大小、内容正确),但是PC侧数据却接收不全。
是什么原因呢?
帮托各位大神帮帮我~
1. 能不能把具体的代码贴出来,这样只讲现象是很难分析问题的。
2. 一般来讲,单片机和PC通信如果有丢数据现象,就需要检查单片机端的发射是否正确,比如是否有把未发送的FIFO清掉。
3. 你把数据包按照一个规律数据设置,比如1-255,然后在发送出来,看掉数据的位置发生在什么地方。从而分析出问题的原因。
4. 用你现成代码发送0X55,0XAA,用示波器测量下波形,看波特率是否正确。
您好
我先将Code贴一下吧。
1. 为Uart2配置了Tx和Rx
UARTClockSourceSet(UART2_BASE, UART_CLOCK_PIOSC);
MAP_UARTConfigSetExpClk(UART2_BASE, 16000000, 115200,(UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8));
MAP_UARTIntDisable(UART2_BASE, 0xFFFFFFFF);
MAP_UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT|UART_INT_TX);
MAP_IntEnable(INT_UART2);
MAP_UARTFIFOLevelSet(UART2_BASE, UART_FIFO_TX1_8, UART_FIFO_RX1_8);
MAP_UARTEnable(UART2_BASE);
2. 配置了Hwi,在中断函数中代码如下:
ui32Ints = MAP_UARTIntStatus(UART2_BASE, true);
MAP_UARTIntClear(UART2_BASE, ui32Ints);
MAP_UARTRxErrorClear(UART2_BASE);
if(ui32Ints & UART_INT_TX)
{
if(nubDebug_Mode == DIAG_READY_MODE)
{
MAP_IntDisable(INT_UART2);
MAP_UARTCharPut(UART2_BASE, aubData);
MAP_IntEnable(INT_UART2);
}
}
3. 我首先试了一下您说的方案3,现象发生时,我的发送中断函数只被触发了400~600下,PC端也只收到了被触发的数据
2. 一般来讲,单片机和PC通信如果有丢数据现象,就需要检查单片机端的发射是否正确,比如是否有把未发送的FIFO清掉。
===》请问,清除FIFO是使用哪个函数呢?是UARTIntClear ()吗?
楼上的意思应该是说可以通过UART Flag (UARTFR)寄存器检查FIFO里是否都发出去了吧
不知道楼主单片机和PC通信的串口工具是怎么样的,PC机调试的工具有时候也不是特别靠谱。
出现这种问题,可以试着把波特率降低些、发送间隔调大些看看有没有帮助。
我这边和PC这边的工具波特率都设置为115200
我觉得和PC的调试工具应该关系不大,因为我在开发板上的中断函数里面加了变量,来记录触发了多少次中断,确实比实际发送的次数要少很多。
另外,UART Flag检查数据是否发出去有效吗?如果我发送了1K数据的过程中,此时有LOG也要占用UART资源,这时如果数据发送少了,检查UART寄存器的数据应该是乱的吧?