关于串口发送的几个标志位

首先了解STM32串口发送数据的简单过程,如下图所示。
在这里插入图片描述
发送: 软件将数据写到USARTx->DR里面,硬件自动把USARTx->DR里面的数据并行转移到“发送移位寄存器”,然后硬件自动将发送移位寄存器中的数据通过TX引脚串行发送出去。
接收: RX上有数据过来,则先将数据一位一位的放到“接收移位寄存器”里面,收满一个字节后,硬件自动将“接收移位寄存器”里面的数据并行转移到USARTx->DR里面。

1. USART_FLAG_RXNE—接受数据寄存器非空标志位(Receive data register not empty flag)
当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位 (表示接受到一个字节) 。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清零。RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

0:数据没有收到;
1:收到数据,可以读出。

2. USART_FLAG_TXE —发送数据寄存器空标志位(Transmit data register empty flag)
当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位 (表示发送数据寄存器为空,可以继续写入数据。注:此时并不确定数据是否发送完成) 。如果USART_CR1寄存器中的TXEIE为1,则产生中断。对USART_DR的写操作,将该位清零。

0:数据还没有被转移到移位寄存器;
1:数据已经被转移到移位寄存器。

3. USART_FLAG_TC — 发送完成标志位(Transmission Complete flag)
包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’ (表示一帧数据发送完成,可以继续发送下一帧)。如果USART_CR1中的TCIE为’1’,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。

0:发送还未完成;
1:发送完成。

有一种形象的说法是:TXE是指“弹仓”空;TC是“枪膛”空。
也就是说,你写数据到串口时,是装入弹仓,硬件会将数据移到枪膛,这时,TXE为1,TC为0,STM32硬件的TX脚正在发送数据,但你还可以装入数据到弹仓,装入后,TXE为0,TC为0.
TX发送完一个数据后,立即将数据从弹仓移入枪膛,这时,TXE为1,TC为0.
最后TX发送完数据,你又没有装入新数据,这时。TXE为1,TC为1.

  • 15
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值