OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9963|回复: 3

硬件漫说之UART

[复制链接]

9

主题

97

帖子

5

精华

金牌会员

Rank: 6Rank: 6

积分
1015
金钱
1015
注册时间
2012-7-16
在线时间
25 小时
发表于 2014-9-21 15:17:38 | 显示全部楼层 |阅读模式

目录:
TTL/CMOS与RS232电平
MAX232升压原理
UART:与RS232的前缘,与USB的今生
百变的UART
串口与USB:宿敌?
虚拟串口
虚拟机下外设接口的使用,如:串口、J-link、U盘
Linux下串口的使用
安卓下串口的使用

 

今天看到CSDN的一个博客签名“没有时间把一件事情做好,却有时间把一件事情反复做”,心里说不出什么滋味,但既然连写带抄的整出了这篇文章,那就让它与大家见面吧。

TTL/CMOSRS232电平


        但单片机的UARTTTL还是CMOS?

STM32的手册上说I/O管脚有两种:TTLCMOS,所有管脚都兼容TTLCMOS电平。51的芯片手册基本都没提过吧?

MAX232升压原理

开关电源可以分为电容开关型(电荷泵型)、电感与变压器开关型(在线型On-Line、隔离型Off-Line),虽然电荷泵型不是主流,但用作RS232还是挺合适的。如专为RS-232标准串口设计的单电源电平转换芯片、使用+5v单电源供电MAX232

外部并有40.1uF1uF的瓷片电容,MAX232电荷泵内部的FET开关阵列以一定方式控制快速电容器的充电和放电,从而使输入电压以一定因数(0.5,23)倍增或降低,从而得到所需要的输出电压。这里电容C1C2用于搬运电荷到C3+10V)和C4-10V)?

UART:与RS232的前缘,与USB的今生

RS-232:一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。老式为25芯,现在一般为9芯,即常见的DB9接口(2排,注意与315芯的VGA接口的区别):


UART:是一种异步收发传输器,即通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的缩写。具体实物表现为独立的模块化芯片,或作为集成于微处理器中的外设。UART也可称作是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。

USARTUniversal Synchronous/Asynchronous Receiver/Transmitter. 通用同步/异步串行接收/发送器。

 

一般说的单片机串口应该为UART/USART,当然指着开发板上的RS-232DB9接口说这是串口,也是可以的。开发板上多有DB9母头接口,即可大致确定是单片机的串口经过了MAX232SP3232吧,相应的与笔记本连接,就需要找一个MAX232+CH340的俗称“USB转串口线的东东了:


当然,小伙伴们学习时一般只需要单片机串口和电脑通信,完全没有必要走下面的不能供电、多花银子、浪费通信速率、臃肿的曲线救国之路:

单片机UART/USART+MAX232+DB9 <---->DB9+MAX232+CH340+USB

现在出现的很便宜的是兼容5V/3.3VCH340小板和PL2303小板,直接与单片机的TXDRXDGND相连即可,还可供电:


PL2303是国际货,驱动(WinsowsLinux、安卓)全,但国内山寨货多的质量没保证。

CH340倒还不错,至少还算稳定点。

贵的CP2102/CP2103FT232等可能会更加稳定吧。

至于单片机和单片机串口通信,只需要RXD/TXD对调相连,加根GND线。完全什么芯片也不需要接的。如果距离远,可以转换为其他接口如CAN的形式。

使用RS-232迎合了老式设备的标准,浪费了UART/USART的实力。波特率一般为9600bps115200bps。但单片机本可以达到460800bps或者更高。

 

百变的UART

51单片机多为UART,需占用定时器作为波特率发生器。

UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter).

STM32USART,独立的高精度波特率发生器,不占用定时/计数器。可以只作为UART来使用。

UARTUSART在单片机上一般以RXDTXD两个引脚体现出来,貌似世间万物可转串口,反过来串口连接世间万物。

可以使用MAX232SP232等使微处理器的UART符合RS232标准;

也可以使用CH340PL2303CP2102/CP2103FT232等使UARTUSB接口的形式出现。最大通信速率受单片机本身还有转换芯片的影响;

也可以使用MAX485等以RS-485的双绞线形式存在;

也可以使用。。。以CAN的形式存在;

也可以使用。。。以蓝牙的形式出现;

也可以使用。。。以以太网的形式出现;

也可以使用。。。以GSM的形式出现;

也可以使用。。。以zigbee的形式出现;

……

反正就是转过来转过去的

 

串口与USB:宿敌?

以前采用串口的各种商用设备:热敏打印机、条码扫描器、MODEM等各种通过串口与PC通信的,现在,貌似大多都投奔USB的怀抱了吧。就连与串口亲密无间的STC单片机,新推出的STC15W,下载也投奔了USB,抛弃了串口。

其实USB抢的何止串口的生意,几乎无所不为:硬盘、鼠标、键盘、USB网卡、USB声卡……

或许将来某一天,电脑上对外只存在一种接口:吞并了HDMI、电源、网口……或许不是USB3.0,但说不定是USB5.0呢?

当然,如果物联网和无线充电技术发展起来,或许将来电脑根本不需要留下任何接口!

呵呵,白日又在做梦了!

虚拟串口

编写上位机的孩子有时候需要用到串口,然后就到处找啊找的,其实用虚拟串口软件虚拟就可以了:

Virtual Serial Port Driver

配对一对串口,如COM7COM8

自己编写的软件打开其中一个串口,发送数据可以在另一个串口(可以用串口调试助手)中收到,当然,也可以发送了。

下图是用两个串口调试助手实验:

  

需要注意的是,创建的配对串口仍需要用Virtual Serial Port Driver来解除关系,不然,它可能会成为你的噩梦!

虚拟机下外设接口的使用,如:串口、J-linkU

有的人讨厌死了XP,但某些软件又只能在XP下才能用。又有些人不忍割舍Windows,但又想玩Linux。于是,他们想到了虚拟机,在VmwareWorkstation中使用外部设备如J-linkUSB转串口线、U盘、各种DSPFPGA的仿真器是没有任何问题的。

如以在Vmware Workstation 10虚拟的XP系统为例:

首先要保证主系统下各种驱动如USB转串口的驱动、J-link的驱动等已经安装完成;

打开虚拟机中的XP,勾选各个设备,即可在设备管理器中看到:


需要注意,要在虚拟机界面下插入U盘,虚拟机默认是打开了USB控制器的,如果不显示U盘,可以拔下来再插上。

如果虚拟机不能显示或添加各种设备,可以先关闭虚拟系统,然后:

Linux下串口的使用

可能对FT232PL2303等的支持较好。没搞过,欢迎百度。

安卓下串口的使用

这里不是说蓝牙串口(单片机的UART接个蓝牙模块,手机或平板端为蓝牙,美其名曰安卓与单片机的串口通信,其实是蓝牙在通信。当然,说到这,USB转串口其实是USB在通信?),而是通过USB-OTGUSB转串口。

只要手机支持USB-OTG,花几块钱买根包邮的USB-OTG线,再用USB转串口芯片如PL2303,即可使用安卓中的串口调试助手?在安卓中多叫ttyS??这个,驱动用不用呢?

由于手中没有OTG线,等待测试。在网上看到一个APK

APK可用在安卓3.1版本以上系统,需安卓USB支持OTGHOST功能。可支持的USB转串口芯片有FT232R,FT231XS,FT232HFT230XS.

搜索某篇论文,摘抄部分如下:

安卓操作系统的内核使用的是修改过的Linux OSLinux 通过内核模块支持串口,包括USB串口。由于Linux内核包含一个与FTDI的,FTxxx通过一个串行接口设备进行通信的内核模块,它就有可能构建一个同样支持Android的模块。

由于驱动要素作为内核映像的一部分对于嵌入式系统,它不是一个简单地把驱动复制到手机上,来启用此功能。为了包含此功能,开发人员需要在源代码级对操作系统进行控制。

本文件提出两个替代方法包括FTDIAndroid操作系统的设备VCP的支持,首先考虑建立一个完整的内核映像,包括FTDIVCP驱动程序模块,第二建立一个兼容的FTDI内核模块和将它插入功能内核。

……

搜索一下万能的TD,还真有个FT231支持原生安卓,不过价格有点坑爹了。。。芯片价格一点不如CH340PL2303来的亲民。貌似在哪里看到过PL2303还是可以的?

有没有权威点的人士给出点解答?虽然这还不是主流……



我的微博:weifengdq,欢迎关注和私信:http://weibo.com/3193061857/profile?rightmod=1&wvr=5&mod=personinfo
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-12-22
在线时间
2 小时
发表于 2015-1-29 10:20:14 | 显示全部楼层
STM MCU FAE
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-5-26
在线时间
13 小时
发表于 2015-9-1 21:46:38 | 显示全部楼层
有一个使用UART进行通信的子系统X,其中UART0进行数据包接收和回复,UART1进行数据包转发。子系统X的通信模块职责是从UART0接收数据包,如果为本地数据包(receiver为子系统X),则解析数据包中的命令码(2字节)和数据域(0~128字节),根据命令码调用内部的处理程序,并将处理结果通过UART0回复给发送端,如果非本地数据包,则通过UART1转发。
设计子系统X的通信模块:
1)请设计通信数据包格式,并说明各字段的定义;
2)在一个实时操作系统中,你会如何部署模块中的任务和缓存数据,画出任务间的数据流视图加以说明;
3)如何设置任务的优先级,说说优缺点;
如果将命令码对应的处理优先级分为高、低两个等级,又如何设计;
  求教
回复 支持 反对

使用道具 举报

11

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2013-3-19
在线时间
20 小时
发表于 2015-9-1 22:38:33 | 显示全部楼层
写的不错。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 13:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表