在串口通信问题中,数据的接收总感觉有问题,仿真时候也会出现如图所示的问题,这个应该怎么解决?
数据接收与传送在中断中进行
void UART0IntHandler(void)
{
uint32_t ui32Status = 0;
//获取中断状态
ui32Status = UARTIntStatus(UART0_BASE, true);
//清除中断标志
ROM_UARTIntClear(UART0_BASE, ui32Status);
RxData[UartTxLen++]=UARTCharGet(UART0_BASE);
if(UartTxLen==9)
{
UartTxLen=0;
for(UartTxIndex=0;UartTxIndex<9;UartTxIndex++)
{
UARTCharPutNonBlocking(UART0_BASE,RxData[UartTxIndex]);
RxData[UartTxIndex]=0;
}
UARTprintf("\nOK\n");
}
}
上位机发出的数据为abcdefg 而仿真接收的数据为
而整个程序正常跑起来,上位机看到的数据为
感觉到数据有规律的错位了,不知道是不是读取串口数据有问题,还是串口通信没有调好?
xyz549040622:
if(UartTxLen==9)
你为什么判断是9呢,你发的是7位呀。。。你一直收到的是abcdefg的循环,正常呀,因为你循环发送,发的是7位,收到的是9位
JiWei Su:
回复 xyz549040622:
哦哦!数据输入错了,但是输入九个数还是有一样的问题,比如发123456789结果如下图
Michael Sun:
回复 JiWei Su:
第一个错误是因为引用的库函数,没有源码,这个无所谓的。
这个错位看起来是FIFO使用不当引起的,你先试试发送8个或者6个字节试试
JiWei Su:
回复 Michael Sun:
库函数没有源码?FIFO的操作需要特殊配置吗?这些会影响大量数据的传输吗?FIFO的操作有没有例程可以参考一下啊!