STM32 串口TXE和TC标志位的理解

STM32 串口TXE和TC标志位的理解
在这里插入图片描述
在这里插入图片描述

我们发送数据的时候是先放在数据寄存器(TDR),然后在往移位寄存器里面丢,TXE就是用来判断我们的数据寄存器里面有数据没有,如果为1表示TDR里面的数据全部移到了移位寄存器,并且没有新的数据进来,0就是表示有数据。TC是判断移位寄存器的,但是我们一定要先读SR寄存器,然后再写DR寄存器,也就是移位寄存器,才能让数据一直发送,如果先写入,数据就会丢失。为啥是这样?因为我们的数据寄存器里面有数据时,TXE就会由硬件自动置0,而我们的TC不会,我们要先由软件判断是否有数据,如果有才会置0。

在这里插入图片描述如果TDR寄存器有数据TXE标志位就是0,0&上USART_FLAG就是0,0不等于0,就执行else,bitstatus就被赋值为0,那么我们函数的返回值就是0,我们就可以用if判断函数FlagStatus的返回值,看我们的数据是否发送完毕。
if( USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==0),这样的话我们就可以一直发送数据了。
在这里插入图片描述

### STM32 UART 中断标志位解释与使用 中断机制对于嵌入式开发至关重要,在STM32微控制器系列中,UART通信接口提供了多种方式来处理数据传输事件。当涉及到串口接收或发送操作时,了解如何正确配置响应这些事件变得尤为关键。 #### UART状态寄存器 (SR) 在STM32内部,UART模块配备了一个专门的状态寄存器(SR),用于指示当前发生的各种条件。此寄存器包含了多个标志位,每一个都对应着特定类型的事件或错误情况[^1]: - **RXNE (Read Data Register Not Empty)**: 表明接收到的数据已准备好读取。 - **TC (Transmission Complete)**: 发送移位寄存器为空,意味着最近一次字符已经完全发出。 - **TXE (Transmit Data Register Empty)**: 数据寄存器可以接受新的待发字符。 - **IDLE**: 接收线路上检测到空闲总线。 - 错误标志如 ORE(Overrun Error), NE(Framing error), PE(Parity error)等也在此处标记。 为了有效地利用上述资源并实现高效可靠的通讯协议栈设计,开发者通常会在初始化阶段设置相应的中断使能位,并编写对应的ISR函数来进行实时处理。 ```c // 启用USART1全局中断 __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); void USART1_IRQHandler(void){ HAL_UART_IRQHandler(&huart1); } // 用户自定义回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance==USART1){ // 处理接收到的数据... } } ``` 通过这种方式,可以在发生指定事件时触发CPU执行预先编写的程序逻辑,从而及时应对硬件层面上的变化而不必轮询查询各个可能的状态变化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值