打印

USART的SR寄存器的TXE和TC位问题

[复制链接]
3198|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
罗菜鸟|  楼主 | 2013-6-19 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32上面,这两位只可读,复位值为1,GD32上面是多少?
正因为这个BUG,我在STM32上反倒做好了FIFO发送。
FIFO的最大头痛就是“追尾”问题。应用程序中往“头”写数据,中断程序中把“尾”的数据发送到DR。但是每次写“头”的时候要考虑是否触发第一个字节到DR:如果遇到中断时已经“追尾”但是没有写DR,那么这一包数据就发不出去;但是如果没有“追尾”却触发了DR,则会多发一个字节,而判断“追尾”是在中断外,往往读到没有“追尾”但是其实已经追尾。
但正是因为STM32的这个bug,反而是个好处。TC为1,写完“头”后不要去管什么该不该写DR或者有没有“追尾”,使能TCIE,就能进中断,而中断发生时就判断是否追尾,如果追尾就关闭TCIE。

沙发
baiyunfei.k.f| | 2013-6-20 08:40 | 只看该作者
你发送数据时可以用DMA,组织好数据打开DMA,也不用再用FIFO了

使用特权

评论回复
板凳
罗菜鸟|  楼主 | 2013-6-21 10:06 | 只看该作者
答非所问

使用特权

评论回复
地板
人生之际| | 2013-8-3 13:36 | 只看该作者
这个是正确的,你却把它叫bug.复位后没有数据发,当然是1。

使用特权

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

本版积分规则

132

主题

522

帖子

8

粉丝