基于STM32單片機(jī)移植μcgui總結(jié)
說實(shí)話,我對(duì)于人機(jī)交互界面的設(shè)計(jì)真心沒什么的靈感,上次趙穎老師就委婉的表達(dá)了這個(gè)意思,我也深刻的意識(shí)到了這個(gè)問題,就是設(shè)計(jì)的界面相當(dāng)普通,沒有給人一種眼前一亮的感覺。
本文引用地址:http://www.ex-cimer.com/article/201612/324424.htm首先感謝隊(duì)友王綏學(xué)給我提供的資料,因?yàn)樽约弘娔X運(yùn)行各種大型軟件實(shí)在是太卡,所以這個(gè)暑假把女朋友電腦留下,不過資料都在另外一臺(tái)電腦中,需要的資料就給隊(duì)友要,十分的感謝??!
按照教程一步一步的做下來,前面幾步關(guān)于GUI的參數(shù)設(shè)置沒什么問題,無非是用到的功能將其參數(shù)置1,用不到的功能將其參數(shù)置0,但是在最后一步中,就是將自己的LCD底層驅(qū)動(dòng)與μCGUI連接起來,這里出現(xiàn)了問題,開始的時(shí)候編譯總是出錯(cuò),耗費(fèi)了我一個(gè)上午的時(shí)間啊,以為是新版本的keil不兼容造成的,然后從4.72版本直接降至3.8版本,可是又出現(xiàn)了同樣的問題,各種變量的undefined。下午到了實(shí)驗(yàn)室,開始認(rèn)真的閱讀排查代碼,然后終于一句話讓我眼前一亮:#ifndef LCD_H……(各種參數(shù)定義) #endif。因?yàn)槲易约旱尿?qū)動(dòng)文件中定義了一個(gè)LCD_H,所以造成上面的一部分代碼在編譯的時(shí)候就跳過沒有編譯,才造成了各種參數(shù)的未定義,刪除了LCD_H還有LCD_W之后,果斷的通過了編譯,然后下載之后在屏幕上看到了顯示的內(nèi)容。
接下來就是優(yōu)化代碼,因?yàn)?mu;CGUI是一個(gè)通用的圖形軟件庫,所以也就再所難免它還有可優(yōu)化的地方,尤其是刷屏的速度上,如果是整屏刷新的話,可以很明顯的看出來進(jìn)度,很慢。首先,是把自己驅(qū)動(dòng)的TFT_Point()函數(shù)的代碼直接復(fù)制到μCGUI的畫點(diǎn)函數(shù)中,因?yàn)槿绻窃?mu;CGUI的畫點(diǎn)函數(shù)中調(diào)用TFT_Point()的話,每一個(gè)點(diǎn)都會(huì)有一個(gè)入棧和出棧的時(shí)間浪費(fèi),降低了屏幕的刷新速度,同樣的道理,把自己的讀點(diǎn)的驅(qū)動(dòng)函數(shù)代碼也直接復(fù)制過去,還有就是GUI_Fill之類的函數(shù),因?yàn)檫@些函數(shù)是整塊整塊的在刷屏,但是μCGUI是一個(gè)點(diǎn)調(diào)用一個(gè)畫點(diǎn)函數(shù),這樣每個(gè)點(diǎn)都要寫相關(guān)的命令和坐標(biāo),很低效。直接把自己的代碼中的Fill相關(guān)的代碼復(fù)制過去,寫好起始坐標(biāo)之后,就開始向屏幕的RAM中直接送數(shù)據(jù),至于坐標(biāo)的加1是屏幕的控制器自動(dòng)完成的,這樣也節(jié)省了時(shí)間,完成了這些優(yōu)化之后可以看到刷屏速度有了不少的提高。我用的是STM32F103RBT6作為主控芯片,它的最高主頻是72M,是通過外部的8M經(jīng)過鎖相環(huán)9倍頻達(dá)到的,我把它12倍頻超頻運(yùn)行之后,可以看出刷屏速度有了相當(dāng)明顯的提高,所以,芯片的主頻也是制約刷屏速度的重要因素,ARM M系列的芯片重要用于控制,而應(yīng)用型的ARM A系列的主頻可以達(dá)到更高,玩起屏幕應(yīng)該會(huì)更爽,而這個(gè)系列的芯片應(yīng)該才是大家所熟悉的ARM。
另外一個(gè)制約因素,F(xiàn)LASH的大小,我的單片機(jī)只有128Kb的FLASH,一般來說這已經(jīng)相當(dāng)大了,但是今天顯示位圖的時(shí)候,先直接轉(zhuǎn)換的時(shí)候,超過FLASH大小,然后把圖片縮小到50%,然后還是沒有編譯通過,接著再縮小50%,編譯通過,顯示正常,雖然FLASH可以外部擴(kuò)展,但是對(duì)于低主頻的控制芯片來說,刷屏速度本來就已經(jīng)夠慢的了,還要花時(shí)間去讀取外部的FLASH,然后再顯示,那種速度就可想而知了,前陣子申請(qǐng)到的STM32F407的芯片,是基于ARM Conterx M4的內(nèi)核,里面自帶了1M的FLASH,這個(gè)就相當(dāng)牛逼了,玩起來GUI應(yīng)該很爽,而且主頻可以最高168M,比F103RBT6的兩倍還要高,刷屏速度應(yīng)該可以得到很大的提升,效果應(yīng)該會(huì)更好。
前兩天在正點(diǎn)原子的店里看到了一個(gè)7寸的電容屏,和我的單片機(jī)接口可以匹配的上,不過暫時(shí)沒有買的打算,第一沒有那么多資金,要300多,第二,我的單片機(jī)主頻有點(diǎn)低,玩大屏效果肯定很不爽,帶大屏就要高頻的高級(jí)貨才行,等到從老師那里拿到TQ2440的板子之后玩玩ARM,這個(gè)的主頻到時(shí)候帶屏幕應(yīng)該不成問題了。
目前只看到了第7章,接著看,重頭戲還在后面。
評(píng)論