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.

cc3200 uart 接收, 只接收16字节

Other Parts Discussed in Thread: CC3200

通过串口中断的方式, MAP_UARTIntRegister(UARTA1_BASE, UARTIntHandler);

只能接收到16个字节, 也看到cc3200 串口 FIFO只有16个字节。

请教大家,怎么接收串口数据? 程序上怎么设置。

  • 关于CC3200UARTFIFO的大小最大为 16 x 8bit,注意UART的FIFOlevel最少可以设置为1/8,也就是最少串口收到2个字节就会触发UART硬件中断,转入进行串口中断处理程序。当然也可以关闭UART的FIFO,参考程序如下:

    void Uart1InterruptInit(void)
    {
    unsigned long ulStatus;

    UARTFlowControlSet(UARTA1_BASE, UART_FLOWCONTROL_NONE);
    // UARTFIFOLevelSet(UARTA1_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8); //FIFO 最小为1/8*16Byte 即串口接收2Bytes产生中断
    // MAP_UARTTxIntModeSet(UARTA0_BASE, UART_RXINT_MODE_EOT);

    MAP_IntPriorityGroupingSet(1);
    MAP_IntPrioritySet(INT_UARTA1, HIGH_PRIORITY);
    ulStatus = MAP_UARTIntStatus(UARTA1_BASE, false);
    MAP_UARTIntClear(UARTA1_BASE, ulStatus);
    UARTIntRegister(UARTA1_BASE, UART1BaseIntHandler);
    MAP_UARTIntEnable(UARTA1_BASE, UART_INT_RX);
    UARTIntClear(UARTA1_BASE, UART_INT_RT);
    UARTIntClear(UARTA1_BASE, UART_INT_TX);
    // g_ulUart1APriority = MAP_IntPriorityGet(INT_UARTA1);
    // MAP_IntPrioritySet(INT_UARTA1, (unsigned char)g_ulUart1APriority);
    //-----------------------------------串口单字节接收数据-超时检测打开--------------------------------------
    UARTIntEnable(UARTA1_BASE, UART_INT_RT); //使能超时中断检测
    //--------------------------------------------------------------------------------------------------------
    UARTIntDisable(UARTA1_BASE, UART_INT_TX); //关闭Transmit Interrupt

    MAP_UARTFIFODisable(UARTA1_BASE);   //关闭串口FIFO
    MAP_UARTEnable(UARTA1_BASE);
    }



  • 谢谢你的回复, 我试了, 还是不行。 有时可以接收到16个字节, 有时就接收不到。  程序上有些改动。 这是我的中断处理函数。

    请教一下, 问题出在哪里了?  程序上是DMA TX

    void UARTIntHandler() {
    char cCharacter;
    unsigned long status = UARTIntStatus(UARTA1_BASE, true);


    if (status & UART_INT_RX) {

    UARTIntClear(UARTA1_BASE, UART_INT_RX);

    while (UARTCharsAvail(UARTA1_BASE)) {
    cCharacter = UARTCharGet(UARTA1_BASE);


    Report("=%d ", cCharacter);
    }//while
    }

    if (status & UART_INT_RT) {

    UARTIntClear(UARTA1_BASE, UART_INT_RT);

    while (UARTCharsAvail(UARTA1_BASE)) {
    cCharacter = UARTCharGet(UARTA1_BASE);


    Report("==%d ", cCharacter);
    }
    }

    if(status & UART_INT_DMATX) {

    MAP_UARTDMADisable(/*UARTA0_BASE*/ UARTA1_BASE,UART_DMA_TX);
    UARTIntClear(UARTA1_BASE, UART_INT_DMATX);
    }


    }

  • 程序上要怎样,才可以正确接收串口数据? 现在 每次只能接收16个字节。  实际每次发送时200个字节

  • 用cc3200 板子做产品, 使用串口通信。 这个问题应该都会遇到吧?  没有人解决这个问题吗?

  • 触发中断后要及时把数据存到其他地方,不然会被覆盖

  • 用了一个全局的数组存储, 但每次只能收到16个字节。 请教一下 该怎么做?

  • 问题解决了, 在UART中断中,不要使用 report()等比较耗时的函数。

  • 问题解决了, 在UART中断中,不要使用 report()等比较耗时的函数。

  • 问题解决了, 在UART中断中,不要使用 report()等比较耗时的函数。