未在STM32F0中设置USART RXNE

未在STM32F0中设置USART RXNE,stm32,usart,Stm32,Usart,我有带STM32F051R8T6微控制器的STM32F0发现板。我正在尝试使用USART与PC进行通信 使用myputChar()函数将数据从电路板发送到PC可以正常工作 使用我的getChar()功能接收从PC发送到电路板的数据未正常工作。问题是没有设置RXNE标志(读取数据寄存器不为空)。然而,我在Keil uVision4中看到使用调试器时,数据确实在RDR(接收数据寄存器)中 我试着在没有调试的情况下运行它,以防调试器在我的程序读取RXNE标志之前读取RDR寄存器,而它仍然不工作 这是我

我有带STM32F051R8T6微控制器的STM32F0发现板。我正在尝试使用USART与PC进行通信

使用my
putChar()
函数将数据从电路板发送到PC可以正常工作

使用我的
getChar()
功能接收从PC发送到电路板的数据未正常工作。问题是没有设置RXNE标志(读取数据寄存器不为空)。然而,我在Keil uVision4中看到使用调试器时,数据确实在RDR(接收数据寄存器)中

我试着在没有调试的情况下运行它,以防调试器在我的程序读取RXNE标志之前读取RDR寄存器,而它仍然不工作

这是我的代码:

#include <STM32F0xx.h>
uint8_t data;

int main (void) {

    RCC->AHBENR |= (1UL<<17);   // PortA clock enable
    GPIOA->MODER &= ~((3UL<<2*2)|(3UL<<2*3));
    GPIOA->MODER |=  ((2UL<<2*2)|(2UL<<2*3));       // Alt func on PA2, PA3
    GPIOA->AFR[0] &= ~((15UL<<4*2)|(15UL<<4*2));
    GPIOA->AFR[0] |=  (( 1UL<<4*2)|( 1UL<<4*3));    // Alt func 1 on PA2, PA3
    RCC->APB1ENR |= (1UL<<17);  // USART clock enable
    USART2->BRR = 5000;         // Baud rate 48 000 000 / BRR -> 9600
    USART2->CR1 |= (1UL<<0);    // Enable USART

    while (1) {
        data = getChar();
        if (data!=0xFF) {
            putChar(data);
        }
    }
}
下面是
getChar()
函数,该函数不起作用,并不断返回
0xFF

uint8_t getChar (void) {
    USART2->CR1 |= (1UL<<2); // Receiver enable
    if ((USART2->ISR|(1UL<<5))==(1UL<<5)) { // Check RXNE to see if there is data
        return USART2->RDR;
    } else {
        return 0xFF;
    }
}
uint8\u t getChar(无效){

USART2->CR1 |=(1UL您没有正确检查RXNE位。这行代码是错误的:

if ((USART2->ISR|(1UL<<5))==(1UL<<5)) {

if((USART2->ISR |)(1UL在此检查位的默认状态。
检查它并将代码放在else中,如果数据在那里,如果没有数据,那么它将进入if条件

if ((USART2->ISR&(1UL<<5))==(1UL<<5)) {

} else {
    /***** operations *****/
}
if((USART2->ISR&(1UL)
if ((USART2->ISR&(1UL<<5))==(1UL<<5)) {
if ((USART2->ISR&(1UL<<5))==(1UL<<5)) {

} else {
    /***** operations *****/
}