通用异步收发传输器(Universal Asynchronous Receiver Transmitter)

原理

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

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

UART以全双工方式传输数据,最精简的连接方法只有3根线:

TxD:发送数据

RxD:接收数据

Gnd:给双方提供参考电平

连线图

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

发送数据之前,UART之间要约定好数据的传输速率(每位所占据的时间,其倒数称为波特率)、数据的传输格式(多少个数据位、是否使用校验位、是奇校验还是偶校验、有多少个停止位)

波形





数据位:二进制0b1010101,十六进制0x55,大写字母U

S3C2410/S3C2440特性

3个独立通道,每个都可以工作于中断模式或者DMA模式,即UART可以发出中断或DMA请求以便UART和CPU之间传输数据

S3C2410 UART的每个通道都有16字节的发送FIFO和16字节的接收FIFO;S3C2440 UART的FIFO深度为64

发送数据时,CPU先将数据写入发送FIFO中,然后UART会自动将FIFO中的数据复制到“发送移位器”中,发送移位器将数据一位一位地发送到TxDn数据线上(根据设定的格式,插入开始位、校验位和停止位)

接收数据时,“接收移位器”将RxDn数据线上的数据一位一位地接收进来,然后复制到接收FIFO中,CPU即可从中读取数据

S3C2410/S3C2440 UART的每个通道支持停止位1位、2位,数据位5、6、7、8位,支持校验位,另外还有红外发送、接收功能

S3C2410/S3C2440使用

S3C2410/S3C2440还要选择管脚为UART功能、选择UART通道的工作模式为中断模式或DMA模式

1.设置UART通道管脚为UART功能

比如UART通道0中,GPH2、GPH3分别用作TXD0、RXD0。设置GPHCON寄存器将GPH2、GPH3引脚的功能设为TXD0、RXD0

2.设置波特率

UBRDIVn寄存器(UART BAUD RATE DIVISOR)

根据给定的波特率、所选择的时钟源的频率,可以计算UBRDIVn寄存器(n为0~2,对应3个UART通道)的值

UBRDIVn = (int)(UART clock / (buad rate * 16)) - 1

3.设置传输格式

ULCONn寄存器(UART LINE CONTROL)

功能          位       说明
数据位宽度 [1:0] 0b00:5位,0b01:6位
0b10:7位,0b11:8位
停止位宽度 [2] 0:一帧中有一个停止位
1:一帧中有两个停止位
校验模式 [5:3] 设置校验位的产生方法、校验方法
0b0xx:无校验
0b100:奇校验
0b101:偶校验
0b110:发送数据时强制设为1,接收数据时检查是否为1
0b111:发送数据时强制设为0,接收数据时检查是否为0
红外模式 [6] 0:正常模式
1:红外模式

4.UCONn寄存器(UART CONTROL)

UCONn寄存器用于选择UART时钟源、设置UART中断方式等

功能          位        说明
接收中断方式 [8] 如下情况发生时,将产生接收中断
不使用FIFO时,接收到一个数据;
使用FIFO时,FIFO中的数据达到RxFIFO的触发阈值。
中断方式设置如下:
0:脉冲
1:电平
发送中断方式 [9] 如下情况发生时,将产生发送中断
不使用FIFO时,发送缓冲区变空;
使用FIFO时,FIFO中的数据达到TxFIFO的触发阈值。
中断方式设置如下:
0:脉冲
1:电平
时钟选择 [10] 选择UART时钟源
0:PCLK
1:UEXTCLK

5.UFCONn寄存器(UART FIFO CONTROL)UFSTATn寄存器(UART FIFO STATUS)

UFCONn寄存器用于设置是否使用FIFO,设置各FIFO的触发阈值,即发送FIFO中有多少个数据时产生中断、接收FIFO中有多少个数据时产生中断并可以通过设置UFCONn寄存器来复位各个FIFO

读取UFSTATn寄存器可以知道各个FIFO是否已经满、其中有多少个数据

UART串口简介的更多相关文章

  1. linux UART串口驱动开发文档

    转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...

  2. Linux下使用putty进行UART串口调试【转】

    本文转载自:http://blog.csdn.net/xzongyuan/article/details/11593101 版权声明:本文为博主原创文章,未经博主允许不得转载. 使用putty进行串口 ...

  3. 基于STM32之UART串口通信协议(四)Printf发送

    一.前言 1.简介 前面在UART发送中已经讲解过如何调用HAL库的HAL_UART_Transmit函数来实现串口发送,而在调用这个函数来实现串口发送的话,但是在发送数据或者字符的时候,需要将数据或 ...

  4. 基于STM32之UART串口通信协议(二)发送

    一.前言 1.简介 在上一篇UART详解中,已经有了关于UART的详细介绍了,也有关于如何使用STM32CubeMX来配置UART的操作了,而在该篇博客,主要会讲解一下如何实现UART串口的发送功能. ...

  5. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  6. 基于STM32之UART串口通信协议(三)接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  7. (三) UART 串口通讯

    UART  : university asynchronous receiver and transmitter UART  // 通用异步接收器和发送器 为什么要有串口:因为许多嵌入式设备没有显示屏 ...

  8. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  9. Uart串口与RS232串口的区别

    Uart指的是TTL电平的串口:RS232指的是RS232电平的串口. TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平. Uart串口的RXD ...

随机推荐

  1. C++ list 查找

    #include <iostream>#include <list>#include <algorithm> using namespace std; int ma ...

  2. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_10-webpack研究-安装nodejs

    1.3.2.1 安装Node.js webpack基于node.js运行,首先需要安装node.js. node -v:验证是否安装成功了.

  3. css简单学习属性2---背景图片

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. java使用新的(nio)遍历文件(支持文件后缀名、文件名正则表达式匹配)

    import org.junit.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file. ...

  5. LeetCode_13. Roman to Integer

    13. Roman to Integer Easy Roman numerals are represented by seven different symbols: I, V, X, L, C,  ...

  6. Response 与 Cookie

    Response 与 Cookie Web服务器要完成的任务的最后一步就是向客户端返回数据.如果客户端是浏览器,那么返回的数据通常是HTML.JS.CSS或者其他类型的代码. Cookie是保存在客户 ...

  7. ubuntu kylin 18.04 安装 Qt Creator 5.11

    首先,去官网(https://download.qt.io/official_releases/qt/ )下载Qt Creator的安装包. 我下载的是5.11.1版本文件:qt-opensource ...

  8. python知识储备目录

    1.with as 的实现原理 https://www.cnblogs.com/lice-blog/p/11581741.html 2.事务的四个隔离级别 3.rabitMQ 4.c3算法 5.wit ...

  9. 在文件每行后边添加固定文本(shell)

    例子: 对/code/shell/servers 中每一行最后添加用户名和密码   原来长这样: /code/shell/servers 我对其每行添加" root 950102DK&quo ...

  10. 《剑指offer》查找二维数组内元素 c++

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. cl ...