嵌入式 STM32 实现STemwin移植+修改其配置文件,驱动LCD显示文本 (含源码,建议收藏)

news2024/10/2 12:34:12

目录

一、STemwin 简介

二、源码下载 

1、在移植STemwin源码之前,需要一个已经具备LCD读写,填充指定颜色等函数功能的一个工程;

2、STemwin 

3、源码下载

三、STemwin移植

1、解压源码路径

2、STemwin文件介绍 

 四、修改配置文件,驱动LCD显示文本

1、属性修改

2、修改GUIConf.c文件

 3、修改GUIConf.h文件

4、修改GUIDRV_Template.c文件

4.1 修改打点函数

4.2修改读点函数

4.3 修改填充颜色函数

4.4 修改画一根线函数 

5、修改GUIDRV_Template.h文件

6、LCDConf_FlexColor_Template.c文件 

7、修改之前添加的GUIDRV_Tempalte.h文件里面的API函数 

8、修改GUI延时文件 

9、GUI初始化+开启CRC时钟 

1、找到开启CRC的时钟--AHB1ENR 

2、调用GUI_Init();初始化函数

10、显示文本 

五、完整源码 


一、STemwin 简介

参考百度资料说明

链接:

https://cloud.tencent.com/developer/article/1938083

二、源码下载 

1、在移植STemwin源码之前,需要一个已经具备LCD读写,填充指定颜色等函数功能的一个工程;

可以适当的把工程内没有使用到的文件删除掉;

2、STemwin 

STenWin是基于enWin发展而来,

 emWin是由德国SEGGER公司开发,可为图形LCD设计提供高级支持,极大简化了LCD设计。为恩智浦ARM微控制器用户免费提供的emWin图形库。

在国内做嵌入式系统的大部分都使用emwin,其简单来说就是一套图形库。

做电子硬件开发,常常要为设计一个良好的UI伤透脑筋,写很多的代码也不尽人意,还要不断调试,emwin正是解决这种用户界面需求的图形库,只要在你的设计中嵌入这种图形库,就能很方便使用里面的模块化设计,既能提高设计界面图形质量,还大大的减少开发时间。

3、源码下载

通过官网下载的STemwin源码方式一共有两种;

方法1:备注,这个是21年的下载方式,22年官网更新,目前这个下载途径已经没得了;

没得了就不用过多介绍了,这边介绍第二种方法:

方法2:

ST把STEMWIN源码和STM32CubeF4放一起了,我们去官网下载这个STM32CubeF4文件,即可得到STEMWIN源码

 open software page:

 

 获取自己想要的版本软件:

接受协议:

 

登录或者注册:

 

 

下载路径:

 

解压,完成下载源码操作。

三、STemwin移植

备注:单片机或者芯片不运行操作系统,我们就成为裸机;

1、解压源码路径

2、STemwin文件介绍 

 

文件夹说明:

  1. Config     LCD接口以及emWin配置文件;
  2. Documentation     STemwin的函数说明文档;
  3. inc     函数的头文件;
  4. Lib 函数库;
  5. OS 裸机或者OS情况下的驱动;
  6. Simulation  仿真用到的文件;
  7. Software   使用到的软件

 把STemwin的所有源码移植到工程中;

 

区分:

 

在Lib 文件当中,保留了连发哥哥文件,将他们删除掉;

 

只需要这几个就可以了;

 

3、打开自己工程,添加文件

 

添加路径

 

添加stemwin 文件到工程当中

 

添加不带有操作系统的文件

 

 最终添加以下五个文件就可以了;

然后编译报错一个错误:LCDConf.h文件没有找到;

 

解决;

在inc文件下,手动创建一个叫LCDConf.h的文件就可以了;

 编译没有报错,完成移植;

 

 四、修改配置文件,驱动LCD显示文本

1、属性修改

查看

 

需要修改的文件;

 

 

上图为:STemWin结构层级图

2、修改GUIConf.c文件

 

 

 3、修改GUIConf.h文件

默认即可;操作系统宏定义;

 

4、修改GUIDRV_Template.c文件

修改 GUIDRV_Template.c 文件在这个文件中我们要完成 STemWin 的打点、 读点、 填充等函数的实现, 最后还优化了 16BPP, 这个文件是移植的重点, 这个文件中的代码优化好的话会极大的提升 STemWin 的性能, 在这个文件中我们需要修改四个函数: _SetPixelIndex()_GetPixelIndex()_FillRect()_DrawBitLine16BPP()

4.1 修改打点函数

 

程序修改:

 

4.2修改读点函数

修改:

 

4.3 修改填充颜色函数

4.4 修改画一根线函数 

5、修改GUIDRV_Template.h文件

添加GUIDRV_Template.h到工程当中

6、LCDConf_FlexColor_Template.c文件 

修改屏幕的像素参数

 修改配置文件

 

修改颜色的宏定义

 

 

7、修改之前添加的GUIDRV_Tempalte.h文件里面的API函数 

 

跳转到需要的替换的宏定义

 

替换之后的

 

8、修改GUI延时文件 

9、GUI初始化+开启CRC时钟 

在官方的入门指南文档中,初始化说明如下:

在调用GUI_Init();之前应该先初始化CRC时钟,后进行初始化GUI

1、找到开启CRC的时钟--AHB1ENR 

找到函数库的AHB1ENR函数

 

 

2、调用GUI_Init();初始化函数

 注意:GUI_Init();初始化函数必须初始化在我们LCD函数初始化之后

10、显示文本 

通过调用显示文本函数,验证STemwin是否移植成功,打开emwin手册,找到显示文本文章

选择其中一个能够显示文本的API函数

 

找到函数实例

 

调用显示

 

效果图:

 

五、完整源码 

编写不易,私聊!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyTorch】教程:DCGAN

DCGAN 本教程将通过一个示例来介绍 DCGAN。 我将训练一个生成对抗网络 (GAN) ,在向其展示许多真实名人的照片后生成新的名人。这里大部分代码来自于 pytorch/examples 。本文档针对这些实现进行全面解释,并阐述该模型的工作方式和…

在windows搭建Redis集群并整合入Springboot项目

搭建集群配置规划Redis集群编写bat来启动每个redis服务安装Ruby安装Redis的Ruby驱动出现错误镜像过期SSL证书过期安装集群脚本redis-trib启动每个节点并执行集群构建脚本测试搭建是否成功配置springboot项目中配置规划Redis集群 我们搭建三个节点的集群,每个节点有…

骨传导耳机推荐哪款好,列举几款是市面上热销的骨传导耳机

​骨传导耳机是一种新型的耳机类型,通过震动和声音将振动传到了耳道外,对耳道不会产生损伤,能够保护听力。相比于传统耳机的优势有很多,比如运动时佩戴更加稳固,也可以在听歌时与人交谈。但在市面上的骨传导耳机款式可…

无重叠区间-力扣435-java贪心策略

一、题目描述给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。示例 1:输入: intervals [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。…

Spring MVC 源码- HandlerAdapter 组件(四)之 HandlerMethodReturnValueHandler

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…

服务器部署—XShell连接阿里云服务器,linux系统里面数据库访问乱码怎么办?

我是用的xshell连接的云服务器,今天想在服务器上面部署一个项目,但是当我在数据库里面安装mysql之后,通过select的sql语句查询数据,在表里面的中文出现乱码,给我直接干懵了,这个怎么办?而且还有…

【项目精选】jsp网上招标系统(视频+源码+论文)

点击下载源码 威客理论的起源 威客理论的提出基于其创始人刘锋发现的三个基石:发现电子公告牌功能分离现象;确认互联网知识价值化时代的到来、互联网是人类大脑的联网而不是仅仅为机器的联网。 1、电子公告牌功能分离现象的发现  2005年6月威客&#xf…

好上好信息 API 微服务集群在 KubeSphere 的部署实践

作者:徐鹏、深圳好上好信息(001298)、技术副总监、负责云服务器团队的架构设计及业务开发,拥抱云原生,乐于分享,终生学习。 公司简介 好上好信息(001298)是中国大陆一家致力于为中国智造提供全面支持的综合…

【SpringCloud系列】SpringCloudConfig配置中心

前言 我们在开发过程中总是会有各种各样的配置,比较如数据库连接配置,Mybatis配置等等各种组件的配置,这些配置都放在yml中,如果想要变更这些配置,需要修改yml文件,然后重新部署项目才能生效,同…

springboot+vue软件bug项目测试过程管理系统

config:主要用来存储配置文件,以及其他不怎么动用的信息 controller:项目的主要控制文件 dao: 主要用来操作数据库 entity: 实体,用来放与数据库表里对应的实体类,表中的字段对应类中的属性值,并…

Redis 主从复制-服务器搭建【薪火相传/哨兵模式】

Redis 安装参考文章:Centos7 安装并启动 Redis-6.2.6 注意:本篇文章操作,不能在 静态IP地址 下操作,必须是 动态IP地址,否则最后主从服务器配置不成功! 管道符查看所有redis进程:ps -ef|grep re…

调式源码解决 seata 报错 can not get cluster name 问题

最近在使用Spring Cloud整合分布式事务seata,项目启动之后,控制台一直报错: can not get cluster name in registry config service.vgroupMapping.nacos-provide-order-seata-service-group, please make sure registry config correct can not get cl…

问题排查:使用mysql_options连接ob_mysql出现中文乱码

问题背景 用户反馈,在使用ob_mysql的场景下,前端页面、日志都出现中文展示为乱码 复现问题 排查过程 通过mysql命令行连接到mysql后通过设置编码格式,执行简单查询语句 验证结论: 如果使用set names gbk能命令行查询显示中文…

【JDK8新特性之Stream流-并行的Stream流以及案例实操】

一.JDK8新特性之Stream流-并行的Stream流以及案例实操 二. 并行的Stream流 2.1 串行的Stream流 我们前面使用的Stream流都是串行,也就是在一个线程上面执行。 /*** 串行流*/Testpublic void test01(){long count Stream.of(1, 2, 3, 4, 5, 6).filter(s -> {S…

Linux内核段页式内存管理技术

一、概述 1.虚拟地址空间 内存是通过指针寻址的,因而CPU的字长决定了CPU所能管理的地址空间的大小,该地址空间就被称为虚拟地址空间,因此32位CPU的虚拟地址空间大小为4G,这和实际的物理内存数量无关。 Linux内核将虚拟地址空间分…

Calendar计算两个时间之间相差几个月

目录说明说明 计算两个时间之间相差几个月: public int getMonth(String startDt, String endDt) { int month 0;try {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar satrt Calendar.getInstance();Calendar end Cal…

有限差分法求解不可压NS方程

网上关于有限差分法解NS方程的程序实现不尽完备,这里是一些补充注解 现有的优秀资料 理论向 【1】如何从物理意义上理解NS方程? - 知乎 【2】NS方程数值解法:投影法的简单应用 - 知乎 【3】[计算流体力学] NS 方程的速度压力法差分格式_…

股票量化交易SQL特征工程入门

虽然现在各种量化教程和自助平台铺天盖地,但是对于新人来说入门最重要的事情就是挖掘特征。 对于传统的学习路径第一步是学习Python或者某一门编程语言,虽说Python入门容易上手快,但是要在实际应用中对股票数据进行分析,并挖掘有…

【数据库】第一章 绪论

第一章 绪论 1.1 数据库系统概述 数据库课程的学习内容 数据库的4个基本概念: 数据:描述事物的符号记录称为数据。 数据的含义成为数据的语义,数据与其语义是不可分割的。 数据库:数据库是长期存储在计算机内、有组织、可共享的…

Netty核心组件ChannelPipeline事件handler源码解析

源码解析目标 当请求进来,ChannelPipeline如何协调内部这些Handler通过源码梳理ChannelPipeline 与ChannelHandlerContext中的read,fireChannelRead等方法的不同 inbound源码解析 在 Netty启动流程源码剖析 文中我们已经知道,启动后&#…