摘要:為了實現(xiàn) PC 機(jī)與單片機(jī) 的實時監(jiān)測與數(shù)據(jù)的獲取,本文介紹了STC89C51、STM32、FPGA與計算機(jī)之間的通訊。上面3個工控機(jī)與計算機(jī)之間的通訊。上面3個工控機(jī)與計算機(jī)之間的通訊都采用全雙工串行異步通訊方式。
關(guān)鍵詞:STC89C51;LabVIEW STM32;LabVIEW FPGA
一、引言
隨著工業(yè)的發(fā)展,計算機(jī)與工控機(jī)之間的通訊方式顯得格外重要。本文主要介紹了計算機(jī)與STC89C51單片機(jī)、STM32 單片機(jī)、FPGA之間的通訊方式。通過實際連接計算機(jī)與開發(fā)板,并將程序燒錄到開發(fā)板,打開串口調(diào)試助手進(jìn)行現(xiàn)場調(diào)試。
二、各種通訊方式的實現(xiàn)
(一)計算機(jī)與51單片機(jī)通訊
51單片機(jī)的串行口支持全雙工,功能齊全,可以在同一時刻進(jìn)行數(shù)據(jù)的發(fā)送和接收。51單片機(jī)的串行口主要由數(shù)據(jù)緩沖寄存器SBUF、發(fā)送控制器、接收控制器、輸入移位寄存器和很多邏輯門電路構(gòu)成。
80C51的串行口控制器SCON,字節(jié)地址為98H,可以進(jìn)行位尋址。SCON串行口控制器可以用來設(shè)置串口工作方式、接受/發(fā)送控制等。51單片機(jī)在進(jìn)行復(fù)位時SCON控制器都被清零??刂破髦械腟M0和SM1為工作方式選擇位,可選擇4種工作方式。
在操作51單片機(jī)串行口之前,需要對51單片機(jī)與串口相關(guān)的特殊功能寄存器進(jìn)行初始化操作,包括設(shè)置產(chǎn)生波特率的定時器1、串口控制和中斷控制。編程思想如下:
1.設(shè)置T1的工作方式;
2.求出初值T1,算出TH1,TL1;
3.開啟T1;
4.據(jù)情況設(shè)置串行口工作方式;
5.串口如果用到中斷,要進(jìn)行中斷相關(guān)的設(shè)置。
把程序燒錄到51單片機(jī),打開串口調(diào)試助手后,串口界面顯示和開發(fā)板試驗現(xiàn)象如下圖1所示。
(二)計算機(jī)與STM32之間通訊
RS232底層協(xié)議較復(fù)雜,使用傳統(tǒng)的STM32庫函數(shù)開發(fā)比較繁瑣。這里使用NI公司的LabVIEW軟件,它所提供的狀態(tài)機(jī)框架可以貫穿RS232通信協(xié)議。由于STM32單片機(jī)本身已經(jīng)實現(xiàn)了底層串口收發(fā)線程,使用時在收發(fā)緩沖區(qū)中讀寫字節(jié)數(shù)即可。NI公司的VISA驅(qū)動包實質(zhì)上是把大多數(shù)儀器儀表領(lǐng)域的通信協(xié)議集成在一起,使得儀器通信變得簡單了許多。VISA函數(shù)是一種運行在上位機(jī)(電腦),經(jīng)過封裝的多狀態(tài)VI。后面編寫串口程序時,使用了和STM32芯片對應(yīng)的串口函數(shù),COM口有5個,且每個之間互不干擾,每個COM口都有對應(yīng)1KB的接收緩沖區(qū)。這種串口適用于需要多路串口并行工作的場合。
STM32單片機(jī)提供了5路串行接口(COM1-COM5),本實驗使用了STM32單片機(jī)的COM1接口,從而進(jìn)行與上位機(jī)的串口通信。由于現(xiàn)在很多筆記本電腦上集成了很多USB口,所以STM32F407單片機(jī)開發(fā)板上與之對應(yīng)也做了一片串口轉(zhuǎn) USB 芯片,此芯片的作用是將串口COM1由DB9轉(zhuǎn)換成 MiniUSB口。因此后面客戶使用時,只需要一根 Mini USB 傳輸線就可以實現(xiàn)上位機(jī)(電腦)與下位機(jī)(STM32開發(fā)板)的串口連接,通過串口調(diào)試助手進(jìn)行兩者間的通信。
本文利用LabVIEW編寫串口程序,在RS232驅(qū)動實現(xiàn)上,只需要6個基本操作函數(shù)即可完成程序編寫,分別為串口初始化、串口接收緩沖區(qū)字節(jié)數(shù)、串口寫入、串口讀取、清除串口緩沖區(qū)、串口關(guān)閉。
利用LabVIEW編寫的主程序框圖和其串口助手收到的數(shù)據(jù)如圖2所示。
(三)計算機(jī)與FPGA通訊
如今很多筆記本上沒有傳統(tǒng)DB9(RS232)接口,因此本次實驗選擇了黑金 AX7035 開發(fā)板。開發(fā)板上載了一顆 Silicon Labs 公司的 CP2102GM 芯片將串口變成 USB 口。在 FPGA學(xué)習(xí)板上我們則是采用 WCH340G 芯片作為 USB轉(zhuǎn)串口的橋梁。為了節(jié)約板子面積,左上角的 USB 口選擇的是 Mini USB 貼片型的封裝,也就是很早以前那種傳統(tǒng)的 MP3 接口,用戶可以用開發(fā)板配套的 Mini USB 線纜,連接開發(fā)板至 PC進(jìn)行串口通信。
對于 FPGA 芯片來說,內(nèi)部沒有集成串口收發(fā)器,因此,我們需要根據(jù)串口通信的時序圖,利用LabVIEW語言來模擬一個串口收發(fā)器。由于 FPGA 的運行頻率可以做到很高,因此可以通過時鐘軟件分頻的方式實現(xiàn)不同的波特率。FPGA 內(nèi)部模擬的是串口收發(fā)器協(xié)議,外部加一個電平轉(zhuǎn)換芯片就可以實現(xiàn) RS232 通信。由于 FPGA 非常容易實現(xiàn)多線程,因此,多線程之間的數(shù)據(jù)傳輸和交互就非常重要,推薦用戶使用 FIFO,也就是先入先出緩沖區(qū),經(jīng)過合理的數(shù)值設(shè)置后,可以使得數(shù)據(jù)不會丟失。關(guān)于FIFO 的使用方法非常重要。另外FPGA內(nèi)部多個不同速率的模塊之間通信或者說是編程結(jié)構(gòu)就是四線握手。下面采用調(diào)用EDF網(wǎng)表的方式來實現(xiàn)一個串口通信程序。
主VI里面用到的串口通信IP,是我們專門利用Vivado生成的edf格式的標(biāo)準(zhǔn)四線握手制接口的串口通訊IP核,類似C語言里的dll庫函數(shù)。為了加快程序的編譯,我們提前將VHDL版本的串口通信程序通過Vivado生成EDF格式的驅(qū)動文件,類似C語言里的DLL,然后再利用LabVIEW IP Block集成節(jié)點調(diào)用就可以了。利用EDF編寫的串口通訊程序框圖如圖3所示。
將程序生成的bit文件通過Vivado2014下載到FPGA開發(fā)板,打開串口調(diào)試助手,在面板上產(chǎn)生的接收區(qū)數(shù)據(jù)如圖4所示。三、結(jié)語
本文介紹了使用Keil2基于C語言對51單片機(jī)串口通訊程序進(jìn)行編程以及使用LabVIEW編寫STM32和FPGA串口主程序框圖。每種程序給出了編寫思想及步驟。這些方法成功實現(xiàn)了計算機(jī)與工控機(jī)之間的通訊,并且它們之間的通訊良好。該方法方便、快捷、可靠,對大多數(shù)使用單片機(jī)的工業(yè)控制系統(tǒng)均適用,有較高的推廣價值。
參考文獻(xiàn):
[1] 王電令,蘇亞輝,蘇彩虹.STM32開發(fā)實戰(zhàn).LabVIEW卷[M].機(jī)械工業(yè)出版社,2016.
[2] 郭天祥.新概念51單片機(jī)C語言教程[M].電子工業(yè)出版社,2009.
[3] 林立,張俊亮.單片機(jī)原理及應(yīng)用.第3版[M].電子工業(yè)出版社,2014.
作者簡介:史偉,男,安徽蚌埠人,2019級在讀研究生,研究方向:機(jī)械測試控制技術(shù)及應(yīng)用。