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