LPC1768之串口UART0

来源:互联网 发布:苹果平板淘宝怎么横屏 编辑:程序博客网 时间:2024/04/30 12:06

转自:http://blog.csdn.net/bmbm546/article/details/7471670
串口操作,首先是功率,时钟控制打开。

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

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

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

然后锁存波特率。

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

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

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

[html] view plaincopy
  1. /*************************************************************************************      
  2. *   main.c:  the main file   
  3. *   NXP --> LPC1768  
  4. *  
  5. *     
  6. *   Author  :   light                     
  7. *   Date    :   2012-4-17    
  8. *  
  9. ***************************************************************************************/  
  10.   
  11. #include<LPC17XX.h>  
  12.   
  13.   
  14. #define FOSC                        12000000                            /*  振荡器频率                  */  
  15.   
  16. #define FCCLK                      (FOSC  * 8)                          /*  主时钟频率<=100Mhz          */  
  17.                                                                         /*  FOSC的整数倍                */  
  18. #define FCCO                       (FCCLK * 3)                          /*  PLL频率(275Mhz~550Mhz)      */  
  19.                                                                         /*  与FCCLK相同,或是其的偶数倍 */  
  20. #define FPCLK                      (FCCLK / 4)                          /*  外设时钟频率,FCCLK的1/2、1/4*/  
  21.                                                                         /*  或与FCCLK相同               */  
  22.   
  23. int Uart0RecvBuf;                   // UART0 RX DATA  
  24. /********************************************************************************  
  25. ** Descriptions         :Uart0 Initial  
  26. **  
  27. ** parameters           :baud rate   
  28. ** Returned value       :None  
  29. *********************************************************************************/  
  30. void Uart0Init(uint32_t bps)   
  31. {  
  32.     LPC_SC->PCONP |= (1<<3);               //打开UART0功率、时钟控制位  
  33.   
  34.     LPC_PINCON->PINSEL0 = 0X00000050;        //P0.2 P0.3设置为串口  
  35.   
  36.     LPC_UART0->LCR = 0x83;                   //设置串口数据格式,8位字符长度,1个停止位,无校验,  
  37.                                             //使能访问除数锁存器 ,设定波特率  
  38.     LPC_UART0->DLM = ((FPCLK/16)/bps) / 256; //除数高八位  , 没有小数情况  
  39.     LPC_UART0->DLL = ((FPCLK/16)/bps) % 256;     //除数第八位  
  40.   
  41.     LPC_UART0->LCR = 0x03;                   //禁止访问除数锁存器,锁定波特率  
  42.   
  43.     LPC_UART0->FCR  = 0x07;              //控制UARTn RX和TX FIFO的操作。接收数据一个字节触发中断  
  44.   
  45.     NVIC_EnableIRQ(UART0_IRQn);              /* enable irq in nvic              */  
  46.     LPC_UART0->IER = 0x01;                   //使能接收中断  
  47. }  
  48. /********************************************************************************  
  49. ** Descriptions         :Uart0 Receive Data  
  50. **  
  51. ** parameters           :None   
  52. ** Returned value       :Received Data  
  53. *********************************************************************************/  
  54. int Uart0RecvByte(void)   //查询法  
  55. {  
  56.     //当UnRBR包含未读字符时,UnLSR[0]就会被置位;当UARTn RBR FIFO为空时,UnLSR[0]就会被清零  
  57.     //0  -  UnRBR为空  
  58.     //1  -  UnRBR包含有效数据  
  59.     while(!((LPC_UART0->LSR) & 0x01));       //等待判断LSR[0]是否是1,1时表示RBR中接收到数据        
  60.       
  61.     return(LPC_UART0->RBR);                  //读取接收数据  
  62. }  
  63. /********************************************************************************  
  64. ** Descriptions         :Uart0 Send Data  
  65. **  
  66. ** parameters           :None   
  67. ** Returned value       :None  
  68. *********************************************************************************/  
  69. int Uart0SendByte(int buf)  
  70. {  
  71.     //当检测到UARTn THR已空时,THRE就会立即被设置。写UnTHR会清零THRE  
  72.     //0  -  UnTHR包含有效字符  
  73.     //1  -  UnTHR为空  
  74.     while(!((LPC_UART0->LSR) & 0x01));       //等待判断LSR[5](即THRE)是否是1,1时表示THR中为空        
  75.       
  76.     LPC_UART0->THR = buf;                    //发送数据  
  77.   
  78.     return 0;  
  79. }  
  80. /********************************************************************************  
  81. ** Descriptions         :Uart0 Interrupt Receive Data  
  82. **  
  83. ** parameters           :None   
  84. ** Returned value       :Received Data  
  85. *********************************************************************************/  
  86. void UART0_IRQHandler(void)  
  87. {  
  88.     Uart0RecvBuf = LPC_UART0->RBR;       //读取接收数据      
  89.   
  90.     Uart0SendByte(Uart0RecvBuf);        //发送接收到的数据  
  91. }  
  92.   
  93. /*----------------------------------------------------------------------------  
  94.   The main Function   
  95.  *----------------------------------------------------------------------------*/  
  96. int main(void)  
  97. {  
  98.     int temp;  
  99.   
  100.     SystemInit();  
  101.     Uart0Init(115200);  
  102.   
  103.     while(1)  
  104.     {  
  105.                       
  106.     //  temp = Uart0RecvByte();         //查询接收数据  
  107.     //  Uart0SendByte(temp);            //发送数据  
  108.   
  109.     }  
  110.   
  111. }  
0 0