其他
单片机UART丢失的那一字节数据
关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
UART:Universal Asynchronous Receiver / Transmitter,通用异步收发传输器,即我们通常说的串口。
串口是工程师最常用的一种串行外设,但在实际应用中还是会经常遇到各种问题。比如:丢失一字节数据。
今天我们就结合STM32来讲讲UART相关内容,以及容易丢失一字节数据的问题。
嵌入式专栏
1
这几个标志位在编程中经常使用,数据丢失有可能就是对它们操作不当而导致出错。
TXE:发送数据寄存器为空 (Transmit data register empty)
0:数据未传输到移位寄存器
1:数据传输到移位寄存器
TC:发送完成 (Transmission complete)
0:传送未完成
1:传送已完成
RXNE:读取数据寄存器不为空 (Read data register not empty)
0:未接收到数据
1:已准备好读取接收到的数据
ORE:上溢错误 (Overrun error)
0:无上溢错误
1:检测到上溢错误
嵌入式专栏
2
嵌入式专栏
3
及时清除溢出错误标志
利用通信协议过滤因数据丢失导致的问题
中断函数里减少不必要的耗时
合理分配中断优先级
使能中断前清除标志位
使用更高精度晶振
降低通信波特率
嵌入式专栏
4
void UART_SendByte(uint8_t Data)
{
while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TXE));
USART_SendData(USART1, Data);
}
void UART_SendByte(uint8_t Data)
{
while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TXE));
USART_SendData(USART1, Data);
while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));
}
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2.线路延时导致数据丢失
软件增加延时处理
使用通信协议增加应答机制
后台回复『单片机』『通信』『嵌入式软件设计与开发』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。