微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC1768之串口UART0

LPC1768之串口UART0

时间:11-21 来源:互联网 点击:
串口操作,首先是功率,时钟控制打开。

然后是管脚选择,设置为串口模式。

然后设定串口传输数据格式。

波特率设置,(主意有小数位和没小数位时候不一样,有小数位需要设置divADDL和MULVAL)。

然后锁存波特率。

设定控制UARTn RX和TX FIFO的操作。

最后打开系统中UART0的中断,使能接收中断。

详见代码,代码中有详细注释。

  1. #include
  2. #defineFOSC12000000
  3. #defineFCCLK(FOSC*8)
  4. #defineFCCO(FCCLK*3)
  5. #defineFPCLK(FCCLK/4)
  6. intUart0RecvBuf;//UART0RXDATA
  7. voidUart0Init(uint32_tbps)
  8. {
  9. LPC_SC->PCONP|=(1<3); //打开UART0功率、时钟控制位
  10. LPC_PINCON->PINSEL0=0X00000050;//P0.2P0.3设置为串口
  11. LPC_UART0->LCR=0x83; //设置串口数据格式,8位字符长度,1个停止位,无校验,
  12. //使能访问除数锁存器,设定波特率
  13. LPC_UART0->DLM=((FPCLK/16)/bps)/256;//除数高八位没有小数情况
  14. LPC_UART0->DLL=((FPCLK/16)/bps)%256; //除数第八位
  15. LPC_UART0->LCR=0x03; //禁止访问除数锁存器,锁定波特率
  16. LPC_UART0->FCR=0x07; //控制UARTnRX和TXFIFO的操作。接收数据一个字节触发中断
  17. NVIC_EnableIRQ(UART0_IRQn);
  18. LPC_UART0->IER=0x01; //使能接收中断
  19. }
  20. intUart0RecvByte(void)//查询法
  21. {
  22. //当UnRBR包含未读字符时,UnLSR[0]就会被置位;当UARTnRBRFIFO为空时,UnLSR[0]就会被清零
  23. //0-UnRBR为空
  24. //1-UnRBR包含有效数据
  25. while(!((LPC_UART0->LSR)&0x01));//等待判断LSR[0]是否是1,1时表示RBR中接收到数据
  26. return(LPC_UART0->RBR); //读取接收数据
  27. }
  28. intUart0SendByte(intbuf)
  29. {
  30. //当检测到UARTnTHR已空时,THRE就会立即被设置。写UnTHR会清零THRE
  31. //0-UnTHR包含有效字符
  32. //1-UnTHR为空
  33. while(!((LPC_UART0->LSR)&0x01));//等待判断LSR[5](即THRE)是否是1,1时表示THR中为空
  34. LPC_UART0->THR=buf; //发送数据
  35. return0;
  36. }
  37. voidUART0_IRQHandler(void)
  38. {
  39. Uart0RecvBuf=LPC_UART0->RBR;//读取接收数据
  40. Uart0SendByte(Uart0RecvBuf); //发送接收到的数据
  41. }
  42. intmain(void)
  43. {
  44. inttemp;
  45. SystemInit();
  46. Uart0Init(115200);
  47. while(1)
  48. {
  49. //temp=Uart0RecvByte();//查询接收数据
  50. //Uart0SendByte(temp);//发送数据
  51. }
  52. }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top