stm32 串口发送字符串第一个字节丢失的问题

本文介绍了使用STM32F205进行串口通讯时遇到的问题:上电后发送的首个字节丢失。通过分析代码及查阅手册,找到了问题的原因,并给出了几种可行的解决方案。

使用stm32f205调试串口通讯时,发现一个问题,上电后串口发送字符串的第一个字节会丢失,发送测试数据hello,接收端收到的数据为:ello,第一个字符丢失。用示波器抓取波形,发现第一个数据的波型也是丢失的。

出现问题的代码如下:

while(*pStr != 0){
    USART_SendData(USARTx, *pStr++);
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}

这里写图片描述

原因:

1.通过DEBUG查看,在执行USART1_init();串口初始化完成后:TXE,TC是置1的。

2.RM0033中有一段描述,

两者的区别在于:往USART_DR中写数据的时候TXE直接被清零。TC清零则需要先读取USART_SR,然后写USART_DR。

在出现错误的代码执行之前加一句:

USART_GetFlagStatus(USART1, USART_FLAG_TC); 就不存在错误了。

当然,直接清零也可以:USART_ClearFlag( USART1, USART_FLAG_TC );

或者用USART_FLAG_TXE标志来判断。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值