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.

CC2540 UART DAM问题



你好

请问有没有stack 1.3 版本的UART 程序?

我现在写的UART程序结束数据,一包每次都被分成好几包,而且数据多就接收不到了。

  • hi,

    1.3的UART程序包含在1.3的协议栈里面, 请去官网下载.

  • #if !defined HAL_UART_DMA_RX_MAX
    #define HAL_UART_DMA_RX_MAX        128
    #endif
    #if !defined HAL_UART_DMA_TX_MAX
    #define HAL_UART_DMA_TX_MAX        HAL_UART_DMA_RX_MAX
    #endif
    #if !defined HAL_UART_DMA_HIGH
    #define HAL_UART_DMA_HIGH         (HAL_UART_DMA_RX_MAX - 1)
    #endif
    #if !defined HAL_UART_DMA_IDLE
    #define HAL_UART_DMA_IDLE         (0 * HAL_UART_MSECS_TO_TICKS)
    #endif
    #if !defined HAL_UART_DMA_FULL
    #define HAL_UART_DMA_FULL         (HAL_UART_DMA_RX_MAX - 16)
    #endif

     

     

    我希望我的UART收到一包数据,只调用一次回调函数,而不是一个字节调用一次,DMA的这一段要怎么配置?

        uartConfig.configured           = TRUE;
        uartConfig.baudRate             = HAL_UART_BR_38400;
        uartConfig.flowControl          = FALSE;
        uartConfig.flowControlThreshold = 128;
        uartConfig.rx.maxBufSize        = 128;
        uartConfig.tx.maxBufSize        = 128;
        uartConfig.idleTimeout          = 6;
        uartConfig.intEnable            = TRUE;
        uartConfig.callBackFunc         = UserUartBack;

  • static void HalUARTPollDMA(void)函数中,

    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;
    }
    else if (cnt && !dmaCfg.rxTick)
    {
    evt = HAL_UART_RX_TIMEOUT;
    }

    if (dmaCfg.txMT)
    {
    dmaCfg.txMT = FALSE;
    evt |= HAL_UART_TX_EMPTY;
    }

    这几句,控制的是收到多少字节,触发事件,然后调用回调函数。可以看一下。

  • 你好  可否请教下具体怎么操作?我的情况和你是一样的