STemWin移植筆記

實現將STemWin圖形庫移植到STM32F103ZET中,記錄簡單的操作步驟,以便自己后續查閱。


1/ 從官網獲取STemWin庫的壓縮包en.stemwin.zip。

2/ 解壓后,在路徑STemWin_Library_V1.2.0\Libraries\STemWinLibrary532下可以找到庫文件。

3/ 移植前的準備工作,創建一個完整的工程,并實現對lcd驅動的顯示函數(需要用到畫點和讀點兩個基礎函數)。另外需要實現一個定時中斷(可以用系統SysTick實現)。

4/ 將STemWin庫路徑STemWin_Library_V1.2.0\Libraries\STemWinLibrary532下的Config、inc、Lib、OS文件夾拷貝到工程目錄中(可以新建一個專門的文件夾存放)。

5/ 將拷貝過來文件其中的5個文件添加到keil工程中。

  Config\GUIConf.c??

  Config\GUIDRV_Template.c??

  Config\LCDConf_FlexColor_Template.c(特殊LCD驅動器改成LCDConf_Lin_Template.c)??

  Lib\STemWin532_CM3_Keil.lib(該文件根據工程實際需求確定的)

  OS\GUI_X.c(如果采用操作系統則添加GUI_X_OS.c)

6/?修改GUIConf.c

1 #define GUI_NUMBYTES  1024*30

7/ 修改GUIDRV_Template.c

  包含lcd驅動庫的顯示頭文件,#include "my_lcd.h"

  函數_SetPixelIndex()中,在大括號中間,實現顯示器畫點操作。

  函數_GetPixelIndex()中,在大括號中間,實現顯示器讀點操作。

8/?修改LCDConf_FlexColor_Template.c

  包含lcd驅動庫的顯示頭文件,#include "my_lcd.h"

  根據顯示器尺寸修改兩個參數:XSIZE_PHYS和YSIZE_PHYS

  實現讀寫lcd寄存器的四個函數:LcdWriteReg、LcdWriteData、LcdWriteDataMultiple、LcdReadDataMultiple

 1 /*********************************************************************
 2 *
 3 *       Local functions
 4 *
 5 **********************************************************************
 6 */
 7 /********************************************************************
 8 *
 9 *       LcdWriteReg
10 *
11 * Function description:
12 *   Sets display register
13 */
14 static void LcdWriteReg(U16 Data) {
15   // ... TBD by user
16   LCD->LCD_REG = Data;
17 }
18 
19 /********************************************************************
20 *
21 *       LcdWriteData
22 *
23 * Function description:
24 *   Writes a value to a display register
25 */
26 static void LcdWriteData(U16 Data) {
27   // ... TBD by user
28     LCD->LCD_RAM = Data;//寫入數據                 
29 }
30 
31 /********************************************************************
32 *
33 *       LcdWriteDataMultiple
34 *
35 * Function description:
36 *   Writes multiple values to a display register.
37 */
38 static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
39   while (NumItems--) {
40     // ... TBD by user
41     LCD->LCD_RAM = *pData++;//寫入數據                 
42   }
43 }
44 
45 /********************************************************************
46 *
47 *       LcdReadDataMultiple
48 *
49 * Function description:
50 *   Reads multiple values from a display register.
51 */
52 static void LcdReadDataMultiple(U16 * pData, int NumItems) {
53   while (NumItems--) {
54     // ... TBD by user
55     *pData++ = LCD->LCD_RAM;
56   }
57 }

  LCD_X_Config函數中,根據實際LCD顯示器的驅動芯片,修改GUIDRV_FlexColor_SetFunc函數的具體參數,驅動芯片對應的參數可詳查手冊。

  LCD_X_DisplayDriver函數,case LCD_X_INITCONTROLLER部分中添加調用LCD顯示器的初始化函數。

9/ 根據項目實際情況,修改頭文件GUIConf.h

#ifndef GUICONF_H
#define GUICONF_H/*********************************************************************
*
*       Multi layer/display support
*/
#define GUI_NUM_LAYERS            2    // Maximum number of available layers/*********************************************************************
*
*       Multi tasking support
*/
#ifdef OS_SUPPORT#define GUI_OS                    (1)  // Compile with multitasking support
#else#define GUI_OS                    (0)
#endif/*********************************************************************
*
*       Configuration of touch support
*/
#ifndef   GUI_SUPPORT_TOUCH#define GUI_SUPPORT_TOUCH       (0)  // Support touchscreen
#endif/*********************************************************************
*
*       Default font
*/
#define GUI_DEFAULT_FONT          &GUI_Font6x8/*********************************************************************
*
*         Configuration of available packages
*/
#define GUI_SUPPORT_MOUSE             (1)    /* Support a mouse */
#define GUI_WINSUPPORT                (1)    /* Use window manager */
#define GUI_SUPPORT_MEMDEV            (1)    /* Memory device package available */
#define GUI_SUPPORT_DEVICES           (1)    /* Enable use of device pointers */#endif  /* Avoid multiple inclusion */

10/ 主函數中初始化硬件相關后,編寫測試代碼,并在while(1)循環中調用函數GUI_Delay(10):

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);  GUI_Init();  GUI_SetBkColor(GUI_BLUE);   //設置背景顏色GUI_SetColor(GUI_YELLOW);   //設置顏色GUI_Clear();                //清屏GUI_SetFont(&GUI_Font24_ASCII); //設置字體GUI_DispStringAt("HELLO WORD!", 0, 0);GUI_DispStringAt("123456789", 0, 100);

?

轉載于:https://www.cnblogs.com/banmablog/p/11132760.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386505.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

這些新技術你們都知道嗎?看這一篇就夠了!

前言 現在已經進入招聘季節,本篇文章旨在分享知名互聯網企業面試官面試方法和心得,希望通過本文的閱讀能給程序員帶來不一樣的面試體驗和感受,放松面試心態,積極備戰! 面試題 PS:由于文章篇幅問題&#x…

spring boot redis 分布式鎖

yml文件 redis:host: 127.0.0.1port: 40197password: 123456timeout: 5000database: 0jedis:pool:min-idle: 0max-idle: 8max-active: 8max-wait: -1 RedisConfig.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer…

mysql函數(二.數字函數)

數字函數 1.ROUND(X) 四舍五入取整數 ROUND(X,D) 四舍五入根據D幾,來保留幾位小數 (1)四舍五入取整數 select ROUND(1.567); 結果:2 (2)四舍五入根據D2,來保留2位小數 select ROUND(1.567,2)DESC; 結果:1.57 2.CEIL…

這份1307頁Android面試全套真題解析,源碼+原理+手寫框架

前言 前不久,幾個朋友聚會,談到了現在的后輩,我就說起了那個大三就已經拿到網易offer的小學弟。 這個學弟是00后,專升本進入我們學校的。進來后就非常努力,每次上課都是第一個到教室的,每次都是坐第一排&…

CAS的ABA問題描述 AtomicStampReference

CAS的ABA問題描述 在CAS操作的時候,其他線程將當前變量的值從A改成B,又改回A;CAS線程用期望值A與當前變量比較的時候,發現當前變量沒有變,于是CAS就將當前變量進行了交換操作,但其實當前變量改變過&#x…

[轉]OpenContrail 體系架構文檔

OpenContrail 體系架構文檔英文原文:http://opencontrail.org/opencontrail-architecture-documentation/ 翻譯者:KkBLuE知行合一 其微信號:kkbluepublic, SDNAP.com翻譯整理 OpenContrail 體系架構文檔 1 概述 1.1 使用案例 1…

這份354頁筆記的Android進階知識+大廠高頻面試題,絕對干貨

程序員與別的專業有所不同,其他專業都是越老越香,而程序員卻是一個例外,因為計算機技術更新太快,而且工作強度很大,因此大部分程序員只會寫 3 年代碼。3 年后要不晉升做項目經理,要么轉行,個別研…

原子性 atomic 類用法

當程序更新一個變量時,如果多線程同時更新這個變量,可能得到期望之外的值,比如變量i1,A線程更新i1,B線程也更新i1,經過兩個線程操作之后可能i不等于3,而是等于2。因為A和B線程在更新變量i的時候…

這是一份用心整理的Android面試總結,聰明人已經收藏了!

前言 本文想分享的是如何準備阿里面試的以及面試過程的所想所得,希望能幫到你。 首先,可能要讓你們失望的是,這篇文章不會有大篇幅的面試題答案。如果想要看這方面的內容,可以看我之前的文章。感謝關注 很多人準備面試的時候&a…

git 技能圖

---- 轉載于:https://www.cnblogs.com/WHWWHW/p/11136606.html

AtomicStampedReference源碼分析

之前的文章已經介紹過CAS的操作原理,它雖然能夠保證數據的原子性,但還是會有一個ABA的問題。 那么什么是ABA的問題呢?假設有一個共享變量“num”,有個線程A在第一次進行修改的時候把num的值修改成了33。修改成功之后,緊接著又立刻…

django:bootstrap table加載django返回的數據

bootstrap table加載表格數據有兩類方式: 一種通過data屬性的方式配置,一種是javascipt方式配置 這里看js配置方式: 1、當數據源為.json文件時 url參數寫上json文件的地址就行,但是json文件格式必須為json格式(2種): a:一種為json…

這是一份面向Android開發者的復習指南,成功入職字節跳動

前言 19年6月份從網易云音樂離開,放棄了留學機會,開始了人生的第一次創業,前后嘗試了兩個項目,因為個人能力與時機因素都失敗了,雖然沒能享受到創業所能夠帶來高杠桿物質上的回報,但是對個人軟技能和自我邊…

JVM啟動參數

不管是YGC還是Full GC,GC過程中都會對導致程序運行中中斷,正確的選擇不同的GC策略,調整JVM、GC的參數,可以極大的減少由于GC工作,而導致的程序運行中斷方面的問題,進而適當的提高Java程序的工作效率。但是調整GC是以個極為復雜的過程&#xf…

【UOJ 92】有向圖的強連通分量

【題目描述】: 有向圖強連通分量:在有向圖G中,如果兩個頂點vi,vj間(vi>vj)有一條從vi到vj的有向路徑,同時還有一條從vj到vi的有向路徑,則稱兩個頂點強連通(strongly connected)。如果有向圖G…

這篇文章可以滿足你80%日常工作!一線互聯網公司面經總結

前言 最近發現大家都喜歡看面試相關的文章,我也跟一波風,總結了一下我面試中所遇到的問題總結,分享一下面試中被問的最多的一些問題。 希望對正在找工作的朋友提供一些幫助。 好了話不多說,進入正題。 作為安卓開發者&#xff…

java并發synchronized 鎖的膨脹過程(鎖的升級過程)深入剖析(1)

我們先來說一下我們為什么需要鎖? 因為在并發情況為了保證線程的安全性,是在一個多線程環境下正確性的概念,也就是保證多線程環境下共享的、可修改的狀態的正確性(這里的狀態指的是程序里的數據),在java程…

MSCRM二次開發實現自動編號功能

功能描述:對客戶實體實現自動編號功能,1、2、3、4...... 自動編號存放于屬性accountnumber.原  理:在mscrm服務器用一個文本文件存放當前最新編號,每當創建客戶記錄時在PreCreate事件接口做以下步驟:1、鎖定文本文件…

這篇文章可以滿足你80%日常工作!成功入職騰訊

什么是中年危機 根據權威數據顯示,國內IT程序員鼎盛時期是在25-27歲左右,30歲對于程序員而言完全是一個38線,接著就是轉業轉崗的事情,這一點在業界也算是一個共識了。 大學畢業步入IT行業普遍年齡也是在22歲左右,然而…

java并發synchronized 鎖的膨脹過程(鎖的升級過程)深入剖析(2)

接下來我們分析兩個批量偏向撤銷的相關案例(禁止偏向鎖延遲的情況下:-XX:UseBiasedLocking -XX:BiasedLockingStartupDelay0): 案例一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28…