stm32 串口使用printf发送第一个字节消失(已解决)

本文讲述了作者在使用STM32通过printf发送串口消息时遇到的第一个字节丢失问题,原因在于复位后没有正确处理发送完成标志位TC。通过在发送数据前清除该标志位解决了问题,并提供了相关代码和测试结果。
摘要由CSDN通过智能技术生成

最近使用printf发送串口消息时,发现复位之后发送的第一个字节总是消失不见:

printf("12345\r\n"); delay_ms(100);
printf("12345\r\n"); delay_ms(100);
printf("12345\r\n"); delay_ms(100);

结果如下,少了第一个字节:
在这里插入图片描述
通过printf发送串口消息的代码如下:

int fputc(int ch, FILE *f)
{
	USART_SendData(USART1, (uint8_t) ch);
	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}	
    return ch;
}

查看数据手册:
在这里插入图片描述
发现stm32复位之后,发送完成的标志位TC为1,而通过我们发送数据的代码发现我们发送数据的时候是需要在while循环中等待TC位置1才能继续。

所以说,我们复位之后,TC = 1,然后我们开始发送第一个数据时,根本没有在while循环中等待发送完成,直接跳过去了,所以造成了第一个字节的丢失。

解决办法也很简单,在发送数据前,调用USART_ClearFlag(USART1, USART_FLAG_TC),把TC位清除就行:

int fputc(int ch, FILE *f)
{
	USART_ClearFlag(USART1, USART_FLAG_TC);// 解决第一个字节丢失问题
	USART_SendData(USART1, (uint8_t) ch);
	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}	
    return ch;
}

测试结果:
在这里插入图片描述
成功解决。

参考连接:https://blog.csdn.net/Backspace110/article/details/52737441

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值