历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2019年09月06日 | S3C2410 通用异步收发UART 串口通信

发布者:CrystalRose 来源: eefocus关键字:S3C2410  通用异步收发  UART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

一、UART原理说明


通用异步收发器简称UART,用来传输串行数据。


发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出。


接收数据时,CPU检测另一根电线上的信号,讲串行收集放在缓冲区中,CPU即可读取UART获得这些数据。


UART之间通过全双工方式传输数据,最简单只有三根线TxD(发送数据),RxD(接收数据),GnD(双方参考电平),连线如下图所示。

(PS:单工、半双工、全双工 

单工数据传输只支持数据在一个方向上传输;

半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信


全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力)


硬件连接图如下:

UART使用标准的TTL/CMOS逻辑电平(0~5V 、0~3V、 0~2.5V 或 0~1.8V)来表示数据 ,高电平表示1,低电平表示0。


为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平(3~12V表示0,-3~-12V表示1)。


其中, MAX3232为电平转换芯片, 利用双电荷泵在3.0V至5.5V电源供电时能够实现真正的RS-232性能,将ARM处理器芯片输出的


电压转换为符合RS232规范的串口电压。 即TXD0引脚经MAX3232芯片电压转换后成为串口引脚RS232TXD0, RXD0引脚经


MAX3232芯片电压转换后成为串口引脚RS232RXD0。


TXD 和RXD以”位“为最小传输数据,一帧数据由不可分割的若干位组成,它包含开始位、数据位、校验位(可选)和停止位。


二、UART的使用


发送数据之前,UART之间要约定好数据的传输速度(每位所占的时间,即波特率),数据的传输格式(有多少数据位、是否使用校验位、


是奇校验还是偶校验、有几位停止位、是否使用流量控制)。


对于S3C2410和S3C2440,还有选择所涉及管脚为UART功能,选择UART通道的工作模式为中断或者DMA模式。设置好之后,往某个寄存器写入数据即可发送,读取某个寄存器即可得到接收到的数据。可以通过查询状态寄存器或者设置中断来获知数据是否已经发送完毕。是否已经收到数据。


所用的寄存器如下:


1、设置涉及管脚为UART功能


2、UBRDIVn寄存器:设置波特率


3、ULCONn寄存器:设置传输格式


4、UCON寄存器:设置时钟源、中断方式等


5、UFCONn寄存器、UFSTATn寄存器:FIFO设置


6、UMCONn寄存器、UMSTATn寄存器:流量控制


7、UTRSTATn寄存器:数据是否发送完毕、是否收到数据


8、UERSTATn寄存器:错误是否发生


9、UTXHn寄存器:数据写入,然后自动放入缓存区,然后发送。


10、URXHn寄存器:收到数据时,读该寄存器即可得到数据。


PS:详细的寄存器信息去芯片手册查找。


三、UART操作实例


目的:


在PC机上通过键盘敲入任意字符,ARM将接受到的字符通过串口发出并在PC端的secureCRT上显示。


开发板通过串口输出字符串。

代码详解:


本实例串口参数设置如下:


使用串口0,三线连接,波特率115200,PCLK为50MHZ,一位起始位,八位数据位,没有校验位,一位停止位,不使用FIFO缓存,普通轮询模式,不使用中断。




1、UART初始化


#define GPHCON *(volatile unsigned int *)0x56000070

#define ULCON0 *(volatile unsigned int *)0x50000000

#define UCON0 *(volatile unsigned int *)0x50000004

#define UTRSTAT0 *(volatile unsigned int *)0x50000010

#define UTXH0 *(volatile unsigned int *)0x50000020

#define URXH0 *(volatile unsigned int *)0x50000024

#define UBRDIV0 *(volatile unsigned int *)0x50000028

 

#define TXD0READY   (1<<2)

#define RXD0READY   1

 

#define GPH_URAT 10<<4

#define GPH_MSK 15<<4

 

void uart_init(void)

{

GPHCON=(~GPH_MSK)&GPHCON;         //GPH2 3位清零

GPHCON=GPH_URAT|GPHCON;   //GPH2 3赋值设为TXD0和RXD0

 

UBRDIV0=0x1A; //设置波特率为115200

 ULCON0=0x03;//设置8数据位,1停止位,无校验位UCON0=0x05;//设置为普通轮询}



2、发送字符函数

本实例不使用FIFO,发送字符前需要先判断上一个字符是否已经被发送出去。如果没有,则不断查询UTRSTAT0寄存器的位[2],当他为1时表示已经发送完毕。这时可向UTXH0寄存器中写入要发送的字符。

void uart_txd(char c) //发送字符

{

while(! (UTRSTAT0&TXD0READY));    //等待,直到发送缓冲区中的数据已经全部发出去

UTXH0=c;   //写入欲发送的字符,UART自动发送

}



3、发送字符串函数


void uart_txd(char *c) //发送字符串

{

 

 

    for (; *c != ''; c++)

    {

    while(!(UTRSTAT0 & TXD0READY));     //不断查询,直到可以发送数据

        UTXH0 = *c ;                        //发送数据

    }

 

 

}


4、接收字符函数

读取数据之前,要先查询UTRSTAT0寄存器的[1]位,当为1的时候,表示接收缓存区中有数据。于是,即可读取URXH0得到数据。

char uart_rxd(void)//接收字符

{

while(! (UTRSTAT0&RXD0READY));      //等待,直到接收缓存区中有数据来到

return URXH0;     //直接读取URXH0,即可获得数据

}


5、主函数

int main(void)

{

uart_init();  //初始化(波特率115200,8N1)

/*        S3C2440可以,但2410乱码

**                                     

char ch[]="===========nrhello word!nr===========nr";      //    /n为换行   /r为跳到行首

char c;

int j;

for(j=0;j<39;j++)    //显示字符串

{

uart_txd(ch[j]);         

}

**

*/

uart_txd("===========nrhello word!nr===========nr");    //显示字符串

 

while(1)                          //串口接收数据后,再发送到PC secureCRT

{

c=uart_rxd();

uart_txd(c);

}

 

return 0;

}


关键字:S3C2410  通用异步收发  UART  串口通信 引用地址:S3C2410 通用异步收发UART 串口通信

上一篇:ARM9 SWI软件中断
下一篇:S3C2410 UART 发送变量字符

推荐阅读

近日,广电发布第13期中国有线电视行业发展公报,数据显示,有线电视用户持续负增长。截至2018年6月底,有线电视用户2.34亿户,季度净减少503.1万户,环比下降2.11%。  与此对应的是,IPTV用户快速增长。2018年第二季度,电信运营商宽带接入速率持续提升,融合业务在各地快速推进,IPTV用户季度净增1220万户,环比增长9.38%,总量达到1.42亿户。...
近日,由百度和一汽联手打造的中国首批量产L4级自动驾驶乘用车——红旗EV,获得5张北京市自动驾驶道路测试牌照。据了解,此前,红旗EV已经在湖南长沙的135公里的城市开放测试道路上开展测试。资料显示,相比历代Apollo无人驾驶汽车,红旗EV实现了包括安全、量产能力,以及外观内饰、驾乘体验等维度的优化升级。值得一提的是,红旗EV在操作交互方面迎来重大...
跟基础功能不一样,智能科技方面的刚需有个特点:大家都爱看炫技的东西,真正涉及到驾驶安全的技术,却往往被群众忽略了。根据《2017年襄阳市道路交通事故分析报告》中的分析,全年67862各类交通事故中,从造成死亡的交通事故时间段分析,主要集中在18-22时。其中18~21时发生的交通事故死亡人数,占到全年总人数的22.72%。也就是说,有接近四分之一的遇难...
7月29日,宁德时代举办了钠离子电池线上发布会,董事长曾毓群博士发布了宁德时代的第一代钠离子电池,以及“过渡产品”锂钠混搭电池包。钠离子电池在正极材料突破,在技术方面主要体现在两点。第一是单体电芯方面,能量密度可达160Wh/kg,而这并未将钠离子电池的水平完全发挥出来,第二代钠离子电池的能量密度将达到200Wh/kg。第二是系统级方面,钠离子电...

史海拾趣

问答坊 | AI 解惑

AVR小工具—AVR_TOOL.

上传一个AVR的小工具,希望大家能一起分享学习中的经验,多多讨论,共同提高。…

查看全部问答∨

虚拟串口的问题

我现在要在proteus下调试一个串口的猫,有没有什么办法能将虚拟的串口和真实的物理串口连接起来,让proteus和真实串口之间进行通信呢…

查看全部问答∨

什么地方有硬盘消磁机?

XBC-01(液晶型)磁性存储介质信息消除机又称信安保牌硬盘消磁机、硬盘数据销毁机等,是一款能够快速彻底销毁“硬盘、磁带、软盘和磁卡等上面所有信息的设备,被清除数据的硬盘、磁带、磁卡等外观完好,除硬盘外,均可以再次使用,硬盘可安全的用于 ...…

查看全部问答∨

ADS设置问题

那个R0 base 和RW base的地址到底该怎么设置? 是不是我要把程序烧FLASH里,RW 就不用 写。而程序在SDRAM里运行的话,R0就不用写?…

查看全部问答∨

哈哈,不是玩笑,IPAD原来早就是ST的注册商标

在ST的网站上搜索IPAD可以找到很多相关的内容,比如这个: http://www.st.com/stonline/press/magazine/express/expr_nov07.htm IPAD_TM.jpg (46.32 KB) 下载次数:0 2010-2-3 16:46 …

查看全部问答∨

请问有没有大虾做过LM3S的usb host模式?

我在做的时候,修改的官方例程,发现,只是在芯片上电过程中可以枚举到u盘,而在芯片启动后插入的u盘没法枚举到,网上关于usb host的资料不多,不知道应该怎么修改才好,希望有经验的大虾能够指导指导。谢谢!…

查看全部问答∨

诚聘【采购主管】(可获期权,无事业心者勿入)

聘【采购主管】(可获期权)【工作地点】北京、上海【关于期权】参考:http://wenku.baidu.com/view/4841e9d376eeaeaad1f330b9.html【公司简介】上海济强电子科技有限公司:http://www.jqsh.com便携式商用及工业打印设备的行业先行者及领导者,致力于 ...…

查看全部问答∨

新手,遇到一个编译方面的问题

我自己按照例子弄了个工程,在编译时出现了点问题,求大家帮助。问题是 请问问题在哪呢?谢谢…

查看全部问答∨

通用测速传感器安装注意事项

        测速传感器是高压开关中一种常见的传感器,传统的测速传感器通常用滑线电阻器或光电传感器,它们都由运动和静止两部分组成。测速时,分别安装于开关的运动部件和静止部件上,而且配合要好。这样,针对不同的 ...…

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

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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