摘要:為了實現 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級在讀研究生,研究方向:機械測試控制技術及應用。