关于单片机与计算机串行通信,请观看实验四的教学视频。
一、串口工作方式0扩展输出口
二、串口工作方式0扩展输入口
三、串行通信的波特率及其误差分析
四、单片机与计算机串行通信硬件电路设计
(1)使用MAX232电平转换芯片
(2)使用USB转串口芯片
五、带奇偶校验的串行通信
(1)讲解串行通信工作方式3及奇偶校验的原理
(2)讲解Proteus仿真电路及Keil uVision源程序代码,演示实验现象
串行通信设计小软件
在编写串行通信程序时,不同型号的单片机,不同的晶振频率,不同的波特率,是否须要使用中断,程序是不同的,我们可以借助单片机小精灵、STC-ISP、虚拟串口、串口调试助手、串口件事精灵等软件工具,加快程序设计、调试速度。
一、波特率计算器
图1是常用的单片机小精灵软件,打开该软件后,点击左边的“串口波特率”选项卡,通过选择晶振频率(常用的是11.0592MHz、12MHz、22.1184MHz等)、单片机机器周期(12T指传统的51单片机,代表12个振荡周期为1个机器周期)、波特率(常用的是9600bps、4800bps、19200bps等),定时器及工作方式默认选择T1的方式2,选择生成汇编还是C51代码,点击“生成”按钮,即可生成包括初始化程序、主程序的示例代码。复制该代码,到Keil uVision软件中直接粘贴即可。
如果选中“启用串口中断”,生成的示例代码里面包括中断服务子函数,并且初始化子函数里面也会对中断进行初始化(设置IE寄存器)。

图1 单片机小精灵
图2所示的STC-ISP软件,是宏晶公司专门为开发STC单片机程序设计的,点击软件中的“波特率计算器”选项卡,跟单片机小精灵相似,设置好相关的参数,同样可以产生C51或者汇编代码。跟单片机小精灵不同的是,它不会产生中断服务程序代码。

图2 STC-ISP软件的波特率计算器
使用图1或图2所示软件时,要特别注意“误差”。如果误差大于5%,则可能造成通信错误。如图2所示,如果晶振频率使用12MHz,波特率为9600bps,误差达8.51%,此时通信会出差错。此时要么降低波特率至2400bps,要么换晶振频率为11.0592MHz。
二、串口调试助手
调试单片机与计算机串行通信的程序时,可以用串口调试助手来检验单片机程序设计的正确性。利用计算机串口调试给单片机发送数据,可以校正单片机的接收程序;利用单片机给计算机串口发送数据,可以校正单片机的发送程序。将串口调试助手与下文介绍的虚拟串口配合,还可以用来检验用户设计的其他计算机串行通信程序是否正确。
图3是宏晶公司下载软件STC-ISP自带的串口助手工作界面。上面部分是接收区域,使用者可以选择采用“文本模式”或“HEX模式”显示接收到的数据。中间部分是发送区域,使用者可以选择采用“文本模式”或“HEX模式”发送数据;并且可以让它每隔一定周期自动发送数据。将GPS数据复制到发送窗口,让它每隔1000ms发送一次,即可用串口调试助手模拟GPS给单片机发送定位信息数据。下面部分是串口工作参数设置、启停设置及收发统计区域,用于设置串口号、通信波特率、校验方式、停止位长度,打开关闭串口,显示统计到的收发数据长度。
★俗话说,“下棋找高手”,串口调试助手就是我们编写串口程序可以找到的高手。

图3 STC-ISP软件的串口助手
三、虚拟串口
现在的台式计算机通常最多只有1个串口,而笔记本电脑甚至没有串口,如果要测试计算机端的串行通信程序,常见做法是用USB转串口,增加计算机串口,再将两个串口的发送(TXD)与接收(RXD)引脚交叉连接。为了加快程序开发速度,可以使用Eltima Software公司设计的虚拟串口(VSPD,Virtual Serial Port Driver)软件。该软件可以模仿多串口,允许程序员使用C/C++、C#、Delphi、VB等所有支持DLL的语言去控制串口,甚至Proteus软件也可控制VSPD产生的串口。
图4是虚拟串口驱动器VSPD 7.2工作界面,串口浏览器“Serial ports explorer”中的“Physical ports”显示实际的物理串口,“Virtual ports”显示虚拟串口,单击串口号左边的“+”号,展开后可以看到该串口的使用情况。单击“Manage ports”选项卡的“Add pair”按钮,可以增加虚拟串口对;单击“Delete pair”按钮;可以删除串口浏览器中选中的虚拟串口对;单击“Delete all”按钮,可以删除全部虚拟串口。

图4 虚拟串口驱动器VSPD
图4中,添加了一对虚拟串口COM3和COM4,在计算机的设备管理器串口(见图5)的“端口(COM和LPT)”中,可以看到有两个“ELTIMA Virtual Serial Port”,说明VSPD软件添加的虚拟串口可以使用。

图5 计算机设备管理器查看到的串口
如图6和图7所示,分别打开STC-ISP软件的串口调试助手和友善串口调试助手,前者使用COM3,后者使用COM4,通信波特率为9600bps,数据位为8位,无校验,停止位为1位。STC-ISP软件给友善串口调试助手发送字符串“I love MCU.”,后者给前者发送字符串“Me too.”,两者的通信状况在图4的虚拟串口软件实时显示出来。

图6 STC-ISP软件的串口助手

图7 友善串口调试助手
四、串口监视精灵
串口监视精灵(CommMonitor)可以在不影响串行通信的前提下侦听、拦截、记录、逆向分析串口通信协议,可以让使用者掌握应用程序操作串口的过程和细节,模拟被侦听程序或设备的数据、控制流,它是侦测RS232/422/485串行端口的专业工具软件,是软硬件工程师的提高工作效率最佳助手。
如果计算机是64位的系统,安装串口监视精灵7.0后,单击主界面左下角的“启用64位系统驱动签名”,按提示安装好数字签名,再重启计算机即可。
图8是用串口监视精灵7.0监控图6和图7两个串口时的情况,从中可以看出,“串口列表”显示有COM3和COM4两个串口,“视图列表”选项卡显示,COM3先给COM4发送了11个字节的数据“I loveMCU.”,接着COM4给COM3发送了7个字节的数据“Me too.”。单击序号1这条记录,下面的框会显示详细信息:通信时间、进程名称、IO类型(发或收)、串口号、收发数据(十六进制和ASCII码)。
★俗话说,“旁观者清,当局者迷”,串口监视精灵就是一个很好的旁观者,能够对串行通信进行“望闻问切”。

图8 串口监视精灵
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
常用UART串口模块
串行通信占用I/O口少,在单片机与外部设备通信时被广泛采用。有不少无线及有线模块,均采用UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)串口跟单片机通信。
一、蓝牙模块
图1是蓝牙模块,单片机可以通过它跟其他设备的蓝牙模块通信,或者跟智能手机通信。常用的蓝牙模块有HC-05和HC-06,它们都是主从一体化的蓝牙串口模块,硬件相同,供电电压3.3~3.6V,不同的是内部的固件,主从可指令切换。HC-05指令较丰富齐全。HC-06指令少于HC-05,使用简单。
主机:用来搜索从设备,不能被其他设备搜索。
从机:用来被搜索的设备,不能主动搜索其他设备。主从连上以后就相当于一根串口线使用,这个时候就不分主从,也就是透传模式。

图1 蓝牙模块
二、Wi-Fi模块
图2是蜂汇物联科技有限公司(WeBee)生产的Wi-Fi模块,基于Espressif公司的ESP8266EX芯片研发的,模块支持标准的 IEEE802.11 工作模式、支持SmartConfig、串口透传、IO口控制等功能。单片机可以通过它跟其他设备的Wi-Fi模块、路由器通信,或者将跟设置为热点的智能手机通信,实现上网功能。
图2模块上的FCC(Federal Communications Commission)标记,说明该模块通过美国FCC认证,只有通过该认证的产品才能进入美国市场。
图2模块上的ISM(Industrial Scientific Medical)指该无线模块使用ISM频段。ISM频段是由ITU-R(ITU Radio Communication Sector,国际通信联盟无线电通信局)定义的。中文意思分别是工业的(Industrial)、科学的(Scientific)和医学的(Medical),因此顾名思义ISM频段就是各国挪出某一段频段主要开放给工业,科学和医学机构使用。应用这些频段无需许可证或费用,只需要遵守一定的发射功率(一般低于1W),并且不要对其它频段造成干扰即可。ISM频段在各国的规定并不统一。如在美国有三个频段902~928 MHz、2400~2484.5MHz及5725~5850MHz,在欧洲900MHz的频段则有部分用于GSM通信,而2.4GHz为各国共同的ISM频段。因此无线局域网(IEEE 802.11b/IEEE 802.11g),蓝牙,ZigBee等无线网络,均可工作在2.4GHz频段上。

图2 蜂汇(WeBee)Wi-Fi模块
三、ZigBee模块
图3是ZigBee模块,单片机可以通过它跟其他设备的ZigBee模块通信,实现ZigBee组网,进而构建物联网。图3中的ZigBee模块使用TI公司生产的芯片CC2530,该芯片结合了领先的RF,收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8KB RAM和许多其它强大的功能。3个模块都具有小体积、远距离、超低功耗的特点,最右边的那款使用陶瓷天线。

图3 ZigBee模块
四、GPS、北斗定位模块
图4(a)是北天GPS定位模块,图4(b)是正点原子GPS、北斗双定位模块,单片机可以通过它们接收定位信息,实现定位与导航。使用定位模块时,还要外接天线。

(a)北天GPS定位模块 (b)GPS+北斗双定位模块
图4 GPS模块
五、GPRS/GSM模块
图5是有人物联网科技有限公司生产的USR-GM3型GPRS/GSM模块,它可用于实现串口数据与GPRS网络之间的双向透明传输。单片机可以通过该模块经GSM网络发送短消息给手机,或接收手机发送过来的短消息;也可通过GPRS网络发送数据给手机。GPRS传输数据的优点是按流量计费,相对按次数计费的GSM短消息要便宜。

图5 人物联网USR-GM3型GPRS/GSM模块
六、RS485模块
图6是串口转RS485模块,其中图6(a)是RS232转RS485,计算机可通过该模块连接RS485接口设备;图6(b)是TTL转RS485,单片机可通过该模块连接RS485接口设备。
RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。
RS485总线标准规定了总线接口的电气特性标准,即对于2个逻辑状态的定义:正电平在+2~+6V之间,表示逻辑1;负电平在-2~-6V之间,表示逻辑0;数字信号采用差分传输方式,能够有效减少噪声信号的干扰。在实际操作中,极限距离达1200m。
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。

(a)RS232转RS485

(b)TTL转RS485
图6 串口转RS485模块
七、以太网模块
图7是串口转以太网模块,其中图7(a)是TTL串口转以太网模块,单片机可通过该模块连接计算机网络;图7(b)是RS232串口转以太网模块,带RS232串口的单片机系统可通过该模块连接计算机网络。

(a)TTL接口以太网模块

(b)卓岚RS232接口以太网模块
图7 以太网模块
八、语音模块
图8是科大讯飞生产的XFS5152CE语音模块,单片机可通过USART、IIC或SPI总线中的一种跟该模块通信,将文本内容转换为语音,常用于公交车、地铁、电子秤等设备。

图8 科大讯飞XFS5152CE语音模块
九、USART 智能串口触摸屏
图9是淘晶驰公司生产的USART HMI智能串口触摸屏,它自带GUI,供电即可使用,可通过串行通信对控件上的参数进行修改,还有一些特定的指令可实现一些功能操作,任何有串口通信功能的单片机都可以控制它,即便是彩屏,也无须单片机编程驱动。更多关于该串口屏的介绍,请参考本平台“6.2 显示器的扩展”。

图9 淘晶驰触摸屏
RS-232C标准(协议)的全称是EIA-RS-232C标准,定义是“数据终端设备(DTE,Data Terminal Equipment)和数据通讯设备(DCE,Data Communication Equipment)之间串行二进制数据交换接口技术标准”。
它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通信的标准。其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(Recommended Standard)代表推荐标准,232是标识号,C代表修改次数(在这之前有RS-232B和RS-232A)。
它规定连接电缆和机械、电气特性、信号功能及传送过程。RS-232C接口线缆最长为15m,RS-232C接口通常被用于将计算机信号输入控制,当通信距离较近时,可不需要Modem(调制解调器),通信双方可以直接连接,这种情况下,只需使用少数几根信号线。
个人计算机提供的串行端口终端的传输速度一般都可以达到115200bps甚至更高,标准串口能够提供的传输速度主要有以下波特率:1200bps、2400bps、4800bps、9600bps、19200bps、38400bps、57600bps、115200bps等,在仪器仪表或工业控制场合,9600bps是最常见的传输速度,在传输距离较近时,使用最高传输速度也是可以的。传输距距离和传输速度的关系成反比,适当地降低传输速度,可以延长RS-232C的传输距离,提高通信的稳定性。
计算机串行口中的典型是RS-232及其兼容接口,串口引脚有9针和25针两类。而一般的计算机中使用的都是9针接口,25针串口具有20mA电流环接口功能,用9,11,18,25针来实现。
图1是应用较多的9线插件,使用时重点关注第2脚:RXD(接收),第3脚:TXD(发送),第5脚SG(SignalGround,信号地);其余引脚为联络控制信号引脚,现在一般不用。

图1 DB9串口
仔细观察串口,可以在引脚边上看到标注的数字1~9。图2是正视9针串口时的引脚定义,“公头”串口第1脚在左边,下起一行后,第6脚再左边;“母头”串口与“公头”串口相反,第1脚和第6脚在右边;使用者只要记住第1脚“男左女右”就行。

图2 计算机9针串口
为了增加通信距离,RS-232C标准采用双极性波形传输信号,并且使用负逻辑,-3~-15V为逻辑“1”电平,+3~+15V为逻辑“0”电平。
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
RS-232C与TTL电平转换
计算机串口使用的RS-232C信号电平与单片机串口使用的TTL电平不同,早期由TTL到RS-232C的转换借助于MC1488(采用±12V或±15V电源供电),而由RS-232C电平到TTL的转换则借助于MC1489(采用+5V电源供电)。现在通常采用Maxim公司的MAX232芯片实现双向电平转换,该芯片采用+5V单电源供电,使用比较简便。
一、使用MAX232芯片
图1所示的MAX232芯片是美信(MAXIM)公司专为RS-232C标准串口设计的单电源电平转换芯片,它可以实现两路串口电平的转换,实现TTL电平和RS-232C电平之间的相互转换。芯片封装有如下几种:CDIP(N)/16、LCC/20、PDIP(N)/16、SOIC(N)/16、SOIC(W)/16、TSSOP/16。芯片具有下面几个特点。
1、符合所有的RS-232C技术标准
2、只需要单一+5V电源供电
3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
4、功耗低,典型供电电流5mA
5、内部集成2个RS-232C驱动器
6、高集成度,片外最低只需4个电容即可工作。
7、内部集成两个RS-232C接收器

图1 MAX232芯片
图2所示MAX232应用电路中,在这个电路中只使用了两路中的其中一路,DB1为标准9针RS-232C串口,与计算机的串口连接。需要4个大小为0.1μF的电容,配合芯片内部的泵电源电路。这4个电容大些(例如1μF)没问题,小了(例如10nF)芯片可能不工作。
T1IN(MAX232第11脚)、R1OUT(MAX232第12脚)分别接单片机的TXD(MCU第11脚)、RXD引脚(MCU第10脚);
T1OUT(MAX232第14脚)、R1IN(MAX232第13脚)分别接计算机的RXD(DB9第2脚)、TXD(DB9第3脚)。
计算机的地(DB9第5脚)跟单片机的第(MCU第20脚)要连接。
两个LED用于指示串行通信收、发是否正确。

图2 MAX232电平转换电路
MAX232数据手册
二、使用MC1488、MC1489芯片
图3所示的MC1488、MC1489电平转换电路现在使用较少,因为它须要使用2款芯片,采用3电源(+12V、-12V和+5V)供电,相对较复杂。

图3 MC1488、MC1489电平转换电路
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
如今,不管是台式计算机还是便携式计算机,一般都没有DB9串口,而单片机与计算机通信,通常都采用串行通信。如果用户板包含DB9串口,计算机端通常可以使用图1所示的USB转串口线缆,生成DB9串口,再连接用户板。

图1 USB转并口和USB转串口
实际应用中可以通常使用图2所示方案,计算机通过USB(UniversalSerial Bus,通用串行总线)线缆跟用户板通信,用户板上有USB转串口电路,通过驱动程序将PC的USB口虚拟成COM口以达到扩展的目的。在计算机端看过去,用户板仍然是一个串口外设。

图2 单片机与计算机串行通信方案
常用的USB转串口芯片有图3所示的CH340/CH341、CP2102、PL2303、FT232等,它们转出的串口都是TTL电平。
CH340/CH341是江苏沁恒股份有限公司生产的芯片,CH340是CH341的简化版,不支持并口、打印口、IIC,专为串口应用设计。CH340/CH341价格较便宜,一般应用方面,性能已经足够。CH340 USB转串口芯片的技术手册、驱动程序、原理图/PCB可到公司官网(http://www.wch.cn/products/CH340.html)下载。
PL2303是Prolific公司生产的一种高度集成的接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利连接的解决方案。PL2303具有多个历史版本,早期的版本是PL2303HX,近年有PL2303HXA、PL2303HXC、PL2303HXD(D版本)、PL2303SA等版本推出,应用电路有一定差异。D版本不需要外接晶振,并且加入了对安卓系统的支持。
CP2102是Silicon Labs公司研发的一种高度集成的USB转UART桥接芯片,具有价格低、开发简单等特点,能够用最简单的外部电路和最少的外部器件简便地实现USB到UART的转换。CP2102集成度高,内置USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM及异步串行数据总线(UART),支持调制解调器全功能信号,无需任何外部的USB器件。CP2102价格较CH340/CH341贵点,它是QFN封装(QuadFlat No-lead Package,方形扁平无引脚封装),不易手工焊接。
FT232是FTDI公司提供的USB-RS232转换器,它可以在RS232和USB接口之间非常容易地建立可靠连接。FT232价格最贵,一般用在工业级环境。

图3 USB转串口芯片
图4是采用CH340G型芯片的USB转TTL串口电路,设计时注意下面9点。
(1)USB数据+(D+)和数据-(D-)的接线不要搞错,两根数据线周围加铺铜接地,起屏蔽作用。
(2)晶振边上的电容C4、C5采用22~30pF都行。
(3)V3引脚接的C3是退耦电容,用0.01μF,不能用0.1μF。
(4)退耦电容C1、C2、C3应尽量靠近VCC和V3引脚。
(5)如果电源VCC采用3.3V供电,V3引脚要连接VCC,此时退耦电容C3可以省去,接上也无妨。
(6)将CH340G的TXD、RXD引脚分别连接单片机的RXD、TXD引脚不要搞反。
(7)某些CH340G的引脚给单片机供电可能导致单片机断电不彻底,若给STC单片机下载程序,要断电重启,可能导致程序没法下载。此时可在CH340G的TXD引脚反向串联一个二极管(推荐使用肖特基二极管1N5817),在CH340G的RXD引脚串联一个约300Ω的电阻,保障单片机彻底断电。但此种情况不适用于STM32等芯片,如果连接STM32单片机,应将D1和R1去掉。
若给STC单片机编程,滤波电容C2必不可少,它用于防止给单片机上电时造成电源瞬态跌落,从而使CH340G短暂断电,影响下载。
(8)图4采用的是5脚的Mini型USB接口;如果采用4脚的A型或B型USB接口,第4脚定义为GND。
(9)CH340G第9~15引脚用于控制Modem,计算机与单片机串行通信时,可以悬空。

图4 USB转TTL串口电路
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
一、关于IIC总线的介绍及视频讲解,请参考本平台9.9节:DAC5571数模转换
二、关于1-Wire总线的介绍及视频讲解,请参考本平台9.11节:DS18B20温度检测