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.

[参考译文] MSP430FR2433:ESCI UART使用波特率11.52万接收丢失的数据

Guru**** 633810 points
Other Parts Discussed in Thread: MSP-EXP430FR2433, MSP430FR2433
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1090127/msp430fr2433-eusci-uart-receive-lost-data-with-baudrate-115200

部件号:MSP430FR2433
主题中讨论的其他部件:MSP-EXP430FR2433

环境:

硬件:MSP-EXP430FR2433开发套件,将转子1.4 和WFP 1.5 连接到FTDI USB串口,移除连接到ESS_FET调试的RXD跳线。

-IDE:11.1 上的Code Composer Studio版本:Win 10上的.0.0.0011万

我可以从MSP430_driverlib_2_91_13_01运行eusci_a_UART_ex1_loopbackAdvanced示例,没有任何问题。 此示例使用11.52万 bps的波特率。

但是当我修改示例代码以接收来自主机PC的数据包时,它总是会丢失一些字节。 例如,当我发送数据包“1.23456789亿”时,它收到了“12.4578万”。

为了简单起见,从示例代码中,我只删除了传输功能,并在中断代码中添加了一个接收缓冲区,如下图所示。

将波特率配置更改为1.92万或9600时 ,不会出现问题。 是否有解决此问题的建议?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    根据您的描述,它与高波特率有关。 这意味着您处理 收到的每个 数据的时间有限。 我在您的中断例程中看到,是否有必要在此处运行UART状态检查功能? 您可以尝试删除此功能并再次测试。  

    此致,

    现金Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Cash,请联系您的答案。 我删除了UART状态检查功能,它工作正常。 但是,如果我添加一些代码将数据放入中断例程中的环缓冲区,则会出现同样的问题。

    uint16_t RINGBUF_push(ringbuf_t *ring, uint8_t b)
    {
    uint16_t head = NEXT(ring->head, ring->size);
    
    if(head != ring->tail)
    {
    ring->buffer[ring->head] = b;
    ring->head = head;
    return 1;
    }
    return 0;
    }

    所以我认为我需要优化环缓冲代码或使用DMA。 您是否有在EUSCI UART中使用DMA作为参考的示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我认为MSP430FR2433不支持 DMA。 为什么不使用较低的波特率来避免此问题?

    此致,

    现金Hao  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    或者,您可以通过将MCLK设置为8MHz来尝试让MCU以8MHz运行。