LPC1768有四个串口可以使用,本章用串口0和串口2作为实验,其中串口0配置发送和中断接收。
/************************************************************************************************
** 函数名: void UARTInit( uint32_t PortNum, uint32_t baudrate)
** 函数功能:串口初始化程序
** 输入参数: UARTNum 选择串口号,baudrate串口波特率大小
** 输出参数 :无
** 返回值:无
*************************************************************************************************/
void UARTInit( uint32_t UARTNum, uint32_t baudrate)
{
if ( UARTNum == 0 )
{
//第一步 设置P0.2 P0.3为串口功能
Chip_IOCON_PinMux(LPC_IOCON, 0, 2, IOCON_MODE_INACT, IOCON_FUNC1);//设置P0.2为串口功能管脚
Chip_IOCON_PinMux(LPC_IOCON, 0, 3, IOCON_MODE_INACT, IOCON_FUNC1); //设置P0.3为串口功能管脚
//第二步 初始化串口0
Chip_UART_Init(LPC_UART0);//初始化串口0
//第三步 //设置波特率
Chip_UART_SetBaud(LPC_UART0, baudrate);//设置波特率
//第四步 //8 bits, 无校验, 1 个停止位
Chip_UART_ConfigData(LPC_UART0, UART_LCR_WLEN8 | UART_LCR_SBS_1BIT | UART_LCR_PARITY_DIS);// 8 bits, 无校验, 1 个停止位
//第五步 //使能发送
Chip_UART_TXEnable(LPC_UART0);//使能发送
//第六步 //使能接收中断
Chip_UART_IntEnable(LPC_UART0,UART_IIR_INTSTAT_PEND);//使能接收中断
//第七步 ////使能串口0中断
NVIC_EnableIRQ(UART0_IRQn);//使能中断
}
else if ( UARTNum == 2 )
{
Chip_IOCON_PinMux(LPC_IOCON, 0, 10, IOCON_MODE_INACT, IOCON_FUNC1);//设置P0.10为串口功能管脚
Chip_IOCON_PinMux(LPC_IOCON, 0, 11, IOCON_MODE_INACT, IOCON_FUNC1); //设置P0.11为串口功能管脚
Chip_UART_Init(LPC_UART2);//初始化串口2
Chip_UART_SetBaud(LPC_UART2, baudrate);//设置波特率
Chip_UART_ConfigData(LPC_UART2, UART_LCR_WLEN8 | UART_LCR_SBS_1BIT | UART_LCR_PARITY_DIS); // 8 bits, 无校验, 1 个停止位
Chip_UART_TXEnable(LPC_UART2);//使能发送
}
}
/************************************************************************************************
** 函数名:void UART0_SendByte (int ucData)
** 函数功能:串口0发送字节程序
** 输入参数:ucData 一个字节数据
** 输出参数 :无
** 返回值:无
*************************************************************************************************/
void UART0_SendByte (uint8_t ucData)
{
//判断发送线是否有数据,没有数据,则可以发送。有数据,等待
while (!(Chip_UART_ReadLineStatus(LPC_UART0) & UART_LSR_THRE)); /*读bit5 0 为有数据,1 为发送完成*/
Chip_UART_SendByte(LPC_UART0,ucData);
}
/************************************************************************************************
** 函数名: int UART0_GetChar (void)
** 函数功能:串口0接收字节数据
** 输入参数:无
** 输出参数 :无
** 返回值:一个字节数据
*************************************************************************************************/
int UART0_GetChar (void)
{
//判断接收线是否有数据,没有数据,则等待。有数据,则读出
while (!(Chip_UART_ReadLineStatus(LPC_UART0) & UART_LSR_RDR)); /*读bit0 0 为空,1 为接收到数据*/
return Chip_UART_ReadByte(LPC_UART0);
}
/************************************************************************************************
** 函数名:void UART0_IRQHandler(void)
** 函数功能:串口0中断服务函数
** 输入参数:无
** 输出参数 :无
** 返回值:无
*************************************************************************************************/
void UART0_IRQHandler(void)
{
//判断中断接收标志,读取该位,中断标志自动清零
if(((Chip_UART_ReadIntIDReg(LPC_UART0)>>2&0x01)))
buffer[num]=UART0_GetChar();
num++;
rxd_flag=1;
}