USART_SendData(UARTx,0x34);//实质是对UARTx->DR写0x34
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //等待发送完成,实质是读取UARTx->SR的TC位(发送成功标志位)。另外,关于UARTx->SR的TE寄存器(DR寄存器刚刚写入数据的时候,TE清0;当DR中数据被传送到移位寄存器后(此时DR可准备下一次的发送数据),TE置1)
使用printf
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET) { USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); }
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) { USART_ReceiveData(USART1); USART_ClearITPendingBit(USART1,USART_IT_RXNE); }
清除中断
- PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRunerror) 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 operationto USART_DR register (USART_SendData()).//读状态写数据
- TXE flag is cleared only by a write to the USART_DR register (USART_SendData()).//写数据
只有在多缓存通讯中才推荐直接对中断标志位清零
ITStatus & FlagStatus
USART_GetFlagStatus(USART1,USART_FLAG_RXNE);//若SR寄存器的RXNE位1则返回SET
USART_GetITStatus(USART1,USART_IT_RXNE);=USART_GetFlagStatus
&& 该位允许中断
原文:http://www.cnblogs.com/2cats/p/3577589.html