LPC1768 UART
时间: 2025-01-06 15:44:44 浏览: 5
### LPC1768 UART配置与使用教程
#### 配置UART模块
为了使LPC1768微控制器上的UART正常工作,需先初始化相应的硬件资源。这包括设置波特率、数据位数、停止位以及校验方式等参数。
```c
// 初始化UART0
void UART_Init(void){
// 使能UART外设时钟
LPC_SC->PCONP |= (1 << 3);
// 设置引脚功能为UART模式
LPC_PINCON->PINSEL0 &= ~(0xF<<4);
LPC_PINCON->PINSEL0 |= (0x5<<4);
// 清除LCR寄存器中的DLAB位以便访问DLL/DLM寄存器
LPC_UART0->LCR = 0x83; // 8-bit data length, enable DLAB
// 设置波特率为9600bps
uint32_t PCLK = SystemCoreClock / ((SCS & SCS_CDIV_Msk)>>8);
float fdiv = (float)PCLK/((float)(BAUDRATE*16));
int div_int = (int)fdiv;
int div_frac = (fdiv-(float)div_int)*64+0.5;
LPC_UART0->DLL = div_int;
LPC_UART0->DLM = div_frac>>6;
// 关闭DLAB并重新加载LCR寄存器
LPC_UART0->LCR = 0x03; // 8-bit data length, disable DLAB
// 启用接收和发送中断
NVIC_EnableIRQ(UART0_IRQn);
}
```
#### 处理UART中断事件
对于UART通信过程中产生的各种异常情况,可通过编写对应的ISR函数来处理这些事件。特别是针对超时中断CTI(2b),其会在接收到的数据量未达到预设阈值而超过一定时间间隔时被激活;而对于常规的接收完成中断RDA(2a), 则是在FIFO中有新数据到来时触发[^1]。
```c
void UART_IRQHandler(void){
unsigned char IIRValue = LPC_UART0->IIR >> 1;
switch(IIRValue&0xf){
case 0x06:// 接收线状态错误
break;
case 0x04:// 字符超时指示 CTI
while(LPC_UART0->LSR&(1<<0)){
putchar(getchar());
}
printf("\n\r--- Character Timeout Interrupt ---\r\n");
break;
case 0x02:// 收到数据 RDA
putchar(getchar());
break;
default:
break;
}
}
```
通过上述代码片段可以实现基本的UART初始化操作,并能够响应两种不同类型的接收相关中断——字符超时中断CTI和接收缓冲区就绪中断RDA。值得注意的是,在实际应用中还需要考虑更多细节问题,比如如何防止溢出丢失重要消息等问题。
阅读全文