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.
环境:
硬件: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运行。