串口通讯方式综述

2020-12-04 08:16史伟
银幕内外 2020年6期

摘要:为了实现 PC 机与单片机 的实时监测与数据的获取,本文介绍了STC89C51、STM32、FPGA与计算机之间的通讯。上面3个工控机与计算机之间的通讯。上面3个工控机与计算机之间的通讯都采用全双工串行异步通讯方式。

关键词:STC89C51;LabVIEW STM32;LabVIEW FPGA

一、引言

随着工业的发展,計算机与工控机之间的通讯方式显得格外重要。本文主要介绍了计算机与STC89C51单片机、STM32 单片机、FPGA之间的通讯方式。通过实际连接计算机与开发板,并将程序烧录到开发板,打开串口调试助手进行现场调试。

二、各种通讯方式的实现

(一)计算机与51单片机通讯

51单片机的串行口支持全双工,功能齐全,可以在同一时刻进行数据的发送和接收。51单片机的串行口主要由数据缓冲寄存器SBUF、发送控制器、接收控制器、输入移位寄存器和很多逻辑门电路构成。

80C51的串行口控制器SCON,字节地址为98H,可以进行位寻址。SCON串行口控制器可以用来设置串口工作方式、接受/发送控制等。51单片机在进行复位时SCON控制器都被清零。控制器中的SM0和SM1为工作方式选择位,可选择4种工作方式。

在操作51单片机串行口之前,需要对51单片机与串口相关的特殊功能寄存器进行初始化操作,包括设置产生波特率的定时器1、串口控制和中断控制。编程思想如下:

1.设置T1的工作方式;

2.求出初值T1,算出TH1,TL1;

3.开启T1;

4.据情况设置串行口工作方式;

5.串口如果用到中断,要进行中断相关的设置。

把程序烧录到51单片机,打开串口调试助手后,串口界面显示和开发板试验现象如下图1所示。

(二)计算机与STM32之间通讯

RS232底层协议较复杂,使用传统的STM32库函数开发比较繁琐。这里使用NI公司的LabVIEW软件,它所提供的状态机框架可以贯穿RS232通信协议。由于STM32单片机本身已经实现了底层串口收发线程,使用时在收发缓冲区中读写字节数即可。NI公司的VISA驱动包实质上是把大多数仪器仪表领域的通信协议集成在一起,使得仪器通信变得简单了许多。VISA函数是一种运行在上位机(电脑),经过封装的多状态VI。后面编写串口程序时,使用了和STM32芯片对应的串口函数,COM口有5个,且每个之间互不干扰,每个COM口都有对应1KB的接收缓冲区。这种串口适用于需要多路串口并行工作的场合。

STM32单片机提供了5路串行接口(COM1-COM5),本实验使用了STM32单片机的COM1接口,从而进行与上位机的串口通信。由于现在很多笔记本电脑上集成了很多USB口,所以STM32F407单片机开发板上与之对应也做了一片串口转 USB 芯片,此芯片的作用是将串口COM1由DB9转换成 MiniUSB口。因此后面客户使用时,只需要一根 Mini USB 传输线就可以实现上位机(电脑)与下位机(STM32开发板)的串口连接,通过串口调试助手进行两者间的通信。

本文利用LabVIEW编写串口程序,在RS232驱动实现上,只需要6个基本操作函数即可完成程序编写,分别为串口初始化、串口接收缓冲区字节数、串口写入、串口读取、清除串口缓冲区、串口关闭。

利用LabVIEW编写的主程序框图和其串口助手收到的数据如图2所示。

(三)计算机与FPGA通讯

如今很多笔记本上没有传统DB9(RS232)接口,因此本次实验选择了黑金 AX7035 开发板。开发板上载了一颗 Silicon Labs 公司的 CP2102GM 芯片将串口变成 USB 口。在 FPGA学习板上我们则是采用 WCH340G 芯片作为 USB转串口的桥梁。为了节约板子面积,左上角的 USB 口选择的是 Mini USB 贴片型的封装,也就是很早以前那种传统的 MP3 接口,用户可以用开发板配套的 Mini USB 线缆,连接开发板至 PC进行串口通信。

对于 FPGA 芯片来说,内部没有集成串口收发器,因此,我们需要根据串口通信的时序图,利用LabVIEW语言来模拟一个串口收发器。由于 FPGA 的运行频率可以做到很高,因此可以通过时钟软件分频的方式实现不同的波特率。FPGA 内部模拟的是串口收发器协议,外部加一个电平转换芯片就可以实现 RS232 通信。由于 FPGA 非常容易实现多线程,因此,多线程之间的数据传输和交互就非常重要,推荐用户使用 FIFO,也就是先入先出缓冲区,经过合理的数值设置后,可以使得数据不会丢失。关于FIFO 的使用方法非常重要。另外FPGA内部多个不同速率的模块之间通信或者说是编程结构就是四线握手。下面采用调用EDF网表的方式来实现一个串口通信程序。

主VI里面用到的串口通信IP,是我们专门利用Vivado生成的edf格式的标准四线握手制接口的串口通讯IP核,类似C语言里的dll库函数。为了加快程序的编译,我们提前将VHDL版本的串口通信程序通过Vivado生成EDF格式的驱动文件,类似C语言里的DLL,然后再利用LabVIEW IP Block集成节点调用就可以了。利用EDF编写的串口通讯程序框图如图3所示。

将程序生成的bit文件通过Vivado2014下载到FPGA开发板,打开串口调试助手,在面板上产生的接收区数据如图4所示。三、结语

本文介绍了使用Keil2基于C语言对51单片机串口通讯程序进行编程以及使用LabVIEW编写STM32和FPGA串口主程序框图。每种程序给出了编写思想及步骤。这些方法成功实现了计算机与工控机之间的通讯,并且它们之间的通讯良好。该方法方便、快捷、可靠,对大多数使用单片机的工业控制系统均适用,有较高的推广价值。

参考文献:

[1] 王电令,苏亚辉,苏彩虹.STM32开发实战.LabVIEW卷[M].机械工业出版社,2016.

[2] 郭天祥.新概念51单片机C语言教程[M].电子工业出版社,2009.

[3] 林立,张俊亮.单片机原理及应用.第3版[M].电子工业出版社,2014.

作者简介:史伟,男,安徽蚌埠人,2019级在读研究生,研究方向:机械测试控制技术及应用。