串口编程入门
嵌入式系统中,诸多设备都可以通过串口来控制,比如WiFi、蓝牙、RFID等等,因此在嵌入式设备中使用串口就显得特别重要。
首先,有几个概念简单澄清一下。
RS232、RS485和TTL指的是电气电平标准。一般而言,TTL使用0V表示低电平,+5V表示高电平。RS232使用负逻辑电平,即+3V ~ +15V表示低电平,-3V ~ -15V表示高电平。RS485和RS232一样都是基于串口的通讯接口,数据收发的操作是一致的,RS485采用差分信号负逻辑,+2V~+6V表示低电平,- 6V~-2V表示高电平。
以上三个协议(RS232、RS485和TTL)是电气特性,规定的是物理层接口要求。物理层标准的建设,就好比各种公路的建设,公路有了我们就可以在上面跑各种汽车,并制定各种汽车的不同行驶规则,这就是通信协议,UART就是其中的一种通信协议,全称是通用异步收发器,规范了在串行通信中,最常见的异步传输的通信模式,下面会有详解。
平常说的串口、COM口指的是物理接口,它们通常有9针和4针两种样式标准。4针串口标准中的四个管脚分别是:VCC、TX、RX和GND,其中TX和RX分别是发送端(Transmit)和接收端(Receive)。一般而言两个串行口互相收发信息的时候,需要让他们的这两个管脚交互相连,即A口的TX接B口的RX,反过来A口的RX接B口的TX。 在左边儿的D型9针接口中,一般而言实际用到的也是VCC、TX、RX和GND四个脚。
下面就来具体看看串口是怎么回事。
串口通常指的是串行接口,这跟并行接口相对而言。比如有一个8-bits的数据从A发往B,并行和串行的区别分别如下面所示。
可以看到,串行传输只需要一根线缆就够了,而并行的话需要8根线。他们各自的特点如下:
简单来看,串行传输比并行传输有更多优势,实际上随着各种设备的主频越来越高,串行通信在现代计算机领域越来越大行其道。
那这一根线的串行通信,究竟是怎么传输数据的呢?主要有下面两种办法。
1,同步传输 所谓同步传输,最核心的地方就是用统一的时钟来控制发送方和接收方,然后规定一个同步起始字符,同时规定传输的每个字符包含的位数(一般是5-8位)就可以了。
由于同步传输必须要求收发双方时钟一致,甚至要求使用严格的同一时钟源,而这在多数场合下都是无法达到的要求,因此虽然同步传输比异步传输速度高,但应用更为广泛的还是异步传输。
2,异步传输 顾名思义,异步传输的本质是不要求收发双方时钟的同步性,这意味着他们可以各自有各自的时钟(始终不需要同步,但频率还得是一样的,不然根本就鸡同鸭讲,即波特率必须得一致),这极大降低了工程实施的复杂性。因此着重要关注的是异步传输。
既然是异步传输,即发送方随时可以发送数据过来,事先是没有跟接收方有过任何协同商量的,那接收方很自然地就会有个疑问:你的数据究竟什么时候过来?一般的做法是这样:规定一个空闲的电位状态(比如高电平),然后规定一个起始位(比如一个低电平时钟间隔),然后接着就是正常的数据位(当然也可以规定长度,比如8-bits),然后是可选的校验位(用来校验数据传输过程中是否受到电磁环境的影响发生数位翻转),然后是停止位(比如一个高电平时钟间隔)。
说那么多,来几张直观的图说明问题吧。下面援引知乎的几幅图,配以实例加以说明。
串口传输的典型例子就是键盘按键,当我们按下 'k' 时,实际上就是传输了该字符的ASCII码值 01101011到了主机。
但在大部分时候,键盘可能根本没有产生任何数据,那我们就要有一个能表达空闲状态的点评,比如这样。
没数据(空闲)时,一直维持在高电平。那好,当我们按下字母 'k' 的时候,我们就立刻发去一个起始位,并紧跟着我们的数据 'k' ,就像这样
主机接受了若干个数据位(跟键盘预先商量好)之后就知道,键盘发送了一个 'k' 过来了。然后是可选的校验位和停止位,然后将线缆电平恢复到空闲状态
这样一来,设备之间就是异步通信的,只要设置好一致的波特率即可,依靠起始位、数据位、校验位、停止位来协调。
以上这样的异步串行通信方式,就是所谓的UART。 嘘!听说识别下面二维码进入 微店●秘籍酷 能上天遁地,不信你试试!
|
相关推荐
- 超过1000多程序员面试经历,收集了阿里巴巴面试3年总结的108道Java面试题:MySQL+redis+计算机网络+操作系统+Java编程+架构设计
- PyQt5 GUI应用程序工具包入门(2)
- 量化交易入门阶段——中小板还真不能连续放量
- 不愧是“大厂敲门砖”,阿里新产并发编程神仙笔记也太赞了
- 利用C++制作无敌战机游戏,快乐学习,快乐编程!(源代码展示)
- 多线程编程 合理线程数
- 号称能自动编程60年,“进化计算”究竟进化到哪一步了?
- windwos核心编程--5、虚拟内存相关函数及其应用
- P1135奇怪的电梯--------蒟蒻的深搜入门
- shell编程输入输出,控制结构,函数
- 【转】XenServer的架构之Xenopsd组件架构与运行机制
- Windows内存管理