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()函数