實驗程序stemwin開發(fā)例程普中stm32f1xx_第1頁
實驗程序stemwin開發(fā)例程普中stm32f1xx_第2頁
實驗程序stemwin開發(fā)例程普中stm32f1xx_第3頁
實驗程序stemwin開發(fā)例程普中stm32f1xx_第4頁
實驗程序stemwin開發(fā)例程普中stm32f1xx_第5頁
已閱讀5頁,還剩398頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

普中STM32F1xxSTemWin 前本開發(fā)指南講解如何將STemWin移植到普中STM32F1xx開發(fā)板,以及如何使用STemWin中的各個控件,讓大家能夠設(shè)計出漂亮的GUI界面。本套主要以STemWinGUI庫為例子進(jìn)行講解。中的STemWin大家可以理解為EMWIN或者ucGUI,它們都是類似的。為了兼容我TFTLCDlcdlcd_driver.h了。比如說你的彩屏背ILI9341lcd_driver.h的宏打開//#define#defineTFTLCD_ILI9341//#define//#define在man函第1章STemWin介 emWin簡 STemWin和emWin、ucGUI的區(qū)別與聯(lián) emWin的應(yīng)用場 第2章STemWin機(jī)移 2.1STemWin源 STemWin文件介 STemWin應(yīng)用軟件架 添加STemWin文件到工 修改工程文 移植觸摸 添加STemWinDemo測 實驗現(xiàn) 第3章Windows上仿真 3.1emWin仿真文 打開emWin仿真文 開始emWin仿 emWin仿真文件介 Application文 Config文 GUI文 Sample文 顯示o 第4章STemWinUCOSIII移 添加STemWin文件到工 修改工程文 添加STemWinDemo測 實驗現(xiàn) 第5章文本顯 創(chuàng)建文本顯示工 文本顯示代 如何查閱API函 實驗現(xiàn) 第6章數(shù)值顯 創(chuàng)建數(shù)值顯示工 數(shù)值顯示代 STemWin_NumDec_Test()函 STemWin_NumFloat_Test()函 STemWin_BinHex_Test()函 實驗現(xiàn) 第7章2D圖形顯 創(chuàng)建2D圖形顯示工 2D圖形顯示代 STemWin_2DDraw_Test()函 STemWin_Alpha_Test()函 STemWin_Line_Test()函 STemWin_2DGraph_Test()函 實驗現(xiàn) 第8章位圖顯 位圖轉(zhuǎn)換器介紹和使 位圖轉(zhuǎn)換器介 位圖轉(zhuǎn)換器使 創(chuàng)建位圖顯示工 位圖顯示代 實驗現(xiàn) 第9章顏色顯 emWin預(yù)定義的顏色和調(diào)色板模 創(chuàng)建顏色顯示工 顏色顯示代 實驗現(xiàn) 第10章設(shè) 10.1設(shè)備介 10.1.1設(shè)備的使 內(nèi)存要 性 10.2設(shè)備應(yīng) 10.2.1設(shè)備API函 創(chuàng)建設(shè)備工 10.2.3設(shè)備代 實驗現(xiàn) 分段設(shè) 分段介 創(chuàng)建分段工 分段代 實驗現(xiàn) 自動設(shè)備對 自動設(shè)備對象介 創(chuàng)建自動設(shè)備對象工 自動設(shè)備對象代 實驗現(xiàn) 第11章窗口管理 必備窗口知 窗口重 創(chuàng)建窗口重繪工 窗口重繪代 實驗現(xiàn) 窗口函數(shù)演 創(chuàng)建窗口函數(shù)演示工 窗口函數(shù)演示代 實驗現(xiàn) 窗口裁 創(chuàng)建窗口裁剪工 窗口裁剪代 實驗現(xiàn) 第12章GUIBuilder的使 GUIBuilder介 創(chuàng)建GUIBuilder工 修改GUIBuilder生成的C文 實驗現(xiàn) 第13章 13.1框的基本原 創(chuàng)建 資源 框過程函 初始化 定義框行 框 第14章窗口對象(小工具 基礎(chǔ)知 可用小工 了解重繪機(jī) 如何使用小工 通用小工具 用于控件的WM函 14.2.3用戶繪制小工 第15章BUTTON控 BUTTON控件介 通知代 鍵盤反 BUTTON BUTTON控件實 創(chuàng)建BUTTON控件工 BUTTON控件代 實驗現(xiàn) BUTTON控件顯示位圖實 制作位圖C文 設(shè)計GUI界 創(chuàng)建BUTTON控件顯示位圖工 BUTTON控件顯示位圖代 實驗現(xiàn) 第16章CHECKBOX控 通知代 鍵盤反 CHECKBOX CHECKBOX控件實 程序代 實驗現(xiàn) 第17章DROPDOWN控 DROPDOWN控件介 通知代 鍵盤反 DROPDOWN DROPDOWN控件實 程序代 實驗現(xiàn) 第18章EDIT控 EDIT控件介 通知代 鍵盤反 EDIT EDIT控件實 程序代 實驗現(xiàn) 第19章FRAMEWIN控 FRAMEWIN控件介 鍵盤反 FRAMEWIN FRAMEWIN控件實 程序代 實驗現(xiàn) 第20章GRAPH控 GRAPH控件介 GRAPH控件結(jié) 創(chuàng)建和刪除GRAPH控 GRAPH控件繪制過 支持的曲線類 GRAPH鍵盤反 GRAPH GRAPH控件實 GRAPHXY控件實 GRAPHYT控件實 第21章HEADER控 HEADER控件介 HEADER通知代 HEADER鍵盤反 HEADER HEADER控件實 程序代 實驗現(xiàn) 第22章ICONVIEW控 ICONVIEW控件介 ICONVIEW通知代 ICONVIEW鍵盤反 ICONVIEW ICONVIEW控件實 程序代 實驗現(xiàn) 第23章LISTBOX控 LISTBOX控件介 LISTBOX通知代 LISTBOX鍵盤反 LISTBOX LISTBOX控件實 程序代 實驗現(xiàn) 第24章LISTVIEW控 LISTVIEW控件介 LISTVIEW通知代 LISTVIEW鍵盤反 LISTVIEW LISTVIEW控件實 程序代 實驗現(xiàn) 第25章LISTWHEEL控 LISTWHEEL控件介 LISTWHEEL通知代 LISTWHEEL鍵盤反 LISTWHEEL控件實 程序代 實驗現(xiàn) 第26 控 26.1控件介 菜單消 數(shù)據(jù)結(jié) 鍵盤反 控件實 程序代 實驗現(xiàn) 第27章MESSAGEBOX控 MESSAGEBOX控件介 MESSAGEBOX通知代 MESSAGEBOX鍵盤反 MESSAGEBOX MESSAGEBOX控件實 程序代 實驗現(xiàn) 第28章MULTIEDIT控 MULTIEDIT控件介 MULTIEDIT通知代 MULTIEDIT鍵盤反 MULTIEDIT MULTIEDIT控件實 程序代 實驗現(xiàn) 第29章MULTIPAGE控 MULTIPAGE控件介 MULTIPAGE通知代 MULTIPAGE鍵盤反 MULTIPAGE MULTIPAGE控件實 程序代 實驗現(xiàn) 第30章PROGBAR控 PROGBAR控件介 PROGBAR通知代 PROGBAR鍵盤反 PROGBAR PROGBAR控件實 程序代 實驗現(xiàn) 第31章RADIO控 RADIO控件介 RADIO通知代 RADIO鍵盤反 RADIO RADIO控件實 程序代 實驗現(xiàn) 第32章SCROLLBAR控 SCROLLBAR控件介 SCROLLBAR通知代 SCROLLBAR鍵盤反 SCROLLBAR SCROLLBAR控件實 程序代 實驗現(xiàn) 第33章SLIDER控 SLIDER控件介 SLIDER通知代 SLIDER鍵盤反 SLIDER SLIDER控件實 程序代 實驗現(xiàn) 第34章TREEVIEW控 TREEVIEW控件介 TREEVIEW控件術(shù)語說 TREEVIEW通知代 TREEVIEW鍵盤反 TREEVIEW TREEVIEW控件實 程序代 實驗現(xiàn) 第35章WINDOW控 WINDOW控件介 WINDOW通知代 WINDOW鍵盤反 WINDOW WINDOW控件實 程序代 實驗現(xiàn) 第36章字 字體簡 字體類 字體格 C文件格 系立字體(SIF)格 外部位圖字體(XBF)格 TrueType字體(TTF)格 自定義字 選擇字 字體 第37章XBF格式字體顯 XBF格式字庫制 XBF字庫 XBF格式字體顯示實 創(chuàng)建XBF字 實驗代 啟用UTF-8編 實驗現(xiàn) 第38章TTF格式字體顯 TTF字體介 TTF字體 TTF格式字體顯示實 type庫移 type內(nèi)存管 準(zhǔn)備TTF字 TTF格式顯示代 實驗現(xiàn) 第39章外部器漢字顯 漢字顯示介 字庫制 制作漢字字 制作英文字符字 外部器漢字顯示實 實驗代 實驗現(xiàn) 第40章BMP顯 BMP支持格 BMP文件 BMP顯示實 實驗代 實驗現(xiàn) 第41章JPEG顯 41.1支持的JPEG壓縮方 41.2器使用要 JPEG JPEG顯示實 程序代 實驗現(xiàn) 第42章GIF顯 42.1顯示GIF文 42.2器使 GIF GIF顯示實 程序代 實驗現(xiàn) 第43章PNG顯 43.1PNG庫文件移 43.2器使 PNG PNG顯示實 程序代 實驗現(xiàn) 1STemWin介emWin簡emWnemedwinSegeremWnLCDLCDSTemWinemWin、ucGUI的區(qū)別與聯(lián)我們知道emWin是Segger公司開發(fā)設(shè)計的,該公司向ST公司了emWin的 從而ST公司也得到了定制版的emWin,然后改了名字叫STemWin。當(dāng)用戶在STM32上使用emWin軟件庫時,是不需要向emWin或ST公司的,而且STemWin針對ST的還做了優(yōu)化,我們中使用的就是STemWin,說白了其實和emWin是一樣的。在當(dāng)前大部分人不知道,其實uC/GUI是Segger公司為Micrium公司(也就是制作uC/OS的公司)定制的圖形軟件庫,說是定制,但其實它跟emWin的區(qū)別并不大,以致于區(qū)分不出它們在功能上究竟差別在何處。比較確定的是舊版本uC/GUI在網(wǎng)上還可以找到開源的代碼,而新版本命名為uC-GUIV5.26,STemWin版本命名為STemWinLibraryV5.26,emWin版本則為emWinV5.26,所以,要比較這三個軟件庫功能上的區(qū)別,只需要看它們的版本號 由于我們使用的是STM32開發(fā)平臺,自然我們選擇的是STemWin。因為如果我們選擇的是emWin或uC/GUI使用到STM32產(chǎn)品上,同樣是需要向Segger或Micrium公司的,而使用STemWin就不存在這個問題。在STemWin里有一個檢測機(jī)制確定代碼所運行的平講解中,無特殊說明,不再區(qū)分emWin和STemWin。emWin的應(yīng)用a.繪制2-D圖形:繪制圓、橢圓、多邊形、弧線、線圖和餅形圖等;b.顯示位圖文件:顯示BMP、JPEG、GIF及PNG格式的文件;顯示文字:支持顯示多國語言的文字,如處理用戶輸入:如鍵盤、鼠標(biāo)及觸摸屏的人機(jī)交互輸入處理emWinROMRAM耗相對來說并不高。據(jù)統(tǒng)計,它們提供的一個基本例程(移植了emWin函數(shù)庫,顯示“oWorld”),消耗ROM60KB,RAM7KB,這在當(dāng)前大多數(shù)嵌入式平臺都是可以接受的。又因為emWin可以在多任務(wù)系統(tǒng)及機(jī)的平臺上運行,尤其適合嵌入式亂七八糟的開發(fā)要emWinemWin的效果,如圖1-1。1-1emWin第2章STemWin機(jī)移本章向大家介紹如何將STemWin移植到普中STM32開發(fā)板上,并分析STemWin的2.1STemWin源實驗現(xiàn)2.1STemWin源STemWin文件介片是STM32F103系列的,所以需要STM32F103對應(yīng)的Cube,STM32F1系列使用到的Cube為STM32CubeF1,當(dāng)前的STM32CubeF1版本為1.4.0,地址:_searchtype=partnumber,界面如圖2-1-1所示。如果各位要自己的話還需要注冊,所以大家沒有必要花這個時間放在上。我們已經(jīng)將文件好存放在“STemWin參考2-1-1我們使用的STM32CubeF1版本是1.0.0的,雖然不是的STM32CubeF1版本,但1.0.0版本的穩(wěn)定性得到了滿足,而且功能全部都具解壓后STM32Cube_FW_F1_V1.0.0STiemWinSTemWin源碼,STemWin源碼路徑為:STM32Cube_FW_F1_V1.0.0->Middlewares->ST->STemWin,這個就是STemWin源碼,如圖2-1-2所示,注意圖中的路徑。2-1-2STemWin2-1-3STemWin現(xiàn)對每個文件夾進(jìn)行簡單介ConfigGUIConf.cSTemWin間分配,GUIConf.h文件用于裁剪STemWin的功能。其余的GUIDRV_Temte.c、LCDConf_FlexColor_Temte.c、LCDConf_Lin_Temte.c是STemWin應(yīng)用在不同液晶時使用的不同驅(qū)動模板。ationSTemWin526.pdfSTemWinCPUGCC、MDKIARSTemWin庫,在使用的時候我們要根據(jù)自己的平臺選擇合適的庫文件。由于我們采用的M3并且KEILMDK作為開發(fā)軟件,所以選擇對LIBOS文件夾:它包含了GUI_X.c及GUI_X_RTOS.c文件,分別是對應(yīng)機(jī)平臺GUISTemWinSimulation文件夾:它包含了一些電腦仿真所需的文件SoftwareSTemWinBmpCvtST.exe、emVNC.exe、GUIBuilder.exe、FontCvtST.exe和JPEG2Movie.exe這幾個軟件工具。BmpCvtST.exe用于把數(shù)據(jù)轉(zhuǎn)換成C文件,GUIBuilder.exe是一個使用圖形界面方式開發(fā)STemWin應(yīng)用的工具(可以開發(fā)出類似界面),而FontCvtST.exe則用于字體文件轉(zhuǎn)換。Release_Notes.html文件:是關(guān)于STemWin庫不同版本的簡要更新說明文檔STemWinSTemWin2-1-42-1-4STemWin該架構(gòu)看起來并不復(fù)雜,從最底層看起 首先是硬件層,硬件層就是指最基本向應(yīng)用層則提供了各種便于用戶制作GUI應(yīng)用的接口。STeminSTeminBSTemi。STemWin文件到工圖2-2- 們也提供給了大家,在“實驗0:移植STemWin基礎(chǔ)工程\STemWin機(jī)移植工圖2-2- pritfSTM2ST32F1制我們這個文件夾即可使用,只不過我們里面的串口使用的是USAT1,如果你的串口調(diào)試3:Malloc文件夾,用于存放內(nèi)存管理文件,可以管理STM32內(nèi)部和外部RAM名函數(shù)注意要修改,比如在STemWinLCD操作,所以我們底層彩屏驅(qū)動不要出現(xiàn)LCD單程中件夾,命名為EMWIN,將我們上面好的STemWin源碼拷貝到里面,把STemWin源碼文件夾根據(jù)前面軟件架構(gòu)介紹以及源碼文件功能介紹,所需的STemWin加入到工程中,并且添加對應(yīng)的頭文件2-2-2示:2-2-2STemWin根據(jù)我們在圖2-2-2中添加的幾個文件,我們這里做一個簡單的功能說明。GUI_X_Touch_og.c文件:這個文件主要作用是對STemWin觸摸功能的驅(qū)動,在我們后面移植觸摸功能的時候就會在這個.c文件內(nèi)修改。(Config文件下)GUIConf.c文件:這個文件主要作用是對STemWin的一些初始化配置,比如對STemWin內(nèi)存的分配。在這個文件內(nèi)還包含了GUIConf.h頭文件,這個頭文件的用處可大了,主要對STemWin的配置進(jìn)行設(shè)置,比如是否使用器,是否使用觸摸功能,是否支持操作系統(tǒng)等等都在這個頭文件內(nèi)進(jìn)行配置。(Config文件下)STemWin,重點也就在這個文件,需要將彩屏的讀點和畫點以及劃線等底層函數(shù)放入到它對應(yīng)的函數(shù)內(nèi)。(Config文件下)LCDConf_FlexColor_Temte.c文件:這個文件主要用于對STemWin初始化配置,比如創(chuàng)建顯示驅(qū)動器件,設(shè)置顏色轉(zhuǎn)換程序和顯示尺寸等。(Config文件下)過EMWIN中文參考手冊進(jìn)行了解各個API使用。我們打開STemWin源碼STemWin下的Lib文件,如圖2-2-3所示。STemWin為不OSOSLib所以只保留適合我們所使用開發(fā)環(huán)境的帶OS和不帶OS的兩種庫文件。因為我使用的是KEIL,所以我只保留STemWin526_CM3_Keil.lib和STemWin526_CM3_OS_Keil.lib這兩個庫,其他的刪除掉,如果使用的是其他內(nèi)核的MCU和開發(fā)環(huán)境的話請選擇相應(yīng)的庫文件,這一章我們講解的是STemWin機(jī)的移植,因此在工程中添加STemWin526_CM3_Keil.libSTemWin7個文件,這里為了減小工程所占內(nèi)存的大小,將ation、Software、Simulation2-2-3STemWinLIB工程添加完成后編譯LCDConf.h件,我們新建一LCDConf.h修改工程GUIConf.hGUIConf.h了默認(rèn)字體,GUIConf.h文件代碼如下。#ifndefGUICONF_H#define#define //#define (0)//#define (0)//#define #define#define#define#defineGUI_SUPPORT_DEVICES GUIConf.c存管理文件,內(nèi)存管理文件中可以對開發(fā)板外部1MSRAM和本身64K的內(nèi)存進(jìn)行管理,所以我們可以利1MSRAMSTemWin內(nèi)存分配,為了能夠兼容其SRAM的板子,我們在程序中定義USE_EXRAM,用來切換是使SRAMRAM。GUIConf.c文件代碼如下:#include"GUIh"#include"sram.h"#defineUSE_EXRAM1//使用外//設(shè)置EMWIN#defineGUI_NUMBYTES#defineGUI_BLOCKSIZE0X80//void{if(USE_EXRAM)//使用外部{=//GUI_NUMBYTES字節(jié)的內(nèi)GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);//設(shè)置快的平均尺寸,該區(qū)越大,可用的);//}else//{U32*aMemorymymalloc(SRAMIN,GUI_NUMBYTES);從內(nèi)部RAMGUI_NUMBYTES字節(jié)的內(nèi)GUI_ALLOC_AssignMemory((U32*)aMemory,GUI_NUMBYTES);//為管理系統(tǒng)分配一個GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);//設(shè)置快的平均尺寸,該區(qū)越大,可用的);//}}修改GUIDRV_Temte.c文這個文件是STemWin的重中之重,所以必須要認(rèn)真掌握這個文件的移植方法。在這個文件中我們要完成STemWin的打點、讀點、填充等函數(shù)的實現(xiàn),最后還優(yōu)化了16BPPSTemWin在這個文件中我們需要修改四個函數(shù):_SetPixelIndex(),_FillRect()和_DrawBitLine16BPP(),修改后的這四個函數(shù)如下staticvoid_SetPixelIndex(GUI_DEVICE*pDevice,intx,inty,int }*staticunsignedint_GetPixelIndex(GUI_DEVICE*pDevice,intx,int{unsignedint#if(LCD_MIRROR_X==1)||(LCD_MIRROR_Y==1)||(LCD_SWAP_XY==intxPhys,xPhys=LOG2PHYS_X(x,y);yPhys=LOG2PHYS_Y(x,#definexPhysx#defineyPhys{PixelIndex=LCD_ReadPoint(x,y);//這個是彩屏底層的讀點}#if(LCD_MIRROR_X==0)&&(LCD_MIRROR_Y==0)&&(LCD_SWAP_XY==#undefreturn}*staticvoid_FillRect(GUI_DEVICE*pDevice,intx0,inty0,intx1,inty1)LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//這個是彩屏底層的}*DrawBitmap16BPP,notDrawingof16bpphighcolorOnlyrequiredfor16bppcolordepthoftarget.Shouldberemovedstaticvoid_DrawBitLine16BPP(GUI_DEVICE*pDevice,intx,inty,U16constGUI_UNI_PTR*p,intxsize){LCD_PIXELINDEXfor(;xsize>0;xsize--,x++,{pixel=);// }}修改LCDConf_FlexColor_Temte.c文這個文件有LcdWriteReg()、LcdWriteData()、LcdWriteDataMultiple()、LcdReadDataMultiple()、LCD_X_Config()和LCD_X_DisyDriver()這6個函數(shù)。因為STemWin自帶有一些LCDIC的驅(qū)動程序,使用前4個函數(shù)可以直接使用STemWinLCDLCDICSTemWin不支持的,所以這里我們沒用這4個函數(shù)而是使用我們自己的LCD初始化函數(shù)封裝起來傳遞給STemWin,在這里我們把這4個函數(shù)刪除掉,只留下LCD_X_Config()和LCD_X_DisyDriver()這兩個函數(shù),LCD_X_Config()函數(shù)代碼如下所示:voidLCD_X_Config(void){GUI_DEVICE_CreateAndLink(&GUIDRV_Temte_API,GUICC_M565,0,0);//創(chuàng)LCD_SetSizeEx(0,lcddev.width,lcddev.height);LCD_SetVSizeEx(0,lcddev.width,}上面代碼中的GUI_DEVICE_CreateAndLink()函數(shù)用來創(chuàng)建顯示驅(qū)動器件,設(shè)置用于存取顯示器的顏色轉(zhuǎn)換程序,并將驅(qū)動器件連接到給定層的器件列表。函數(shù)的第一個參數(shù)是一個指向結(jié)構(gòu)體的指針個結(jié)構(gòu)體就是顯示器的驅(qū)動STemWin帶一IC的驅(qū)動,因此這里可以選擇相應(yīng)的驅(qū)動程序,具體使用請查閱emWin手冊的“顯示驅(qū)動”章節(jié)。第二個參數(shù)是指定所使用的調(diào)STemWin有很多調(diào)色板可以使用,具體使用請查閱emWin使用的是GUICC_M565的調(diào)色板,也就RGB565,最后我們根據(jù)LCD尺寸來設(shè)置屏幕的大小。Lcddev.widthlcddev.heightTFTX度Y度。編寫移植到了這些文件,我們已經(jīng)將STemWin的移植基本完成,可以編寫測試代碼來測試#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"touchh"#include"timerh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"GUIh"int{ //LCD初始化 //初始化SRAM //1KHZ定時器1ms //10ms中斷 }

GUI_SetBkColor(GUI_BLUE);//設(shè)置背景顏色GUI_SetColor(GUI_RED);//設(shè)置顏色GUI_Clear();//清屏 STemWinCRCSTemWin很簡單,是在LCD上的(0,0)坐標(biāo)處顯示”oWord!”,如果要讓彩屏橫屏顯示,可以在LCD初始化函數(shù)TFTLCD_Init()中使用LCD_Disy_Dir()函數(shù)來改變橫豎屏,默認(rèn)情況下傳遞的參數(shù)是0,即我們使用的是豎屏,如果將參數(shù)改為1,將變成橫屏顯示。豎屏顯示效果如圖2-3-1所示。從顯示結(jié)果上來看,說明我們移植STemWin成功。接下來我們還需要移植觸摸功能移植觸摸 在我們機(jī)基礎(chǔ)工程內(nèi)已經(jīng)包含了我們開發(fā)板所需的觸摸底層文件,我們只需要將touch及flash還有spi文件夾進(jìn)來就可以,如圖2-4-1所示。其實也不用,我們文件路徑包含進(jìn)來,如2-4-2示。添加STemWin觸摸GUI_X_Touch_og.c文此文件進(jìn)行了修改,將我TFT的觸摸驅(qū)動移植STemWin觸摸接口#include"GUIh"#include"touchh"#include"usart.h"void{//}void{}int{return //X}int{returnTOUCH_ReadData(0X90);//Y}GUI_X_Touch_og.c文件有四個函數(shù):GUI_TOUCH_X_ActivateX(),GUI_TOUCH_X_ActivateYGUI_TOUCH_X_MeasureX(GUI_TOUCH_X_MeasureY()STemWinGUI_TOUCH_X_MeasureX()GUI_TOUCH_X_MeasureYXYAD們使用的觸摸屏是電阻屏,所以直接將我們底層觸摸X和Y的AD值函數(shù)放進(jìn)來即可。修改GUIConf.h和LCDConf_FlexColor_Temte.c文GUIConf.hGUI_SUPPORT_TOUCH1STemWinLCDConf_FlexColor_Temte.c文件的開始添加如下代碼#defineTOUCH_AD_TOP #defineTOUCH_AD_BOTTOM#defineTOUCH_AD_RIGHT#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"touchh"#include"timerh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"GUIh"void{intxPhys;intyPhys;{GUI_TOUCH_GetState(&TouchState);//GetthetouchpositioninpixelxPhys=GUI_TOUCH_GetxPhys();//GettheA/DmesurementresultinxyPhys=GUI_TOUCH_GetyPhys();//GettheA/Dmesurementresultiny oginput:\n",0,GUI_DispDec(xPhys,4);GUI_DispString(",y:");GUI_DispDec(yPhys,4);GUI_DispDec(TouchStatex,4);GUI_DispString(",y:");}}int{ //LCD初始化 //初始化SRAM //1KHZ定時器1ms //10ms中斷 }

ADLCD如圖2-4-3所示,默認(rèn)屏幕為豎屏,其中藍(lán)色為原始的AD值,紅色的為屏幕坐標(biāo)值。最后一步我們還要修改LCDConf_FlexColor_Temte.c文件中的LCD_X_Config()voidLCD_X_Config(void){GUI_DEVICE_CreateAndLink(&GUIDRV_Temte_API,GUICC_M565,0,0);//創(chuàng)建顯示驅(qū)動件LCD_SetSizeEx(0,lcddev.width,lcddevheight);if(lcddev.dir==0)//豎屏{{}}函數(shù)GU_TOCH_alirat()的參數(shù)就可以按照如下程序配置,注意第4,5個參數(shù)的設(shè)置,此設(shè)置值就是我們前面定義觸摸上下左右的一個宏。在第(3)步驟內(nèi)。到這里觸摸把STeWin些Demo(的Deo大。添加STemWinDemo測,那么我們可以通過STM32定時器功能來給Demo提供系統(tǒng)時鐘。Demo中還需要定時調(diào)提供系統(tǒng)時鐘,使用STM32的定時器6來周期調(diào)用GUI_TOUCH_Exec()函數(shù)處理觸摸屏。STemWin中延時最小單位是1ms,所以我們需要設(shè)定定時器3定時周期為1ms,觸摸通,#include"GUIh"#include IOint32_tvoidTIM3_Int_Init(u16arr,u16{NVIC_InitTypeDefNVIC_InitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//設(shè)置時鐘分割 //使能}void{{}}//這里時鐘選擇為APB12APB1//psc:時鐘預(yù)voidTIM6_Int_Init(u16arr,u16{TIM_TimeBaseInitTypeDefNVIC_InitTypeDefNVIC_InitStructure;TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//設(shè)置分頻值,10khz的計數(shù)頻率TIM_TimeBaseInitStructure.TIM_Period=arr;//自動重裝載值計數(shù)到5000500msTIM_TimeBaseInitStructure.TIM_ClockDivision=0時鐘分割:TDS=Tck_TimTIM_ITConfig(TIM6,TIM_IT_Update|TIM_IT_Trigger,ENABLE);//使能TIM6的更新NVIC_InitStructure.NVIC_IRQChannel=TIM6_IRQn;//TIM6中斷NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//從優(yōu)先級3級NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能通道TIM_Cmd(TIM6,ENABLE);//定時器6使}void{{});//}STeWin_imeS這個變量進(jìn)行累加,所以需要定義為一個全局變量。這個變量也是STeW#inlude"GI.h系統(tǒng)時鐘移植好后,接下來就是將的Demo文件到我們的工程文件中,并且加GUIEMOcbsph,加bs.h圖25-1所。2-5-1Demo添加完Demo文件后,我們就開始編寫主函數(shù)的程序,在主函數(shù)中先完成相應(yīng)外設(shè)的初始化,比TFT屏1MSRAM內(nèi)RAM初始化。接著打開CRC鐘,這一步千萬不要漏掉,否則STemWin不會正常運行,然后設(shè)置設(shè)備標(biāo)識,因為在Demo運行的時候會用到設(shè)備,下一步對STemWin的GUI進(jìn)行初始化,最后調(diào)用GUIDEMO_Main()函數(shù)。mainint{ //LCD初始化 //初始化SRAM //1KHZ定時器1ms //10ms中斷 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC時鐘,否則}

小,此堆棧值改為0x ,如圖2-5-2所示:2-5-2實驗上一步我們已經(jīng)將STemWin全部移植完成。接下來我們就編譯后將hex文件到我們開發(fā)板內(nèi)運行,運行效果2-6-12-6-1STemWinDemo3Windows上仿然不是,因為Segger給我們提供了很多例程都是可以在Windows系統(tǒng)上仿真的,也就是說大家只要有一臺電腦STemWin。(但如果還沒有電腦的話,那真讓我愛莫能助咯,嘿嘿)而且學(xué)習(xí)仿真的好處是即使你沒有STM32到你的開發(fā)板上而煩惱。接下來我們就正式開始介紹如何在WindowsSTemWin。3.1emWin仿真文emWin顯示o3.1emWin仿真文由于ST沒有提供STemWin的PC仿真文件,但是STemWin是基于emWin的,只STMCUemWinPCemWin的仿真文件我們可以在segger官網(wǎng)到,地址: /downloads.html?pid=263-1-1圖3-1-1emWin界到seger是V5.2同STeWin用V5.6的仿真。仿真文件我們已經(jīng)提供給大家,所以不需要花時間去。仿真文件在STeWn\emin526PCemWin模擬需要VisualC++(6.00或更高版本)的軟件,我們使用的是VisualC++6.0,對于VC++6.0軟件的安裝我們這里就不多說,大家可以下,默認(rèn)大家手上的電腦都已經(jīng)安裝VC++6.0。大家可以直接把我們PC解壓,或者可以將提供的壓縮文件拷貝到電腦其他的盤,比D命名3-2-1上圖紅色框起的壓縮文件就是我們提供的Windows仿真軟件。我們直接在此 壓(大家可以到其他盤然后新建一個英文文件夾保存后解壓)。當(dāng)解壓完成以后我們會SimulationTrial.DSW文件,大家只需要雙擊此文件就VC++6.03-2-23-2-2雙擊之后就會彈出如圖3-2-3所示的界面,我們只需要點擊關(guān)閉仿真程序了3-2-33-2-36Application文件:內(nèi)部含有emWin的Demo演示例程,這些例程涵蓋了所有STemWin功能ConfigemWinLCDGUIConf.c,GUIConf.h,LCDConf.c,LCDConf.hSIMConf.c這5個文件。emWin仿F5emWn3-413-4-1emWinDemoApplication那些.c和.h文件,如圖3-4-2所示。3-4-2DemoGUI效果,如圖3-4-3所示。跟我們移植STemWin跑的綜合測試相比,emWin的這個綜合Demo更美觀,這個主要是因為STemWin提供Demo和仿真Demo不一樣,而且還受液晶屏及CPU運行速度的影響。3-4-3emWinemWin仿真文件介上一節(jié)我們運行了emWin提供的綜合Demo,可見其強(qiáng)大。那么在這強(qiáng)大的背后我們需要了解程序是如何運作的,也就是要了解emWin仿真文件的功能。Application文emWin提供的那個綜合Demo運行的就是Application這里面的文件,這部分文件emin3-4-4Application面我們已經(jīng)簡單介紹了這個文件的作用,其內(nèi)部含有GUIConf.c,GUIConf.h,GUIConf.c,GUIConf.h,LCDConf.c,LCDConf.h介紹。首先我們打GUIConf.c文件#include"GUI**//Definetheavailablenumberofbytesavailableforthe#defineGUI_NUMBYTES//Definetheaverageblock*PublicCalledduringtheinitializationprocessinordertosetupavailablememoryforthevoid{//32bitalignedmemorystaticU32aMemory[GUI_NUMBYTES///Assignmemoryto}emWinGUI_NUMBYTES0X4000004MGUI_ALLOC_AssignMemory()4M的內(nèi)存分配給emWin,調(diào)用GUI_ALLOC_SetAvBlockSize()設(shè)置塊的平均大小,塊大小同樣使用一個宏GUI_BLOCKSIZE進(jìn)行定義,默認(rèn)值是0x80。在來看下其頭文件,也就GUIConf.h。在這個頭文件中定義了一些宏,通過這些宏來控#ifndefGUICONF_H#defineMultilayer/disy#define umnumberofavailableMultitasking#define (1)//CompilewithmultitaskingConfigurationofavailable#defineGUI_SUPPORT_TOUCH (1)//Supportatouchscreen(req.win-manager)#defineGUI_SUPPORT_MOUSE (1)//Supportamouse#defineGUI_WINSUPPORT (1)//Windowmanagerpackageavailable#defineGUI_SUPPORT_MEMDEV(1)//MemorydevicesavailableConfigurationofwindow#defineWM_SUPPORT_NOTIFY_VIS_CHANGED(1)//EnablesendingofWM_NOTIFY_VIS_CHANGEDmessagesDefault#define #endif/*Avoidmultipleinclusion接著再來分LCDConf.c文件,這個文件是用來LCD以及顯示驅(qū)動和顏色轉(zhuǎn)換格式進(jìn)行配置,面我們已經(jīng)運行了仿真文件,看到了具體的現(xiàn)象,LCD大小也是固定的,默LCD大小320*240,如果我們要LCD顯示界面調(diào)大,就可以從這個文件入手,#defineXSIZE_PHYS320 //修改LCD寬度X#defineYSIZE_PHYS //修改LCD高度LCD_X_Confi(yDrive(格式,該函數(shù)的輸入?yún)?shù)是根據(jù)Windows系統(tǒng)的環(huán)境配置的。CmdLCD_X_INITCONTROLLER始化液晶控制器。LCDConf.h文件沒有東西,不需要了解面我們移植機(jī)STemWin實驗的時候也在這兩個函數(shù)內(nèi)移植了彩屏的底層驅(qū)動GUI文GUI文件夾內(nèi)的文件才是emWin真正的。GUI文件夾內(nèi)含有Include文件夾和文件夾內(nèi)放emWin因為emWin不提供源碼,所以把源碼封裝成一LIB3-4-5GUISample文演示程序和前面講的Application文件夾演示程序是不一樣的,我們主要學(xué)習(xí)的還是而且提供的中文手冊也是針對ample文件夾例程做講解的。Sample文件夾截圖如圖3-4-6所示。3-4-6Sample o前面我們仿真出來的效果是emWin提供的一個綜合測試Demo,但是我們學(xué)習(xí)emWin不Sample這個文件夾內(nèi)文件開始學(xué)習(xí),學(xué)習(xí)最基礎(chǔ)的一個oWorld!顯示實驗。在Samle文件中就提供這樣的實驗例程,因為仿真文件默認(rèn)編譯的是那些高端大氣的文件,所以要想辦法它,打開最基礎(chǔ)的oWold!顯示文件。接下來我們就這樣操1:先將工程擴(kuò)展關(guān)閉,縮小成如圖3-5-1所示3-5-1圖3-5-2編譯配3:打開Sample->Tutorial文件夾,下拉選擇到BASIC_oWorld.c這個文件,具體操作步驟如3-5-3示。4:采用步驟2方法,打開BASIC_oWorld.c這個文件編譯,也就是取消掉“組建時排除文件”選項。具體操作步驟如圖3-5-4所示。上述步驟完成之后再次編譯工程文件,編譯成功后點擊運行即可看到LCD顯示 World!。步驟如圖3-5-5所示。3-5-5emWin就講解完了,大家可以多練習(xí)練習(xí),仿真一下其他的文件,看看是什么效果。在后4STemWinUCOSIII移面章節(jié)中我們講解STemWin移植STM32開發(fā)板上運行,當(dāng)時講解的是不帶操作系統(tǒng)的移植方法,也就是大家通常說的跑。前面章節(jié)中我們還講解了使用Windows仿真emWin,這個仿真是帶系統(tǒng)的,也就是Windows系統(tǒng)。本章帶領(lǐng)大家把STemWin移植到帶有UCOSIII操作系統(tǒng)的基礎(chǔ)工程中。讓我們的開發(fā)板既有系統(tǒng)又有漂亮的GUI機(jī)的移植,帶系統(tǒng)的移植也就變得容易多了。本章分為如下幾個部實驗現(xiàn)STemWin文件到工本章我們需要完成STemWin在UCOSIII上的移植,那么就需要一UCOSIII的基礎(chǔ)工程,工程”,我們只需要把此基礎(chǔ)工程出來。我們打開這個基礎(chǔ)工程,如圖4-1-1所示。4-1-1UCOSIII上圖紅色框起來的就是UCOSIII的驅(qū)動程序,大家可以打開這個基礎(chǔ)工程看下,需要注意同機(jī)移植一樣,我們在此基礎(chǔ)工程內(nèi)新建一個文件夾命名為EMWIN,將STemWin文件拷4-1-2圖4-1-2STemWin到工打開這個工程,然后添加STemWin文件到工程內(nèi),如圖4-1-34-1-3添加STemWin添加STemWin文件在機(jī)移植的時候已經(jīng)給大家講解過每個文件的含義,不過在時候添加的是GUI_X.c文件。EMWIN_LIB工程組中要添加STemWin526_CM3_OS_Keil.lib庫文件,之前移植修改工程STmWinUCSIII部分如GUIX_uch_og.、GUCon.、GUIRV_emtecLCDonfFleColr_Tmte.c文件,這些都不需要修改,需要GU_X_COSII.cSTmWin#include"GUI#includeincludesh因為使用UCOSUCOS GLOBALstaticOS_SEM*DispSem; staticOS_SEM*EventSem;staticOS_SEM*KeySem; staticint static TIMING*Notes:SometimingdependentroutinesofuC/GUIrequireaGetTimeanddelayDefaulttimeunit(tick),normallyis1int{OS_ERRreturn }//GUI延時函voidGUI_X_Delay(intperiod)OS_ERRerr;ticks=(period*1000)/OSCfg_TickRate_Hz;}void{}MULTITASKINGINTERFACENote(1):1)ThefollowingroutinesarerequiredonlyifuC/GUIisusedinatruemultitaskwhichmeansyouhavemorethanonethreadusingtheuC/GUIAPI.Inthiscasethe needstobeinGUIConfvoid{OS_ERROSSemCreate((OS_SEM* (OS_ERR*OSSemCreate((OS_SEM* (OS_ERR*}void{OS_ERR }void{OS_ERR }U32GUI_X_GetTaskId(void){return((U32)(OSTCBCurPtr->Prio));//獲取任務(wù)優(yōu)先級,也就是任務(wù)}void{OS_ERR }void{OS_ERR }KEYBOARDINTERFACEPurpose:ThekeyboardroutinesarerequiredonlybysomeIfwidgetsarenotused,theymaybeNote(s):IfuC/OS-IIisused,characterstypedintothelogwindowwillbeced Thisisaneatfeaturewhichallowsyoutooperateyourtargetsystemwithouthavingtouseeventohaveakeyboardconnectedtoit.(usefulfordemosstaticvoid{ DEF_FALSE){ }}void{OS_ERROSSemCreate((OS_SEM* (OS_ERR*}int{intr=KeyPressed;return(r);}int{intr;{ }r=KeyPressed;KeyPressed=0;return(r);}voidGUI_X_StoreKey(int{OS_ERRerr;KeyPressed=k; }在機(jī)移植的時候我們也給STemWin提供了一個系統(tǒng)時鐘,使用的是定時器3定時1ms1msUCOSIII1ms具體如圖4-2-1所示。GUI_OS1STemWin務(wù)的最大數(shù)目,默認(rèn)我們設(shè)置為5個任務(wù)數(shù)。修改配置如下:#define (1)//#define (5)//EMWIN添加STemWinDemo測至此,我們整個移植修改內(nèi)容就完成,接下來就把STemWin提供的Demo加載到我們的工程中,并包含對應(yīng)的頭文件4-3-1圖4-3-1添加開始任務(wù)start_task,然后需要有調(diào)用觸摸的任務(wù),還需要有執(zhí)行STemWinDemo的任務(wù),為了能夠反應(yīng)系統(tǒng)是否運行,使用了一個led閃爍任務(wù)作為指示。在開始任務(wù)中將STemWin進(jìn)行初始化及創(chuàng)建其他3個任務(wù)。具體代碼可以看我們工程中main.c文件,如下#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"lcd_driverh"#include"touchh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"includesh"#include"GUIh"#define #define OS_TCBvoidstart_task(void#define #define OS_TCB//touchvoidtouch_task(void#define #define OS_TCB//led0voidled0_task(void//EMWINDEMO任#define #define OS_TCBvoidemwindemo_task(voidint{OS_ERRerr; //初始化SRAM OS_CRITICAL_ENTER();//進(jìn)入臨界區(qū) *)&StartTaskTCB, (CPU_CHAR*)"starttask", (OS_TASK_PTR) *)0, *)&START_TASK_STK[0], (OS_MSG_QTY)0, 消息數(shù)目,為0時接收消息 項

* //用戶補(bǔ)充的 * OSStart(&err);//開啟UCOSIII}voidstart_task(void{OS_ERRerr;p_arg=#ifOS_CFG_STAT_TASK_EN> #ifdefCPU_CFG_INT_DIS_MEAS_EN OS_CFG_SCHED_ROUND_ROBIN_EN當(dāng)使用時間片輪轉(zhuǎn)的時 //STemWinOS_CRITICAL_ENTER();//進(jìn)入臨界//STemWinDemo (OS_TASK_PTR)emwindemo_task, (OS_MSG_QTY)0, (OS_TASK_PTR)touch_task, (OS_MSG_QTY (OS_TASK_PTR)led0_task, (OS_MSG_QTY)0, }//EMWINDEMO任voidemwindemo_task(void{{}}voidtouch_task(void{{}}voidled0_task(void{{l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論