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.mzph.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…