STM32篇:串口USART收发遇到第一个字符丢失

时间:2024-03-14 10:43:00

现象:收发数据时第一个字符丢失

使用STM32自带库函数:USART_SendData()函数发送一堆字符是没有问题的;若发送的数据量很小时,此时串口发送的只是最后一个字符,就会导致发送的数据莫名其妙的丢失。
STM32篇:串口USART收发遇到第一个字符丢失
发送字符串OK时只返回K;
发送字符串+NBAND:5时只返回NBAND:5;
发送字符串 46011时只返回6011;

解决方案

网上找了许多解决的方案,但是1,2方案对我当时所做的项目没有任何作用:
方案1. 在每一个字符发送后检测状态位。
STM32篇:串口USART收发遇到第一个字符丢失
然而结果没变,丢失第一个字符。
方案2. 修改库函数
修改STM32自带的USART_SendData()函数。(加入while语句,等待发送缓冲区空才能发送下一个字符。)
STM32篇:串口USART收发遇到第一个字符丢失
结果一样,没有变化,照样还是丢失第一个字符。
方案3.照样修改库函数
猜测也许是某个特殊原因,使第二个数据覆盖了首个数据,使得首个数据丢失。
于是修改STM32自带的USART_SendData()函数,加入延时函数。
STM32篇:串口USART收发遇到第一个字符丢失
现象:
STM32篇:串口USART收发遇到第一个字符丢失