[USART - STM32F4xx]: Как ждать, пока символ не попадет в регистр статуса (USART_SR)? - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь реализовать USART2_RX для STM32F411VET .

Во время видеоурока я увидел, что учитель использует эти операторы для чтения данных в регистре данных:

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

В частности, он использует

while(!(USART2->SR & 0x0020)){}

для ожидания символа. Но, наблюдая за Справочное руководство , кажется, что регистр состояния (USART_SR) равен 0x0C0 ... в форме сброса, поэтому ...

Почему мы проверяем это значение (т. Е. 0x0020)

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

В цикле while вы ожидаете установки бита «Чтение регистра данных не пусто». Это бит номер 5, и 1 << 5 равно 0x0020. Вы могли бы также написать:

 while(!(USART2->SR & (1 << 5)) {}
2 голосов
/ 16 октября 2019

Он проверяет 0x20, потому что это бит RXNE (RX не пустой) в регистре состояния. Он проверяет бит 5 (RXNE), а не значение 0x20.

...