历史上的今天

今天是:2024年08月24日(星期六)

2021年08月24日 | LPC1788---串口设置

发布者:SereneSerenity 来源: 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 学习

推荐阅读

  在政策红利和补贴优势的助力下,中国动力电池行业已经取得了一定成绩。其中最突出的莫过于宁德时代在2017年坐上了动力电池全球销量冠军的宝座。   但这并不意味着中国在动力电池领域已经超越日本、韩国。动力电池行业仍然处于发展早期,技术仍然在不断地更新迭代,行业远没有达到成熟稳定的阶段。   在动力电池行业,中国只不过是暂时赢下了一...
根据国际机器人联合会公布的数据,国际机器人产量自2010年开始快速增长后,2018年增长趋缓。2018年全球机器人产量为38.4万台,仅比2017年增加2000台,而2017年的产量比2016年多88万台。业内认为,国际机器人产量增速趋缓,与国际经济放缓不无关系,特别是去年多个新兴经济体GDP增速下滑,在一定程度上影响了产业需求。 亚太地区一直是机器人的主要消费...
对于美国政府对微信在美业务的封杀令,这导致了当地相当多用户的不满,而有的组织甚至要将美国政府告上法庭。据外媒报道,一个称跟微信所有者没有关联的微信用户组于美国时间周五对美国政府提起诉讼,寻求阻止一项禁止与微信进行交易的行政命令。该诉讼在旧金山的美国地方法院被提起,控方称该行政命令存在违宪现象。据悉,控方包括非营利性组织美国微信用...
  工信部在关于政协第十三届全国委员会第四次会议第1257号(工交邮电类174号)提案答复的函中表示,工信部将进一步完善新能源汽车动力电池回收利用管理制度,加快推动梯次利用要求、产品标识、放电规范等急需国家标准发布。科技部将通过“十四五”国家重点研发计划“新能源汽车”“大气与土壤、地下水污染综合治理”等重点专项组织实施,开展动力电池...

史海拾趣

问答坊 | AI 解惑

单片机视频教程【4-1】数码管

$(\'swf_f6X\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/30388752/v.swf\'), ...…

查看全部问答∨

清华大学linux学习课件PPT + 实验代码

学习收集的资料,压箱底的,拿出来跟大伙分享一下。…

查看全部问答∨

Windows CE流接口设备驱动程序的研究与应用

开发嵌入式操作系统的设备驱动程序是应用嵌入式技术的重要基础。Windows CE是一个著名的嵌入式操作系统, Windows CE流接口设备驱动程序是一种基本的设备驱动程序,讨论了该类驱动程序的一般设计开发方法及应用,认为流 接口设备不仅可以驱动串行 ...…

查看全部问答∨

单片机

我用KEIL uvision2写的程序怎么才能生成HEX文件呢?…

查看全部问答∨

求救!用DDKXP +DS3.1+VC6自生成的USBBULK驱动代码Read/Write函数中对KMEMORY任何操作都导致蓝屏问题!!!

用DDKXPSP1+DS3.1+VC6自动生成USB BULK驱动,2个EP一个IN 一个OUT,用WRITEFILE READFILE读写操作,驱动的READ部分程序如下: NTSTATUS Usb4Device::Read(KIrp I) {     t << "Entering Usb4Device::Read, " << I << ...…

查看全部问答∨

请问为什么我的板子上的linux不能采用"ctrl+c"结束程序

在超级终端下偶尔能行,在minicom中还没成功过 当一个程序运行时,比如ping 按下"ctrl+c\'系统则成死机状态 哪位也碰过这方面的问题指教下,谢谢…

查看全部问答∨

意法半导体发布价格极低而功能丰富的STM32开发环境

意法半导体(ST)发布价格极低而功能丰富的开发环境,最大限度降低STM32微控制器的使用门槛 意法半导体的低价 ST-LINK 调试器整合Atollic TrueSTUDIO? IDE,让小量设计得以瞄准 70多款基于 ARM Cortex-M3的微控制器 中国,2009年11月24 ...…

查看全部问答∨

Altium Designer 10.577.22514.iso全插件

文件: Altium Designer 10.577.22514.iso大小: 1914810368 字节修改时间: 2011-06-15, 14:30:55MD5: 993B64C10BB332E852F4AF3C2A78A005SHA1: E65229E8AA0611EE6FAC90BFC38D167EF2B59382CRC32: B4359CEB1默认全插件安装2安装后直接导入授权书即可。3 ...…

查看全部问答∨

怎么加论坛好友啊

菜鸟 怎么加好友啊?…

查看全部问答∨

51单片机的直流电机调速,测速

要求:(1)直流电机能正转、反转控制;             (2)可进行转速控制(至少10档);             (3)对转速测量和显示;并能进行转速的设定;  &nbs ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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