(七)串口(串行)通信

一、简介

如果将单片机比作一个人的话,每个单片机都是一个个体,大多数人是无法一个人在这个社会上生存的,通常都需要和领导、家人、朋友、甚至陌生人进行交流,而在交流的时候,交流的双方必须采用相同的语言才能进行正常交流,一个说英语,一个说汉语那沟通就费劲了,当然了这也是可以沟通的,毕竟还有翻译(电平转换,协议转换)。串行口就是单片机行业中非常流行的一种通信协议(语言),也是比较基础的一种通信协议,基本上弄明白了串口,其他如IIC、SPI(也都属于串行的范畴,只不过实现方式稍微有点不同)就很简单了。

二、通信原理

我在前面就说过了,单片机无非是输入输出,无论是点亮LED还是串口,使用的都是普通IO口,也就是高低电平的转换,达到通信的目的。串口通信也不过是更有规律的、符合某项规定的电平转换方式而已。

首先不考虑串口的协议规定,我们先做一些约定:

  1. 我们有两个单片机A和B,如下图

  2. A作为发送数据方、B作为接收方,P0.0---->P1.0

  3. A、B的晶振频率可以不同

  4. A发送的速度和B接收的速度相同,比如,A每秒发送1bit数据,B每秒接收1bit数据,这个很关键

好了,假如有一个数据“001”,一般来说,我们从低位开始发送:

  1. 由数据可得,此时A应该发送“1”数据,则将P00管脚置高(P00=1)

  2. P00置高并保持1s时间,由于A和B的收发速度相同,则这1s内,B一定会读一次P10管脚的状态(x=P10)

  3. 由于A的P00和B的P10管脚是接在一起的,而P00此时为高电平,所以P10也是高电平,此时x=1,实现数据“1”的发送

  4. 第二位数据是“0”,则将P00管脚置低(P00=0)

  5. P00保持1s(第2s),则这1s内,P10管脚读到的状态就变成了0,实现了数据“0”的传输

  6. 第三位数据依然是“0”,此时P00管脚状态不变

  7. P00保持1s(第3s),则这1s内,P10管脚读到的状态依然是0,实现数据“0”的传输

  8. 至此,实现了3位数据的发送

总结

在串口通信过程中,两方的运行速度可以不同,比如有时我们需要将数据从单片机发送到电脑或反过来,此时两方的运行速度是不可能一样的。但是两方的通信速度必须相同,体现在发送和接收的时间间隔必须相同,这是串口通信的重点。

三、一些概念

1. 波特率

波特率决定了通信双方的通信速度。波特率的英文写法是bps(bit per second),也就是位每秒,常见的串行波特率如:9600bps、115200bps等,实际上除以8才可以转换为字节,因此可以看出,串口通信的速度实际上并不快。

2. 校验位

串口通信采用的是奇偶校验,校验位是在数据位之后额外添加的一位数据。如果设置了校验位,则发送和接收双方必须设置相同的校验方式,如果设置为偶校验,则通信过程接受方收到的数据中“1”的数量必须是偶数,否则可以认为通信失败。例如:A和B同时设置为偶校验,实际发送过程中1的数量必须是偶数个

数据 1的数量 校验位 实际发送数据
1001 2(偶数) 0 1001 0
1000 1(奇数) 1 1000 1

3. 起始位

就好像人打电话一样,首先被呼叫的人得能够知道他应该准备好接电话了,之后才能建立沟通,串口通信时也需要这样一个过程,在串口通信开始之前,发送方需要发送起始位,其实就是将管脚拉低一段时间,当接收方检测到这个状态后,就知道后边会有数据进来了。

4. 数据位

顾名思义,真正的数据是在数据位的。

5. 停止位

停止位用来表示数据传输完成,通常停止位是一定时间长度的高电平。同时由于各个单片机之间的时钟信号略有偏差,在停止位可以对双方的时钟进行一个矫正。

6. 是否双工

按照是否能够同时收发信息,串口通信主要分为三种:

单工:单向传输数据

半双工:可以双向通信,但是某一时刻只能往一个方向进行数据传输

全双工:可以双向通信,而且同一时刻收发可以同时进行

7. 其他串口

一般来说我们常说的串口是指的TTL电平的串口通信,除了这种电平以外还有两种比较常见的串口通信:

RS233:RS232串口通信与TTL通信主要是有两方面不同,一个是电平不同,RS232电平要高于TTL电平,所以在使用时需要使用转换器,如MAX232芯片,同时高电平带来的是远距离传输的优势;第二个是接口不同,RS232原则上需要使用被称为DB9的插口进行通信,共有9根线,除了TX、RX两个主要的信息传输引脚外,还增加了许多流控引脚,能够让通信更加稳定,虽然一般不咋用。。。RS485:RS485是一种典型的半双工通信方式,其在通信时使用的是差分通信方式,一般只有两个脚,对接头没有要求,两根线接在接线座上就可以,通常一根线标A,另一根标B,或标485+和485-;由于其采用的差分通信,两根线之间的压差才能决定1bit数据,因此485只能采用半双工通信,这使得485能够在远距离传输时保持一定的稳定性。除此之外,485通常还被称为485总线,因为其两根通信线上可以挂载多个设备,按照芯片的驱动能力最多挂载64、128甚至更多的设备,之后可以一主多从的方式,由主机(master)采用轮询的方式一个一个去读取从设备(slave)的数据,达到总线通信的目的。

8. 9600 8N1

在看别人的数据手册或者产品说明时,通常会看到这样一个参数,9600 8N1,实际上当我们拿到一个产品没有任何说明时,就可以尝试使用这个配置进行串口通信,实际意义如下:9600:波特率9600bps 8:8位数据位 N:没有奇偶校验位,None无校验,ODD奇校验,EVEN偶校验 1:1位停止位,也就是停止位占用发送1bit数据所需的时间,2表示发送2bit数据所需的时间

四、时序图

网上找了个图,地址点击这里

由上图可以看出,串口通信中一帧数据包含10位数据,其中:起始位:1位 数据位:7位 校验位:1位 停止位:1位不进行通信时,串口所用的引脚处在高电平状态。

需要注意的是:

上图只有7位数据位,从实际串口通信的使用来看,此时是没有采用校验的,校验位也可以作为1位数据位,因此是8位数据位,如果是采用奇偶校验,实际上数据位是9位,增加1位奇偶校验位,此时数据帧的总长度是11位。


前几篇文章

(一)Proteus+keil=C51闪个灯

(二)流水灯-C51

(三)按键检测

(四)中断系统

(五)中断代码仿真

(六)定时器/计数器

串口怎样配置才能无论奇偶校验都能正常接收_(七)串口(串行)通信相关推荐

  1. pc串口卡和plc怎么接线_计算机COM1串行口就是RS232串行口么 串行线两端的串行口与计算机和PLC怎么样的线序连接...

    展开全部 通过串口并口共享资源 在两台计算机之间进行通信,最好的方法当然是建立局域网.62616964757a686964616fe58685e5aeb931333330336433如果没有建立网络, ...

  2. linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!

    嵌入式设备在电路中交换信息的时候必须通过共享一个通用的协议.现在嵌入式系统中已经定义了数百种通信协议来实现数据交换,一般来说可以将其分为两类:并行或串行. 并行传输数据是指同时传输多个数据位,它们通常 ...

  3. 3.3 SPI串行Flash配置模式

     SPI串行Flash配置模式 1.SPI串行配置介绍 串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口).Flash 存贮器与EEPROM ...

  4. SPI、I2C、UART(即串口)三种串行总线详解

    以下内容均来源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 几个串口协议学习整理 UART IIC SPI_mainn的博客-CSDN博客 SPI.I2C.UART三种串行总线的原理.区别及 ...

  5. 串口接收中断配置过程---STM32F4--HAL

    串口接收中断程序配置过程(HAL) 初始化相关参数,使能串口: HAL_UART_Init(); 该函数的参数是串口的基址,在stm32f429xx.h文件中,定义了8个UART_HandleType ...

  6. Linux下串口的配置

    一.串口属性 (标题一部分内容摘录自原文地址) 1.termios结构体 串口属于终端设备,其接口属性用termios结构体来描述 struct termios {tcflag_t c_cflag/* ...

  7. go语言服务器连接mysql,服务器mysql怎么配置才能远程连接

    如何设置MYSQL服务器允许远程连接?如果你使用的与数据库不在同一台服务器上电脑,那么MySQL 服务器就需要允许远程链接,网站才能正常运行.那么如何设置MYSQL服务器允许远程连接呢?我想这是很多人 ...

  8. VS下如何配置才能使用 cl 命令行方式编译 C/C++ 程序

    在 VS 环境中,我们可以顺利的编译.生成程序.究其原因,是因为 VS 的 IDE 本身已经配置好了编译程序所需的 executable file , include files 和 library ...

  9. adguard拦截规则存在哪里_广告拦截软件Adguard怎样配置才能更全面的发挥作用

    相信很多伙伴都对网上的各种各样的广告感到厌烦,Adguard是一款屏蔽拦截网页的软件, 可以支持市面上几乎所有的浏览器,今天小编就给大家介绍一下如何配置Adguard. 第一步:通过拦截规则开始隐私保 ...

最新文章

  1. 修改Tomcat可支持get传参方式的url长度,get形式
  2. php把表单转为json保存,javascript – 使用jquery将表单数据保存到本地json文件中
  3. java 插件开发 互相依赖_java – Eclipse插件开发:有没有办法控制有关我的插件缺少依赖项的安装程序消息?...
  4. Sharepoint2007个人网站不能同步域信息的处理方法
  5. 搜索——素数环(hdu1016)
  6. 项目运行报错java.sql.SQLSyntaxErrorException: Table ‘sell.hibernate_sequence‘ doesn‘t exist
  7. MVP 模式实例解析
  8. Vue 给第三方组件加入自定义参数
  9. sqlserver 批量删除相同前缀名的表
  10. Linux 终端操纵之扼要疾速指南(2)
  11. 常见WA错误总结(待更)
  12. 信息化与信息化系统__无线__网络工程标准
  13. 回忆2018年高教杯数学建模大赛
  14. 教你如何使用 python 制作一个简单的密码本
  15. 破解excel格式保护
  16. 反编译“微软纸牌集合”资源文件
  17. 【gp数据库】查询函数中引用数据表信息
  18. c语言文件处理中ab,C语言文件处理中wt是什么操作方式?
  19. 2019 全球科技行业薪资报告出炉:全栈开发受热捧,40 岁以上程序员收入最高!...
  20. 浅析 - 被歧视的小众需求

热门文章

  1. Cordova学习--iOS自定义插件
  2. React Native Weex 区别
  3. 0507css3基础:弹性盒子、媒体查询
  4. Nodejs-express 4.0框架 简单介绍
  5. 架构畅想:如果以你所会去进行架构,会到哪一步?
  6. linux第一季运维001
  7. GAE 博客——B3log Solo 0.3.5 正式版发布了!
  8. 三国志、英雄无敌玩腻了?没关系,我教你开发个战旗游戏玩玩
  9. php 设置curl不超时时间,curl命令的超时时间
  10. SpringSecurity 权限控制之开启动态权限注解支持