打印
[STM32F1]

STM32串口缓冲器问题

[复制链接]
1366|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2017-5-6 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TXE:发送数据寄存器空 (Transmit data register empty)  位7
当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果USART_CR1
寄存器中的TXEIE为1,则产生中断。对USART_DR的写操作,将该位清零。
0:数据还没有被转移到移位寄存器;
1:数据已经被转移到移位寄存器。
注意:单缓冲器传输中使用该位
TC:发送完成 (Transmission complete)  位6
当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。如果USART_CR1中的
TCIE为’1’,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC
位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。
0:发送还未完成;
1:发送完成



问题:1、以前我用TM4C单片机,可以配置缓冲器的深度。但是在STM32的资料里没看到FIFO相关的说明,如何配置发送缓冲区和接收缓冲区的深度?
2、这里说的单缓冲器传输和多缓冲器通讯是指什么?这里的单和多应该不是指缓冲器深度为1和为大于1吧?是不是单缓冲器是指只用一个串口,而多缓冲器指多个串口同时使用?

沙发
sunshine8899| | 2021-5-15 09:07 | 只看该作者
楼主,这个怎么理解呢?你理解了吗?解答一下呢

使用特权

评论回复
板凳
zchong| | 2021-5-15 15:09 | 只看该作者
sunshine8899 发表于 2021-5-15 09:07
楼主,这个怎么理解呢?你理解了吗?解答一下呢

STM32的串口没有FIFO,所以就没有缓冲深度一说。至于这两个标志位,不要管红字部分,你搞清楚他们的含义就行了。比如你要在发送完成后切换RS485接口芯片收发方向,你就应该用TC,因为这个表示数据已经从管脚发送出去了,而TXE置位的时候,实际还有一个字节没有从管脚输出,只是这个时候你可以想DR写数据了。相当于只有一个字节的缓冲。

使用特权

评论回复
地板
ipman| | 2021-5-17 16:19 | 只看该作者
除非你用G系列,否则要自己软件模拟FIFO

使用特权

评论回复
5
ouyanglei92| | 2021-5-17 17:19 | 只看该作者
这里应该理解串口单个传输数据,也就是传输不连续的情况下是单缓冲;连续发送的情况就是多缓冲

使用特权

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

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝