USART库函数中用于清除标志位的一些函数,如读DR寄存器的值清除标志位

USART库函数中用于清除标志位的一些函数,如读DR寄存器的值清除标志位

刚学M4没多久,对于库函数的使用还有些陌生,因为之前学的是寄存器配置,今天在用库函数配置usart的时候,遇到了不知道该调用哪个库函数来清一些标志位,搞了好久终于解决了。特此记录一番!

其实在库函数手册中有提及到,但当时没注意到这个提示。
在这里插入图片描述
描述为:
PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun error) and IDLE (Idle line detected) flags are cleared by software sequence: a read operation to USART_SR register (USART_GetFlagStatus()) followed by a read operation to USART_DR register (USART_ReceiveData()).
RXNE flag can be also cleared by a read to the USART_DR register (USART_ReceiveData()).
TC flag can be also cleared by software sequence: a read operation to USART_SR register (USART_GetFlagStatus()) followed by a write operation to USART_DR register (USART_SendData()).
TXE flag is cleared only by a write to the USART_DR register (USART_SendData()).
翻译为:(有道翻译)
PE(奇校验错误)、FE(帧错误)、NE(噪声错误)、ORE(溢出错误)和IDLE(检测到空闲行)标志被软件序列清除:对USART_SR寄存器的读操作(USART_GetFlagStatus())和对USART_DR寄存器的读操作(USART_ReceiveData())。
RXNE标志也可以通过读取USART_DR寄存器(USART_ReceiveData())来清除。
TC标志也可以通过软件序列清除:对USART_SR寄存器的读操作(USART_GetFlagStatus())和对USART_DR寄存器的写操作(USART_SendData())。
只有写入USART_DR寄存器(USART_SendData())才能清除TXE标志。

最后我的总结:(我用到的)
1.在usart中断服务函数中,如果需要判断是哪个标志位置起而进入中断的,则需要用到USART_GetITStatus()函数来判断
2.需要通过读usart的DR寄存器来清标志位的,可以使用USART_ReceiveData()来清DR标志位
3.判断接收缓冲区不为空 (USART1->SR & (0x1 << 5)) 以及 等待发送缓冲区为空 ( !(USART1->SR & (0x1 << 7)) ),则用USART_GetFlagStatus()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值