Arm 通用异步收发器接收问题

Arm 通用异步收发器接收问题,arm,embedded,uart,Arm,Embedded,Uart,我有一个UART接收FIFO的问题。如果我给UART外围设备通电,我在LSR寄存器中收到RXFE错误,UART TX工作正常 我使用带有120MHz PCLK和115200Baud的LPC4088 我试图读取寄存器以清除挂起的错误,但没有成功。希望你们中的一些人能帮忙 void UART3_Init(void){ LPC_SYSCTL->PCONP |= (1 << 25); // Enable Power & CLock fo

我有一个UART接收FIFO的问题。如果我给UART外围设备通电,我在LSR寄存器中收到RXFE错误,UART TX工作正常

我使用带有120MHz PCLK和115200Baud的LPC4088

我试图读取寄存器以清除挂起的错误,但没有成功。希望你们中的一些人能帮忙


void UART3_Init(void){
    LPC_SYSCTL->PCONP |= (1 << 25);                 // Enable Power & CLock for UART3
    LPC_UART3->LCR = (3 << 0)                   // Word Length: 8 Bit
            |(0 << 2)                   // Stop Bit: 1 Bit
            |(0 << 3)                   // Parity Enable: disabled
            |(1 << 7);                  // Divisor Latch: enabled
    LPC_UART3->DLL = 65;                        // Divisor Latch: 65 for 115200 Baud
    LPC_UART3->DLM = 0;                     // Divisor Latch: 0 for 115200 Baud
    LPC_UART3->FCR = (1 << 0)                   // FIFO enable: enabled
            |(1 << 1)                   // RX FIFO reset: enabled
            |(1 << 2);                  // TX FIFO reset: enabled
    LPC_UART3->FDR = (0 << 0)                   // Baudrate prescaler Value: DIVADDL = 0
            |(1 << 4);                  // Baudrate prescaler Value: MULVAL = 1
    LPC_UART3->LCR &= ~(1 << 7);                    // disable to lock Baud - without this no UART communication
}


char UART3_receive(void){
    while(!(LPC_UART3->LSR & (1 << 0)));                //wait until data arrives in Rx FIFO
    return LPC_UART3->RBR;
}

int main(void){
    CCLK runs with 120MHz

    //UART 3 Pins
    LPC_IOCON->p[0][25] = (3 << 0);         //UART3 TX  p[0][25]
    LPC_GPIO->DIR = (1 << 25);
    LPC_IOCON->p[0][26] = (3 << 0);         //UART3 RX  p[0][26]
    LPC_GPIO->DIR = (0 << 26);

    UART3_Init();

    char data = 0;

    while(1){
        data = UART3_receive();

        if(data == ENTER){
            //PRINT back to terminal "SUCCESS"
            ...
            ...
        }
    }
}

无效UART3_初始(无效){

LPC_SYSCTL->PCONP |=(1 LCR=(3看起来发送设备存在帧错误或奇偶校验问题,检查发送方的buad速率,回环测试将确保一切正常。

什么让你认为这是软件错误?
LPC_GPIO->DIR=(0 DIR
全部0。你的意思是
LPC_GPIO->DIR&=~(1@thebusybee这可能是其中一个奇怪、复杂的GPIO外围设备,允许程序员反复顺序写入同一寄存器,设置多个引脚。这在某些情况下会导致更有效的代码,而在其他情况下会导致效率更低的代码。这在大多数现代MCU上似乎很常见。@Lundin我知道这些,但他们不知道吗ve名称,如*SET和*CLR?在我看来,一个名为DIR的寄存器就像一个常规寄存器。另外,右边的表达式是0。哪个位需要重置?(不要回答,这只是一个反问。)@他们认为,如果你做一些半双工位碰撞,按顺序设置DIR寄存器可能也有意义。无论如何,你肯定需要阅读手册中的这些寄存器。FE应该是帧错误(?)。也就是说:停止位没有找到它们应该在的位置。这可能是多方面的根本原因。