APP下载

STM32 与PC 机USART 通信教学实验设计

2022-05-13黄克亚李晓旭

现代电子技术 2022年10期
关键词:开发板微控制器控件

黄克亚,余 雷,李晓旭

(苏州大学 机电工程学院,江苏 苏州 215131)

通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter,USART),简称串口,为与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换提供了一种灵活的方法。万物互联使世界更加精彩,在有线数据通信中,串口无疑是一个理想选择,其简单高效、灵活可靠,普遍存在于各主从设备当中。串口通信是嵌入式系统教学的重点和难点,需要理解其通信原理,但更重要的是在实践中掌握其应用方法,因此好的教学实验设计尤为重要。串口通信实验可以是微控制器之间、微控制器与外部设备、微控制器与上位机之间的数据交换。由于嵌入式开发都需要在PC 机上编译应用程序,所以大部分的串口通信项目实例都是基于微控制器和PC 机的,本设计也不例外。但是传统的串口实验往往较为简单,不具备工程实践意义,如PC 机向微控制器发送单个数据,微控制器收到后加1 回传;只关注通信一方,即微控制器端,PC 端借助专用调试软件,如串口调试助手,不能帮助学生很好地理解通信双方数据传输要求。为克服上述实验设计中的不足,本文设计STM32 与PC 机USART 串口通信教学实验。

1 USART 串口通信原理

实验设计微控制器选择的是STM32F103ZET6 芯片,其为SM32F1 系列大容量产品,外设资源丰富。实验电路串口选择USART1,工作于串行、异步、全双工制式。如果需要连接2 个具有USART 接口的设备,则每个设备至少通过3 个引脚与其他设备连接在一起,分别为接收数据输入(RxD)、发送数据输出(TxD)、2 个设备之间的共地信号(GND),其连接方式如图1 所示。需要注意的是,2 个USART 设备的TxD 和RxD 必须是交叉相连的。

图1 两个USART 设备之间的互连

USART 异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。最常见的帧格式由1 个起始位、8 个数据位、1 个校验位和1 个停止位组成,帧与帧之间可以有空闲位。起始位约定为0,停止位和空闲位约定为1,典型通信时序如图2 所示。发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。

图2 USART 异步通信时序图

2 串口通信硬件设计

USART 采用的电平标准决定了它的通信距离较短,一般仅限于板级通信,早期微型计算机均配有RS 232 串口,其与微控制器的USART 相连需要配一个电平转换芯片,如MAX232。现在无论是笔记本还是台式计算机均很难找到串口,取而代之的是USB 接口的普遍使用,同时USB 接口还可以提供稳定的5 V 电源,所以本实验设计的MCU(微控制器)和PC 机串行通信是通过PC 机USB 口转换成串口完成的。

图3 所示为开发板串口通信电路,其核心为CH340G 芯片。该芯片为一个USB 总线的转接芯片,实现了USB 转串口或者USB 转打印口。在串口方式下,CH340G 提供常用的MODEM 联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。通过该电路即可将PC 机的USB 口转换为串行接口并分配端口号,PC 机通信软件通过这一虚拟串口即可 实 现 数 据 透 明 传 输。图3 中USART1_RxD 和USART1_TxD 分别连接微控制器串口1 的数据接收引脚和数据发送引脚。三极管Q和Q可根据联络信号实现微控制器在下载、复位、运行状态之间的自由切换,用户体验非常好。

图3 开发板串口通信电路

开发板串口通信电路既构建了MCU 和PC 机串行数据通道,又可以为开发板提供系统电源,还可以将嵌入式系统开发平台生成的目标程序下载到微控制器的运行存储器当中,具有在线编程(ISP)功能。电路集电源供电、串口通信、ISP 下载功能于一身,在开发板设计当中获得广泛的应用。

3 串口通信软件设计

本实验软件设计包括两部分程序:微控制器串口收发程序和上位机串口收发程序。两部分程序运行于不同终端,分开设计;但相互关联,需要综合设计,才能协同工作。首先就需要对通信数据格式、内容和长度等进行约定,对应网络分层的顶层,属于应用层协议。

3.1 应用层通信协议

实验实现如下功能:STM32 微控制器通过串口和上位机建立通信连接,上位机获取本机时间,并通过串口发送给STM32 微控制器;微控制器在收到上位机发送过来的一组数据后,提取出时、分和秒的数值,显示于数码管上,并将收到的数据个数发送至上位机。为了使通信双方能够理解收发数据的含义,常见的数据通信约定方法有:

1)依数据发送顺序确定数据性质,在本例中上位机将时、分、秒依次向微控制器发送,微控制器收到的数据3个为一组,每组数中第一个数据为小时数值,第二个数据为分数值,第三个数据为秒数值。该方法简单易懂、容易实现,无额外开销,但是发送和接收数据数量和顺序严格定义,若由于干扰出现“丢帧”现象,数据将会完全混乱。

2)在发送数据前加一个或多个字节的前导说明符,例如时数据前加一个“H”控制符,组成两个字节数据一起发送,该方法数据发送和接收无顺序限制,“丢帧”不影响数据继续传输,但实现难度有所增加,带来部分额外数据开销。

考虑到上述两种数据约定方法均存在一定的不足,结合项目实际情况,即本项目传输数据时、分、秒的最大数值范围为0~59,可以使用6 位二进制表示,传输数据性质共有3 种情况,可以使用2 位二进制表示,将上述两部分数据合在一起正好是一个字节,作为一帧数据在串口通信链路上传输,每帧数据位定义及格式如图4所示。

图4 串口通信数据帧格式

三种数据通信协议特点及性能对比如表1 所示。由表1 可以看出,本实验设计所采用的控制位和数据位单字节组合数据帧通信格式具有简洁、高效、灵活等众多优越性能,是本实验设计的创新点之一。

表1 通信协议特点及性能对比

3.2 MCU 端程序设计

微控制器端串口通信程序是采用基于中断的前后台模式,没有数据通信请求运行主程序,本实验主程序是数字电子钟,当有串口数据请求时,即串口接收中断发生,CPU 进入中断服务程序,处理串口中断。该模式在数据通信领域比较普遍,有利于提高CPU 执行效率,并可将通信程序集成到其他模块当中。

3.2.1 主程序设计

主程序设计包括串口初始化和数码管动态显示程序两部分。本实验串口选用的是USART1,其操作步骤如下:

1)打开GPIOA 和USART1 的时钟使能。

2)设置串口的I/O 口模式,要使用STM32 的USART1 必需要将其TxD(PA9)初始化为复用推挽输出,将其RxD(PA10)初始化为浮空输入。

3)初始化USART,通信双方约定采用“96 N 8 1”,无硬件流控制格式,其参考程序如下:

4)开串口接收中断,并设置NVIC 参数。

3.2.2 中断服务程序设计

完成串口初始化程序之后,主程序即进入数码管动态显示时间的无限循环程序当中。在主程序执行过程中,若串口接收到数据,CPU 响应串口接收中断,运行中断服务程序,接收上位机传来的时间数据,完成全局变量更新,并返回数码管显示,完成一次数据通信。

中断服务参考程序如下:

为了实现数字电子钟计时和设定功能,定时器秒中断和按键外部中断正常执行,在此不再赘述。

3.3 PC 端程序设计

因为是串口通信程序设计,所以除了编写微控制器端程序外,还需要编写上位机控制程序。上位机程序是在个人计算机上编写的,其开发方法和使用平台形式各异,本文采用Visual Basic 6.0 进行串口程序设计,其他开发平台也是类似的。

首先在VB6.0 软件中新建一个窗体,并添加相应控件,创建完成界面如图5 所示。

图5 串口通信窗体创建界面

与本项目有关的控件主要有:窗体Form1,文本框数组Text1(0)~Text1(4),状态指示图标shpCOM,组合列表框cboPort,串口状态标签cmdOpenCom,当前时间标签Label13,退出按钮Command2,发送时间按钮Command3,定时器Timer1,串口通信控件MSComm1 等。

上位机通信程序主要包括窗体载入、定时器中断、发送时间、串口接收等。

1)窗体载入程序。窗体载入程序主要是寻找可用串口,并对有效串口进行初始化。寻找有效串口的方法是试图打开一个串口,若成功则有效,否则寻找下一个串口。串口初始化包括设置通信格式、数据位数、事件产生方法等。特别注意的是,需要将串口控件DTREnable 和RTSEnable 两个属性值设为False,否则系统会强制复位。

2)定时器中断程序。定时器设置为每秒中断一次,每次中断都将系统当前时间更新到时间显示标签上。

3)发送时间程序。串口通信以二进制格式进行时,发送数据必须为数组形式,所以串口发送时间首先需要将时间的时、分、秒数值分别发送到数组的三个元素当中,然后调用串口发送方法发送即可。

4)串口接收程序。串口接收程序首先判断事件类型,如果是一个串口接收事件,则接收一个数据数组,然后将数据数组转换成字符串,并显示在相应的文本框中。

4 串口通信调试

本实验的目标为将PC 机时间与网络同步,利用串口将本机时间发送至微控制器,微控制器将接收到的时间动态显示于数码管上。本文实验可提供一种精确、快捷的时间设定方法,具有较强的工程实践意义,而且实验中使用的USART1 是微控制器下载程序通信接口,没有增加任何硬件成本。

4.1 PC 机时间网络同步

单击Windows 桌面任务栏日期时间显示区域,选择更改日期和时间设置选项,打开日期和时间对话框,在对话框中单击Internet 时间选项框,并进一步单击更改设置按钮,打开Internet 时间设置对话框,勾选“与Internet 时间服务器同步”复选框,并单击确定。至此,PC 机系统时间网络同步已经完成。当然,如果不选择网络时间同步也是可以的,只是此时个人计算机的系统时间设置可能不精确。

4.2 MCU 与PC 机通信

上位机开发的通信程序可以生成可执行文件“单片机与PC 机通信.exe”,具体的文件名和工程名有关,并且可以修改,生成的可执行文件可以独立运行。

打开开发板电源,下载串口通信程序,并复位运行。在PC 机上双击运行“单片机与PC 机通信.exe”程序,并单击“发送时间”按钮,上位机系统时间数值就会发送到单片机,并显示于数码管上,单片机同时将收到数据的个数回传至PC 机,并显示于软件窗体的文本框当中。其操作界面如图6 所示。

图6 串口通信测试图

4.3 串口通信控件注册

在很多串口通信软件中都会用到串口通信控件mscomm32.ocx,本文编写的上位机通信软件也不例外,该控件在有些WIN7 或WIN10 系统中没有注册,运行时会提示找不到控件、错误,此时需要对控件进行注册。具体步骤如下:

1)百度搜索或到微软官网下载mscomm32.ocx。

2)将控件放到相应文件夹内,32 位系统路径为“C:Windows System32”;64 位 系 统 路 径 为“C:WindowsSyswow64”。

3)然后在对应目录下找到cmd.exe 文件,单击鼠标右键,以管理员身份运行(关键),在命令窗口输入regsvr32 mscomm32.ocx。

经过以上3 步即可完成控件注册。

4.4 串口助手调试

对于很多同学来说,可能没有掌握一门可视化编程语言,则解决这一问题较好的方法是使用串口调试助手。需要说明的是各种版本串口调试助手略有差别,但大同小异,可以举一反三。

具体调试步骤如下:

1)打开开发板电源,运行微控制器程序。

2)运行串口调试助手,并打开串口通信设置对话框,将其设置为“96 N 8 1”,无硬件流控制格式,默认即为该选项。

3)串口调试选项设置,设置结果如图7 所示,其中重要选项如红色框线所示。

图7 串口设置及收发数据界面

4)串口收发通信,采用两种方式进行实验,第一种方式为时、分、秒三个数值分开发送,第二种方式为时、分、秒一起发送(用空格分隔),操作过程如图7 所示。设要设定的时间为“10:18:30”,加上控制位,则需要发送十六进制数据“0A 52 9E”,此处要注意发送和接收数据均为十六进制,且输入和显示均没有“0x”或“H”等附加格式。

串口调试助手在没有显示屏的单片机应用系统中有着十分广泛的应用,可以利用函数重定向功能,调用printf()函数,将开发板获取数据,通过串口输出到PC机,为程序调试和串口通信提供极大方便。

5 结语

本文设计一个综合性PC 与微控制器串口通信教学实验,实验设计包括硬件设计和软件设计两部分。硬件设计采用CH340G 芯片实现USB 接口转串口功能,有效地解决了目前PC 机普遍不具备串口的问题,并实现了供电、下载、通信三者功能,是一个很好的创新。软件设计独立完成微控制器程序设计和上位机软件开发两部分工作,提出一种串口通信应用层协议,合并2 位控制位和6 位数据位形成单字节数据帧,突破单次发送数据顺序和大小的限制,具有简洁、高效、灵活等优点。项目在上位机与单片机之间建立双向串行通信链接,上位机获取网络时间数值,将其发送给单片机,单片机接收并提取时间数值,送入数码管显示,并回传接收到的数据个数。通过该实验的学习和应用,学生基本可以掌握STM32 串行接口USART 的原理和使用方法。

猜你喜欢

开发板微控制器控件
关于.net控件数组的探讨
物联网技术在微控制器实验教学中的应用
Microchip最新推出两款PIC32 Curiosity开发板
浅析单片机开发板的设计与制作
ASP.NET服务器端验证控件的使用
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板
Arduino和Atmel发布Arduino Zero开发板
Atmel针对新一代物联网应用发布全新32位微控制器
最新STM32设计工具增加对混合信号微控制器的支持
意法半导体(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器