<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32單片機(jī)移植μcgui總結(jié)

          基于STM32單片機(jī)移植μcgui總結(jié)

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          因?yàn)樯弦粋€(gè)題目的界面是自己一個(gè)一個(gè)點(diǎn)打到屏幕上去的,計(jì)算過(guò)程相當(dāng)惡心,所以這兩天趕緊弄了一下μCGUI,希望對(duì)后面的人機(jī)交互界面的設(shè)計(jì)有所幫助。

          說(shuō)實(shí)話(huà),我對(duì)于人機(jī)交互界面的設(shè)計(jì)真心沒(méi)什么的靈感,上次趙穎老師就委婉的表達(dá)了這個(gè)意思,我也深刻的意識(shí)到了這個(gè)問(wèn)題,就是設(shè)計(jì)的界面相當(dāng)普通,沒(méi)有給人一種眼前一亮的感覺(jué)。

          本文引用地址:http://www.ex-cimer.com/article/201612/324424.htm

          首先感謝隊(duì)友王綏學(xué)給我提供的資料,因?yàn)樽约弘娔X運(yùn)行各種大型軟件實(shí)在是太卡,所以這個(gè)暑假把女朋友電腦留下,不過(guò)資料都在另外一臺(tái)電腦中,需要的資料就給隊(duì)友要,十分的感謝??!

          按照教程一步一步的做下來(lái),前面幾步關(guān)于GUI的參數(shù)設(shè)置沒(méi)什么問(wèn)題,無(wú)非是用到的功能將其參數(shù)置1,用不到的功能將其參數(shù)置0,但是在最后一步中,就是將自己的LCD底層驅(qū)動(dòng)與μCGUI連接起來(lái),這里出現(xiàn)了問(wèn)題,開(kāi)始的時(shí)候編譯總是出錯(cuò),耗費(fèi)了我一個(gè)上午的時(shí)間啊,以為是新版本的keil不兼容造成的,然后從4.72版本直接降至3.8版本,可是又出現(xiàn)了同樣的問(wèn)題,各種變量的undefined。下午到了實(shí)驗(yàn)室,開(kāi)始認(rèn)真的閱讀排查代碼,然后終于一句話(huà)讓我眼前一亮:#ifndef LCD_H……(各種參數(shù)定義) #endif。因?yàn)槲易约旱尿?qū)動(dòng)文件中定義了一個(gè)LCD_H,所以造成上面的一部分代碼在編譯的時(shí)候就跳過(guò)沒(méi)有編譯,才造成了各種參數(shù)的未定義,刪除了LCD_H還有LCD_W之后,果斷的通過(guò)了編譯,然后下載之后在屏幕上看到了顯示的內(nèi)容。

          接下來(lái)就是優(yōu)化代碼,因?yàn)?mu;CGUI是一個(gè)通用的圖形軟件庫(kù),所以也就再所難免它還有可優(yōu)化的地方,尤其是刷屏的速度上,如果是整屏刷新的話(huà),可以很明顯的看出來(lái)進(jìn)度,很慢。首先,是把自己驅(qū)動(dòng)的TFT_Point()函數(shù)的代碼直接復(fù)制到μCGUI的畫(huà)點(diǎn)函數(shù)中,因?yàn)槿绻窃?mu;CGUI的畫(huà)點(diǎn)函數(shù)中調(diào)用TFT_Point()的話(huà),每一個(gè)點(diǎn)都會(huì)有一個(gè)入棧和出棧的時(shí)間浪費(fèi),降低了屏幕的刷新速度,同樣的道理,把自己的讀點(diǎn)的驅(qū)動(dòng)函數(shù)代碼也直接復(fù)制過(guò)去,還有就是GUI_Fill之類(lèi)的函數(shù),因?yàn)檫@些函數(shù)是整塊整塊的在刷屏,但是μCGUI是一個(gè)點(diǎn)調(diào)用一個(gè)畫(huà)點(diǎn)函數(shù),這樣每個(gè)點(diǎn)都要寫(xiě)相關(guān)的命令和坐標(biāo),很低效。直接把自己的代碼中的Fill相關(guān)的代碼復(fù)制過(guò)去,寫(xiě)好起始坐標(biāo)之后,就開(kāi)始向屏幕的RAM中直接送數(shù)據(jù),至于坐標(biāo)的加1是屏幕的控制器自動(dòng)完成的,這樣也節(jié)省了時(shí)間,完成了這些優(yōu)化之后可以看到刷屏速度有了不少的提高。我用的是STM32F103RBT6作為主控芯片,它的最高主頻是72M,是通過(guò)外部的8M經(jīng)過(guò)鎖相環(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,一般來(lái)說(shuō)這已經(jīng)相當(dāng)大了,但是今天顯示位圖的時(shí)候,先直接轉(zhuǎn)換的時(shí)候,超過(guò)FLASH大小,然后把圖片縮小到50%,然后還是沒(méi)有編譯通過(guò),接著再縮小50%,編譯通過(guò),顯示正常,雖然FLASH可以外部擴(kuò)展,但是對(duì)于低主頻的控制芯片來(lái)說(shuō),刷屏速度本來(lái)就已經(jīng)夠慢的了,還要花時(shí)間去讀取外部的FLASH,然后再顯示,那種速度就可想而知了,前陣子申請(qǐng)到的STM32F407的芯片,是基于ARM Conterx M4的內(nèi)核,里面自帶了1M的FLASH,這個(gè)就相當(dāng)牛逼了,玩起來(lái)GUI應(yīng)該很爽,而且主頻可以最高168M,比F103RBT6的兩倍還要高,刷屏速度應(yīng)該可以得到很大的提升,效果應(yīng)該會(huì)更好。

          前兩天在正點(diǎn)原子的店里看到了一個(gè)7寸的電容屏,和我的單片機(jī)接口可以匹配的上,不過(guò)暫時(shí)沒(méi)有買(mǎi)的打算,第一沒(méi)有那么多資金,要300多,第二,我的單片機(jī)主頻有點(diǎn)低,玩大屏效果肯定很不爽,帶大屏就要高頻的高級(jí)貨才行,等到從老師那里拿到TQ2440的板子之后玩玩ARM,這個(gè)的主頻到時(shí)候帶屏幕應(yīng)該不成問(wèn)題了。

          目前只看到了第7章,接著看,重頭戲還在后面。



          關(guān)鍵詞: STM32單片機(jī)移植μcgu

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();