一:简介
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。常见的单片机上(stm32,51)串口有两根引脚,分别是RXD(接收),TXD(发送),通信示意图如下:

一个单片机的TXD接另一个单片机的RXD;
二:通信小知识
并行:是指每次发送多位数据;

串行:一次只发送一位数据;
单工:通信只能从发送方到接收方,不能从接收方发送数据,也就是数据只能单向发送;
半双工:数据可以双向通信,但不能同时双向通信,一个时刻只能有一个方向上通信;
双工:数据可以同时,双向通信;
波特率:用于描述串口通信时的通信速度,指每秒可以发送的bit(位)的数量;
根据以上,我们得知,串口是一种串行的,全双工的通信总线;
三:串口帧结构
起始位+数据位+校验位+停止位;

串口协议规定,在串口空闲的时候,串口必须为高电平;当高电平被拉低,表明准备开始数据传输了,这就是起始位的作用,可以把它理解为一个握手信号;
随后,开始进行数据发送,数据位每次可以发送5-8位的数据(不是字节,是位),一般情况下,我们都设置为8位,发送的数据是低位在前,高位在后,随后就是发送校验位(又称奇偶校验位(英语:parity bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。),可以对数据进行最简单的检测,可有可无。最后就是1-2位的停止位了,表示该次数据传输完毕;
比如说,我们现在传输0x55这个数据,那么首先拉低数据线上的高电平,表示准备开始数据发送,随后将0x55(二进制就是01010101),低位在前,高位在后发送出去,发送顺序是10101010,然后是校验位,最后发送停止位表明数据发送完成。
那么,到这我们就有各种各样的问题了,别着急,咋们一步一步来;
(1)串口的高电平到底是多高,5V,3.3V或者其他?
这里的高电平一般指主控芯片的高电平,他的电压多高,这里的高电平就是多高;
(2)加入发送的二进制位里面有0011和01,那么改 如何区别发送的二进制位?
这里,我们的波特率的作用就体现出来了,他代表一秒钟我们数据传输的bit数,那么根据这个,我们就可以计算出,每个二进制位所持续的时间了,进而就可以区别了。
(3)为什么数据要不停的发送起始位,接受位,最多才只有一个字节,为何不一次性把所有数据发送完成再发送停止位?
由于我们的串口是异步发送器,也就是发送方和接收方的时钟不统一,所以在发送的时候可能会导致数据错位,那么只要错位一个,后面的数据就都错误了,所以,为了避免这种情况,我们才采用这种帧结构。
四:串口缺点以及改进
(1)UART存在的问题
电气接口不统一:对于UART来说,它只是对信号的时序进行了定义,并没有定义接口的电气特性;UART通信一般使用的都是处理器的电平,也就是TTL电平,但是由于不同处理器之间的电平存在差异,所以不同的处理器之间的UART不能直接相连;
抗干扰能力差:采用TTL电平的高低代表0和1,在数据传输过程中很容易出错。并且,由于抗干扰能力很差,所以通信距离也很短,一般只能用在一个板子上不同的芯片的通信;
(2)改进
针对于电气接口不统一的问题,于是产生了RS232协议。
RS232协议: 在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。(“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准。而工业控制的RS-232口一般只使用RXD、TXD、GND三条线。
规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑“0”,将低到-3 V的信号作为逻辑“1”。
由于RS -232采用串行传送方式,并且将微机的TTL电平转换为RS-232C电平,其传送距离一般可达30 m。
所以在串口通信的时候,只需要在硬件电路上加上一个TTL转RS232芯片就能实现不同设备的通信了,并且通信距离也提高了;在我们编程的时候,不需要考虑RS232,因为他只是在电气层面起作用;

那么对于RS232来说,又存在一些问题:
首先,由于接口芯片电平较高,容易损坏接口电路的芯片,又因为和TTL电平不兼容,所以需要电平转换芯片才可以和TTL电路连接;通信速度地,通信距离短,抗干扰能力较弱,易产生共模干扰;并且这种接口只可以实现点对点的通信方式,不能实现联网功能。针对这些问题,就产生了如下的RS485;
RS485协议:可以在远距离条件以及电子噪声大的环境中传输有效信号,具有多站能力,可以很方便的建立起一个设备网络,最多可以有32个节点。
那么为什么RS485可以远距离传输,并且抗干扰行很好?这就要看RS485的信号传输了。RS485标准规定采用差分信号进行数据传输,两线间的电压差+2~+6v表示逻辑‘1’,两线间-2v到-6v表示逻辑0;使用差分信号可以有效地减少噪声信号的干扰,延长通信距离,可达到1500m;并且RS485接口信号的电平相比于RS232降低了,所以不宜损坏接口芯片,并且该电平和TTL兼容,可以方便的和TTL电路连接;
但是由于RS485采用两线制,所以数据的发送和接收都要使用这对差分信号线,所以是半双工的工作方式,在编程时需要加以处理。
对于RS485组成的设备网络该如何进行管理,如何避免总线竞争,如何进行仲裁,如何选中从设备,等等都可以参考IIC的通信管理机制;

深入理解通信协议----串口(uart)相关推荐

  1. 搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

    通信协议 串口通信详解 IIC通信详解 SPI通信详解 CAN通信详解 文章目录 通信协议 什么是串口? 串口分类 USART/UART.RS232.RS485的区别 串口协议原理 传输协议 需要定义 ...

  2. 串口UART串行总线协议

    串口UART 串行端口是异步的(不传输时钟相关数据),两个设备在使用串口通信时,必须先约定一个数据传输速率,并且这两个设备各自的时钟频率必须与这个速率保持相近,某一方的时钟频率相差很大都会导致数据传输 ...

  3. micropython stm32f030_STM32F0单片机快速入门六 用库操作串口(UART)原来如此简单

    1.从 GPIO 到 UART 前面几节我们讲了MCU如何启动,如何用翻转IO引脚,以及用按键去触发中断.接下来我们介绍的也是最常用的一个模块,串口(UART). 串口可以说是最古老,而且生命力最强的 ...

  4. 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...

  5. stm32f103——串口UART

    在学习UART之前,我们先来了解一下单片机与外围设备之间的通信: 单片机与外围设备之间的信息交换和传输我们称为通信.过去通信方式有两种:并行通信和串行通信. 并行通信: 定义:并行通信是指利用多条传输 ...

  6. 【Linux应用】串口UART编程

    1.前言 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,应用十分广泛.UART工作原理是将数据 ...

  7. Esp8266 进阶之路25【高级篇】深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. TQ2440裸奔程序串口UART的PC机按键测试程序

    //========================================= // NAME: main.c // DESC: TQ2440串口UART测试程序 //============ ...

  9. CSR8675 使用串口 UART 收发功能

    CSR8675 使用串口 UART 收发功能 CSR8675 实现 UART 功能有两种方式,一种是托管连接,另一种是直接连接. 托管连接:不直接操作 Stream,通过 VM 层创建 Source ...

最新文章

  1. Java IO学习笔记(四)打印流
  2. 009_Spring Data JPA一对一关系
  3. 2017年热度最高的十大技术类技能
  4. 武汉大学提出软模板SoftProto框架,大幅增强方面词抽取任务
  5. C#实现像微信PC版一样的扫码登录功能
  6. Spring学习(24)--- AOP之 Aspect instantiation models(aspect实例模式)特别说明
  7. 学计算机之路写一篇作文,我的学习之路作文(2篇)
  8. 如何交付机器学习项目:一份机器学习工程开发流程指南
  9. 编译错误: Too much data space used by DLL's in MODULES section
  10. Kaldi AMI数据集脚本学习3---run_ihm.sh stage 1~3
  11. python 类self作用_self在Python中有什么用途?
  12. Python3 可变对象VS不可变对象、 对象的赋值、深拷贝VS浅拷贝
  13. 近世代数-群论基础二
  14. 德标螺纹规格对照表_德标DIN934六角螺母,不锈钢六角螺母DIN934
  15. De4Dot+Reflector 支持多种反混淆
  16. python接口测试第二期_上海悠悠python接口自动化测试第二期视频教程价值1600
  17. 银行业务头条体系推广
  18. 2018麦考林杂志计算机科学,加拿大大学2020年最新的麦考林杂志排名
  19. 熟练运用计算机的重要性,计算机*实习目的和意义
  20. 小程序{errcode:40029,errmsg:invalid code, hints: [ req_id: 8H_oSa0564ns12 ]}

热门文章

  1. c语言printf使用方法,C/C++语言printf命令使用方法
  2. (数论一)积性函数与狄利克雷卷积
  3. LWN: kernel warning 的时候应该怎么处理?
  4. 作为一个程序员,你真的知道如何学好编程吗?
  5. angular基础学习
  6. 关于前端方面的讨论帖
  7. 【计算机网络】 课程大作业:利用Wireshark抓包并进行分析
  8. 随记-简单而优雅的 namedtuple
  9. mib2c : You didn‘t give mib2c a valid OID to start with.解决
  10. 数字化时代,小程序平台促进银行线上金融业务发展