一、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<<4void uart_init(void)
{GPHCON=(~GPH_MSK)&GPHCON;         //GPH2 3位清零GPHCON=GPH_URAT|GPHCON;       //GPH2 3赋值设为TXD0和RXD0UBRDIV0=0x1A;       //设置波特率为115200ULCON0=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 != '\0'; 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[]="===========\n\rhello word!\n\r===========\n\r";      //    /n为换行   /r为跳到行首char c;int j;for(j=0;j<39;j++)                           //显示字符串{uart_txd(ch[j]);         }***/uart_txd("===========\n\rhello word!\n\r===========\n\r");    //显示字符串while(1)                                      //串口接收数据后,再发送到PC secureCRT{c=uart_rxd();uart_txd(c);}return 0;
}

S3C2410 通用异步收发UART 串口通信相关推荐

  1. UART 和 USART 的区别 == 通用异步收发传输器 通用同步/异步串行接收/发送器

    UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...

  2. UART串口通信浅谈之(一)--基础概述

    通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...

  3. 【FPGA】——UART串口通信

    UART串口简介   串行通信分为两种方式:同步串行通信和异步串行通信.同步串行通信要求通信双方使用同一时钟,异步则没有这个要求.UART是一种采用异步串行通信方式的通用异步收发传输器(univers ...

  4. 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. 单片机:11.UART串口通信

    原文地址:https://blog.csdn.net/Qingzhusshuiyun/article/details/78236798 通信按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与 ...

  6. RS232与UART串口通信

    通信,按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与传感器.存储芯片.外围控制芯片等技术紧密结合,成为整个单片机系统的"神经中枢".没有通信,单片机所实现的功能仅仅局 ...

  7. 【FPGA】八、UART串口通信

    文章目录 前言 一.UART简介 1.基本概念 2.UART协议 3.波特率简介 二.UART串口回环实验 1.设计思路 2.程序代码 ① 串口接收模块 ② 串口发送模块 ③ 串口顶层模块 ④ 串口仿 ...

  8. UART串口通信(回环测试)

    一 UART串口通信简介 UART(Universal Asynchronous Receiver-Transmitter)是采用异步串行通信方式的通用异步收发传输器,在发送数据时将并行数据转换为串行 ...

  9. linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信

    嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...

  10. 基于FPGA Uart串口通信实验

    基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...

最新文章

  1. 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)
  2. gitlab 安装报错:Could not find modernizr-2.6.2 in any of the sources
  3. java build path entries 为空_TOOLFK工具-在线JAVA代码执行工具
  4. 【科技金融】互联网金融简介
  5. react 和 lodash 完美结合命令
  6. python socket sendto sendall_网络通信 Python Socket UDP Select
  7. python使用matplotlib绘图sigmoid_使用matplotlib库绘制函数图
  8. python nonlocal的用法_简谈Python3关键字nonlocal使用场景
  9. 在Apache配置反向代理即实现输出内容替换
  10. Spring 实现数据库读写分离
  11. Nginx基本数据结构之ngx_queue_t
  12. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
  13. 使用re-sign.jar对apk进行重签名
  14. Postman下载与安装详细步骤
  15. 洛谷1260 工程规划
  16. BZOJ4565: [Haoi2016]字符合并
  17. 如何修复老照片,Bringing-Old-Photos-Back-to-Life机器学习开源项目安装使用 | 机器学习
  18. 【AI科幻】地球陨落·平行世界
  19. PVR图像文件格式初探
  20. linux下查看vnc端口_Linux的VNCServer的默认端口是多少?

热门文章

  1. WSO2 ESB 5.0.0 集群配置
  2. WSO2 IS 添加新的证书域名
  3. 重启防火墙的命令linux7,Linux CentOS7 防火墙 firewall 安装 重启 管理端口 等命令
  4. TI-TMS320F28335学习详解(2)::F28335片上资源详解
  5. 数据结构:图结构的实现
  6. python playsound播放时关闭_python - 使用playsound模块停止音频 - 堆栈内存溢出
  7. FPGA实现对数log2和10*log10
  8. engineercms整合mindoc
  9. 手机连接hp打印机打印
  10. GP数据库锁表如何解锁