zoukankan      html  css  js  c++  java
  • LPC1768串口使用

     Lpc1768内置了四个串口通讯模块,都是异步通讯模块,其中,串口0/2/3是普通串口通讯,串口1与 UART0/2/3 基本相同,只是增加了一个 Modem 接口和 RS-486/EIA-486 模
    式,不支持 IrDA,我们今天以串口0来演示串口的使用.

      首先,使用串口0要打开串口0的时钟

     

    然后要配置相应的输入输出IO口为串口通讯功能

     

    然后,要控制串口0的时钟源,1768的大部分外设时钟都可以选择从cpu时钟中进行分频

     

    接着,需要设置串口的通讯位,停止位以及波特率等

     

    通过该寄存器能够设置波特率

     

    通过该寄存器可以设置通讯模式

    记住,初始化完成之后需要将除数锁存变为0,使其他人不能随意修改波特率,接着对串口的fifo进行控制

     

    使能相应的中断

     

    然后在系统中使能相应中断通道,串口就可以用了.

    在串口中断处理程序中,先清除通道中断挂起,然后清除串口相应挂起,取出数据,就可以了,详细的代码示例如下

    void DebugSerialInit(u32 baud)

    {

        LPC_SC->PCONP |= (1<<3);                //打开UART0功率、时钟控制位

        LPC_PINCON->PINSEL0 &= ~(0x03<<4);

        LPC_PINCON->PINSEL0 |= (0x01<<4);       //p02 tx0

        LPC_PINCON->PINSEL0 &= ~(0x03<<6);

        LPC_PINCON->PINSEL0 |= (0x01<<6);       //p03 rx0

        LPC_UART0->LCR = 0x83;                  //设置串口数据格式,8位字符长度,1个停止位,无校验,

                                                //使能访问除数锁存器 ,设定波特率

        LPC_SC->PCLKSEL0  &= ~(0x03<<6);        //uart0 pclk = sysclock

        LPC_SC->PCLKSEL0  |= (0x01<<6);         //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,否则串口的波特率的误差比较大,容易造成通讯失败

  • 相关阅读:
    hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
    基于Linux环境Tomcat-MySQL的server搭建
    C++中 pair 的使用方法
    UI 经常用法总结之--- UIWindow UIView (不断更新中)
    LeetCode题解 || Longest Substring Without Repeating Characters (O(n)算法)问题
    HDU 1874 畅通project续 (最短路径)
    android studio 导入第三方库的记录
    android创建桌面快捷键shortcut
    Eclipse:Cannot complete the install because of a conflicting dependency.问题解决
    js保留两位小数的解决的方法
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4338676.html
Copyright © 2011-2022 走看看