LPC1788---串口设置

发布者:SereneSerenity最新更新时间:2021-10-14 来源: eefocus关键字:LPC1788  串口设置  寄存器 手机看文章 扫描二维码
随时随地手机看文章

LPC1788学习之串口学习-寄存器操作


接收数据使用中断接收---发送暂时是直接发送--简单的寄存器操作-记下不忘记!


#include "uart_lpc1788.h"


uint32_t Receive_Sign; //接收数据下标--接收数据个数

uint8_t  Receive_Buf[UART_RING_BUFSIZE]; //接收数组


/*-----------------------串口0初始化------------------*/

void Uart0_Init(uint32_t clk, uint32_t baudrate)

{

    uint32_t tmp;

    uint16_t divisorInt;


    LPC_IOCON->P0_2=0X21;

    LPC_IOCON->P0_3=0X21;


    LPC_SC->PCONP |= (1<<3); //外设时钟使能

//--------------------------------------------- 

    LPC_UART0->FCR=0X07;

    LPC_UART0->FCR=0X00;

    while (LPC_UART0->LSR & 0X01)

    {

        tmp = LPC_UART0->RBR;  //假读取去清空

    }

    LPC_UART0->TER = 0x80;

    while (!(LPC_UART0->LSR & 0x20));

    LPC_UART0->TER = 0;

    LPC_UART0->IER = 0;

    LPC_UART0->LCR = 0;

    LPC_UART0->ACR = 0;

    LPC_UART0->RS485CTRL = 0;

    LPC_UART0->RS485DLY = 0;

    LPC_UART0->ADRMATCH = 0;

    tmp = LPC_UART0->LSR;  //获取线状态寄存器

//-------------------------------------

    divisorInt =Uart0GetDivisorByBaudrate(clk,baudrate);   

    LPC_UART0->LCR |= 0x80; //使能访问除数寄存器


    LPC_UART0->DLM = (divisorInt>>8) & 0xFF;

    LPC_UART0->DLL = divisorInt & 0xFF;


    LPC_UART0->LCR &= (~0x80) & 0xFF; //禁止访问

//------------------------------------------ 

    tmp = (LPC_UART0->LCR & (0x80 | 0x40)) & 0xFF;

    tmp |= 0x03;  //8位数据-1个停止位-禁止奇偶校验

    LPC_UART0->LCR = (uint8_t)(tmp & 0xFF);

//----------------------------------------------

    tmp=0;

    tmp |= 0x01; //使能FIFO

    tmp |= 0x00; //触发点0-一个字符触发中断

    tmp |= 0x04; //发送缓存

    tmp |= 0x02; //接收缓存

    LPC_UART0->FCR = tmp & 0xFF;

//------------------------------------------------

    LPC_UART0->TER |= 0x80;//发送使能

    LPC_UART0->IER|= 0x01& 0x307; //使能RD数据接收中断

    LPC_UART0->IER|= 0x04& 0x307;  //使能RX线状态中断

//----------------------------------------------------

    Receive_Sign=0; 

//--------------------------------------

    NVIC_SetPriority(UART0_IRQn, ((0x01<<3)|0x01));

    NVIC_EnableIRQ(UART0_IRQn);

}

/*-------------------串口0中断函数----------------------*/

void UART0_IRQHandler(void)

{

    uint32_t  tmp, tmp1;


    tmp = ((LPC_UART0->IIR) & 0x3CF) & (7<<1);   //获取中断标识


    if (tmp == (3<<1)) //线状态中断

    {

        tmp1 = ((LPC_UART0->LSR) & 0xFF);

        tmp1 &= ((1<<1) | (1<<2) | (1<<3)| (1<<4) | (1<<7));

        if (tmp1)  //有错误

        {

            while (1){}

        }

    }

    if ((tmp == (2<<1)) || (tmp == (6<<1)))//接收数据中断--超时中断

    {

        Receive_Buf[Receive_Sign]= (LPC_UART0->RBR & 0xFF);  //读取数据

        Receive_Sign++;

    }

    if (tmp == (1<<1))//THRE发送中断

    {

        //UART_IntTransmit(); //发送数据--未使用

    }

}

/*-----------发送指定数组----------------*/

void UART0_SendStr(uint8_t *txbuf)

{

    uint8_t *pChar = txbuf;



    while(*pChar!='')

    {

        while (!(LPC_UART0->LSR & (1<<5)));//发送保持寄存器为空

        LPC_UART0->THR = (*pChar) & 0xFF; //发送数据

        pChar++; 

    }

}

/*---------发送指定数组的指定长度-----不知道为啥-buflen不能使用sizeof函数----------*/

void UART0_SendStrNum(uint8_t *txbuf,uint32_t buflen)

{

    uint16_t i;

    uint8_t *pChar = txbuf;



    for(i=0;i    {

        while (!(LPC_UART0->LSR & (1<<5)));//发送保持寄存器为空

        LPC_UART0->THR = (*pChar) & 0xFF; //发送数据

        pChar++;

    }

}


/*----------根据外设频率与波特率计算分频寄存器的值----------*/

uint16_t Uart0GetDivisorByBaudrate(uint32_t clk, uint32_t baudrate)

{

    float divisor;

    uint16_t divisorInt;

    

    divisor = (float)clk/(baudrate*16);    

    divisorInt = (uint16_t)(divisor/256);    

    divisor-=(divisorInt*256);

    

    if ((divisor - (uint32_t)divisor) > 0.5F)  //四舍五入

    {

        divisorInt = (divisorInt << 8) | ((uint8_t)divisor + 1);

    }

    else

    {

        divisorInt = (divisorInt << 8) | (uint8_t)divisor;

    }    

    return divisorInt;  //高8位-DLM--低8位-DLL

}

关键字:LPC1788  串口设置  寄存器 引用地址:LPC1788---串口设置

上一篇:LPC1788--TIMER匹配中断设置--寄存器操作
下一篇:LPC1788 LCD 学习

推荐阅读最新更新时间:2024-11-09 06:43

(ARM11 S3C6410) ARM11裸机初体验,GPIO寄存器
拿到一款陌生的MCU,通常想的是先跑跑裸机。……通常第一件事是观摩GPIO寄存器。 OK6410开发板电路图。 6410的IO口资源…… 想关的寄存器地址 GPMCON:IO口配备寄存器。 GPMDAT与GPLPUD寄存器。 通常,接触一款新的MCU。个人喜好写一个构件库(观摩完所有的寄存器后,构件就全部写好了)。调用自己写好的构件会很方便。 创建init.s汇编代码 关看门狗 设置堆栈 设置CPU基地址 IMPORT main AREA init,CODE,READONLY PRESERVE8 ENTRY LDR R0, =0x70000000 ORR R
[单片机]
(ARM11 S3C6410) ARM11裸机初体验,GPIO<font color='red'>寄存器</font>
MSP430f2619学习--PWM
思路: 利用定时器B的比较功能输出PWM波形; 一、定时器B 定时器B的特点: 1)异步16位定时/计数器; 2)4种工作模式; 3)4个可选长度 4)3或7个可配置的捕获/比较寄存器; 定时器的4种工作方式分别为,停止计数模式,增计数模式,连续计数模式和增减计数模式; 要输出PWM波形,需要配置定时器B的捕获/比较部件工作在比较模式,寄存器TBCCTLx的CAP位配置为0即可; TBCCTLx寄存器定义: 定时器的每一个捕获/比较部件都拥有一组输出单元,这个输出单元是用来产生输出信号的,例如PWM波等,输出信号的引脚通常在数据手册中都会表明 每个输出单元都有8种模式: 1)电平输出,由TBCCTLx寄存器
[单片机]
MSP430f2619学习--PWM
s3c2440裸机-时钟编程(二、配置时钟寄存器)
1.2440时钟时序 下图是2440时钟配置时序: 1.上电后,nRESET复位信号拉低,此时cpu还无法取指令工作。 2.nRESET复位信号结束后变为高电平,此时cpu开始工作。此时cpu主频FCLK=osc。 3.此时可以配置PLL,经过lock time后,FCLK倍频成新的时钟。 2.如何配置时钟 在参考手册的特性里介绍了S3C2440的工作频率,Fclk最高400MHz,Hclk最高136MHz,Pclk最高68MHz。那么 我们干脆配置FCLK:HCLK:PCLK= 400:100:50 (MHz). 1,先配置lock time 我们取芯片手册上的推荐值。 /* LOCKTIME(0x4C000000)
[单片机]
s3c2440裸机-时钟编程(二、配置时钟<font color='red'>寄存器</font>)
详解ARM处理寄存器与用户模式
37个寄存器 ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括: 31个通用寄存器:包括程序计数器(PC指针),均为32位的寄存器。 6个状态寄存器:用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。 7种运行模式 ARM微处理器支持7种运行模式,分别为: usr(用户模式):ARM处理器正常程序执行模式。 fiq(快速中断模式):用于高速数据传输或通道处理 irq(外部中断模式):用于通用的中断处理 svc(管理模式):操作系统使用的保护模式 abt (数据访问终止模式): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 sys(系统
[单片机]

推荐帖子

安防英文词解释
MPG用MPEG-1压缩标准压缩的文件格式。它可以同进包括图像文件的画面和伴音面分,出可以只包括画面成分。AVIAAVI是AudioVideoInterleave的缩写,Windows3.1的视频格式,兼容好、调用方便、图象质量好,体积大。CSS“内容加密编码系统”。正式的DVD视频数字加密方案。仅CSS许可的DVD播放器才可以破译视频数据的密码。CVBSCVBS是复合视频。DivX应用MPEG-4技术的数字视频编解码器(
maker 安防电子
详解消灭EMC的三大利器:电容器/电感/磁珠
滤波电容器、共模电感、磁珠在EMC设计电路中是常见的身影,也是消灭电磁干扰的三大利器。对于这三者在电路中的作用,相信还有很多工程师搞不清楚,文章从设计中详细分析了消灭EMC三大利器的原理。01➽滤波电容尽管从滤除高频噪声的角度看,电容的谐振是不希望的,但是电容的谐振并不是总是有害的。当要滤除的噪声频率确定时,可以通过调整电容的容量,使谐振点刚好落在骚扰频率上。在实际工程中,要滤除的电磁噪声
btty038 RF/无线
易电源设计心得体会2
易电源试用心得2对于易电源模块LMZ10504TZ的带载能力非常出色。它的输入是2.95-5.5V,输出是2.5V.因此可以看出该模块的输入电压范围很大,输出电压稳定。从电力电子知识看可以知道这是一种BUCK电路,即降压电路。对于这种开关电源的设计希望能够输入电压范围越大越好。在开关电源设计中,一个很重要的一个元件就是电感。电感在开关电源中作为能量的交换中介,起着至关重要的作用。同时,电感在电路中位置不同,可以把电路设计为不同的形式。如当电感一端连接开关管,一端连
billjing 模拟与混合信号
放大器输入保护的利与弊
当今的许多高速运算放大器都具有片上输入保护。在大多数情况下,这种保护对用户是透明的。但在某些应用中,这种保护可能是电路的致命弱点。本文讨论输入保护需求、实现及其潜在的缺点,本文还给出利用具有输入保护功能放大器的替代方案与电路方案。高速运算放大器的输入保护可以有多种形式,其中共模过压保护、静电放电(ESD)保护、输入差分对保护是一些常见的保护。共模过压保护主要限制输入电压,使之符合放大器的安全工作电压范围。静电放电保护二极管则使放大器避免静电、静电感应以及其他静电放电事件的影响。这些片上二极管都
herosw 模拟电子
地的区分
是不是所有的板子都是地和负极连在一起啊,那板子怎么整地线那?地的区分
lidong129 PCB设计
学模拟+ 《运算放大器噪声优化手册》笔记第二章等效电路推导
本帖最后由dontium于2015-1-2311:24编辑以下是将电流噪声转换成电压噪声的简要过程:运放电流噪声电路如下:由于“虚地”作用,可知:等效输入噪声如下:最后就得到如下等效模型:好久没做过这种题目了,书上直接给出了结果,也不知道我的推导过程是不是对的。有问题还请大家批评指正。学模拟+《运算放大器噪声优化手册》笔记第二章等效电路推导本帖最后由dontium于2015-1-2311:24编辑请问前面的三个电路图,为何可以互相等效?
lonerzf 模拟与混合信号
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved