当前位置:文档之家› LPC1768串口配置

LPC1768串口配置

/*********************************************************************************************************
** 函数名称: UART1_Cfg
** 功能描述: 配置UART1
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void UART1_Cfg(void)
{
LPC_SC->PCONP |= (1<<4); // 打开UART1功率、时钟控制位
// LPC_PINCON->PINSEL0 |= (1 << 30); // 设置引脚 P0.15 为 TXD1
// LPC_PINCON->PINSEL1 |= (1 << 0); // 设置引脚 P0.16 为 RXD1

LPC_PINCON->PINSEL4 |= (2 << 0); // 设置引脚 P2.0 为 TXD1
LPC_PINCON->PINSEL4 |= (2 << 2); // 设置引脚 P2.1 为 RXD1

LPC_UART1->LCR = 0x83; // 使能访问除数锁存器 ,设定波特率
// 设置串口数据格式,8位字符长度,1个停止位,无校验
if(UART1_BPS == 2400)
{
LPC_UART1->DLM = ((FPCLK/16)/UART1_BPS) / 256; // 除数高八位,没有小数情况
LPC_UART1->DLL = ((FPCLK/16)/UART1_BPS) % 256; // 除数第八位
LPC_UART1->FDR = 0; // 小数分频寄存器关闭
}
else if(UART1_BPS == 9600)
{
LPC_UART1->DLM = 0; // 有小数情况,高字节
LPC_UART1->DLL = 108; // 低字节
LPC_UART1->FDR = (1UL<<0) | (2UL<<4); // 小数分频寄存器
}
else if(UART1_BPS == 38400)
{
LPC_UART1->DLM = 0; // 有小数情况,高字节
LPC_UART1->DLL = 26; // 低字节
LPC_UART1->FDR = (1UL<<0) | (2UL<<4); // 小数分频寄存器
}
else if(UART1_BPS == 115200)
{
LPC_UART1->DLM = 0; // 有小数情况,高字节
LPC_UART1->DLL = 9; // 低字节
LPC_UART1->FDR = (4UL<<0) | (9UL<<4); // 小数分频寄存器
}
LPC_UART1->LCR = 0x03; // 禁止访问除数锁存器,锁定波特率
LPC_UART1->FCR = 0x07; // 控制UARTn RX和TX FIFO的操作。接收数据一个字节触发中断
NVIC_EnableIRQ(UART1_IRQn); // 设置中断入口
NVIC_SetPriority(UART1_IRQn, NVIC_PRIORTY_UART1); // 设置中断优先级
LPC_UART1->IER = (1UL << 0)|(1UL << 1); // 使能接收和发送中断 bit0 接收中断 bit1 发送中断
}
/*********************************************************************************************************
** 函数名称: UART1_SentByte
** 功能描述: 串口发送单字节数据
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void UART1_SentByte(uint8_t dat)
{
LPC_UART1->IER &= ~(1UL << 1); // 关闭发送中断, bit0 接收中断;bit1 发送中断
LPC_UART1->THR = dat;
while ( !(LPC_UART1->LSR & 0x20) ); // 等待发送
LPC_UART1->IER |= (1UL << 1); // 使能发送中断
}
/*********************************************************************************************************
** 函数名称: UART1_IRQHandler
** 功能描述: 串口1中断处理函数
** 输 入: 无
** 输 出: 无
**********************

**********************************************************************************/
void UART1_IRQHandler(void)
{
uint8 iir,temp;
iir = LPC_UART1->IIR;
switch (iir & 0x0F) // 检查IIR的中断标示 bit1~bit3
{
case 0x04: // 接收数据可用
case 0x0C: // 字符超时指示
{
temp = LPC_UART1->LSR;
while(temp & 0x01) // 接收到数据
{
if(temp & 0x80) // 接收到的数据包含错误
temp = LPC_UART1->RBR; // 丢弃接收到的错误字节
else // 接收FIFO有可用数据
{
U1Rv_Buf = LPC_UART1->RBR; // 读取数据
}
temp = LPC_UART1->LSR;
}
}break;
case 0x02: // 发送中断
{

}break;
default:
break;
}
}

相关主题
文本预览
相关文档 最新文档