硬件选讲之UART
TTL/CMOS与RS232电平
MAX232升压原理
UART:与RS232的前缘,与USB的今生
百变的UART
串口与USB:宿敌?
虚拟串口
虚拟机下外设接口的使用,如:串口、J-link、U盘
Linux下串口的使用
安卓下串口的使用
今天看到CSDN的一个博客签名“没有时间把一件事情做好,却有时间把一件事情反复做”,心里说不出什么滋味,但既然连写带抄的整出了这篇文章,那就让它与大家见面吧。
TTL/CMOS与RS232电平
STM32的手册上说I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。51的芯片手册基本都没提过吧?
开关电源可以分为电容开关型(电荷泵型)、电感与变压器开关型(在线型On-Line、隔离型Off-Line),虽然电荷泵型不是主流,但用作RS232还是挺合适的。如专为RS-232标准串口设计的单电源电平转换芯片、使用+5v单电源供电MAX232:
外部并有4个0.1uF或1uF的瓷片电容,MAX232电荷泵内部的FET开关阵列以一定方式控制快速电容器的充电和放电,从而使输入电压以一定因数(0.5,2或3)倍增或降低,从而得到所需要的输出电压。这里电容C1、C2用于搬运电荷到C3(+10V)和C4(-10V)?
RS-232:一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。老式为25芯,现在一般为9芯,即常见的DB9接口(2排,注意与3排15芯的VGA接口的区别):
UART:是一种异步收发传输器,即通用异步收发传输器(UniversalAsynchronous Receiver/Transmitter)的缩写。具体实物表现为独立的模块化芯片,或作为集成于微处理器中的外设。UART也可称作是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
USART:Universal Synchronous/AsynchronousReceiver/Transmitter. 通用同步/异步串行接收/发送器。
一般说的单片机串口应该为UART/USART,当然指着开发板上的RS-232的DB9接口说这是串口,也是可以的。开发板上多有DB9母头接口,即可大致确定是单片机的串口经过了MAX232或SP3232吧,相应的与笔记本连接,就需要找一个MAX232+CH340的俗称“USB转串口线”的东东了:
当然,小伙伴们学习时一般只需要单片机串口和电脑通信,完全没有必要走下面的不能供电、多花银子、浪费通信速率、臃肿的“曲线救国”之路:
单片机UART/USART+MAX232+DB9 <-->DB9+MAX232+CH340+USB
现在出现的很便宜的是兼容5V/3.3V的CH340小板和PL2303小板,直接与单片机的TXD、RXD和GND相连即可,还可供电:
PL2303是国际货,驱动(Winsows、Linux、安卓)全,但国内山寨货多的质量没保证。
CH340倒还不错,至少还算稳定点。
贵的CP2102/CP2103、FT232等可能会更加稳定吧。
至于单片机和单片机串口通信,只需要RXD/TXD对调相连,加根GND线。完全什么芯片也不需要接的。如果距离远,可以转换为其他接口如CAN的形式。
使用RS-232迎合了老式设备的标准,浪费了UART/USART的实力。波特率一般为9600bps或115200bps。但单片机本可以达到460800bps或者更高。
51单片机多为UART,需占用定时器作为波特率发生器。
在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous AsynchronousReceiver Transmitter).
STM32为USART,独立的高精度波特率发生器,不占用定时/计数器。可以只作为UART来使用。
UART或USART在单片机上一般以RXD和TXD两个引脚体现出来,貌似世间万物可转串口,反过来串口连接世间万物。
可以使用MAX232、SP232等使微处理器的UART符合RS232标准;
也可以使用CH340、PL2303、CP2102/CP2103、FT232等使UART以USB接口的形式出现。最大通信速率受单片机本身还有转换芯片的影响;
也可以使用MAX485等以RS-485的双绞线形式存在;
也可以使用。。。以CAN的形式存在;
也可以使用。。。以蓝牙的形式出现;
也可以使用。。。以以太网的形式出现;
也可以使用。。。以GSM的形式出现;
也可以使用。。。以zigbee的形式出现;
……
反正就是转过来转过去的…
以前采用串口的各种商用设备:热敏打印机、条码扫描器、MODEM等各种通过串口与PC通信的,现在,貌似大多都投奔USB的怀抱了吧。就连与串口亲密无间的STC单片机,新推出的STC15W,下载也投奔了USB,抛弃了串口。
其实USB抢的何止串口的生意,几乎无所不为:硬盘、鼠标、键盘、USB网卡、USB声卡……
或许将来某一天,电脑上对外只存在一种接口:吞并了HDMI、电源、网口……或许不是USB3.0,但说不定是USB5.0呢?
当然,如果物联网和无线充电技术发展起来,或许将来电脑根本不需要留下任何接口!
呵呵,白日又在做梦了!
编写上位机的孩子有时候需要用到串口,然后就到处找啊找的,其实用虚拟串口软件虚拟就可以了:
如Virtual Serial Port Driver:
配对一对串口,如COM7和COM8;
自己编写的软件打开其中一个串口,发送数据可以在另一个串口(可以用串口调试助手)中收到,当然,也可以发送了。
下图是用两个串口调试助手实验:
需要注意的是,创建的配对串口仍需要用Virtual Serial Port Driver来解除关系,不然,它可能会成为你的噩梦!
有的人讨厌死了XP,但某些软件又只能在XP下才能用。又有些人不忍割舍Windows,但又想玩Linux。于是,他们想到了虚拟机,在VmwareWorkstation中使用外部设备如J-link、USB转串口线、U盘、各种DSP、FPGA的仿真器是没有任何问题的。
如以在Vmware Workstation 10虚拟的XP系统为例:
首先要保证主系统下各种驱动如USB转串口的驱动、J-link的驱动等已经安装完成;
打开虚拟机中的XP,勾选各个设备,即可在设备管理器中看到:
需要注意,要在虚拟机界面下插入U盘,虚拟机默认是打开了USB控制器的,如果不显示U盘,可以拔下来再插上。
如果虚拟机不能显示或添加各种设备,可以先关闭虚拟系统,然后:
可能对FT232、PL2303等的支持较好。没搞过,欢迎百度。
这里不是说蓝牙串口(单片机的UART接个蓝牙模块,手机或平板端为蓝牙,美其名曰安卓与单片机的串口通信,其实是蓝牙在通信。当然,说到这,USB转串口其实是USB在通信?),而是通过USB-OTG的USB转串口。
只要手机支持USB-OTG,花几块钱买根包邮的USB-OTG线,再用USB转串口芯片如PL2303,即可使用安卓中的串口调试助手?在安卓中多叫ttyS??这个,驱动用不用呢?
由于手中没有OTG线,等待测试。在网上看到一个APK:
此APK可用在安卓3.1版本以上系统,需安卓USB支持OTG或HOST功能。可支持的USB转串口芯片有FT232R,FT231XS,FT232H,FT230XS.
搜索某篇论文,摘抄部分如下:
安卓操作系统的内核使用的是修改过的Linux OS。Linux 通过内核模块支持串口,包括USB串口。由于Linux内核包含一个与FTDI的,FTxxx通过一个串行接口设备进行通信的内核模块,它就有可能构建一个同样支持Android的模块。
由于驱动要素作为内核映像的一部分对于嵌入式系统,它不是一个简单地把驱动复制到手机上,来启用此功能。为了包含此功能,开发人员需要在源代码级对操作系统进行控制。
本文件提出两个替代方法包括FTDI的Android操作系统的设备VCP的支持,首先考虑建立一个完整的内核映像,包括FTDI的VCP驱动程序模块,第二建立一个兼容的FTDI内核模块和将它插入功能内核。
……
搜索一下万能的TD,还真有FT231支持原生安卓,不过价格有点坑爹了。。。芯片价格一点不如CH340和PL2303来的亲民。貌似在哪里看到过PL2303还是可以的?
有没有权威点的人士给出点解答?虽然这还不是主流……
最后,有什么意见或好的建议,大家可以私信我,欢迎大家关注我的微博:weifengdq