亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于STM32的μC/GUI外置spi flash字庫研究與實(shí)現(xiàn)

        2015-05-10 01:45:36楊立身張安偉
        液晶與顯示 2015年2期
        關(guān)鍵詞:字庫外置字符

        楊立身,張安偉,王 磊,魏 蘭

        (河南理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,河南 焦作 454000)

        1 引 言

        隨著嵌入式系統(tǒng)應(yīng)用與研究的不斷深入,嵌入式產(chǎn)品越來越向著智能化、集成化、人性化發(fā)展,支持中文的圖形化界面人機(jī)接口以其良好的用戶體驗(yàn)和直觀的視覺感受也越來越受到重視。圖形用戶界面μC/GUI以其小巧、高效、可裁剪度高等特點(diǎn)在工業(yè)控制、通訊、醫(yī)學(xué)等相關(guān)的嵌入式領(lǐng)域應(yīng)用也越來越廣泛。μC/GUI默認(rèn)只支持英文,不支持中文顯示,通常兼容中文的做法就是將漢字字庫文件通過編譯寫入到MCU內(nèi)部存儲空間,然而常用的漢字7千多,就常用的GB2312編碼而言大小就為200k[1],這樣做勢必會增加開發(fā)的成本,浪費(fèi)原本寶貴的MCU內(nèi)部存儲空間,從而限制程序本身的大小,對程序功能的完整性造成一定的影響。

        文章針對字庫文件與MCU內(nèi)部存儲之間的矛盾,利用SPI接口的高數(shù)據(jù)傳輸速率,研究了將漢字字庫存儲于外置spi flash芯片的實(shí)現(xiàn)方法,通過修改μC/GUI內(nèi)核的調(diào)用函數(shù)實(shí)現(xiàn)μC/GUI對外置字庫的成功調(diào)用和顯示,這樣既避免了字庫文件對MCU存儲空間的占用,同時也兼顧了從外置字庫讀取數(shù)據(jù)的速度。

        2 系統(tǒng)軟硬件平臺及開發(fā)環(huán)境

        μC/GUI是美國Micrium公司出品的一種針對嵌入式系統(tǒng)的圖形支持軟件[2],其最小系統(tǒng)只需很小的內(nèi)存空間就可運(yùn)行,節(jié)省嵌入式芯片內(nèi)部有限的存儲空間[3-4]。移植方面,由文獻(xiàn)[5-7]可知μC/GUI移植重點(diǎn)在于對操作系統(tǒng)系統(tǒng)配置文件、LCD底層驅(qū)動等的修改,具體過程文章不再詳述。

        平臺核心芯片選用的是STM32F103RBT6,自帶20KSRAM、3個SPI接口、3個USART異步串行總線接口[8],同時實(shí)驗(yàn)板載有16Mbit的外部flash芯片,型號為W25X16,通過SPI接口與MCU通信。液晶顯示模塊選用的是顯尚光電的DST2001PH TFT-LCD,采用的控制器為ILI9320、26萬色的 TFT-LCD屏[9-10]。編譯環(huán)境采用 Keil uVision v4.10集成開發(fā)環(huán)境,實(shí)時操作系統(tǒng)采用uC/SO_II V2.86 版本,μC/GUI選用版本為V3.90a,硬件框圖如圖1所示。

        圖1 系統(tǒng)硬件框圖Fig.1 System hardware structure

        3 SPI_FLASH驅(qū)動程序設(shè)計(jì)

        3.1 硬件連接

        系統(tǒng)選用W25X16FLASH芯片存放外置字庫,該芯片容量為16Mb,共分為32個塊,每塊又分為16個扇區(qū),每個扇區(qū)4K字節(jié)。需要注意,W25X16的最少擦除單位為一個扇區(qū),也就是說每次必須擦除4K個字節(jié),所以需要給其開辟一個大小至少為4KB的緩存區(qū)。W25X16通過標(biāo)準(zhǔn)的SPI接口與STM32通信,最大的SPI時鐘可以達(dá)到75Mhz。W25X16與STM32的系統(tǒng)硬件連線圖如圖2所示。

        圖2 系統(tǒng)連線圖Fig.2 Connection diagram of system

        3.2 STM32的SPI接口初始化

        W25X16通過SPI接口與STM32通信,為了保證SPI接口正常工作,需要對SPI接口的工作模式、數(shù)據(jù)模式、數(shù)據(jù)大小、波特率等參數(shù)進(jìn)行初始化配置。本文使用的為SPI1接口,相關(guān)初始化函數(shù)為SPI_Init(),寄存器配置代碼如下:

        SPI_Init()

        ……

        SPI1->CR1|=0<<10;//工作模式為全雙工

        SPI1->CR1|=1<<9;//軟件NSS管理

        SPI1->CR1|=1<<2;//設(shè)置為SPI主設(shè)備

        SPI1->CR1|=0<<11;//使用8位數(shù)據(jù)幀

        SPI1->CR1|=0<<10;//空閑模式下SCK為高電平

        SPI1->CR1|=7<<3;//波特率設(shè)置為256分頻

        SPI1->CR1|=0<<7;//先發(fā)送 MSB

        SPI1->CR1|=1<<0;//第二個時鐘沿開始數(shù)據(jù)采樣

        SPI1->CR1|=1<<6;//使能SPI1

        3.3 讀寫FLASH函數(shù)

        驅(qū)動設(shè)計(jì)部分需要為W25X16編寫讀寫芯片狀態(tài)寄存器函數(shù),讀flash函數(shù),寫flash頁函數(shù),芯片擦除函數(shù)和擦除扇區(qū)函數(shù)等,其中核心部分為讀寫flash函數(shù)和寫flash頁函數(shù)的編寫,本文中這3個函數(shù)分別為 Flash_Read()、Flash_Write()和Flash_Write_Page(),功能分別為從指定地址讀取指定長度的數(shù)據(jù)、向指定地址寫入指定長度的數(shù)據(jù)以及向指定的flash地址中寫入一頁內(nèi)容,其中Flash_Write_Page()是通過調(diào)用Flash_Write()函數(shù)從而將內(nèi)容按頁寫進(jìn)flash中的,程序執(zhí)行流程圖如圖3所示。需要注意的是在調(diào)用寫flash頁函數(shù)時,所要寫入的字節(jié)數(shù)不應(yīng)超過每頁的大小,即不應(yīng)超過256字節(jié)。

        4 μC/GUI漢字顯示原理

        4.1 μC/GUI字體類型

        μC/GUI支持 ASCII、ISO8859-1、Unicode等編碼方式,提供了4種有效字體:等寬字體(Monospacde Font)、均衡字體(Proportional Font)、內(nèi)置2位光滑效果字體、內(nèi)置4位光滑效果字體,后兩種字體主要用在μC/GUI抗鋸齒功能開啟后,等寬字體的寬度和高度都是相同的,所以所有的點(diǎn)陣數(shù)據(jù)都存放在一個數(shù)組中。而對于均衡字體,由于每個字都有自己獨(dú)自的寬度和高度,則需要通過定義單獨(dú)的數(shù)組來實(shí)現(xiàn)每個字,對于既支持中文和英文的顯示,一般選用的是均衡字體。本文主要針對等寬字體和均衡字體進(jìn)行研究和分析。

        圖3 讀寫FLASH流程圖Fig.3 Flow chart of reading and writing flash

        4.2 字體數(shù)據(jù)結(jié)構(gòu)

        數(shù)據(jù)結(jié)構(gòu)GUI_FONT同時記錄了等寬字體、均衡字體的屬性以及相關(guān)的驅(qū)動函數(shù),該結(jié)構(gòu)體定義了字體大小和GUI_FONT_PROP結(jié)構(gòu)體的入口地址。等寬字體和均衡字體等寬字體對應(yīng)的字模數(shù)據(jù)結(jié)構(gòu)分別為GUI_FONT_M(jìn)ONO和GUI_FONT_PROP。與等寬字體不一樣的是,均衡字體由于每個字都是單獨(dú)的數(shù)組來表示,所以還需要另外一個結(jié)構(gòu)來存儲相應(yīng)的字符信息,這個數(shù)據(jù)結(jié)構(gòu)就是GUI_CHARINFO。GUI_FONT_PROP中包含了字母在字庫中的編碼和所對應(yīng)的GUI_CHARINFO結(jié)構(gòu)體入口地址,同時GUI_CHARINFO結(jié)構(gòu)體pNext字段指針指向下一個GUI_FONT_PROP結(jié)構(gòu)體,這樣所有的結(jié)構(gòu)體就形成了一個單項(xiàng)鏈表,解決了字模數(shù)據(jù)連續(xù)存儲的問題。μC/GUI底層顯示函數(shù)可以通過以上數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系找到所要顯示字符的字模顯示出來,整體的字庫結(jié)構(gòu)如圖4所示。

        4.3 μC/GUI漢字的顯示

        圖4 字庫結(jié)構(gòu)圖Fig.4 Organization chart of font library

        μC/GUI顯示字符一般以點(diǎn)陣方式顯示,所謂點(diǎn)陣就是一個漢字用多少個像素點(diǎn)來描述。如一個16×16的點(diǎn)陣字符,即256個像素點(diǎn)來描述一個字符。此時用32個字節(jié)來表示此點(diǎn)陣字符,每行用兩個字節(jié)記錄這16個像素點(diǎn)的顯示情況。顯示漢字和顯示字符原理一樣,此時重點(diǎn)需要了解普通英文字符和漢字如何區(qū)別。一個ASCII字符占一個字節(jié),編碼從0到0XA1。對于GB2312編碼的漢字來講一個漢字占兩個字節(jié),且每個字節(jié)都是從0XA1開始,即漢字編碼從0XA1A1開始[11-13]。μC/GUI顯示字符時先分析得到待顯示字符編碼,判斷字符為ASCII字母還是GB2312編碼的漢字,然后利用GUI_FONT_DROP、GUI_FONT_M(jìn)ONO和GUI_CHARINFO從字庫中取得字符的字模,然后調(diào)用GUICharP.c中的GUIPROP_DispChar()函數(shù),最后調(diào)用μC/GUI底層的畫位圖函數(shù)LCD_DrawBitmap()函數(shù),最后完成顯示。

        5 外置字庫實(shí)現(xiàn)及測試

        μC/GUI的字符顯示函數(shù)一般是直接從內(nèi)部程序存儲器讀取數(shù)據(jù),將字庫文件存儲在外部flash后則需要在原始的顯示代碼中增加一個地址接口,使其指向外置flash,同時需要在GUI.h中聲明,給μC/GUI的順利調(diào)用指明方向。最后需要對GUICharP.c中顯示字符的底層函數(shù)進(jìn)行修改。

        5.1 W25X16字庫的寫入

        系統(tǒng)選用的字庫為嵌入式系統(tǒng)中使用較多的GB2312編碼字庫,包含有6 768個簡體中文。首先使能串口接收中斷,利用PC取點(diǎn)陣軟件,按照設(shè)定的點(diǎn)陣尺寸(本文為16×16)對字庫文件中的漢字進(jìn)行取模操作,得到對應(yīng)的字模數(shù)組文件。然后利用PC串口調(diào)試軟件將之前得到的字模數(shù)組文件按位發(fā)送至STM32的串口緩沖區(qū),同時利用串口接收中斷,每接收到1字節(jié)數(shù)據(jù)就通過中斷處理函數(shù)中的Flash_Write_Page()函數(shù)寫入到W25X16芯片中,需要注意的是在寫入之前需要先對W25X16芯片進(jìn)行擦除操作。字庫寫入流程如圖5所示。串口中斷處理函數(shù)USART1_IRQHan-dler()代碼如下:

        圖5 字庫寫入流程圖Fig.5 Flow chart of writing word stock

        5.2 內(nèi)核文件修改

        添加外置字庫后,需要在GUI.h文件中聲明字庫在flash中的首地址,以及相應(yīng)的字庫聲明。內(nèi)核文件修改主要集中在GUICharP.c文件的GUIPROP_DispChar()函數(shù),這個函數(shù)為其他顯示字符的函數(shù)所調(diào)用,文章增加了該函數(shù)對字符進(jìn)行漢字和字母進(jìn)行判斷并分開處理的步驟,讀取漢字信息時需要用到W25X16讀取函數(shù),即上述的Flash_Read()函數(shù)。同時在修改 GUIPROP_Disp-Char()函數(shù)時需要注意漢字和字母的判斷方法,在GB2312編碼時,漢字編碼是從0XA1A1開始,在進(jìn)行字節(jié)流解析時編碼小于0XA1的認(rèn)為是普通ASCII碼,大于或者等于0XA1A1的則是漢字編碼,漢字和字母的字模獲取方式不同。文章中字母的模是直接在μC/GUI所給的C文件中獲取,而漢字的模則是按照事先計(jì)算出的編譯地址讀取存放在外置flash中的字模,最后執(zhí)行畫位圖函數(shù)LCD_DrawBitmap()將漢字及字符顯示出來,流程圖如圖6所示。

        圖6 字符顯示流程圖Fig.6 Flow chart of character display

        其中從μC/GUI和 W25X16取模的過程是這個文件修改的重點(diǎn),需根據(jù)字符是字母還是漢字選擇用不同的取模方式取模,部分實(shí)現(xiàn)代碼如下:

        base=(U32)pPROP->paCharInfo->pData;

        //找出字庫對應(yīng)的首地址

        BytesPerFont=GUI_Context.pAFont->YSize*pProp->paCharInfo->BytesPerLine;

        //每個字模的數(shù)據(jù)字節(jié)數(shù)

        if(BytePerFont>BYTES_PER_FONT)

        { BytesPerFont=BYTES_PER_FONT;}

        if(c<0x80)//說明是ASCII編碼字母

        {for(i=0;i<16;i++)

        {GUI_FontDataBuf[i]=acFont8x16[c-0x20][i]}}

        else

        {oft=base+ (((c> >8)-0xa1)*94+((c&0xff)-0xa1))*BytePerFont;

        Flash_Read(oft,GUI_FontDataBuf,ByteP-erFont);}

        5.3 外置字庫平臺測試

        文章利用字庫生成工具將常用漢字通過串口中斷服務(wù)程序按照GB2312編碼順序存儲到W25X16芯片中,之后在測試程序中調(diào)用GUI_DispStringAt()函數(shù)在液晶屏幕上顯示“河南理工大學(xué)HPU”等字樣,字符顯示正常,說明外置字庫順利被調(diào)用。液晶顯示效果如圖7所示。

        圖7 液晶顯示效果圖Fig.7 LCD effect picture

        6 結(jié) 論

        通過將μC/GUI字庫文件存儲于外置spi flash中,在兼顧讀取速度的同時解決了字庫文件過大造成的對MCU存儲空間浪費(fèi)的問題,實(shí)驗(yàn)結(jié)果表明外置字庫能被μC/GUI正常調(diào)用和顯示,為嵌入式圖形應(yīng)用提供了一個價格低廉、同時支持中文顯示的開發(fā)平臺。下一步將考慮為常用漢字設(shè)置一個單獨(dú)的緩沖區(qū),從而進(jìn)一步提高μC/GUI從外置flash中讀取字庫信息的速度,增強(qiáng)μC/GUI中文顯示的能力。

        [1] 黃健.基于 MiniGUI的 UCDOS字庫接口實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2011,37(1):273-279.Huang J.Implementation of UCDOS font interface based on MiniGUI[J].Computer Engineering,2011,37(1):273-279.(in Chinese)

        [2] 葛欣,孟凡榮.使用μC/GUI開發(fā)圖形用戶界面[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(1):1-3.Ge X,Meng F R.UsingμC/GUI to develop graphical user interface [J].Computer Engineering and Design,2005,26(1):1-3.(in Chinese)

        [3] 田志宏,徐軍.嵌入式μC/GUI的移植與平臺開發(fā)[J].自動化與儀表,2007(3):76-79.Tian Z H,Xu J.Transplant of embeddedμC/GUI and development of platform [J].Automation &Instrumentation,2007(3):76-79.(in Chinese)

        [4] 劉濱,劉兵,趙艷華.基于μC/GUI的嵌入式圖形界面設(shè)計(jì)[J].液晶與顯示,2005,20(6):558-662.Liu B,Liu B,Zhao Y H.Embedded graphical interface design based onμC/GUI[J].Chinese Journal of Liquid Crystals and Displays,2005,20(6):558-662.(in Chinese)

        [5] 吳燕燕,賀鋒濤,孫林軍.基于LPC214X平臺的μC/GUI移植研究[J].液晶與顯示,2012,27(3):338-341.Wu Y Y,He F T,Sun L J.Transferability ofμC/GUI on LPC214Xplatform [J].Chinese Journal of Liquid Crystals and Displays,2012,27(3):338-341.(in Chinese)

        [6] 張兵,陳光.基于SOPC的μC/GUI移植開發(fā)[J].光電子技術(shù),2012,32(3):195-199.Zhang B,Chen G.Transplant ofμC/GUI based on SOPC builder[J].Optoelectroinc Technology,2012,32(3):195-199.(in Chinese)

        [7] 王海霞,武一.基于SOPC的LCD顯示模塊的設(shè)計(jì)[J].液晶與顯示,2012,27(4):508-514.Wang H X,Wu Y.Design and implementation of LCD module based on SOPC [J].Chinese Journal of Liquid Crystals and Displays,2012,27(4):508-514.(in Chinese)

        [8] 羅衛(wèi)兵,胡健生.基于STM32+ucGUI的北斗導(dǎo)航定位系統(tǒng)設(shè)計(jì)[J].液晶與顯示,2014,29(2):195-201.Luo W B,Hu J S.Design of Beidou navigation system based on STM32&ucGUI[J].Chinese Journal of Liquid Crystals and Displays,2014,29(2):195-201.(in Chinese)

        [9] 童超,金慶輝,趙建龍.一種用于POCT的嵌入式實(shí)時圖像采集處理系統(tǒng)[J].光學(xué)精密工程,2008,16(4):720-725.Tong C,Jin Q H,Zhao J L.Novel real time image collection system for point-of-care test[J].Optics and Precision Engineering,2008,16(4):720-725.(in Chinese)

        [10] 王曉東,劉文耀,金月寒,等.基于DSP和CPLD的激光雷達(dá)圖像采集和顯示集成系統(tǒng)[J].光學(xué)精密工程,2004,12(2):190-194.Wang Y D,Liu W Y,Jin Y H,et al.Laser radar image acquisition and display integrated system based on DSP and CPLD [J].Optics and Precision Engineering,2004,12(2):190-194.(in Chinese)

        [11] 覃愛娜,汪曉問,桂衛(wèi)華.基于LCM 與字庫芯片的中英文字符顯示技術(shù)[J].信息技術(shù),2012(8):28-32.Tan H N,Wang X W,Gui W H.Technology of displaying Chinese and western characters based on LCM and font chip[J].Information Technology,2012(8):28-32.(in Chinese)

        [12] 馮月芹,湯小龍.高通字庫芯片 GT23H32S4W 的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(12):45-47.Feng Y Q,Tang X L.Application of GT23H32S4WChinese character library chip[J].Microcontrollers & Embedded Systems,2013(12):45-47.(in Chinese)

        [13] 宋玉貴,尹艷玲.基于LPC1788Emwin中文顯示的設(shè)計(jì)與研究[J].工具技術(shù),2013,47(7):24-26.Song Y G,Yin Y L.Design of displaying in Chinese based on LPC1788Emwin[J].Tool Engineering,2013,47(7):24-26.(in Chinese)

        猜你喜歡
        字庫外置字符
        尋找更強(qiáng)的字符映射管理器
        No.2 喜茶聯(lián)合漢儀字庫推出微型書和書簽
        PLC可編程控制器相關(guān)外置的選擇計(jì)算研究
        電子制作(2019年13期)2020-01-14 03:15:34
        字符代表幾
        一種USB接口字符液晶控制器設(shè)計(jì)
        電子制作(2019年19期)2019-11-23 08:41:50
        車載GSM-R外置抗干擾設(shè)備
        消失的殖民村莊和神秘字符
        某型號產(chǎn)品的字庫遷移優(yōu)化設(shè)計(jì)
        電子世界(2018年7期)2018-04-26 08:51:35
        電能表用外置斷路器常見失效模式分析
        相同字庫條件下激光打印文件特征的變化規(guī)律和特點(diǎn)
        国产成人无码aⅴ片在线观看| 亚洲人成综合第一网站| 国产特黄级aaaaa片免| 国产久热精品无码激情| 产国语一级特黄aa大片| 久久精品国语对白黄色| 草草影院ccyy国产日本欧美| 91久久大香伊蕉在人线国产| 日韩无码专区| 国精品无码一区二区三区在线| 8av国产精品爽爽ⅴa在线观看| 久久综合老鸭窝色综合久久| 亚洲一区在线观看中文字幕| 女人被爽到呻吟gif动态图视看| 亚洲无码a∨在线视频| 91精品啪在线观看国产色| 久久亚洲av成人无码国产最大| 18禁裸男晨勃露j毛免费观看| 久久久久国产亚洲AV麻豆| 99RE6在线观看国产精品| 国产一区二区三区porn | 欧美一级视频在线| 成人自拍偷拍视频在线观看| 久久午夜羞羞影院免费观看| 亚洲综合一区无码精品| 东京热加勒比日韩精品| 亚洲第一幕一区二区三区在线观看 | 国产精品国产三级国产av′| 亚洲av午夜成人片精品| 亚洲国产综合精品中久| 久久久久亚洲精品无码网址蜜桃 | 国产91网| 中文无字幕一本码专区| 亚洲精品乱码久久久久久不卡 | 亚洲av无码专区亚洲av伊甸园| 国产乱人视频在线看| 精品久久一区二区av| 人妻 丝袜美腿 中文字幕 | 日韩熟女精品一区二区三区视频| 极品美女扒开粉嫩小泬图片| 久久久久亚洲精品天堂|