购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 串口基础知识

从短距离到远程,先回顾一下串口通信的传统实现方式。15米以内可以直接用RS232电平和TTL电平;1200米内可以用RS485电缆;4千米以内可以用多模光纤,也可以用控制器局域网(CAN)总线;40千米以内可以布单模光纤。更加远的距离呢?理论上可以加中继,但是考虑到土地、道路、管道等的施工,实际上不超过 10千米的专门用于串口通信的线路已经是非常困难的。若要回答这些问题,有必要先从简单的串口通信技术开始探究。

2.1.1 串口通信概述

通信有并行和串行两种方式。在单片机系统以及现代单片机测控系统中,信息的交换多采用串行通信方式。

1.串行通信方式

串行通信是将数据字节分成一位一位的在一条传输线上逐个传送,此时只需要一条数据线,外加一条公共信号地线和若干控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分 8位才能传送完毕。

串行通信的必要过程是:发送时,要把并行数据变成串行数据发送到线路上去;接收时,要把串行信号再变成并行数据,这样才能被计算机及其他设备处理。

串行通信传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。

串行通信又有两种方式:异步串行通信和同步串行通信。

2.异步串行通信方式

异步串行通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方收、发协调,要求发送和接收设备的时钟尽可能一致。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。

异步通信一帧字符信息由 4部分组成:起始位、数据位、奇偶校验位和停止位。有的字符信息也有带空闲位形式,即在字符之间有空闲字符。

异步通信的特点:不要求收发双方时钟严格一致,实现容易,设备开销较小,但每个字符要附加 2~3位,用于起止位、校验位和停止位,各帧之间还有间隔,因此传输效率不高。在单片机与单片机之间,单片机与计算机之间通信时,通常采用异步串行通信方式。

3.同步串行通信方式

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据位之间的距离均为“位间隔”的整数倍,同时传送字符间不留间隙,既保持位同步关系也保持字符同步关系。发送方对接收方的同步可通过外同步和自同步两种方法实现。

4.串行通信的制式

(1)单工:指数据传输仅能沿一个方向,不能实现反向传输。

(2)半双工:指数据传输可以沿两个方向,但需要分时进行。

(3)全双工:是指数据可以同时进行双向传输。

5.串行通信的错误校验

(1)奇偶校验。

在发送数据时,数据位尾随的 1位为奇偶校验位(1或 0)。奇校验时,数据中 1的个数与校验位 1的个数之和应为奇数;偶校验时,数据中 1的个数与校验位 1的个数之和应为偶数。接收字符时,对 1的个数进行校验,若发现不一致,则说明传输数据过程中出现差错。

(2)代码和校验。

代码和校验是发送方将所发数据块求和(各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时同时对数据块(除校验字节外)求和(各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,反之即认为传送过程中出现了差错。

(3)循环冗余校验。

这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。

6.波特率

终端与计算机在串口通信时的速率用波特率表示,其定义为每秒传输二进制代码的位数,即 1波特=1位/秒(bps)。如每秒钟传送 240个字符,而每个字符格式包含 10位(1个起始位、1个停止位、8个数据位),这时波特率为 10位*240个/秒=2400bps。串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性也有关。当传输线使用每 0.3m有 50pF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过 1000bps时,最大传输距离迅速下降,如 9600bps时最大距离下降到只有 76m。因此在做串口通信选择较高速率传输数据时,要尽量缩短数据线的长度。为能使数据安全传输,即使是在较低传输速率下也不要使用太长的数据线。

7.波特率的计算

在串行通信中,收、发双方对发送或接收数据的速率要有约定。比如,通过编程可对单片机串行口设定 4种工作方式,其中方式 0和方式 2的波特率是固定的,而方式 1和方式 3的波特率是可变的,这由定时器T1的溢出率来决定。

串行口的 4种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以各种方式的波特率计算公式也不相同,可以查阅单片机 4种方式波特率的计算公式。

波特率也可通过内部寄存器的参数进行设置,比如物联网中常用的带无线模块的CC2530增强型单片机,其波特率通过寄存器U0GCR和U0BAUD来设置。

2.1.2 串口硬件技术

1.PC机串口

串口是计算机上一种通用设备通信的协议。大多数计算机包含两个基于RS232的串口,以RS232九针公头为主,现多以USB口替代RS232接口。

2.C51单片机串口

在单片机系统以及现代单片机测控系统中,信息的交换多采用串行通信方式。而物联网嵌入式核心开发板的串口硬件通常集成在底板上,多以Mini-USB或RS232与上位PC机连接,也有部分开发板串口硬件通过仿真编程器与PC上位机连接。

下面以单片机开发板HL6800为例介绍串口的硬件技术,如图2.1所示。该开发板的特点是综合性比较高,去掉短路帽,省去接线的麻烦,更加方便了初学者,是一款性价比极高的产品。提供USB2.0和串口两种通信方式,USB实现供电、编程、仿真、通信多种功能。

图2.1 HC6800-ES V2.0单片机开发板

在图2.1中,用MAX232芯片实现RS232电平与晶体管-晶体管逻辑(TTL)电平转换,芯片是MAXIM公司生产的,包含两路接收器和驱动器的集成电路(IC)芯片,它的内部有一个变压器,可以把输入的 5V电源电压变换成为RS232输出电平所需的 10V电压。所以,采用此芯片接口的串行通信系统只需单一的 5V电源就可以了。相比 12V电源,其适应性更强,加之其价格适中,硬件接口简单,所以被广泛采用。

比如,从MAX232芯片中两路发送、接收中任选一路作为接口。要注意其发送、接收的引脚要对应。如使T1IN连接单片机的发送端(TXD),则PC机的RS232接收端(RXD)一定要对应接TIOUT引脚。同时,R1OUT连接单片机的RXD引脚,PC机的RS232发送端TXD对应接R1IN引脚。

开发板HC6800的USART通过 3个引脚与其他设备连接在一起,USART双向通信至少需要 2个引脚:接收数据输入(RX)和发送数据输出(TX)。

RX:接收数据串行输入。通过过采样技术来区别数据和噪声,从而恢复数据。

TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

3.STM32类型的ARM处理器串口

图2.2显示无线节点板上的串口使用方法,主要引脚硬件资源分配如表2.1所示。

图2.2 无线节点STM32的ARM处理器串口的用户

其中,无线节点板上提供了两组跳线用于选择调试不同处理器,跳线使用方式如下。

(1)模式一:调试CC2530,CC2530串口连接到调试扩展板。

(2)模式二:调试STM32F103,STM32F103串口连接到调试扩展板(出厂默认)。

表2.1 无线节点ARM处理器主要引脚硬件资源分配

★通用接口总线(GPIB)是一种设备和计算机连接的总线。大多数台式仪器是通过GPIB线以及GPIB接口与电脑相连。

2.1.3 串口软件安装

1.安装USB转串口驱动

目前大多数PC台式机只有一个RS232接口和多个USB口,而笔记本主要通过USB接口连接外部设备。因此在进行物联网项目开发时,经常会用到USB转串口线,如图2.3所示。

图2.3 五种不同品牌的USB转串口线

USB转串口驱动程序要么是利用厂家配套提供的,要么是利用第三方工具(比如驱动精灵)进行在线安装,安装成功后,设备管理器会自动为该设备分配一个串口端号。应注意,串口号会因设备的不同而不同,需仔细查看,如图2.4所示。

图2.4 USB转串口线驱动安装成功

2.安装Visual Studio 2022(下面简称VS)软件

在物联网嵌入式项目开发中,上位机是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),基于串口的下位机(如单片机)与上位机间数据通信应用非常广泛。上位机的软件开发主要包括以下两种:

(1)Windows上位机(可执行EXE程序)。

在Windows上,最早用Visual Basic(VB)语言开发,后来由于C++的发展,采用MFC开发,近几年,微软发布基于.NET框架的面向对象语言C#,更加稳定安全,再配合微软强大的VS进行开发,效率奇高;另外,如果想要在Linux上跨平台运行,可以选用QT;如果想要更加丰富好看的数据显示界面,可以选用Labview开发。

(2)Android上位机(App)。

在Android操作系统上,主要采用Java语言,使用WiFi或者蓝牙基于TCP/IP协议传输数据,利用Android Studio开发。在此,主要介绍如何通过VS的C#开发电脑上位机,其他上位机的开发在WiFi和蓝牙通信中进行讲解。

Visual Studio 2022安装步骤如下。

步骤 1:双击本书配套的资源包中Visual Studio 2022_professional.exe文件,进行默认安装,安装完毕后在Windows启动菜单中出现VS菜单项,开发环境约占硬盘空间 1.9GB。

步骤 2:新建第一个C#项目工程,检测VS开发环境配置是否正确。

启动Visual Studio 2022,在开始使用中选择“创建新项目”;单击下一步,选择“Windows窗体应用(.NET Framework)”;单击下一步,在配置新项目中,填写项目名称,选择项目保存位置、解决方案和框架取默认值;单击创建,弹出如图2.5所示主窗口。

图2.5 启动Visual Studio 2022开发环境

★在配置新项目窗口中,框架(F)是指.NET框架,4.0以及 4.0以下的.NET框架可以在windows XP上运行,4.0以上可以在Windows7/8/10上运行,鉴于当前大多数操作系统是Windows7或Windows10,此时框架(F)下拉列表中选择默认的 4.7.2版本即可。

步骤 3:窗体介绍及代码分析。

双击图2.5窗体界面,这也是VS的特性,双击一个控件,就会进入对应代码文件部分,这些代码全由VS在生成项目时自动生成,下面进行详细的解释。

①命名空间(namespace)。

在C#中用命名空间将很多类的属性及其方法进行封装供调用,在类似C语言中将变量和函数封装成一个个.h文件,调用时只需要输入#include“filepath+filename”就可以使用,比如刚开始时用关键字using声明一些所需要的系统命名空间,然后采用关键字namespace来自定义一个用户工程所需的命名空间WindowsFormsAppTest,在定义的这个命名空间里就可以定义一些类和方法。

②类(class)。

C#是一门面向对象的编程语言,所以最基本的要素就是类和对象,对象的特征是具有属性(C语言中称为变量)和方法(C语言中称为函数),然后定义一个类来描述这个对象的特征。注意这时定义的类不是真实存在的,所以不会分配内存空间;若当用所定义的这个类去创建一个类的对象时,这个对象就是真实存在的,它会占用内存空间,比如在这个工程中定义了Form1的公共类,并且在定义类的同时创建了这个类的对象,名为Form。

③方法。

在面向对象编程中没有变量和函数,所有函数都被封装在类中,属于对象的方法,最基本的类是构造方法,该方法与类名同名,在用类创建一个具体对象时自动调用,不可缺少,比如Form1()方法。另外一种是自己定义的用户方法,比如该类中的Form1_Load()方法,就是在初始化窗口时,通过具体对象Form调用:Form.Form1_Load()方法。

④访问修饰符。

用来控制类、属性、方法的访问权限,常用的有 5个:私有private、公共public、受保护protected、内部internal、受保护内部protect internal。一般默认私有,不能被外部访问。

这里有一个重点,在定义Form1类的时候含有一个关键字partial,这里就不得不说C#语言设计能作为大多数人开发上位机的首选的一个重要的特性,即设计的时候界面与后台分离,但是类名相同,首先看一下如图2.6所示工程文件结构。

图2.6 工程文件结构

图2.6中,Form1.cs文件下包含另一个Form1.Designer.cs文件,打开Form1.Designer.cs文件,和Form1.cs的代码一模一样,再次定义了一个命名空间WindowsFormsAppTest和Form1类,这个部分类中定义了用户使用的控件、事件委托以及如Dispose方法等。因为这里面的代码都是自动生成的,因此设计成了一个部分类。最关键的一点,这里类也是用partial关键字修饰的,可以看到,Partial是局部类型的意思,允许用户将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,用partial定义的类可以在多个地方被定义,最后C#编译器编译时会将这些类当作一个类来处理。

Main:一切程序都有入口main()主函数,C#也是如此,在Program.cs文件中定义了Program类,该类中拥有主函数,在主函数中,第三行代码是一切的开始,调用Form1类的构造函数,创建一个Form对象,一切由此开始,代码如下:

再来解释一下AssemblyInfo.cs文件,该文件主要是应用程序发布时的一些属性设置:版本号、属性、版权之类的。

步骤 4:窗口中显示Hello,WindowsFormsAppTest!

下面就正式开始C#程序的设计,首先是界面设计,从控件工具箱中拖放控件到窗体中,这里在步骤 2的窗体中拖入两个Button控件和一个TextBox文本框,并在右边设置框中修改每个控件的属性。

这时若查看Form1.cs文件,会发现Form1.cs中的源码与之前一样,这里需介绍另外几个开发图形用户界面(GUI)的知识点。若实现的功能是:当按下Show按钮时,文本框显示“Hello,WindowsFormsAppTest!”字符串;当按下Clear按钮时,清空文本框。该功能属于人机交互,一般人机交互的处理方式有两种,第一种是查询处理方式,比如在DOS、Linux系统等命令行下的程序设计;第二种是事件处理机制,由传统的查询法耗费CPU一直在检测,变成了事件处理机制下的主动提醒,大幅度减少CPU资源浪费。在事件处理机制中有以下几个概念:

事件源(EventSource):描述人机交互中事件的来源,通常是一些控件;

事件(ActionEvent):事件源产生的交互内容,比如按下按钮;

事件处理(EventProcess):在C#中被叫作回调函数,当事件发生时用来处理事件。

★这部分在单片机中也是如此,中断源产生中断,然后进入中断服务函数进行响应。

清楚了这几个概念后就可以实现想要的功能,那么如何编写或者在哪编写事件处理函数呢?在VS中只需双击某个控件,VS就会自动将该控件的事件处理函数添加进Form1.cs文件,此处先双击Show按钮,可以看到VS自动添加进了private void button1_Click(object sender,EventArgs e)方法,然后在里面编写代码实现文本框显示,这里的所有控件都是一个个具体的对象,用户可以通过这些对象设置其属性或者调用其方法。同理,双击Clear按钮,添加清空文本框代码,完整代码如下:

至此,大功告成,第一个应用程序创建成功,单击启动按钮,运行结果如图2.7所示。

图2.7 Visual Studio 2022开发环境搭建成功

3.安装Keil for C51软件

针对普中HC6800-ES V2.0单片机开发板,需要安装版本Keil uVision 4开发环境。

步骤 1:双击Keil c51 v951.exe文件,单击next选中I agree all the terms of……,单击next设置安装目录;根据实际情况选中安装目录,重新设置单击Browse,这里默认C盘,设置好安装目录后,单击Next输入用户信息,单击Next开始安装,直到安装完成。

步骤 2:启动菜单单击或桌面双击Keil uVision4软件图标,打开系统默认Hello工程,进入菜单Project编译工程,若无错误、无警告,说明开发环境搭建完毕,如图2.8所示。

图2.8 搭建Keil for C51开发环境成功

4.安装IAR for STM32 ARM开发环境和J-Link仿真软件

IAR Embedded Workbench for ARM是Windows嵌入式ARM平台常见集成开发环境,该开发环境针对目标处理器集成了良好的函数库和工具支持,其安装过程如下:

步骤 1:双击EWARM-CD-7202-7431.exe,进入欢迎界面,单击Install IAR Embedded Workbench选项,后续采用默认选项值安装,直到安装完毕,第一次运行IAR for ARM时,系统会提示IAR需激活,如图2.9所示。运行IAR Offline Activator激活工具,在[Product]中选择IAR Embedded Workbench for ARM,Standard,单击Generate按钮,生成License Number,其他激活方法类似IAR for 8051激活步骤。

图2.9 激活IAR for ARM开发环境

步骤 2:新建IAR for ARM测试工程,进入菜单Project,单击rebuild All,若无错误、无警告,表示此IAR for ARM开发环境安装成功,如图2.10所示。

图2.10 IAR for ARM开发环境安装成功

步骤 3:双击Setup_JLinkARM_V426.exe即可安装J-Link驱动,安装完成之后,在PC机的开始程序列表里面有一个SEGGER的文件夹。安装完驱动程序之后需要进行相应的配置才能将例程正确地烧写到无线节点板中。

步骤 4:从PC机开始程序列表选择J-Flash ARM程序,打开该程序后,首先从菜单项单击Options中选择Project settings,进入设置界面,之后在Target Interface的第一个下拉框列表中选择SWD,然后进入CPU的设置界面,如图2.11所示。在Device选项框中选择ST STM32F103CB,设置完毕,最后单击确定。

图2.11 配置J-Link的CPU参数 BVSBMIxJAOFCSAMQwdEwIf28SgqE8VMOq0AE9xWugwYV0XX8j1di8C8Ec4BSTxgs

点击中间区域
呼出菜单
上一章
目录
下一章
×