新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LPC1768之串口UART0

        LPC1768之串口UART0

        作者: 時間:2016-11-21 來源:網絡 收藏
        串口操作,首先是功率,時鐘控制打開。

        然后是管腳選擇,設置為串口模式。

        本文引用地址:http://www.104case.com/article/201611/319422.htm

        然后設定串口傳輸數據格式。

        波特率設置,(主意有小數位和沒小數位時候不一樣,有小數位需要設置DIVADDL和MULVAL)。

        然后鎖存波特率。

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

        最后打開系統中UART0的中斷,使能接收中斷。

        詳見代碼,代碼中有詳細注釋。

        1. #include<LPC17XX.h>
        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. }


        關鍵詞: LPC1768串口UART

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 洪洞县| 梓潼县| 伊通| 彰武县| 莱芜市| 白河县| 黄梅县| 和政县| 胶南市| 泾川县| 土默特左旗| 泰兴市| 安徽省| 襄城县| 江门市| 沁阳市| 淮滨县| 义马市| 宁都县| 锡林郭勒盟| 无锡市| 文化| 彭山县| 西林县| 唐河县| 阿拉善盟| 广河县| 青岛市| 台南市| 江永县| 伊金霍洛旗| 银川市| 凤城市| 遵义市| 五台县| 赤壁市| 兴宁市| 陵水| 乌拉特中旗| 南康市| 商河县|