当前课程知识点:ARM微控制器与嵌入式系统 > 第五章 ARM微控制器的各种外设 > 5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口 > 5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
各位同学大家好
我是清华大学工程物理系的曾鸣老师
欢迎大家继续回到我们
ARM微控制器与嵌入式系统MOOC课堂
特别是跟着我们继续进行外设里头
异步串行通讯UART这个章节的学习
那么在这个章节里
我们开始要认识真正计算机上使用的串口
也就是所谓RS-232串口
乃至我们做实验要用USB虚拟的串口
究竟是怎么回事
特别是理解我们真正做一个通讯
怎么让我们的计算机
我们编程的计算机跟我们这块板完成通讯
乃至我们日后如果想把这个微控制器用起来
像曾老师所说的
跟一个GPS模块通讯想知道坐标
跟一个GMS的手机模块通讯想拨打电话
想发送短信 乃至上网
我们应该怎么来使用一个真正的串行通讯接口
那么经过前面两个单元的学习
特别是上一个单元的最后
大家跟着我一起做了一个小游戏
做了个人体的UART
我相信大家首先肯定特别明白了一件事
就是那个UART的那个数据帧
究竟是怎么样一个结构
平时为1 起始位为0
然后一个比特一个比特发送乃至停止位
乃至奇偶校验位
这个大家一定清楚了
那么同时在这个游戏当中
我不知道大家有没有体会到一件事
就是前面两个单元所讲的UART这样一种标准
这个数据帧
它只定义了逻辑上的1和0以及时序
比如在一个波特率驱使下的结构
但是它并没有规定0和1用什么来表达
比如说我们做游戏的时候
人体UART我们就可以通过举手代表1
放手代表0
而我们都知道在数据系统里头
只有你定义了1和0
逻辑本质是一样的
那么换言之如果我们用的是一个微控制器
我们用5伏代表逻辑1的微控制器
那么它就是在5伏和0伏之间电压跳变
如果我们用ARM的
我们现在这门课里的微控制器
它是以3.3伏电平代表逻辑1
那么它就在3.3伏和0伏之间跳变
而实际上如果我们笼统的说
一个计算机有没有串口
或者跟计算机连接一个串口的时候
这个时候所说的serial port
它在UART这个数据帧上
因为我们前面所讲的是高度一致的
但是它的电平标准是不一样的
那么我们称为RS-232的标准
在这个单元里我要给大家展开的讲一讲
那么RS-232这个标准是
实际上我们所使用的个人电脑PC机的标准
那么这个标准是由
美国的电子工业协会EIA提出的
有很多版本
比如现在我们所说的RS-232-C
那么这一系列的标准提出于1960年代
最早在1962年
那么现在看到的标准
基本上是成形于1969年
那么大家如果回溯的时候
会发现这些标准的提出比个人电脑的诞生
比我之前第二个章节
讲八卦计算机史的年代还要早
所以实际上是我们所使用的个人电脑
不得已遵循了已经存在的通讯标准
以便于跟已经存在的各种设备进行通讯
那么因为是这样一种兼容性
它的电平就非常的奇怪
比如说我们简单的讲
我们说5伏的TTL电平
虽然我们现在用的芯片是3.3伏
大家很好理解
5伏TTL的单端电平
我们用一个接近5伏的高电压代表逻辑1
低电压代表逻辑0
发送的时候由2.4伏到5伏代表逻辑1
0.4伏到0伏代表逻辑0
对于接收端呢 放宽一点标准
只要比两伏高就认为收到了逻辑1
比0.8伏低就认为收到逻辑0
这我们大家都很好理解
那么3.3伏的电平的芯片与之类似
到了RS-232
也就是我们买到个人电脑
如果带有一个D型串行接口的时候
我们就会发现它的电平是非常奇怪的
在这个标准里头
它是一种负电平逻辑
简单的说
就是对于发送端
我们使用了负的5伏到15伏代表逻辑1
用正的5伏到15伏代表0 逻辑0
大家发现出现负电压了
而且负电压代表逻辑1
高电压代表逻辑0
这是个非常奇怪的感觉
然后对于接收端呢放宽一点
只要低于负3伏到负25伏范围内
收到了一个电压都认为是逻辑1
高于正3伏到正25伏都认为收到了逻辑0
那么这样一种电平标准就是RS-232的逻辑电平
大家会觉得这个好奇怪
但是如果大家静下心来想
就跟上个单元最后做的人体UART一样
还是那个1和0跳变的逻辑数据帧
只是在给1给0的时候
使用了不同的电压来表征本质上的逻辑和时序
是完全兼容 完全一样的
它仍然是UART
但是按照这个电压来进行通讯
就是计算机上各串口的电平标准
我们称为RS-232
那么与这样一种电平标准相类似的
如果大家仔细看
计算机上的串口或者RS-232的
它不仅细化定义了电平还定义了接插件
那么像这样一种接插件像一个梯形一样
在英语里我们比较形象的
把它称为D型的插口
因为一边宽一边窄
竖起来就是个D型
那么当一对通讯的时候
它们互相插在一起
在这个金属圈的D型里头
有的是孔 有的是针
那么构成了一对可以插在一起的接插件
称为female和male型的接插件
那在RS-232标准最早是像这样一个25针的
D型插口里头
除了我们所讲到的地线 发送接收线
这三根线以外还有大量的数据握手
和流量控制的信号
之后随着计算机技术的不断发展
对于这些信号依赖越来越弱
我们在上一代计算机里看到最多的呢
是这样九PIN的插头
那么大家左边这张图可以看到的就是
它的这个D型插头里头的
female和male型的插座
那么有的是cable有的是做在计算机的背后
今天大家如果去买一些计算机
特别是工业使用的计算机
背后都有这样的插口
我们称为带有串口的计算机
那么大家理解在这样一个接口里除了地
除了发送
除了接收还有若干个进行流量控制
和收发两端数据握手的引脚信号
这些信号我在这里不展开讲
但是大家非常好理解
比如是我要做出一个通讯
他可能需要彼此各给一个高低电平
表示我就绪你可以发送
或者说我正在处理数据
请你暂停不要给我发数据
这样一些信号我们称为流量控制或者握手
而在我们这门课
或者在我们日常当代的嵌入式系统里头
用的越来越多的呢
就是一种简化接法
虽然是九PIN的接头
但是我们只连接了中间三根线
共上地
你的发送连我的接收
你的接收连我的发送
这是不是跟我们一开始讲的UART通讯的概念
是完全一样的呢
那么这里注意两件事
第一如果是跟计算机的串行接口连接的时候
这个线上发送的数据帧
还是我们讲的UART
但是电平标准要注意
一定是负的十几到20伏代表逻辑1
正的十几到20伏代表逻辑0的
这样一种RS-232的电平标准
第二呢
就是在这样一种连接里
我们没有了刚才所说的那些握手信号
所以我们一定要在软件层面
或者是自己编程的时候
本来就使用的是比较慢的通讯
来进行流量的控制
确保接收端能够来得及接受
发送端塞过来的所有数据
能够及时的处理
这个时候我们称为没有handshake没有握手
需要通过一些类似于XON and XOFF这样的协议
来进行流量控制
那么讲了这些以后
一个新的问题
如果我们有一个ARM的微控制器
它有一个UART的通讯模块
在我们接下来课里要编程让它跑起来
比如在我们这门课的单元里
我们想让它跟我们自己的电脑的串口连
我们应该怎么办呢
很多同学会想到
它电平标准不一样
你发送逻辑1是3.3伏
计算机的串口想收到负15伏才是逻辑1
我们需要一个不改变时间结构
和逻辑结构的电平转化芯片
这个芯片非常简单
就像个翻译官
拿到3.3伏翻译成负15伏
拿到0伏翻译成正15伏
或者反过来收到了正负电压
翻译成3.3伏和0伏
它是个interface一个接口芯片
那么实际上在我们电路板里
有大量的这样的芯片存在
来帮我们做这样电平转换
最有名的比如说美信公司
Maxim公司的MAX232这个芯片
什么功能都不干
就是完成电平转化
所以我们实际使用的很多微控制器的开发板上
它有一个D型的插头
让你用一根电缆能跟计算机的串口连
本质上就是有这么一个结构
微控制器以TTL的或者CMOS的3.3伏的逻辑
给出一个UART的数据帧
经过了MAX232这样一个电平转化芯片
碰到3.3伏逻辑1就变成负多少伏的逻辑1
完成电平的转化
而不改变帧的数据结构
再通过一个标准的D-Sub的接口
放在电路板上
这样我们使用一根标准电缆一头插计算机
一头插我们的板子
就可以完成微控制器与计算机之间的串行通讯
那么随着计算机技术的发展
大多数做实验的同学
你可能电脑上根本就不再有串口了
那怎么办呢
我们串行通讯的实验仍然可以做的
在后面单元我会带着大家做
那么我们更多的使用了是我们计算机上
有的另外一个接口
在讲通讯的时候
我跟大家讲过就是USB
USB是Universal Serial Bus的缩写
它的发明就是一个总线型的串行通讯
来替代已有的串口和并口
所以我们非常容易的能在市面上
找着这样一种UART转换USB的转换芯片
就像这张图所示
它的右边可以通过三根线
以一个标准UART的方式
连到我们的微控制器上
我们微控制器发出符合UART数据帧的0或者1
而它的另外一头呢
是一个USB的接口连到我们的计算机
通过USB这个芯片CP2102为代表
这样一种芯片的自己的功能
使我们计算机装上驱动以后
识别出一个虚拟的串行通讯接口
我们只要像标准串口一样
在计算机端编程或者读写
就能按照UART的数据帧读到微控制器
发给我们的数据
也可以通过USB接口
向微控制器以UART的数据帧发送数据
那么我们实际现在大家使用的Blazar
这个实验板
使用这样一种USB虚拟UART的通讯方式
那么讲完这个单元大家知道了
我们一个理想的UART数据帧
究竟是如何跟电路连起来的
如何跟计算机连
那么换言之如果大家以后想拿这个微控制器
自己玩点酷的东西
比如说要接个GPS
接个GSM
首先你要知道它有没有UART接口
一般都是有的
其次你要知道它的数据帧格式
比如波特率是多少
这得看手册
最后呢 你要看你挑的那个模块
它的接口是什么电平标准
是5伏为逻辑1的UART
还是3.3伏为逻辑1的UART
还是那个模块上
已经做了类似这样MAX232的电平转换
是RS-232的负电压
和正电压逻辑1、0的串行通讯
你一定要以匹配的方式接
它是TTL 你就接TTL5伏
它是RS-232
你就应该也做完电平转换以后连在一起
否则有可能烧坏这些芯片和器件
但是一旦电平解决了
数据帧还是我们前两个单元所讲的
UART的数据帧
大家就可以通过编程把它玩起来了
-1.1 课程概览
--1.1 课程概览
-1.2 如何学好嵌入式系统
-2.1 计算机的基本概念、发展历史
-2.2 从晶体管到CPU
-2.3 概念CPU、微控制器MCU和嵌入式系统
-2.4 八卦计算机史
-2.5 不同领域、不同系列的嵌入式系统
-2.6 ARM历史与MKL25Z128 MCU
--2.6 ARM历史与MKL25Z128 MCU【习题】
-3.1 CPU的基本结构和运行机制
-3.2.1 堆栈的概念
--3.2.1 堆栈的概念【习题】
-3.2.2 堆栈的概念-头脑体操
-3.3.1 ARM的体系结构
--3.3.1 ARM的体系结构【习题】
-3.3.2 ARM的体系结构-头脑体操
-3.4.1 中断的概念和机制
-3.4.2 中断子程的概念和编程
-3.5 复位、时钟、存储器和总线
--3.5 复位、时钟、存储器和总线【习题】
-3.6 小结:MCU的总体结构和程序运行机制
--3.6 小结:MCU的总体结构和程序运行机制【习题】
-4.1 第一种外设:IO
-4.2 IO外设的编程实操-点亮LED
-4.3 IO外设的进阶知识
-4.4 嵌入式开发的基本概念与工具链
-4.5 嵌入式开发的进阶知识
-4.6 嵌入式开发中的C语言(上)
--4.6 嵌入式开发中的C语言(上)【习题】
-4.7 嵌入式开发中的C语言(下)
--4.7 嵌入式开发中的C语言(下)【习题】
-E0.1 实验零 开发板的初步认识与工具链的安装
-E0.2 实验零 体验一个例程的编译与下载
-E0.3 实验零 编写第一个程序:点亮核心板LED
-E1 实验一 点灯秘籍
-5.1 ARM微控制器外设学习概述
-5.2.1 ARM微控制器外设:通讯
-5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)【习题】
-5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器的外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)【习题】
-5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
--5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
-5.2.5 ARM微控制器外设:UART的寄存器编程(上)
--5.2.5 ARM微控制器外设:UART的寄存器编程(上)
-5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)【习题】
-E2 实验二 UART编程实操
-5.3.1 ARM微控制器外设:IO的中断编程(上)
-5.3.2 ARM微控制器外设:IO的中断编程(下)
-5.4.1 ARM微控制器外设:定时器的原理
-5.4.2 ARM微控制器外设:定时器的编程
--5.4.2 ARM微控制器外设:定时器的编程【习题】
-E3 实验三 定时器中断编程实操
-5.5.1 ARM微控制器外设:PWM的原理
-5.5.2 ARM微控制器外设:PWM寄存器与编程
-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
-E4 实验四 数码管显示编程实操
-5.6.1 ARM微控制器外设:SPI通讯简介
--5.6.1 ARM微控制器外设:SPI通讯简介【习题】
-5.6.2 ARM微控制器外设:SPI寄存器与编程
-5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
--5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
-5.7.1 ARM微控制器外设:I2C通讯简介
-5.7.2 ARM微控制器外设:I2C的通讯协议
-5.7.3 ARM微控制器外设:I2C寄存器与编程
--5.7.3 ARM微控制器外设:I2C寄存器与编程【习题】
-5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
--5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
-5.8.1 ARM微控制器外设:ADC简介
-5.8.2 ARM微控制器外设:ADC基础
-5.8.3 ARM微控制器外设:ADC寄存器与编程
-E5 实验五 ADC编程实操
-E6 挑战实验
--E6 挑战实验
-6.1 嵌入式系统的接口与设计
-6.2 嵌入式系统的实例