Arm 通用异步收发器接收问题
我有一个UART接收FIFO的问题。如果我给UART外围设备通电,我在LSR寄存器中收到RXFE错误,UART TX工作正常 我使用带有120MHz PCLK和115200Baud的LPC4088 我试图读取寄存器以清除挂起的错误,但没有成功。希望你们中的一些人能帮忙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
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应该是帧错误(?)。也就是说:停止位没有找到它们应该在的位置。这可能是多方面的根本原因。