Usart GPU 使用手冊
文檔更新日期 |
更新內容 |
2014-9-10 |
C編程sprintf問題 |
2014-8-8 |
版本程序1.0,升級了自定義波特率部分 |
------ |
原始版本 |
第一部分:基礎應用
概述:
Usart 是串口的意思,GPU 是圖形處理器的意思,產品的含義是做一個單片機使用的專用圖形處理器,或者稱之為串口液晶顯示模塊。
一、 接線
開箱后,可以將串口輸出的4根引腳焊上排插,使用杜邦線將串口接到USB轉TTL線上,即可接到電腦USB口上上電,屏幕即會顯示第一屏的Hello界面;
說明下:照片中是我調試用的,因此增加了RESET按鈕和運行程序刷機切換的BOOT自鎖開關,正常使用和產品中不帶這兩個東東;
主板中使用XC6206接到5V的,6206是一個低壓差穩壓器,輸出3.3V,160mV的低壓差,讓板子在3.46V即可正常供電,實際使用中,電壓低到3V,6206也可以正常輸出電壓但是不穩壓;由於STM32 最低2V即可工作,因此本板子可以直接接單節鋰電池即可工作;
二、 上電,觀看演示
這是上電后的Hello界面,俗稱歡迎界面,此界面屬於第一個批界面,可以有上位機程序在PC下自由設計,用戶可以在這個界面上設計自己產品的名字和公司的圖標;
開機界面十秒種,如果收不到串口命令,就會進入演示狀態。正常的量產之后,單片機需要在上電十秒內給串口液晶屏發送指令,只要一發送指令,就自動的進入串口命令狀態。
三、 接GpuMaker
將USB轉TTL接入計算機,注意由於程序的原因串口號不能超過10,即COM1~COM9方可使用;
從:
http://pan.baidu.com/share/link?shareid=1322038799&uk=3204894695
下載GpuMaker程序,程序是一個ZIP包,綠色軟件,解壓到硬盤中即可使用;
如果您有多個使用串口屏的項目,請把此軟件解壓多份,每份一個項目;
運行解開目錄中的GpuMaker.exe,系統進入:
選擇,左上角的串口號,點擊“打開按鈕”,串口連接成功;此時點擊“發送指令”,液晶屏即可顯示表示連接正常;
四、 命令表
命令 |
說明 |
示例 |
CLS(c); |
用c顏色清屏 |
CLS(0); |
SCC(c,n); |
自定義c顏色,顏色值n由上位機提供計算 |
SCC(15,65535); |
SBC(c); |
設置背景色C,顯示漢字等時無點陣時填的顏色 |
SBC(1); |
PS(x,y,c); |
在(x,y)的地方畫一個顏色c的點 |
PS(100,100,1); |
PL(x1,y1,x2,y2,c); |
從(x1,y1)用顏色c畫一條直線到(x2,y2) |
PL(0,0,100,0,2); |
BOX(x1,y1,x2,y2,c); |
用顏色c畫一個方框,左上角(x1,y1),右下角(x2,y2) |
BOX(0,0,100,100,2); |
BOXF(x1,y1,x2,y2,c); |
用顏色c畫一個實心方框,左上角(x1,y1),右下角(x2,y2) |
BOXF(0,0,100,100,2); |
PIC(x,y,n); |
在(x,y)處畫第n幅圖 |
PIC(0,0,1); |
CIR(x,y,r,c); |
在(x,y)處用顏色c畫一個半徑r的園 |
CIR(100,100,50,1); |
SPG(n); |
顯示第n個批界面 |
SPG(1); |
DS12(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行12點陣字 |
DS12(0,0,'顯示字符串',1); |
DS16(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行16點陣字 |
DS16(0,0,'顯示字符串',1); |
DS24(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行24點陣字 |
DS24(0,0,'顯示字符串',1); |
DS32(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行32點陣字 |
DS32(0,0,'顯示字符串',1); |
DS48(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行48點陣字 |
DS48(0,0,'顯示字符串',1); |
DS64(x,y,'顯示內容字符串',c); |
在(x,y)處用顏色c顯示一行64點陣字 |
DS64(0,0,'顯示字符串',1); |
DRn |
設置屏幕顯示的方向;n為0~3,分別對應屏的4個方向,可以使用此調整橫豎屏顯示;另外此命令不清屏,因此可以顯示在橫屏下顯示部分豎顯漢字。 |
DR0; 橫屏顯示 DR1; 豎屏顯示 DR2; 橫屏倒立 DR3; 豎屏倒立 |
BS12(x1,y1,x2,lw,'顯示內容',c); |
在(x1,y1)處,顯示12點陣字符串,在x2處自動折行,行間距lw,顏色c; |
BS12(0,0,219,4,'顯示內容...很多字',c); |
BS16(x1,y1,x2,lw,'顯示內容',c); |
在(x1,y1)處,顯示16點陣字符串,在x2處自動折行,行間距lw,顏色c; |
BS16(0,0,219,4,'顯示內容...很多字',c); |
INF; |
傳回系統序列號等信息 |
INF; |
五、 定義顏色
顏色是由RGB構成的,系統支持的64K色其實是65536中顏色,使用16位二進制(2字節)組成,16位,分成:R紅色5位;G綠色6位;B藍色5位,就是俗稱RGB565模式;常規的計算機顏色描述是由3字節組成,每字節一色,比如紅色描述為:0xFF0000;綠色描述為0x00FF00;而藍色描述為0x0000FF
看不懂也沒關系,只需要進入GpuMaker,到“幫助與說明”找到:
點擊“顏色”就可以出現:
選擇一個顏色:點擊確定,系統就會顯示顏色的16進制值;點擊“轉換”
選中的顏色就可被計算出GPU的顏色值,如上例是13507;
您就可以使用SCC(1,13507);命令將1號顏色設置成剛才選擇的顏色;
六、 截取漢字點陣
系統支持12、16點陣的全GB2312的字庫,含符號區;因此12、16點陣無需使用軟件截取可以直接使用,但是24、32、48、64點陣需要使用GpuMaker進行點陣的截取轉換;
啟動GpuMaker 進入:“字體點陣”
可以看到4種字體分全角漢字和半角字符共8類,我們以32點陣漢字為例講述使用方法:
第一步:點擊點陣序號3后面的欄目,進入32點陣漢字的編輯狀態:
此時,字體編輯區可選;32點陣那一行后面的狀態變為“編輯中”;
第二步:選擇字模的屬性。
點擊“字體”按鈕選擇相應的字體,點擊“測試位置”,右邊的顯示區就可以顯示漢字的點陣:
在測試漢字選擇上,我們一般選擇“薄、餐”等復雜漢字,以免出界;
如果漢字較小,可以增大圖中“大小:”后面34的值,漢字就會放大,反之縮小;
如果漢字偏向一邊,可以使用 上下左右 按鈕進行調整,使漢字盡可能大的填滿方框;
將需要顯示的漢字放到“漢字及字符”輸入框中,無需查重,系統會自動查重,可以直接輸入需要顯示的每句話;
調整完成之后;點擊“設置”按鈕,將設置信息存好;
依次設置完別的字體;當設置半角字體的時候,需要注意:
1、半角可以通過“大小:”標簽后的2個參數設置橫寬比,這點不同於漢字,漢字只認后一個參數;測試的字符一般使用W等超寬字符;
2、選擇半角字體的時候,如果要顯示全部字母,建議找等寬字體,否則很難調好比例;
所需的字體可以百度下字體資源網站得到;
第三步:生產點陣;
點擊“生產所有抽取式漢字數據”,系統就會將所有漢字循環一邊,生成數據;
第四步:上傳數據到GPU串口液晶屏
回到串口命令界面,使用USB-TTL串口線接上GPU模塊,然后點擊“連接”,再點擊“上傳24~64點陣字庫”;如圖,系統將字庫上傳到GPU模塊,完成界面如上圖;
然后發送命令:
CLS(0);
DS32(10,10,'串口液晶屏',1);
發送完成之后界面:
此時液晶屏顯示:
七、 自定義圖形
GpuMaker目錄如下:
進入pic目錄,選擇縮略圖顯示:
這樣很容易看出圖形對應的序號;
添一張圖進去:
使用圖形處理軟件,將圖縮到220*176點以下,如果是別的格式的圖,可以用圖形處理軟件轉換下;
啟動 GpuMaker,進入:圖形處理頁面:
點擊“生產全部圖片的數據”按鈕,系統自動將pic目錄下的所有圖片處理好;
進入“串口命令”界面,連上串口,點擊“上傳圖形信息”按鈕,系統將圖片信息傳入GPU:
輸入命令:
CLS(0);
PIC(0,0,9);
液晶屏顯示:
八、 使用批界面
我們使用的單片機,大多數都不能提供充足的內存,因此對於復雜一些的UI有時就得考慮內存方面的問題,因此,能不能像DOS下批處理一樣,將一群復雜的UI界面語句組合起來,這就是批界面;
在這個界面,右邊就是批界面,系統允許有127個批界面,點擊右邊序號后面的格子,就可以修改描述以及批界面的語句,點擊存入列表,就可以將批界面語句存入數據庫;點擊“上傳頁面信息”就可以將批界面語句傳入GPU中;
使用的時候,可以使用串口傳入命令:SPG(批界面序號);即可顯示該界面,無需將復雜的UI語句放置在單片機內存,再用串口傳到GPU;
另外:序號為1的批界面我們稱之為HELLO界面,即GPU上電后立即顯示的第一界面,因此此界面需要設計為產品的名稱,公司的LOGO之類的,上電后,第一界面會顯示10秒中,在這10秒鍾內,主系統的單片機需要向GPU傳送第一條指令,否則GPU就會進入演示模式,挨個將批界面依次顯示,直到接收到串口指令;
技巧:
1、任何一個界面都分為背景元素和前台元素,背景元素是從界面創立起就一成不變的,因此非常適合放在批界面中;顯示界面的時候,先使用批界面顯示背景界面,再由串口指令刷新前台數據顯示;
2、批界面中可以不加CLS清屏指令,這樣可以使用多個批界面組合成一個更復雜的UI界面,這種情況下,某幾個批界面可以成為某個背景界面的前台元素;比如:鋰電池充電界面,左側是充電數據,右側是充電進度數據,我們可以使用另外一個批界面將右側換成電池的圖形,顯示電池容量;
3、第一個批頁面含有初始參數的設置,比如波特率的調整,詳見串口波特率調整一節;
九、 界面示例
以上界面使用:
CLS(15);
BOX(0,0,219,175,15);
BOX(1,1,218,174,0);
BOXF(2,2,217,17,3);
PL(2,18,218,18,0);
SBC(3);
DS12(60,4,'菜單演示界面',15);
SBC(15);
PIC(20,40,1);DS12(25,75,'電壓',0);
PIC(70,40,2);DS12(75,75,'電流',0);
PIC(120,40,3);DS12(125,75,'充電',0);
PIC(170,40,4);DS12(175,75,'輸入',0);
PIC(20,110,5);DS12(25,145,'輸出',0);
PIC(70,110,6);DS12(75,145,'測試',0);
PIC(120,110,7);DS12(125,145,'關閉',0);
PIC(170,110,8);DS12(175,145,'設置',0);
十、 接單片機
接法非常簡單,如圖接好即可;
TTL電平是0~5V的電平,因此TTL串口不存在5V和3.3V單片機電平轉換的問題,可以直接接入使用;但不可直接與RS232的串口接入,因為RS232的串口電平標准是12V以上,直接接入會燒掉GPU上的單片機;
在程序驅動來說,所有的單片機程序對於發送串口指令無在乎就三個要點:
1、初始化串口,由於目前GPU只支持統一的115200的串口波特率,因此初始化得初始化成此波特率,其余的參數均為默認;不熟悉的話,可以按照串口助手默認參數定;
2、將一個BYTE發送到串口發送端;
3、判斷發送標示等待發送結束,結束后繼續發送下一個字節;
因此,對於STM32來說可以使用下面的語句:
1 GpuSend("CLS(13);BOX(0,0,219,175,15);BOX(1,1,218,174,0);BOXF(2,2,217,17,3);PL(2,18,218,18,0);\r\n"); 2 3 void GpuSend(char * buf1) 4 { u8 i=0; 5 while (1) 6 { if (buf1[i]!=0) 7 { USART_SendData(USART1, buf1[i]); //發送一個byte到串口 8 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}; //等待發送結束 9 i++; 10 } 11 else return; 12 }
其他單片機請參考單片機手冊自行書寫相應語句;一般來說單片機對串口編程的例子是很多的,可以baidu下或直接參考開發板例程;
【C語言參考】:不少用戶都是從匯編語言轉到C語言的,對於C語言的字符串處理完全沒有概念,有不少用戶都問:AD獲取的電壓值如何用串口屏顯示的問題,在這里統一回答下:
要解決這個問題,要使用C語言的sprintf這個語句,具體語句的詳細內容可以自行百度下,這里僅提供簡單使用方法:
- sprintf 是需要 stdio.h 來聲明的,因此需要在程序開頭使用:
#include "stdio.h"
此函數大約需要3K左右的空間;
- 聲明一個存儲空間,用於存放需要顯示的字符串
char buf[100]; //要求命令串長度不超100字符
- 假設由AD取回並轉換成電壓的浮點數 vol
float vol; //vol 變量是浮點數
vol=1.253; //vol為1.253V,可由AD采樣在此步賦值
- 產生送給gpu的命令字符串
sprintf(buf,"DS12(0,0,'電壓:%.3fV',1);\r\n",vol);
- 發送給gpu
GpuSend(buf);
【重要說明】:
1、由於GPU系統允許接收命令組,因此串口傳入的名利必須以0x0d,0x0a結束(就是常說的回車換行,字符串中的\r\n),不發送這個,系統會一直等待下去,表現為發送命令不起作用!
2、如果接不通,建議RX TX反一下,有些下載線是指接入單片機端的標志,不是自身標示;
3、GPU執行指令需要時間,因此快速發送指令時,需要按需求區分兩種情況處理:
情況一:重要界面確保顯示;需要延時足夠的時間,或延時到串口收到“OK”字符為止;
情況二:數據刷新,寧丟勿慢;常用在UI界面上數值調整,比如有+ - 鍵,按住不放,數值不停的增加或減少,此時直接不停的發就可以,漏點無所謂,但最后一次傳的一定可以正確顯示。
十一、 升級程序
第一步:按本文第一節中將GPU模塊與計算機相連;
第二步:認識GPU模塊上的和刷機相關的接口:
第三步:下載刷機軟件:
您可以去官網下載V2.6以上的版本,也可以去下我准備的綠色版本:
http://pan.baidu.com/share/link?shareid=1903893858&uk=3204894695
第四步:查看序列號:
在GPUMake中,使用INF命令獲取序列號:
1 send:INF; 2 SN:U53AC89A3 FN:EF14 RC:320X240
U53AC89A3 即是序列號;
備注:早期的版本可能不支持INF命令,可以在接好GPUMake的,短路下GPU上的RESET,GPU即傳回:
1 Usart-GPU 2.2B Ver 0.9b B0617 2 [FFFFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFC0] 3 53AC89A3
其中 53AC89A3 前加U 即U53AC89A3就是序列號;
第五步:下載新ROM;
去網站:http://stm32.sinaapp.com/gpu22b/,有歷史的各個版本可以下載,輸入序列號,即可下載bin文件;
第六步:拔下USB刷機線(GPUMaker的串口程序可能與刷機軟件的自動波特率檢測沖突,需要拔下設備,再接入USB刷機線時會初始化串口);跳線帽短路BOOT后,將USB刷機線重新接入電腦;
第七步:運行:
STMicroelectronics flash loader.exe
出現:
點擊next:
如果不出現此界面,請用鑷子短路下RESET,然后再試一次;如果還不行,請檢查一下BOOT跳線是否接好;
然后出現:
繼續點next:
此界面,請按圖中設置,選擇Download,且文件選擇剛下載的ROM文件(BIN后綴的文件),點擊next;進度條走2遍,不顯示紅色進度條的話,表示刷機成功。
第八步:去掉BOOT跳線,重新上電即可啟動新版本程序;
十二、 外形尺寸:
1、2.2寸外形尺寸:
定位孔是為ø3mm的螺絲設計,PCB整體長70mm,寬45mm;
孔間距:橫向:63.3mm,垂直:38.2mm;
液晶屏外框:56X42mm
2、2.8吋外形尺寸
定位孔是為ø3mm的螺絲設計,PCB整體長85mm,寬45mm;
孔間距:橫向:78.5mm,垂直:38.5mm;
液晶屏外框:72X42.5mm(約,液晶屏為窄邊框設計)
十三、 量產方案
Usart GPU模塊使用的W25Q16存儲器數據和MCU芯片無關,因此,當調試好一個樣品后,少量的可以通過GPUMaker寫入,但量產這個效率非常低;建議直接使用在線編程器在線燒寫或從板子上焊下25Q16,直接使用片對片拷貝的方式用編程器燒寫;大多數編程器全編程(檫除、寫入、校驗)可以在20秒內完成;
如果您將串口屏應用到產品上,請先使用標准屏調試,形成產品后,獲取存儲器數據可以采用OEM訂單的方式獲取批量產品,甚至可將電路嵌入您產品的PCB中;
十四、 QA
1、亂碼問題:
程序里書寫的漢字到串口屏中,顯示亂碼,但是英文字母正常;
原因:你的程序編輯環境是UTF8的,因此寫入程序的漢字時UTF8字符集的,需要找到程序編輯器設置為GB2312或GBK格式就正常了;或者用外部的編輯器存為普通格式或GBK格式即可;
2、連接沒有反應
檢測第一串口是不是RX TX接反了;第二檢測送的語句是否已0d 0a結尾;
3、上傳的數據不正常
表現為:上傳的大字體點陣顯示不正常或者圖片不正常,請上傳的時候關注輸出:
如果是如圖輸出:中間出現PG:xxxx 就表示正常,如果出現一堆OK,沒有PG:xxx,表示傳輸數據中出現丟包導致數據校驗不成功,沒有寫入成功;
SPI Flash是沒256字節一頁的,我們每次寫1K,也就是4頁,連續寫時,PG是每次增加4;
遇見此問題的童鞋可以換一根TTL線試試,或者換台電腦;TTL線電平較低,不能傳輸很遠距離,且容易受到干擾,一般接線不超過20cm最好;
第二部分:高級應用
說明:高級應用屬於高手使用的部分,這部分會用到比較多的技巧和基本知識,因此我們無法提供更多客服,請自行參考使用;
一、 改變產品的波特率
很多51,52的用戶提出,89C51,89C52之類大家熟悉的單片機由於設計過於久遠,不能提供115200波特率,最高只能提供9600的波特率,因此,不能使用串口液晶屏;因此對於需要使用9600波特率的用戶,需要按下列步驟使用:
- 將串口屏刷到V1.0版本,刷機方法參見第一部分 第11節:升級程序;
- 下載新版本的GPUmaker,新版本增加了波特率選擇;
- 在1號批界面頂頭加U3;(本例中將波特率設置成19200) 三個字母表示設置波特率;
波特率支持:2400,4800,9600,19200,38400,57600,115200,256000
對應關系:
U0; //2400
U1; //4800
U2; //9600
U3; //19200
U4; //38400
U5; //57600
U6; //115200
U7; //256000
U3; 請務必第一行頂頭書寫;
請不要忘記點擊:,然后點擊
將設置好的上傳到GPU;
- 重新給串口屏GPU上電,此時開機界面的序列號后面顯示:B:19200 表示當前波特率為19200;此時用單片機的19200的串口就可以正常使用GPU串口液晶屏了;
- 重新設置了GPU波特率了,相應的GPUMaker程序也必須使用新的波特率才能正常連通;
- 如果波特率設置的較高,超出了電腦TTL串口的波特率限制,無法使用GPUMaker連通以降低波特率,請使用刷機軟件刷回0.9版,0.9版本固定波特率115200;
- 9600下,gpuMaker傳輸圖形等大量數據需要花費更長的時間,請做好心里准備;
【重點強調:】U3;不是命令,因為你不能在已經按115200波特率連接下的串口用串口命令修改波特率,U3;只是一個存儲標志,GPU是在開機的時候檢測這個標志,然后按標志對應的波特率初始化串口,因此需要上傳批頁面才能起效;
二、 關於asc8 點陣問題
當您升級為V1.0后,對於220X176的版本,會發現在DS16輸出英文字符的時候會顯示空白方框,此現象為asc8X16點陣缺失導致,解決方法是:
- 將新版本的gpumake.exe 覆蓋原有目錄下的gpumaker.exe;
- 將新版本work目錄下的asc文件拷入源gpumake/work/ 目錄下
- 點擊:
- 點擊:
將asc8X16點陣數據上傳
- 重啟GPU串口屏
三、 關於Arduino如何使用串口屏資料
END!
歡迎大家一起交流 ,分享程序員勵志故事。 幸福的程序員 QQ群: