串口怎样配置才能无论奇偶校验都能正常接收_(七)串口(串行)通信
(七)串口(串行)通信
一、简介
如果将单片机比作一个人的话,每个单片机都是一个个体,大多数人是无法一个人在这个社会上生存的,通常都需要和领导、家人、朋友、甚至陌生人进行交流,而在交流的时候,交流的双方必须采用相同的语言才能进行正常交流,一个说英语,一个说汉语那沟通就费劲了,当然了这也是可以沟通的,毕竟还有翻译(电平转换,协议转换)。串行口就是单片机行业中非常流行的一种通信协议(语言),也是比较基础的一种通信协议,基本上弄明白了串口,其他如IIC、SPI(也都属于串行的范畴,只不过实现方式稍微有点不同)就很简单了。
二、通信原理
我在前面就说过了,单片机无非是输入输出,无论是点亮LED还是串口,使用的都是普通IO口,也就是高低电平的转换,达到通信的目的。串口通信也不过是更有规律的、符合某项规定的电平转换方式而已。
首先不考虑串口的协议规定,我们先做一些约定:
我们有两个单片机A和B,如下图
A作为发送数据方、B作为接收方,P0.0---->P1.0
A、B的晶振频率可以不同
A发送的速度和B接收的速度相同,比如,A每秒发送1bit数据,B每秒接收1bit数据,这个很关键
好了,假如有一个数据“001”,一般来说,我们从低位开始发送:
由数据可得,此时A应该发送“1”数据,则将P00管脚置高(P00=1)
P00置高并保持1s时间,由于A和B的收发速度相同,则这1s内,B一定会读一次P10管脚的状态(x=P10)
由于A的P00和B的P10管脚是接在一起的,而P00此时为高电平,所以P10也是高电平,此时x=1,实现数据“1”的发送
第二位数据是“0”,则将P00管脚置低(P00=0)
P00保持1s(第2s),则这1s内,P10管脚读到的状态就变成了0,实现了数据“0”的传输
第三位数据依然是“0”,此时P00管脚状态不变
P00保持1s(第3s),则这1s内,P10管脚读到的状态依然是0,实现数据“0”的传输
至此,实现了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
(三)按键检测
(四)中断系统
(五)中断代码仿真
(六)定时器/计数器
串口怎样配置才能无论奇偶校验都能正常接收_(七)串口(串行)通信相关推荐
- pc串口卡和plc怎么接线_计算机COM1串行口就是RS232串行口么 串行线两端的串行口与计算机和PLC怎么样的线序连接...
展开全部 通过串口并口共享资源 在两台计算机之间进行通信,最好的方法当然是建立局域网.62616964757a686964616fe58685e5aeb931333330336433如果没有建立网络, ...
- linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!
嵌入式设备在电路中交换信息的时候必须通过共享一个通用的协议.现在嵌入式系统中已经定义了数百种通信协议来实现数据交换,一般来说可以将其分为两类:并行或串行. 并行传输数据是指同时传输多个数据位,它们通常 ...
- 3.3 SPI串行Flash配置模式
SPI串行Flash配置模式 1.SPI串行配置介绍 串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口).Flash 存贮器与EEPROM ...
- SPI、I2C、UART(即串口)三种串行总线详解
以下内容均来源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 几个串口协议学习整理 UART IIC SPI_mainn的博客-CSDN博客 SPI.I2C.UART三种串行总线的原理.区别及 ...
- 串口接收中断配置过程---STM32F4--HAL
串口接收中断程序配置过程(HAL) 初始化相关参数,使能串口: HAL_UART_Init(); 该函数的参数是串口的基址,在stm32f429xx.h文件中,定义了8个UART_HandleType ...
- Linux下串口的配置
一.串口属性 (标题一部分内容摘录自原文地址) 1.termios结构体 串口属于终端设备,其接口属性用termios结构体来描述 struct termios {tcflag_t c_cflag/* ...
- go语言服务器连接mysql,服务器mysql怎么配置才能远程连接
如何设置MYSQL服务器允许远程连接?如果你使用的与数据库不在同一台服务器上电脑,那么MySQL 服务器就需要允许远程链接,网站才能正常运行.那么如何设置MYSQL服务器允许远程连接呢?我想这是很多人 ...
- VS下如何配置才能使用 cl 命令行方式编译 C/C++ 程序
在 VS 环境中,我们可以顺利的编译.生成程序.究其原因,是因为 VS 的 IDE 本身已经配置好了编译程序所需的 executable file , include files 和 library ...
- adguard拦截规则存在哪里_广告拦截软件Adguard怎样配置才能更全面的发挥作用
相信很多伙伴都对网上的各种各样的广告感到厌烦,Adguard是一款屏蔽拦截网页的软件, 可以支持市面上几乎所有的浏览器,今天小编就给大家介绍一下如何配置Adguard. 第一步:通过拦截规则开始隐私保 ...
最新文章
- 修改Tomcat可支持get传参方式的url长度,get形式
- php把表单转为json保存,javascript – 使用jquery将表单数据保存到本地json文件中
- java 插件开发 互相依赖_java – Eclipse插件开发:有没有办法控制有关我的插件缺少依赖项的安装程序消息?...
- Sharepoint2007个人网站不能同步域信息的处理方法
- 搜索——素数环(hdu1016)
- 项目运行报错java.sql.SQLSyntaxErrorException: Table ‘sell.hibernate_sequence‘ doesn‘t exist
- MVP 模式实例解析
- Vue 给第三方组件加入自定义参数
- sqlserver 批量删除相同前缀名的表
- Linux 终端操纵之扼要疾速指南(2)
- 常见WA错误总结(待更)
- 信息化与信息化系统__无线__网络工程标准
- 回忆2018年高教杯数学建模大赛
- 教你如何使用 python 制作一个简单的密码本
- 破解excel格式保护
- 反编译“微软纸牌集合”资源文件
- 【gp数据库】查询函数中引用数据表信息
- c语言文件处理中ab,C语言文件处理中wt是什么操作方式?
- 2019 全球科技行业薪资报告出炉:全栈开发受热捧,40 岁以上程序员收入最高!...
- 浅析 - 被歧视的小众需求