历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2019年04月11日 | 基于UART实现数据的自发自收

2019-04-11 来源:eefocus

UART(Universal Asynchronous Receiver  and  Transmiter)通用异步接收/发送装置。UART提供了RS—232C数据接口。


UART是什么?UART是一种通用串行数据总线,用于异步通信,该总线双向通信,可以实现全双工传输和接受。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其他部件,比如EEPROM。


UART的工作原理和功能。他将由计算机内部传送过来的并行数据转化为输出的串行数据流,将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验为。在输出数据流中加入启停标志,并从接受数据流中删除启停标志。处理有键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。


在使用UART之前,我们需要设置波特率,传输格式(数据位个数,是否校验位,奇还是偶校验位,停止位个数,是否流量控制)。对于具体的CPU来说,例如(2410/2440)还要选择所涉及的管脚为UART功能,选择UART通道的工作模式为中断模式还是DMA模式,设置好后,往某个寄存器写入数据即可发送,读取某个寄存器即可接收到数据。可以通过轮询的方式来获知数据的收发情况。


初步了解了UART的功能和基本工作原理之后,开始今天的整理。相信在整理的过程中,自己又会有与众不同的收获。


对于UART的设置,这个需要根据电路图,设置GPHCON的对应管脚(S3C2410有3个uart接口,具体接哪个接口,需要结合电路图),我的是要求在uart0上的。


ULCONn寄存器,他包括三种寄存器UART0,UART1,UART2,通过这个寄存器可以设置FIFO的相关属性。可以设置传输数据的位数,停止位的位数,校验模式,红外模式。


UCONn寄存器,同样包括三个,UCON0,UCON1,UCON2。他可以用来设置接收数据和发送数据的模式,接收错误状态使能,接受超时使能,接收中断方式,发送中断方式,时钟选择。


UFCONn寄存器,同样有三个UFCON[0:2],共有八位,可以设置FIFO使能,设置FIFO的触发阀值。


UMCONn寄存器,同样也有三个,由八位组成,它主要用于流量控制。


UTRSTATn寄存器,他由三位构成,这个寄存器主要用来表明数据是否已经发送完毕,是否已经接收到数据。


UERSTATn寄存器,用来表示各种错误是否发生。


UFSTATn寄存器,由16位组成,主要用来设置FIFO什么时候发送和接收数据。


UTXHn寄存器,CPU写寄存器。


 URXHn寄存器,CPU读寄存器。


UBRDIVn寄存器,主要用来设置波特率,这个波特率的值的确定需要根据时钟源和公式。计算公式如下:UARDIVNn=(int)(UART时钟)/(设置的波特率*16)。


下面来说说实验程序,本次实验的程序是使用板子接收PC机上发送过来的数据,按原样进行显示。


汇编在此就不写了,直接写C程序,因为汇编部分还有不懂得,还得继续啃。


在ADS1.2里,建立一个头文件,在C程序中调用一下即可。


在reg2410.h中:


             #define rGPHCON      (*(volatile     unsigned*)0x56000070)


             #define  rUBRDIV0     (*(volatile     unsigned*)0x56000028)


             #define  rULCON0      (*(volatile    unsigned *)0x50000000)


#define  rUCON0        (*(volatile    unsigned *)0x56000004)


#define rUTRSTAT0   (*(volatile   unsigned *)0x50000010)


#define rUTXH0               (*(volatile   unsigned *)0x50000020)


#define rURXH0               (*(volatile   unsigned *)0x50000024)


在reg2410.h这个文件里,设置了控制UART的相关寄存器的地址,这些地址都是固定的,在文档查找即可,他们分别是什么寄存器以及各自的功能上面有描述,就不再赘述。


Reg2410.c文件如下:


             #include“reg2410.h”          //上面所建立的头文件


             #define  TXD0READY (1<<2)   //(1<<2)=4


             #define  RXD0READY        (1)   


             #define  PCLK  50700000


             #defineUART_CLK     PCLK     //设置UART的时钟为pclk


             #define  UART_BPS    115200   //设置串口的波特率为115200


             #defineUART_BRD (int)(UART_PCLK/(UART_BPS)*16)-1//设置UART的波特率


             Void       SendByte(char dat)    //发送的字节


             {


                    While(!(UTRSTAT0&TXD0READY));//缓存寄存器中和发送移位寄存器中没有有效值,会被自动置壹,UTRSTAT为0100与TXD0READY(0100)相与,[3]位为1,也就是数据传完了,然后非一下为假,则不执行分号,意思为等待,直接进行下一句;如果UTRSTAT0&TXD0READY的结果为0,则说明数据还没有完全从缓存寄存器传输到uart读写状态寄存器中,则等待。


                    UTXH0=dat;


}


char       RecByte(void)


{


       While(!(UTRSTAT0&RXD0READY));// RXD0READY接受到数据,只要接受缓存寄存器保留通过RXDn端口接受的有效值,其值自动为1,URSTAT0&RXD0READY与的结果为1,非后的结果为假,则不执行分号;若没有接收到数据,则(!(UTRSTAT0&RXD0READY))为真,执行分号,一直等待接收到为止。


       Return   URXH0;


}


             Intmain()


             {


                    rGPHCON=(rGPHCON&~(0xf<<4)|(0xa<<4));//设置GPFCON的2,3引脚,因为UART0的输入输出引脚是通过他们完成的


                    rUBRDIV0=UART_BRD;//设置UART的波特率


                    rULCON0=3;//表明数据传输时的位数,是否有校验位,有几个停止位,是否运用FIFO


                    rUCON0 =(1<<2)|1;//设置数据发送和接受的查询方式,为循环查询


                    for(;;)//轮询接受数据和发送数据


                    {


                           SendByte(RecByte());


}


}


推荐阅读

史海拾趣

Ercona Corp公司的发展小趣事

Ercona Corp在电子行业中的发展故事之一:技术突破与市场布局

Ercona Corp是一家在电子行业中迅速崛起的公司,其发展历程中不乏技术突破与市场布局的故事。在成立初期,Ercona就致力于半导体技术的研发,成功开发出一种高性能、低功耗的芯片,这一技术突破为公司在市场上赢得了良好的声誉。随后,Ercona利用这一技术优势,积极拓展市场,与多家知名电子产品制造商建立了合作关系,其芯片产品被广泛应用于智能手机、平板电脑等消费电子产品中。

Ercona Corp在电子行业中的发展故事之二:国际合作与品牌提升

在全球化的大背景下,Ercona积极寻求国际合作,与国际知名半导体公司达成战略合作,共同研发新产品。这一举措不仅提升了Ercona的技术实力,也扩大了其品牌影响力。通过与合作伙伴的共同努力,Ercona成功推出了一系列具有国际竞争力的电子产品,进一步巩固了其在市场中的地位。

Ercona Corp在电子行业中的发展故事之三:创新驱动与产品多元化

创新是Ercona持续发展的核心动力。公司不断投入研发资金,推动产品创新,逐步实现产品多元化。除了传统的半导体芯片外,Ercona还涉足了物联网、智能家居等新兴领域,推出了一系列具有创新性的电子产品。这些新产品的推出不仅丰富了公司的产品线,也为公司带来了新的增长点。

Ercona Corp在电子行业中的发展故事之四:人才战略与团队建设

人才是企业发展的重要保障。Ercona深知这一点,因此在发展过程中始终重视人才战略和团队建设。公司积极引进优秀人才,建立了一支高素质的研发团队。同时,Ercona还注重员工的培养和发展,为员工提供广阔的成长空间和发展机会。这些措施为公司的持续发展提供了坚实的人才保障。

Ercona Corp在电子行业中的发展故事之五:社会责任与可持续发展

作为一家有社会责任感的企业,Ercona在发展过程中始终关注环境保护和社会公益。公司积极推行绿色生产,采用环保材料和节能技术,减少生产过程中的污染排放。同时,Ercona还积极参与社会公益活动,关注弱势群体,为构建和谐社会贡献自己的力量。这些举措展现了公司的良好形象和社会责任感,也为公司的可持续发展奠定了基础。

Herley New York公司的发展小趣事

Hengstler GmbH在电子行业中的五个发展故事

故事一:从钟表工坊到工业计数器的先驱

Hengstler GmbH的故事始于1846年,当时创始人Johannes Hengstler在德国西南部的奥尔丁根镇开设了一家钟表工坊,专注于生产钟表弹簧。随着时间的推移,Hengstler逐渐扩展其业务领域。1926年,公司收购了Efunda公司的计数装置业务,这标志着Hengstler正式进入工业计数和控制元件领域。此后,Hengstler不断推出创新产品,如20世纪50年代发布的革命性“计数系统400”,这是一种带有插件系统的塑料计数系统,不仅功能强大,而且价格实惠,极大地推动了公司在市场上的地位。

故事二:技术革新与全球化布局

进入20世纪后半叶,Hengstler继续加大技术研发投入,并在全球范围内扩展其业务。1962年,公司在英国成立了第一家海外子公司,随后几年内,在法国、比利时、加拿大、意大利和日本等地也相继设立了分支机构。这些举措不仅增强了Hengstler的国际影响力,还使其能够更好地服务全球客户。同时,公司还引入了先进的生产设备和技术,如塑料注塑成型机,实现了塑料部件的大批量生产,进一步提升了产品质量和生产效率。

故事三:编码器技术的突破

在编码器技术方面,Hengstler也取得了显著成就。公司不断推出新型编码器产品,如光电增量型编码器RI58-O/RI58-T,其分辨率高达10,000脉冲和40,000步,防护等级达到IP67,广泛应用于各种工业场合。此外,公司还开发了重载磁性绝对值型编码器AR62/63,该编码器具有极高的抗冲击和抗振动能力,适用于恶劣环境下的使用。这些产品的推出不仅丰富了Hengstler的产品线,还进一步巩固了其在编码器领域的领先地位。

故事四:被丹纳赫收购后的新发展

1995年,Hengstler被美国丹纳赫公司收购,成为其旗下的一员。这一收购为Hengstler带来了更多的资源和支持,推动了公司的进一步发展。在丹纳赫的支持下,Hengstler加大了对新技术和新产品的研发力度,不断推出具有创新性和竞争力的产品。同时,公司还加强了与国际市场的联系和合作,进一步提升了其国际竞争力。

故事五:持续创新与客户服务

多年来,Hengstler始终坚持创新和服务至上的理念。公司不断投入研发资金,引进先进技术和设备,提升产品质量和生产效率。同时,公司还注重客户服务,建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些努力不仅赢得了客户的信任和好评,还使Hengstler在电子行业中保持了良好的声誉和地位。如今,Hengstler已成为全球领先的工业计数和控制元件制造商之一,其产品广泛应用于自动化技术、风力发电机、商用车辆、售票机和医疗等领域。

Brite-Led Optoelectronics Inc公司的发展小趣事

在国内市场取得一定成绩后,Brite-Led开始将目光投向海外市场。公司制定了一系列市场拓展策略,包括参加国际展会、建立海外销售网络、与当地企业合作等。经过几年的努力,Brite-Led的产品逐渐打入国际市场,赢得了众多海外客户的青睐。同时,公司也在全球范围内建立了多个研发中心和生产基地,以更好地服务全球客户。

统宇电研(Coilmaster)公司的发展小趣事

随着电子行业的快速发展,统宇电研始终保持着技术创新的步伐。公司不断投入研发资源,积极引进先进技术和设备,提升产品性能和质量。同时,统宇电研还与多所高校和研究机构建立合作关系,共同开展前沿技术研究。这些努力使得统宇电研在行业内树立了技术创新的标杆,引领着行业的发展方向。

上海如韵(CONSONANCE)公司的发展小趣事

上海如韵电子有限公司,简称如韵(CONSONANCE),总部位于上海张江高新产业园嘉定园。公司由一群热爱电子技术的专业人士于2004年共同创立,注册资本200万元人民币。在创立初期,公司面临着资金紧张、市场竞争激烈等多重挑战。然而,凭借着对电子行业的深刻理解和敏锐的市场洞察力,如韵逐渐在市场上站稳了脚跟。

初期,如韵主要致力于微电子集成电路的设计与销售。公司创始人于志升带领团队,通过不断创新和技术突破,成功开发出一系列具有市场竞争力的产品。这些产品在华北、华东、华南、西南等地区建立了庞大的销售网络,与几十家专业代理商建立了长期合作关系,为公司的稳步发展奠定了坚实基础。

Asian Best Components Co Ltd公司的发展小趣事

随着国内市场的日益饱和,Asian Best Components Co Ltd开始将目光投向了广阔的国际市场。公司积极参加国际电子展会,与全球各地的客户建立了广泛的联系。通过深入了解不同市场的需求和特点,Asian Best不断调整产品策略,优化产品设计,成功打入多个国际市场。同时,公司还加强与国际同行的合作,共同推动电子行业的发展。

问答坊 | AI 解惑

闸流管和双向可控硅 - 成功应用的十条黄金规则

闸流管和双向可控硅 - 成功应用的十条黄金规则十条黄金规则汇总 规则1. 为了导通闸流管(或双向可控硅),必须有门极电流≧IGT ,直至负载电流达到≧IL 。这条件必须满足,并按可能遇到的最低温度考虑。 规则2. 要断开(切换)闸流管(或双向可控 ...…

查看全部问答>

上传OV7670 LINUX驱动(网上找的)

/* A V4L2 driver for OmniVision OV7670 cameras. Copyright 2006 One Laptop Per Child Association, Inc.  Written by Jonathan Corbet with substantial inspiration from Mark McClelland\'s ovcamchip code. This file may be d ...…

查看全部问答>

US2D高速二极管可用哪种代换

请问各位朋友  US2D高速二极管可用哪种代换?  现我这有ES2D    这种可以更换吗?是步进电机驱动器CW250里用的    这种驱动器的最高工作电压为60V  麻烦各位朋友指点一下…

查看全部问答>

单片机学习软件 仿元件的软件.就是可以模仿单片机及各种芯片的软件

本人刚学单片机,希望大虾指点一下学单片机用什么软件能模拟出 各种元件的功能,如max232,C51的各引脚..... 我不用焊接电路板就能知道程序的真实运行结果.....:如灯的亮灭  ,7段显示器的显示 软件的功能就是模拟真实环境.... 我说的软 ...…

查看全部问答>

U2270B ID卡曼码解码问题

我正在用ATMEG8对U2270B曼码解码ID卡,由于没有示波器,加上网上资料各说不一,所以进度维艰. ID卡为64位信息:    9个引导位“1”,10个行奇校验位“P0~P9”,4个列奇校验位“PC0~PC3”,40位数据位“D00~D93”和 ...…

查看全部问答>

DSP上编程到底与ARM的区别在哪里?

    很久就知道了DSP,数字信号处理器,而且自己已经使用了近2年的时间,主要是TI,以前在学校里面还使用汇编,而现在则完全使用C了,我越来越糊涂了DSP,如果不使用汇编,我真的体会不出来,DSP和其他的微控制器件,请教了,各位大虾, ...…

查看全部问答>

STR715串口通信问题

目标板上使用IAR安装后的UART_int例子,...UART_Config(UART0,9600,UART_NO_PARITY,UART_1_StopBits,UARTM_8D);...当我用计算机串口跟目标板通信时侯发现的问题是:无论我计算机串口设置成无校验、奇校验还是偶校验都可以跟目标板正确通信,这 ...…

查看全部问答>

工业上仪用放大器一般用哪个芯片?

请问工业应用上仪用放大器一般用哪个芯片? -40~+85度的应用范围,用AD620? 用于小信号放大后做VF转换测量,大概是百倍以下,如-200mv~200mv放大到-10V~+10V…

查看全部问答>

DA8820 430程序(调试成功)

工程   全都有   也有注释    已成功…

查看全部问答>