首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC1768串口使用

LPC1768串口使用

Lpc1768内置了四个串口通讯模块,都是异步通讯模块,其中,串口0/2/3是普通串口通讯,串口1与 UART0/2/3 基本相同,只是增加了一个 Modem 接口和 RS-486/EIA-486 模式,不支持 IrDA,我们今天以串口0来演示串口的使用.
首先,使用串口0要打开串口0的时钟
然后在系统中使能相应中断通道,串口就可以用了.
在串口中断处理程序中,先清除通道中断挂起,然后清除串口相应挂起,取出数据,就可以了,详细的代码示例如下
void DebugSerialInit(u32 baud)
{
LPC_SC->PCONP "= (1<<3); //打开UART0功率、时钟控制位
LPC_PINCON->PINSEL0 &= ~(0x03<<4);
LPC_PINCON->PINSEL0 |= (0x01<<4); //p02 tx0
LPC_PINCON->PINSEL0 &= ~(0x03<<6);
LPC_PINCON->PINSEL0 |= (0x01<<6); //p03 rx0
LPC_UART0->LCR = 0x83; //设置串口数据格式,8位字符长度,1个停止位,无校验,
//使能访问除数锁存器 ,设定波特率
LPC_SC->PCLKSEL0 &= ~(0x03<<6); //uart0 pclk = sysclock
LPC_SC->PCLKSEL0 |= (0x01<<6); //uart0 pclk = sysclock
LPC_UART0->DLM = ((SystemCoreClock/16)/baud) / 256; //除数高八位 , 没有小数情况
LPC_UART0->DLL = ((SystemCoreClock/16)/baud) % 256; //除数第八位
LPC_UART0->LCR = 0x03; //禁止访问除数锁存器,锁定波特率
LPC_UART0->FCR = 0x00; //禁止FIFO
NVIC_ClearPendingIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn,NVIC_EncodePriority(SYS_NVIC_GROUP,UART0_PreemptPriority,UART0_SubPriority));
NVIC_EnableIRQ(UART0_IRQn); /* enable irq in nvic */
LPC_UART0->IER = 0x01; //使能接收中断
}
串口中断处理程序如下
void UART0_IRQHandler(void)
{
u8 Res;
NVIC_ClearPendingIRQ(UART0_IRQn);
Res = LPC_UART0->RBR; //读取接收数据,读取中断自动清零
DebugSerialSendChar(Res);
}
注意一点,在不使用小数寄存器的情况下,115200的的波特率,串口的外设时钟最好在100M,否则串口的波特率的误差比较大,容易造成通讯失败。
返回列表