新聞中心

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

        LPC1768串口使用

        作者: 時間:2018-08-06 來源:網絡 收藏

        Lpc1768內置了四個通訊模塊,都是異步通訊模塊,其中,0/2/3是普通通訊,串口1與 UART0/2/3 基本相同,只是增加了一個 Modem 接口和 RS-486/EIA-486 模式,不支持 IrDA,我們今天以串口0來演示串口的使用.

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

        首先,使用串口0要打開串口0的時鐘

        然后要配置相應的輸入輸出IO口為串口通訊功能

        然后,要控制串口0的時鐘源,1768的大部分外設時鐘都可以選擇從cpu時鐘中進行分頻

        接著,需要設置串口的通訊位,停止位以及波特率等

        通過該寄存器能夠設置波特率

        通過該寄存器可以設置通訊模式

        記住,初始化完成之后需要將除數鎖存變為0,使其他人不能隨意修改波特率,接著對串口的fifo進行控制

        使能相應的中斷

        然后在系統中使能相應中斷通道,串口就可以用了.

        在串口中斷處理程序中,先清除通道中斷掛起,然后清除串口相應掛起,取出數據,就可以了,詳細的代碼示例如下

        void DebugSerialInit(u32 baud)

        {

        LPC_SC->PCONP = (13); //打開UART0功率、時鐘控制位

        LPC_PINCON->PINSEL0 = ~(0x034);

        LPC_PINCON->PINSEL0 |= (0x014); //p02 tx0

        LPC_PINCON->PINSEL0 = ~(0x036);

        LPC_PINCON->PINSEL0 |= (0x016); //p03 rx0

        LPC_UART0->LCR = 0x83; //設置串口數據格式,8位字符長度,1個停止位,無校驗,

        //使能訪問除數鎖存器 ,設定波特率

        LPC_SC->PCLKSEL0 = ~(0x036); //uart0 pclk = sysclock

        LPC_SC->PCLKSEL0 |= (0x016); //uart0 pclk = sysclock

        LPC_UART0->DLM = ((SystemCoreClock/16)/baud) / 256; //除數高八位 , 沒有小數情況

        LPC_UART0->DLL = ((SystemCoreClock/16)/baud) % 256; //除數第八位

        LPC_UART0->LCR = 0x03; //禁止訪問除數鎖存器,鎖定波特率

        LPC_UART0->FCR = 0x00; //禁止FIFO

        NVIC_ClearPendingIRQ(UART0_IRQn);

        NVIC_SetPriority(UART0_IRQn,NVIC_EncodePriority(SYS_NVIC_GROUP,UART0_PreemptPriority,UART0_SubPriority));

        NVIC_EnableIRQ(UART0_IRQn); /* enable irq in nvic */

        LPC_UART0->IER = 0x01; //使能接收中斷

        }

        串口中斷處理程序如下

        void UART0_IRQHandler(void)

        {

        u8 Res;

        NVIC_ClearPendingIRQ(UART0_IRQn);

        Res = LPC_UART0->RBR; //讀取接收數據,讀取中斷自動清零

        DebugSerialSendChar(Res);

        }

        注意一點,在不使用小數寄存器的情況下,115200的的波特率,串口的外設時鐘最好在100M,否則串口的波特率的誤差比較大,容易造成通訊失敗。

        『本文轉載自網絡,版權歸原作者所有,如有侵權請聯系刪除』



        關鍵詞: 單片機 LPC1768 串口

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 颍上县| 乐山市| 固镇县| 永川市| 北流市| 安康市| 冕宁县| 东乌珠穆沁旗| 西乌珠穆沁旗| 思茅市| 峡江县| 仲巴县| 延庆县| 丰城市| 仙桃市| 惠东县| 英超| 额尔古纳市| 秦安县| 横山县| 集贤县| 永吉县| 崇阳县| 临朐县| 仙游县| 扎兰屯市| 乐东| 陇西县| 兖州市| 济宁市| 四子王旗| 东辽县| 高陵县| 蚌埠市| 永胜县| 湖州市| 康定县| 乐亭县| 上饶县| 淅川县| 湾仔区|