打印
[STM32F4]

【F446RE开发板试用】-3-解决串口打印输出时第一个字节丢失

[复制链接]
1398|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在使用STM32446E-NUCLEO板卡调试程序进行串口打印输出的时候遇到了问题,电脑接收数据的时候丢失第一个字节。比如串口输出“AABBCCDD”到电脑端显示则为“ABBCCDD”。
如下图所示:

电脑串口终端使用的是secureCRT,开始以为是电脑端串口配置错误,于是将波特率、流控、奇偶校验什么的全改了一个遍也没有解决问题,后来仔细研究了下数据手册,发现问题出在发送接收完成的标志位上。
看数据手册时,有这么一段话,
发送完成标志位TC     0:发送还未完成;1:发送完成。
当包含有数据的一帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。
在硬件复位后,TC标志位为1,串口发送的首个数据之前没有read SR的操作,是直接write DR,也就是说,TC没有被清除掉,此时执行串口发送函数时会误将第一个字节判断为已经发送完成,从而跳过了第一个字节的发送。
因此,为了解决这个问题,我们可以在发送第一个字节之前先判断下标志位,等待其清零。

然后再发送第二个字节数据。
看下图的串口发送函数:

如图所示,在串口发送函数中,我注释掉红框里面的语句就会发生丢失第一个字节的错误,如果取消注释,即是,在发送第一个字节之前先读一次TC标志位使其清零。

修改之后运行如下图所示:问题解决


工程文件有点大,程序放网盘里了,方便大家下载测试。
没有权限发链接,就这么发网址吧 链接://pan.baidu.com/s/1gdhlEkN 密码:0kqi

沙发
风信子1314|  楼主 | 2015-11-19 01:03 | 只看该作者
发个帖子不容易啊,要么验证码错误,要么就是干脆没有验证码,希望能帮上大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

21

帖子

0

粉丝