我正在使用 LPC2148 微控制器中的 UART。我找不到任何寄存器来设置 UART 的时钟频率。是否有任何寄存器来设置时钟频率?
问问题
338 次
1 回答
0
参考资料中描述的“又快又脏”的方法是:
U0DLL = 以赫兹为单位的 PCLK / ( 16 * desired_baud_rate )
这是一个简化的方程;其他的可以通过调整各种寄存器来微调串行波特率来进行调整。
从同一个参考:
现在,如前所示。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!
}
于 2017-07-05T18:09:13.870 回答