基于TouchGFX的stm32显示界面开发——显示篇

最近做的那个啥玩意要做UI界面,正好ST有个自家的UI生成器,也算个好东西。就拿来做个ui。
结果亮屏就快做了一周,蚌埠住了
好,这就来记录一下这个点亮屏幕的过程罢,好时代来临力。

LTDC

首先我们说一下什么是LTDC,这就不得不说屏幕接口的几种形态。

  1. MCU屏,这种屏幕和主机连接的方法一般是用8080端口或者spi端口,这种屏幕有一种好处,那就是不用占用主机的RAM(运行内存),这是因为MCU屏自带了显存,我们只要把数据传输过去就行了
  2. RGB屏幕:这种屏幕就是我们今天要用到的屏幕,这种屏幕不带显存,所有的显示部分都是由主机传输过去的。这导致我们使用这种屏幕需要花费大量的RAM才能正常运行。

LTDC的接口定义

  • LTDC有RGB三种颜色各八根数据线
  • LTDC有行列各一个刷新线
  • 有一根CLK时钟线
  • 有一根数据使能线
    其中只有数据使能线有效的时候显示屏会接受显示信息。

LTDC接口控制器

由于cubemx这种好软件的存在,我们可以直接配置ltdc接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOfuMZMO-1651311431906)(https://static01.imgkr.com/temp/a2ecd372e49e4405a22686b448a40b60.png "LTDC配置界面")]

首先我们看sync系列的参数

  1. WIdth:这个里面的参数尤其关注Active,这个参数就是你屏幕的宽度,其他的数据在你填完active以后会自动计算(不一定是对的,但是能用),剩下的那些数据可以直接用生成的数据,也可以用显示屏datasheet给出的数据,这里每个显示屏不一定是一样的,所以就不给出具体数值了
  2. height:这和width差不多,也是直接关注active即可
    然后我们看blackground,这个参数是设计背景色的,保持000即可

接下来我们转到Layer Settings
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DA2Xn8HC-1651311431908)(https://static01.imgkr.com/temp/2582066194b74ae3ad40e73b4858f8c5.png “layer settings”)]

  1. number of layers:这个填一,虽然可以用两个,但是touchgfx的要求是一个,所以我们选一个。
  2. 接下来就是layer的宽和高,这个好理解,直接填上你屏幕的有效范围,比如我的屏幕是484*272
  3. 然后选择颜色格式,这个随个人需要选择,我这里使用的是565.
  4. Blending里面只需要将第一个改成255即可,剩下的全部默认
  5. 关于FrameBuffer我们选择连接好的SDRAM(关于这部分会额外出一个博客)
  6. 下面两个依然是填写自己的屏幕参数即可,这部分会用来计算缓冲区的长度
  7. 特别注意开启ltdc的中断.

DMA2D/chrom-ART

这个东西可以加速图形处理,直接开启并且默认操作即可.

硬件解码图像

启动即可

TouchGFX设置

touchgfx是意法半导体公司开放给所有人的ui设计系统,配套designer和cubemx一起使用,可以图形化设计UI.非常方便

cubemx之中的touchgfx设置

下载和安装选择应用包的过程我就不说了,网上很多.这个不会建议紫菜

  1. 我们先看第一个设置:接口,这个东西没啥好说的,选择LTDC(除非你用的是其他接口或者你想自己写一个协议)
  2. 然后就是缓冲区的像素格式,选择和你之前弄得玩意一样的格式,我这边还是565
  3. 缓冲器地址选择按地址,下面的地址直接写自己ltdc的地址(也是sdram里面来的).
  4. 时钟来源直接选ltdc,启动DMA2D,配置好使用RTOS_V2(没有使用rtos就不要选).但是大项目建议用rtos
  5. 外部数据读取时565特有的功能,不管他
  6. 视频解码,这个只有在开启了上文的图像解码才会出现,酌情选择,下面填的还是屏幕参数.

时钟设置

时钟这个是很重要的设置项目,因为ltdc是按照时钟频率发送数据的,这导致过高的频率会让屏幕显示异常,而过低的频率会影响屏幕的刷新率,导致卡顿,这都是我们不想见到的.

  1. 各个设备的时钟设置数据不一定是一样的.但是我们在时钟设置界面中能找到一条直通LTDC的线,这个数据就是我们要设置的,我们可以通过分频等操作来控制输出到LTDC显示接口的时钟频率.请查看自己的屏幕数据手册来确定自己需要的时钟频率.我设置的是10Mhz.

点击生成代码键

这个没啥好说的吧,还有一些基本设置应该不是这里需要讲的.我们会得到一个带有TouchGFX项目文件夹的项目
注意:这个时候进行编译是会提示缺失文件报错的.我们还需要去TouchGFXDesigner软件中再次生成代码才行.

TouchGFXDesigner

  1. 选择生成的代码中的项目文件(touch文件不是keil项目文件).
  2. 随便整点啥,生成代码

keil

注意:这一步非常重要,我在这里卡了很久

  1. 打开项目文件,来到FREERTOS.c文件,找到默认的rots线程
  2. 在线程中添加以下代码
    MX_TouchGFX_Process();
    这样才能启动touchGFX线程.
  3. 编译烧写运行即可.
    显示就有了()

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值