在线时间5 小时
UID3674134
注册时间2020-10-13
NXP金币0
该用户从未签到
注册会员
- 积分
- 72
- 最后登录
- 2021-6-10
|
LPC1114外接晶振是12MHz,串口打印一直乱码???能看下配置是否有问题?
************************************************/
/* 函数功能:初始化UART口 */
/************************************************/
void UART_init(uint32_t baudrate)
{
uint32_t DL_value,Clear=Clear; // (用这种方式定义变量解决编译器的Warning)
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
LPC_IOCON->PIO1_6 &= ~0x07;
LPC_IOCON->PIO1_6 |= 0x01; //把P1.6脚设置为RXD
LPC_IOCON->PIO1_7 &= ~0x07;
LPC_IOCON->PIO1_7 |= 0x01; //把P1.7脚设置为TXD
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_SYSCON->UARTCLKDIV = 0x1; //时钟分频值为1
// LPC_SYSCON->UARTCLKDIV = 0x5; //时钟分频值为5
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);//允许UART时钟
LPC_UART->LCR = 0x83; //8位传输,1个停止位,无几偶校验,允许访问除数锁存器
DL_value = SystemCoreClock/16/baudrate ; //计算该波特率要求的除数锁存寄存器值
LPC_UART->DLM = DL_value>>8; //写除数锁存器高位值
LPC_UART->DLL = DL_value; //写除数锁存器低位值
// LPC_UART->DLM = 0; //写除数锁存器高位值
// LPC_UART->DLL = 4UL; //写除数锁存器低位值
// LPC_UART->FDR|=(8UL<<4)|5UL; //小数分频为1.625,则波特率为12M/(16*4*1.625)=115384,与115200误差为0.16%
LPC_UART->LCR = 0x03; //DLAB置0
LPC_UART->FCR = 0x07; //允许FIFO,清空RxFIFO 和 TxFIFO
Clear = LPC_UART->LSR; //读UART状态寄存器将清空残留状态
}
/************************************************/
/* 函数功能:串口接收字节数据 */
/************************************************/
uint8_t UART_recive(void)
{
while(!(LPC_UART->LSR & (1<<0)));//等待接收到数据
return(LPC_UART->RBR); //读出数据
}
/************************************************/
/* 函数功能:串口发送字节数据 */
/************************************************/
void UART_send_byte(uint8_t byte)
{
while ( !(LPC_UART->LSR & (1<<5)) );//等待发送完
LPC_UART->THR = byte;//把待发的数据给了THR寄存器
}
/************************************************/
/* 函数功能:串口发送数组数据 */
/************************************************/
void UART_send(uint8_t *Buffer, uint32_t Length)
{
while(Length != 0)
{
while ( !(LPC_UART->LSR & (1<<5)) );//等待发送完
LPC_UART->THR = *Buffer;//把待发的数据给了THR寄存器
Buffer++;//取下一个字节
Length--;//字节长度减1
}
}
|
|