【问题标题】:Is there any register to set the clock frequency for UART?是否有任何寄存器可以设置 UART 的时钟频率?
【发布时间】:2017-07-05 10:30:27
【问题描述】:

我正在使用 LPC2148 微控制器中的 UART。我找不到任何寄存器来设置 UART 的时钟频率。是否有任何寄存器来设置时钟频率?

【问题讨论】:

  • 您是指为 UART 供电的时钟频率还是您要设置波特率?
  • 我的意思是UART可以工作的时钟频率?
  • 我还是不够聪明,抱歉。您是指通信信号的波特率还是外设时钟速度?您是说波特率设置为 9600 波特,还是说您想为外围设备本身提供不同频率的时钟?
  • 是的。我说的是外围时钟速度。
  • UART 与所有外设一样,由 PCLK 提供。如果将其更改为一个,则将其更改为所有外围设备。但是,这些 UART 的波特率发生器有小数分频器,所以我不太确定您为什么要更改 PCLK?

标签: microcontroller nxp-microcontroller


【解决方案1】:

参考中描述的“又快又脏”的方法是:

U0DLL = 以赫兹为单位的 PCLK / ( 16 * desired_baud_rate )

这是一个简化的方程;其他的有调整,可以通过调整各种寄存器来微调串行波特率。

来自同一参考:

现在,如 Ex. 2 – 为了在 60Mhz PCLK 下获得 9600(实际上是 9605)波特,我们必须使用以下设置来生成波特:

U0DLL = 110 ; U0DLM = 1;多值 = 15 ; DIVADDVAL = 0 (您可以将这些值转换为十六进制=或=直接以十进制形式使用) 现在,让我们创建一个名为“InitUART0()”的函数,它将根据需要配置和初始化 UART0:

void InitUART0(void)
{
  PINSEL0 = 0x5;  /* Select TxD for P0.0 and RxD for P0.1 */ 
  U0LCR = 3 | (1<<7) ; /* 8 bits, no Parity, 1 Stop bit | DLAB set to 1  */
  U0DLL = 110;
  U0DLM = 1;    
  U0FDR = (MULVAL<<4) | DIVADDVAL; /* MULVAL=15(bits - 7:4) , DIVADDVAL=0(bits - 3:0)  */
  U0LCR &= 0x0F; // Set DLAB=0 to lock MULVAL and DIVADDVAL
  //BaudRate is now ~9600 and we are ready for UART communication!

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多