MATLAB串口操做和GUI編程

程序說明 java

V1.0 2015/2/08編程

MATLAB串口操做和GUI編程數組

 

概述async

 

本文介紹了程序AD9512_Serial_GUI的編程思路和功能。該程序設計到MATLAB的圖像用戶界面編程的基本方法和串口的基本操做。程序目的在於經過串口寫控制字對AD9512進行配置(AD9512經過SPI寫入寄存器,本程序只是整個控制程序中的一部分)。ide

修訂歷史函數

如下表格展現了本文檔的修訂過程 學習

日期ui

版本號spa

修訂內容設計

2015/01/15

V0.0

初始版本,試驗版[1]

2015/02/06

V1.0

修正問題,經過驗證[2]

[1]. 試驗版本代表該版本應用筆記及對應代碼沒有經過實際驗證,同時仿真分析也可能沒有進行。試驗版對應的版本號爲V0.X。

[2]. 寫入操做時將 'async' 去掉,基本經過驗證,同時因爲RS232寫入是LSB的順序,和FPGA端代碼不匹配,所以此處更改了serialwrite程序。

簡介

 

本程序基於MATLAB 2014a 編寫,本文檔中提到的"MATLAB"均指該特定版本MATLAB。

本程序想要實現的功能是:上位機控制AD9512,固然AD9512是和FPGA相連的,而FPGA經過串口和上位機鏈接。AD9512的控制方法參見其DataSheet,經過SPI配置。從原理上來講,SPIUART都是全雙工的,可是讀取過程當中也須要寫入控制頭,此處採用的是半雙工方式。

本程序的思路在於將FPGA看做是一個UARTSPI的器件,直接經過上位機配置AD9512FPGA端的處理暫時不考慮,本MATLAB程序按照須要寫入的控制字生成傳輸程序。如下是本程序涉及到的相關背景知識。

串行通訊和RS232

略。(可參考MATLAB幫助 - Data File Management – Serial Port Devices或相關文獻)

MATLAB的串口操做

串口操做和實際上很簡單,大部分從MATLAB的幫助中就能夠找到。創建,打開,關閉,刪除,寫數據,讀數據。基本操做就是這些。須要注意的是串口打開後切記要記得關閉。基本操做有

s=serial('COM1');

fopen(s);

fwrite(s,100); %寫一個字節

fread(s,[1 1],'unit8'); %讀一個字節

fclose(s);

delete(s);

MATLAB的GUI編程

這一個程序仍是比較初級的,對於沒有接觸過MATLAB GUI編程的人來講,參考MATLAB幫助 – MATLAB -GUI Building - GUI Building Basics - Examples and How To-Create a Simple GUIDE GUI,按照其中的例子本身完成一次,並瞭解其基本原理後,瞭解這個程序就十分容易了。

程序設計

 

程序設計流程按如下流程進行:

  1. 明確需求
  2. 設計合理界面
  3. 寫回調函數實現基本的界面控制
  4. 寫功能函數實現功能

需求

程序功能分簡單,具體來講只須要實現3個功能便可。

  • 串口選擇和打開、關閉操做;
  • 控制字輸入功能;
  • 發送或接收相關信息。

界面設計

綜合需求考慮需求,界面設計以下

其中,界面最下方準備在後續版本中添加狀態輸出窗口,以便及時瞭解程序的運行狀態。本程序採用GUI Guide編寫圖像用戶界面,用到了如下組件

statictext:靜態文本

button:按鈕

buttongroup:按鈕組(將這些按鈕聯繫在一塊兒)

table:表格

edittext:可編輯文本

panel:面板,把一些控件結合起來

編程中一個相對良好的習慣是給每一控件的"Tag"屬性命名(有意義),而不該該使用默認名字。

對於MATLAB的GUI編程,我的觀點是(暫時)對於複雜的應用不要採用MATLAB,對於簡單的應用能夠採用,可是真的很很差用。MATLAB的優點在於其強大的數學計算能力,若是應用不須要這一點(譬如說本應用),那麼也不該該使用。

界面控制

此處我想表達的意思在於,當觸發某一控件操做後,可以及時改變其餘控件的相應狀態,防止非法操做的進行。譬如,該程序僅對一個串口進行操做,在正確打開串口後,關閉串口前沒法再次執行"打開"操做或是改變串口端口號。

完成這一功能及其簡單,只須要採用set命令改變控件狀態便可,譬如使得"打開"按鈕沒法使用(呈"灰色")

set(handles.portOpen,'enable','off');

這些語句大抵都寫在Callback函數中。Callback函數大抵是MATLAB GUI編程中最重要的了,若是沒記錯的話相似java裏面的監聽。也就是說對某些操做的響應。不一樣的控件出發callback的過程是不同的,具體能夠參考幫助或是《MATLAB GUI 設計學習手記》。對於界面的幾乎全部元素,均可以經過handles訪問。

本版程序對部分操做有相應的處理,然而很不完善。這也說明看似簡單的東西也須要仔細思索,作起來每每不是那麼容易。

功能實現

本程序中有三個函數,包括

  • serialOpen.m 串口打開操做
  • serialWrite.m 寫操做
  • serialRead.m 讀操做

將其寫出函數而不保留在主程序內的優勢暫時看來有兩點:其一是主程序過長並且大部份內容是MATLAB自動生成的;其二是對應不一樣的應用須要修改參數或是輸出格式時,只需相應修改這幾個函數便可。

串口打開操做較爲簡單,經過獲取可編輯文本框內的端口號打開便可。讀寫操做相似,如下以寫操做爲例作簡要介紹。

寫數據以前須要獲取要寫的數據,即用戶輸入表格中的數據。表格在MATLAB中叫作Uitable,裏面存放的數據類型是cell array(元胞數組)。(cell是MATLAB的一種數據類型)必需要注意的是,在創建Uitable的時候設置個列的數據類型後,即便不使用set方法改變其類型,Uitable的數據類型也可能會由於你設置的cell的類型的變化而變化。(在創建Uitable的時候,也有相關的警告)

經過使用get方法能夠獲得表格內的所有數據data,經過data{m,n}能夠訪問相應位置的內容( data(m,n)訪問的是元胞)。本程序中輸入格式是字符串,對應應該是兩位的16進制字符(程序暫時沒有任何的查錯能力,任何非法輸出會致使程序中止運行)。

serialWrite中的操做就是簡單的將16進制的字符串轉換爲數字,以後經過fwrite函數發送出去。相應的針對AD9512,有每次寫入1byte的話,頭部應該是0+addr,以後跟寄存器。將cell array中的字符串轉換後發送便可,記得最後須要寫5A寄存器完成更新的過程。在讀取狀況下,頭部寫8+addr就能夠等待接收數據了。

參考

 

MATLAB幫助

MATLAB GUI 設計學習手記

MATLAB編程(第二版)- 菜鳥入門教材

代碼

 

代碼詳見AD9512_Serial_GUI

相關文章
相關標籤/搜索