gpt4 book ai didi

更改 LPC1768 的波特率 UART 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:19 26 4
gpt4 key购买 nike

我在更改 lpc1768 上的 uart 波特率时遇到了一些问题。

为了初始化和配置我的 uart,我使用了以下代码,它在 9600 波特率或 38400 波特率下运行良好。

/* RxD0 is P0.3 and TxD0 is P0.2 */
LPC_PINCON->PINSEL0 &= ~(0x03<<4); // Reset P0.2 = GPIO
LPC_PINCON->PINSEL0 |= (0x01<<4); // Config P0.2 = TxD0
LPC_PINCON->PINSEL0 &= ~(0x03<<6); // Reset P0.3 = GPIO
LPC_PINCON->PINSEL0 |= (0x01<<6); // Config P0.3 = RxD0

LPC_UART0->LCR = 0x87; //8bits, no parity, 2 stop bits
switch (baudrate)
{
default :
case 9600 :
LPC_UART0->DLM = 0x00; //calculated with datasheet
LPC_UART0->DLL = 0x4E;

LPC_UART0->FDR = 0x21;
break;

case 38400 :
LPC_UART0->DLM = 0x00; //calculated with datasheet
LPC_UART0->DLL = 0x14;

LPC_UART0->FDR = 0xF7;
}




LPC_UART0->LCR = 0x07;//0x03; /* DLAB = 0 */
LPC_UART0->FCR = 0x07; /* Enable and reset TX and RX FIFO. */

NVIC_EnableIRQ(UART0_IRQn);

LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */

但要将波特率从 9600 更改为 38400,我尝试将 DLM/DLL 和 FDR 寄存器更改为适当的值(与上面的代码相同)。但这不起作用...(波特率未定义)。

我的pclk是18MHz

仅更改这三个寄存器还不够吗?我错了吗?

最佳答案

我找到了解决方案:我忘记设置 LCR 寄存器中的 DLAB 位。如果不进行此更改,则无法更改波特率。

改变波特率的一个简单方法是:

   LPC_UART0->LCR = 0x87;
switch (baudrate)
{
default :
case 9600 :
LPC_UART0->DLM = 0x00; //fhn calculated with algorithm in the datasheet
LPC_UART0->DLL = 0x4E;//0x06;

LPC_UART0->FDR = 0x21;//0x85;calculation, but not sure to need
break;

case 38400 :
LPC_UART0->DLM = 0x00;
LPC_UART0->DLL = 0x14;//0x06;

LPC_UART0->FDR = 0xF7;
break;
}
LPC_UART0->LCR = 0x07;

关于更改 LPC1768 的波特率 UART 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com