[原创] 4【学习LPC1768库函数】之串口实验

cxmdz   2019-7-30 09:59 楼主

LPC1768有四个串口可以使用,本章用串口0和串口2作为实验,其中串口0配置发送和中断接收。
 

090944xxg3xx08sxgthof0 (2).png

/************************************************************************************************
** 函数名: 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;
           
                        
                
}

【04】LPC1768_串口实验.rar (248.61 KB)
(下载次数: 24, 2019-7-30 10:28 上传)


此内容由EEWORLD论坛网友cxmdz原创,如需转载或用于商业用途需征得作者同意并注明出处

本帖最后由 cxmdz 于 2019-7-30 10:28 编辑

回复评论 (1)

谢谢共享,学习了

点赞  2019-11-12 13:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复