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.

TM4C129EN 串口接收数据堆积

大家好,我用TM4C129芯片的RS232串口通讯,波特率115200bps,100ms的数据刷新速率,20个字,在串口接收判断帧头和校验,如果正确则全部接收,但出现如下问题:在串口端用串口调试助手测试数据包接收正常,但在TM4C芯片中会出现数据包接收不完整的情况。还请遇到类似问题战友不吝赐教。

  • “但在TM4C芯片中会出现数据包接收不完整的情况” 能否请您详细说明下?是固定的字缺失吗?
  • 为啥用串口助手就好了,还是你检测没做好,你接收到,然后再用别的串口发出去,看看是否完全呢?
  • 是我软件中的检测没有做好,在出口调试助手接收到的报文大概1s会出现一包数据分开接收的情况,如下:

    上述情况时间在1s内,但是在软件中的串口接收会出现3s左右刷新一次数据的情况,在线仿真时在软件的Rx_buffer中可以看到大量持续的上述数据分开进中断的情况。您说的这个方法我测试下。

  • 不是固定的,是接收到的一包数据在软件中的串口接收Rx_buffer中会被分开接收,如果不考虑一条数据的完整性的话,在软件中的串口上接收到的数据都是正确的数据,只是每次接收数据的顺序和接收的字数不对。
  • 我认为是软件中的检测没有做好,但是我不太清楚怎么来处理?
  • 你把其他中断关掉试试,是否有更高优先级的中断打断了呢?
  • 您好啊,我在软件中初始化串口配置,将FIFO使能去掉了,处理串口数据时采用定时处理的方式(之前采用的是串口中断),测试了大概快4个小时,收发100ms,很正常。

    void InitUART1(void)
    {

    ROM_GPIOPinConfigure(GPIO_PB0_U1RX);
    ROM_GPIOPinConfigure(GPIO_PB1_U1TX);
    ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0| GPIO_PIN_1);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    ROM_UARTConfigSetExpClk(UART1_BASE, ui32SysClock, 115200,//SysCtlClockGet()
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));
    // ROM_UARTFIFOEnable(UART1_BASE);
    // ROM_UARTFIFOLevelSet(UART1_BASE, UART_FIFO_TX2_8, UART_FIFO_RX2_8);
    ROM_UARTIntEnable(UART1_BASE, UART_INT_TX |UART_INT_RX | UART_INT_RT);
    ROM_IntEnable(INT_UART1);
    ROM_UARTEnable(UART1_BASE); // ??UART??

    }

    如上,但是屏蔽掉FIFO使能,串口中断应该是多少个字节中断一次呢?是一个字节中断一次吗?

  • 看来是你FIFO没有设置OK导致的,FIFO有个缓冲深度的,到达深度才会触发中断,因此我判断是有个时刻,深度没有满导致的。
  • 是固定的缺失,我用pc看上位机发送数据帧头是正常的,单片机接收之后显示出来可能两个帧头都是错的也可能是某一个帧头出问题,我在接收中断中进行了接收帧头判断,如果不是帧头的话,是不会接受的但是,现在它接受了而且数据乱了