野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25999|回复: 1

指南者串口教程里发送完USART_RS寄存器的TC位是怎么被清除的

[复制链接]
发表于 2021-7-15 22:06:31 | 显示全部楼层 |阅读模式
野火论坛202107152155191809..png 野火论坛202107152201331128..png
手册里说TC需要先读UASRT_SR,再写USART_DR或者写0来清除,但教程——指南者串口发送和接受代码(下)的发送字符串的代码没有上述操作,这个TC是怎么清除的?

回复

使用道具 举报

 楼主| 发表于 2021-7-19 00:43:49 | 显示全部楼层
本帖最后由 wangyx1919 于 2021-7-19 00:45 编辑

1.我简单研究了一下,TC位可以通过clear库函数清除,也可以通过上述软件序列清除——先读SR,再写DR。
2.教程里的while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);没能起到应有的作用,因为TC的复位值是1,前面的程序既没有用库函数清除,也没用软件序列清除,所以TC一直为1,这个while就没起作用。

3.因为教程里单字节发送都有检查TXE的过程,所以程序运行没问题,而有一些人用TC作为检查位的话,就会因为第一个字节刚写入就TC检查通过开始写第二个字节,让第一个字节被第二个字节覆盖,造成首字节丢失的问题。

4.另外,在用到TC中断的时候,就不是用TXE检查能避免的了,由于TC复位即为1,会导致程序一开始就进入中断,所以要用TC中断的时候一定要先清除TC。

5.以上仅为粗略研究结果,如有错误还望指正。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 14:23 , Processed in 0.028485 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表