Arm LPC1788中UART的波特率设置

Arm LPC1788中UART的波特率设置,arm,uart,cortex-m3,baud-rate,Arm,Uart,Cortex M3,Baud Rate,我正在使用lPC1788的UART,因为我对PCLK进行了以下设置,设置为12MHZ,波特率设置为115200,但在模拟此代码时,波特率未指定为115200或大约 uint32_t uart0_init() { LPC_SC->PCONP |=(1<<3); //Enabling power/clock for UART0 LPC_IOCON->P0_2 = 1; //Selecting fn. 001 for P0.2(U0_

我正在使用lPC1788的
UART
,因为我对
PCLK进行了以下设置,设置为12MHZ
,波特率设置为115200,但在模拟此代码时,波特率未指定为115200或大约

uint32_t uart0_init()
{

  LPC_SC->PCONP |=(1<<3);        //Enabling power/clock for UART0
  LPC_IOCON->P0_2 = 1;           //Selecting fn. 001 for P0.2(U0_TXD)
  LPC_IOCON->P0_3 = 1;           //Selecting fn. 001 for P0.3(U0_RXD)
  LPC_UART0->LCR =(0x83);        //Selecting DLAB=1,1 stop bit,Parity bit and 8-bit character length

  LPC_UART0->DLL = 0x04;         //For PCLK=12MHZ and baud rate as 115200,DLL=4(in dec.)
  LPC_UART0->DLM = 0x00;         //For PCLK=12MHZ and baud rate as 115200,DLM=0(in dec.)
  LPC_UART0->FDR =(0x85);        //DIVADDVAL=1(3:0) and MULVAL=2(7:4) in FDR calculated from the FRest value 
  LPC_UART0->LCR =(0x03);        //Disabling DLAB=0
  LPC_UART0->FCR |=(7<<0);       //Enable FIFOEN,TXFIFORES and RXFIFORES in FCR(0,1,2)

  LPC_UART0->FCR |=(0<<0);       //Disable FIFOEN,TXFIFORES and RXFIFORES in FCR(0,1,2)

  //NVIC_EnableIRQ(UART0_IRQn);

  //LPC_UART0->IER = IER_RBRIE | IER_THREIE | IER_RXIE;

  return 1;

}
uint32\u t uart0\u init()
{
LPC_SC->PCONP |=(1P0_3=1;//为P0.3选择fn.001(U0_RXD)
LPC_UART0->LCR=(0x83);//选择DLAB=1,1停止位、奇偶校验位和8位字符长度
LPC_UART0->DLL=0x04;//对于PCLK=12MHZ,波特率为115200,DLL=4(12月)
LPC_UART0->DLM=0x00;//对于PCLK=12MHZ,波特率为115200,DLM=0(12月)
LPC_UART0->FDR=(0x85);//根据FRest值计算的FDR中的DIVADDVAL=1(3:0)和MULVAL=2(7:4)
LPC_UART0->LCR=(0x03);//禁用DLAB=0

LPC_UART0->FCR |=(7不要使用uart init更改系统控制设置。如果不小心,您将在其他地方覆盖它们。创建sysInit函数并将其设置在那里。将除法器设置为10(0x0a)


这将
MCLK
除以10,您将获得外设的12Mhz时钟。之后,您需要设置
FDR
DLL
设置以达到~115200波特。

您是否更改了PLLClock?PCLKSEL是12Mhz?CCLKSEL是什么?它的120Mhz和默认PCLKSEL值是0x02,因此在时钟分割中获得的PCLK值模拟过程中的r窗口为60mhz。因此,我是否可以添加LPC_SC->PCLKSEL |=(1Hi Gossamer,谢谢你的观点,但在系统中,他们通常用0x02除以CCLK(120MHZ),如果我想得到12MHZ,方法是清除系统文件中的PCLKSEL值或执行(|)最后,我得到了一个12MHZ的PCLK值,UART0在115200波特率下运行良好。
LPC_SC->PCLKSEL = 0x0A;