我想在STM32F411VET上实现USART2 RX。
在视频教程中,我看到老师使用这些语句读取数据寄存器中的数据:

char USART2_read(void){
  while(!(USART2->SR & 0x0020)) {}
  return USART2->DR;
}

具体来说,他用
while(!(USART2->SR & 0x0020)){}

等待一个字符。但观察到Reference Manual,状态寄存器(USART_SR)似乎是0x0C0。。。以重置的形式,所以。。。
为什么要检查该值(即0x0020)?

最佳答案

while循环中,您正在等待设置“Read data register not empty”位。这是位5,1 << 5等于0x0020。你也可以写:

 while(!(USART2->SR & (1 << 5)) {}

10-06 06:03