1:串口的基础知识

串口通信定义

  串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信原理

  串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:   

  a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600,115200。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。   

  b,数 情况。   

  c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。   

  d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

基本接线方法

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。

  1.DB9和DB25的常用信号脚说明

  9针串口(DB9) 25针串口(DB25)
  针号 功能说明 缩写 针号 功能说明 缩写
  1 数据载波检测 DCD 8 数据载波检测 DCD
  2 接收数据 RXD 3 接收数据 RXD
  3 发送数据 TXD 2 发送数据 TXD
  4 数据终端准备 DTR 20 数据终端准备 DTR
  5 信号地 GND 7 信号地 GND
  6 数据设备准备好 DSR 6 数据准备好 DSR
  7 请求发送 RTS 4 请求发送 RTS
  8 清除发送 CTS 5 清除发送 CTS
  9 振铃指示 DELL 22 振铃指示 DELL

  2.RS232C串口通信接线方法(三线制)
  首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连

  · 同一个串口的接收脚和发送脚直接用线相连 对9针串口和25针串口,均是2与3直接相连; 
  · 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

  上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。

  3.串口调试中要注意的几点:

  串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

  单工、半双工和全双工的定义

  如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
  如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。
  如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。

  电话线就是二线全双工信道。 由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也将收、发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。

  奇偶校验

  串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:
  0100,0101=45H
  D7 D0
  由于干扰,可能使位变为1,这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。
  最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。
  奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
  1 0110,0101
  0 0110,0001
  偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
  1 0100,0101
  0 0100,0001

  奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。

  有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等。

2:

UART includes programmable baud rates, infrared (IR) transmitter/receiver, one or two stop bit insertion, 5-bit, 6-bit, 7-bit, or 8-bit data width and parity checking.

Each UART contains a baud-rate generator, a transmitter, a receiver and a control unit, as shown in Figure 1-1. The baud-rate generator uses PCLK or SCLK_UART. The transmitter and the receiver contain FIFOs and data shifters. The data to be transmitted is written to Tx FIFO, and copied to the transmit shifter. The data is then shifted out by the transmit data pin (TxDn). The received data is shifted from the receive data pin (RxDn), and copied to Rx FIFO from the shifter.

UART包括可编程波特率、红外发生接收器、1、2位结束位,5、6、7、8数据位,奇偶校验。

每个UART包含一个波特率发生器、发送接收器和控制单元,详细看下图,波特率发生器使用的是PCLK_PSYS或SCLK_UART。发送器/接收器包含FIFOS和数据移位器。数据通过写入Tx FIFO,复制到发送移位器来发送。通过TxDn引脚把数据发送出去。数据从RxDn

接收通过移位器复制到Rx FIFO。

我们用的时钟是通过PCLK_PSYS总线,然后经过分频得到的,波特率设置为115200。

无FIFO模式:发送数据把1字节数据写入Transmit Holding Register寄存器,然后控制器,会控制器自动复制到移位器,然后通过TXDn引脚把数据发送出去。

      接收数据是从外部RxDn引脚接收数据,然后通过移位器,复制到Receive Holding Register寄存器中。接收数据的话,只需要查询Receive Holding Register寄存器是否有内容,读取即可。

FIFO模式:

UART可以以中断或者轮询的方式来接收数据。

s5pv210的数据发送:

DATA TRANSMISSION
The data frame for transmission is programmable. It consists of a start bit, five to eight data bits, an optional parity bit, and one to two stop bits, specified by the line control register (ULCONn). The transmitter can also produce a break condition that forces the serial output to logic 0 state for one frame transmission time. This block transmits the break signals after the present transmission word is transmitted completely. After the break signal transmission, the transmitter continuously transmits data to Tx FIFO (Tx holding register, in case of Non-FIFO mode).

发送数据结构是可编程的,包括1位开始位、5-8位数据位、一位奇偶校验位、和1-2位结束位。通过ULCONn寄存器来设置。发送器可以强制串口输出为逻辑0一个数据结构发送周期来产生中断。发送完当前发送字节以后发出一个中断信号。中断信号发送完以后,发送器持续不断的发送数据给 Tx FIFO(非FIFO模式 发送给(Tx holding register)。

DATA RECEPTION
Similar to data transmission, the data frame for reception is also programmable. It consists of a start bit, five to eight data bits, an optional parity bit, and one to two stop bits in the line control register (ULCONn). The receiver detects overrun error, parity error, frame error and break condition, each of which sets an error flag.

相关寄存器介绍:

Register1: ULCONn

红外模式:0:普通模式、1:红外模式

奇偶校验模式:0:无、1:奇数、2:偶数

终止位:0:1位,1:2位

字长:5-8bit

Register1: UCONn:

时钟选择:0:PCLK_PSYS、1:SCLK_UART,我们设置为0;

发送模式:轮询/中断

接收模式:轮询/中断

寄存器:UFCONn

寄存器: UMCONn

AFC:disable

mode:disable

寄存器:UTRSTATn

状态寄存器:

Transmitter empty 移位器和发送缓冲寄存器没有可用数据发送时 0:非空、1:空

Transmitter buffer empty发送缓冲寄存器 : 0:非空、1:空

Recieve buffer empty发送缓冲寄存器 : 0:非空、1:空

 

寄存器:UBRDIV n

寄存器:UDIVSLOTn

这两个寄存器是用来设置波特率的设置方法如下:

DIV_VAL = (PCLK / (bps x 16)) −1

66.7MHz/(115200*16) = 36.187     UBRDIV n中的值就是36-1=35

0.187*16= 2.992            UDIVSLOTn中1的个数为3个

查表:3个1   UDIVSLOTn的建议值为0x0888

底板/核心板图

UART2 TXD RXD连接在 GPA1_1、GPA1_0两个引脚上,设置引脚为相应模式

寄存器:UTXHn

寄存器:URXHn

实战代码:

  

/**         s5pv210裸机**        uart通信***/#define _REG_GPA1CON                *((volatile unsigned int*)0xE0200020)
#define _REG_ULCON2                    *((volatile unsigned int*)0xE2900800)
#define _REG_UCON2                    *((volatile unsigned int*)0xE2900804)
#define _REG_UFCON2                    *((volatile unsigned int*)0xE2900808)
#define _REG_UMCON2                    *((volatile unsigned int*)0xE290080C)
#define _REG_UTRSTAT2                *((volatile unsigned int*)0xE2900810)         //注意状态寄存器要加volatile 不然编译器会做优化,他的值不能一直改变
#define _REG_UBRDIV2                *((volatile unsigned int*)0xE2900828)
#define _REG_UDIVSLOT2                *((volatile unsigned int*)0xE290082C)
#define _REG_UTXH2                    *((volatile unsigned int*)0xE2900820)
#define _REG_URXH2                    *((volatile unsigned int*)0xE2900824) void uart_init(void)
{//第一步设置相应引脚为TX RX模式_REG_GPA1CON &= ~(0xFF<<0);_REG_GPA1CON |= ((0x2<<4) | (0x2<<0));//设置 结束位1、无奇偶校验、字长8bit_REG_ULCON2 = 0x3;//设置 接收发送模式为 中断/轮询模式_REG_UCON2 = 0x5;//关闭FIFO_REG_UFCON2 = 0x0;//关闭AFC、Modem interupt_REG_UMCON2 = 0x0;//设置波特率_REG_UBRDIV2 = 35;            //66.7MHz/(115200*16)-1=35.187_REG_UDIVSLOT2 = 0x0888;    //0.187*16=2.997}void putc(char ch)
{if (ch == '\n') {//以轮询方式,transmit buffer 为空时发送while (!(_REG_UTRSTAT2 & (0x1<<1)));//发送数据_REG_UTXH2 = '\r';}//以轮询方式,transmit buffer 为空时发送while (!(_REG_UTRSTAT2 & (0x1<<1)));//发送数据_REG_UTXH2 = ch;}char getc(void)
{char ch;//receive buffer 为空是接收数据while (!(_REG_UTRSTAT2 & (0x1<<0)));//接收数据ch =  _REG_URXH2 & 0xFF;return ch;
}

S5PV210裸机之串口相关推荐

  1. S5PV210 | 裸机汇编LED流水灯实验

    S5PV210 | 裸机汇编LED流水灯实验 开发板: 1.原理图 上图中,当按下POWER键后,VDD_5V和VDD_IO会产生5V和3.3V的电压,其中D26无须GPIO控制,为常亮状态,即我们所 ...

  2. S5PV210裸机之Nandflash

    NAND Flash 关于NAND Flash S5PV210的NAND Flash控制器有如下特点: 1) 支持512byte,2k,4k,8k的页大小 2) 通过各种软件模式来进行NAND Fla ...

  3. S5PV210裸机之外部中断

    S5PV210中断体系介绍 一.什么是中断?  (1)中断的发明是用来解决宏观上的并行需要的.宏观就是从整体上来看,并行就是多件事情都完成了.  (2)微观上的并行,就是指的真正的并行,就是精确到每一 ...

  4. S5PV210裸机之时钟

    1.S5PV210的时钟获得:外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频 S5PV210外部有4个W晶振接口,可以根据需要来决定在哪里接晶振.接了晶振之后上电相应的模块就能产生振 ...

  5. S5PV210裸机之LCD

    LCD 简介 什么是 LCD ? (1) LCD ( Liquid Crystal Display )俗称液晶. (2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转, ...

  6. S5PV210裸机之SD卡

    主流的外存设备介绍 内存和外存的区别: 一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory, ...

  7. S5PV210裸机之SDRAM

    1:SDRAM基础: 通过s3c2440的内存原理以及时序来理解s5pv210 SDRAM原理.时序. 首先看一下核心板内存如何连接的 可以看一下两个内存芯片接的地址总线均为Xm1_ADDR[13:0 ...

  8. S5PV210裸机之重定位

    1.重定位相关概念 位置无关码(PIC,position independent code):汇编源文件被编译成二进制可执行文件时编码方式与位置(内存地址)无关.  位置有关码:汇编源文件被编译成二进 ...

  9. S5PV210 裸机开发驱动之LED灯

    LED 基本上是学习每款芯片(驱动级别的)的第一步.好,我们看点灯实验 webee的电路图接法是: 可以看到控制led信号低时,LED灯亮.而控制这些管脚的是GPJ2_0-GPJ2_3. 看芯片手册, ...

最新文章

  1. ASP.NET将Session保存到数据库中
  2. Tesla AutoPilot纯视觉方案解析
  3. CString比较相等不得不说的故事
  4. 基于图像gist特征的NWPU-RESISC45数据分类实战
  5. ai替代数据可视化_在药物发现中可视化AI初创公司
  6. 互联网晚报 | 7月27日 星期三 | 微信安装包11年膨胀575倍;阿里申请香港纽约双重主要上市;苹果应用商店被曝大量色情应用...
  7. 微信小程序Demo详解
  8. 箱线图怎么判断异常值_箱线图(Box-plot)中,异常值很多说明什么?
  9. 数学分析教程(科大)——6.4笔记+习题
  10. 生信识图 之 点图基础
  11. 艾艾贴常用的数据类型转换
  12. 小仙女讲JVM(1)—综述
  13. 基于微信小程序的信件收发管理平台设计
  14. 【语音识别】基于动态时间规整(DTW)的孤立字语音识别Matlab源码
  15. 淘宝H5端 商品数据详情解析接口,sign算法
  16. aix java解压,AIX 7.1 jar unzip解压报错问题解决
  17. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码
  18. 汇总:不同格式文件怎么转换成PDF?
  19. 人工智能新物种天猫精灵魔盒:五大声学黑科技
  20. 计算机中丢失crashrpt,crashrpt

热门文章

  1. 有什么好用的微信公众号编辑器?快来看看这3款
  2. 真无线蓝牙耳机怎么选?分体式蓝牙耳机选购攻略及推荐
  3. Excel根据出生日期判断生肖,Leo老师来教你!
  4. 苹果系统小技巧 篇六:Mac的10个必备小技巧,原来Windows的功能早在Mac上实现了
  5. 12.9寸iPad Pro 5曝光:屏幕焕然一新、处理器强悍
  6. 京东“百亿补贴”提前20小时上线,电商价格战开打; iPhone 15 Pro玻璃面板泄露;凹语言 0.5.0发布|极客头条
  7. 智能手机 + 机器学习 = 个人终端的未来
  8. Linux安装rsync命令失败,rsync 常见错误与解决方法整理
  9. 推荐下Python的IDE:PyScripter,Spyder以及使用心得分享
  10. 前端学习——微信小程序