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.

HalUARTRead(uint8 port, uint8 *buf, uint16 len)函数



 HalUARTRead(uint8 port, uint8 *buf, uint16 len) 理论不是最多能读128个字节吗,为什么我实际测的时候只能读进去70多个字节呢,哪位大神能帮我解答一下!
  • 您的MT_UART_RX_BUFF_MAX以及  MT_UART_TX_BUFF_MAX 是多少?

  • 都是128,这是我读长度的代码:

    len= HalUARTRead( HAL_UART_PORT_0, pBuf, RX_BUF_LEN );
    HalUARTWrite(0,&len,1);

  • 都是128的,

    #define MT_UART_TX_BUFF_MAX 128
    #define MT_UART_RX_BUFF_MAX 128

  • haluartread函数从串口读的数据怎么会有丢失,读不出完整的数据

  • RE: HalUARTRead(uint8 port, uint8 *buf, uint16 len)函数
    1、可以从产生回调事件的原因查看:
    #define HAL_UART_RX_FULL 0x01
    #define HAL_UART_RX_ABOUT_FULL 0x02
    #define HAL_UART_RX_TIMEOUT 0x04

    if (cnt >= HAL_UART_DMA_FULL)
    {
    evt = HAL_UART_RX_FULL;
    }
    else if (cnt >= HAL_UART_DMA_HIGH)
    {
    evt = HAL_UART_RX_ABOUT_FULL;
    PxOUT |= HAL_UART_Px_RTS; // Disable Rx flow.(关闭了接收,瞬间感觉这里比较像)
    }
    else if (cnt && !dmaCfg.rxTick)
    {
    evt = HAL_UART_RX_TIMEOUT;
    }

    2、分析

    (1)既然读取不到128个字节,则不是HAL_UART_RX_FULL 事件(#define MT_UART_RX_BUFF_MAX 128)
    (2)读取70个字节左右,有点像HAL_UART_RX_ABOUT_FULL 事件
    #define HAL_UART_DMA_HIGH MT_UART_DEFAULT_THRESHOLD
    #define MT_UART_THRESHOLD (MT_UART_RX_BUFF_MAX / 2)
    (3)超时事件:超时时间是多少呢?6ms左右,如果两个字节的时间差 > 6ms,则一帧数据接收完成
    dmaCfg.rxTick = HAL_UART_DMA_IDLE;
    #define HAL_UART_DMA_IDLE (MT_UART_DEFAULT_IDLE_TIMEOUT * HAL_UART_MSECS_TO_TICKS)
    #define MT_UART_IDLE_TIMEOUT 6
    // The timeout tick is at 32-kHz, so multiply msecs by 33.
    #define HAL_UART_MSECS_TO_TICKS 33

    符合HAL_UART_RX_ABOUT_FULL

    个人分析,是否正确?