STM32串口在首次发送字符的时候,首字符丢失解决办法
来源:互联网 发布:excel2007 数据分类 编辑:程序博客网 时间:2024/06/12 18:25
关于STM32如何串口输出字符串的代码,网上有很多种示例。这里就不多说。
网上关于发送字符的代码大多如下:
USART_SendData(USART1, (uint8_t)ch);
while( USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
其实咋一看是说的通的,但是在仔细看手册的时候发现 TC 和 TXE 标志位在复位的时候被置1 ,这样第一次while循环就是没有用的。这样导致了首次第一个字符还没有被输出,就被后面的字符覆盖掉,造成实际看到的丢失现象。解决办法就很简单:在前面加上一句 USART1->SR;
具体代码如下:
USART1->SR;
USART_SendData(USART1, (uint8_t)ch);
while( USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
下面我来说说原因: 第一句读取SR寄存器,第二句写DR寄存器 刚好清除了TC标志位 。第一次while循环就起作用了。
我在使用库函数中的printf函数时,添加的fputc函数。
int fputc(int ch, FILE *f)
{
/* TC TXE 标志位在复位的时候被置1 */
/*第一句读取SR寄存器,第二句写DR寄存器*/
/* 如果不这样操作,首次发送的第一个字符会丢失 */
USART1->SR;
USART_SendData(USART1, (uint8_t)ch);
while( USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
return (ch);
}
也可将USART1->SR;替换为USART_GetFlagStatus(USART1, USART_FLAG_TC)
- STM32串口在首次发送字符的时候,首字符丢失解决办法
- STM32串口在首次发送字符的时候,首字符丢失解决办法
- stm32串口首次发送数据丢失
- stm32 串口发送数据第一字节丢失
- stm32 串口发送数据第一字节丢失
- STM32串口第一个字节丢失解决办法
- STM32的串口中断发送
- stm32串口发送数据,丢失字节问题分析
- stm32串口发送数据,丢失字节问题分析
- STM32串口发送数据第一个字节丢失问题
- 一次GPRS调试引出的大发现--STM32发送字符串第一个字符丢失
- IO高级流 首字符 丢失 的问题
- stm32串口发送16进制字符和16进制数的区别和具体实现方法
- stm32快速学习4——串口发送字符
- STM32 printf 串口发送第一个字符失败 简单记录
- STM32关于串口发送缓冲的问题
- STM32 串口发送数据
- STM32串口发送
- oracle 里面设置自增序列
- python中的list、array、matrix辨析
- Machine Learning part1---交叉验证
- dubbo 配置文件详解
- spring XML和注解混用的一个小问题
- STM32串口在首次发送字符的时候,首字符丢失解决办法
- mysql索引失效
- java的系统路径获取工具类
- springmvc实现异步请求
- git操作指南
- hadoop学习之路(一)---集群环境搭建(2.7.3版本)
- 机器学习实战笔记(2) 决策树(分类的方法)
- 模式识别与机器学习(二):常用的概率分布(共轭分布等)
- Spring DataSource的配置总结