STM32硬件基础--LTDC显示图像

2023-05-16

STM32硬件基础--LTDC显示图像

海东青电子

2019.11.13 23:40:05字数 2,635阅读 3,102

【海东青电子原创文章,转载请注明出处:https://www.jianshu.com/p/216388df4d4d】

(实例代码下载地址:https://github.com/haidongqing/ltdc-demo)

LTDC是一种显示接口,主要被MCU用来连接TFT屏,这也是Lcd-Tft Display Controller(LTDC)的本意。各种常用的显示接口请参见这篇文章:《各种显示接口DBI、DPI、LTDC、DSI、FSMC》(向原作者致意!),文中详细描述了3大类显示接口:DBI、DPI和DSI。LTDC属于DPI(display pixel interface,显示像素接口,也称RGB接口),它不断地向显示器(TFT液晶屏)发送图像数据(即:不断刷新),液晶屏不需要具备显存,显存在MCU一端(片内RAM或外扩RAM)。可以直观地认为LTDC就是PC上的“显卡”。

液晶屏上的像素点是一行、一行地显示出来的,扫描到最后一行后,再回到第一行扫描,如此循环往复,很像VGA显示器的工作模式。

 

图一 VGA显示器

而且,LTDC的信号时序确实沿用了VGA的术语,为了便于理解LTDC的时序参数如何设置,先来看看关于传统的VGA的信号时序:《VGA原理详解》(向原作者致意!)。核心概念如下:

      “显示器的扫描方式:扫描从屏幕左上角一点开始,从左向右逐点扫描。每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。

      从扫描方式中我们知道,行同步,场同步以及消隐区的概念。回到时钟上来。以行扫描为例子,在一行中由于需要行消隐,所以要求一定的时钟周期用于行消隐,当然也有行同步信号。”

 

图二

上图中,1-6处是重点,是LTDC的主要参数,后面将详述。LTDC的功能框图:

 

图三

LTDC的信号可以分为两类:4个控制信号(像素时钟LCD_CLK、水平同步HSYNC、垂直同步VSYNC、数据有效DE)和3个RGB数据信号(8-bit x 3)。LTDC与液晶面板之间的通讯是“同步的”,受LCD_CLK的控制。STM32F746G-DISCO开发板有关TFT显示器的电路原理图如下:

 

图四

4个控制信号和3个RGB数据信号与图三相对应。除此之外,注意上图绿色框中的 LCD_BL_CTRL 和 LCD_DISP 2个信号线。LCD_BL_CTRL 控制电源芯片 STLD40D 的输出,当其高电平时有效,使得输出的 LCD_BL_A(阳极)与 LCD_BL_K(阴极)导通,TFT面板的背光打开。这样,LCD_BL_CTRL (板子上是PK3管脚)可以用来控制TFT面板是否显示。LCD_DISP(板子上是PI12管脚) 用来控制 TFT面板是否进入休眠状态,见 RK043FN48H-CT672B 模组的参考手册:

 

图五

RK043FN48H-CT672B 是深圳晶鸿公司的带触摸的TFT液晶模组,其中液晶驱动IC型号为 OTA5180A,其数据手册里也有关于DISP信号的描述:

 

图六

这个DISP 名字实在是令人费解,换成 Standby 或 Sleep 就容易理解了,反正是需要给高电平,才能使液晶屏正常工作。 LCD_BL_CTRL 和 LCD_DISP 这2个信号线不是LTDC“标配”的,是液晶模组“特有”的,不同的模组可能有不同的控制信号,这里特别说明一下,后面需要用CUBEMX专门配置对应的GPIO。

LTDC的硬件接口介绍完了,下面具体说说LTDC的控制逻辑。

 

图七

图七中的1-6 标号与图二的标号是一一对应的:

1、HSYNC,水平同步信号,需要指明它的脉宽,单位:像素时钟DCLK。

2、HBP,Horizontal Back Porch,水平同步信号后肩(后沿,后廓,一个意思),它之后就是真正的数据开始了。单位:像素时钟。

3、HFP,Horizontal Front Porch,水平同步信号前肩,表明一行结束,单位:像素时钟。

4、VSYNC,垂直同步信号,一帧的开始,需要指明宽度,单位:行。

5、VBP,Vertical Back Porch,垂直同步信号后肩,它之后就是一帧的首行数据开始了,单位:行。

6、VHP,Vertical Front Porch,垂直同步信号前肩,表明一帧结束,单位:行。

再加上 Active Width(宽,像素,本例中为480)、Active height(高,像素,本例中为272),这8个数据是LTDC需要配置的最重要的参数。看看液晶控制芯片手册中对参数的要求:

 

图八

上表给出了各个参数的范围,实际使用时可以在这个参考范围内做调整。注意,像素时钟DCLK的范围在5--12MHz,本例中将使用9.8MHz。

这里还要介绍两个LTDC的重要概念:显示层(Layer)与窗口(Window)。LTDC支持2个Layer,每个Layer对应一个显存,也就是一个图像。LTDC可以将2个图像叠加,layer1在下、layer2在上。2个层可以分别被使能,可以单独使用,也可以一起叠加使用。显然,这种2个(硬件)图层的结构非常利于动画的实现。例如,layer1保持不动,layer2不停改变相对位置,则看到的是上面的图像(比如,动画人物)在背景图上运动。进一步,每个层都有一个活动的“窗口”,就是图像具体的显示位置和大小,即图七中的 Active display area。窗口的大小可以等同于图层的大小(满屏),也可以小于图层,这样的设计利于编程的灵活性。例如,当只需要显示1/4大小的图片时,可以定义一个1/4大小的窗口来显示图片,对应的显存也只需要1/4大小,节省内存。而且图片的显示位置可以动态调整。

补充:关于图四中LCD_DE信号的说明:

 

图九

 

图十

当 LCD_DE 为高电平时,LTDC向液晶面板输出数据有效(就是说,LCD_DE变高后,LCD_R[7:0]等24条数据线上的输出数据有效)。

至此,与LTDC有关的参数配置讲完了,下面可以使用CUBEMX具体来配置LTDC了。

选择芯片 STM32F746NG:

 

图十一

配置外部晶振:

 

图十二

调试模式(ST-LINK):

 

图十三

配置主时钟、像素时钟:

 

图十四

HCLK配置为最高频率216MHz;绿框中的 LCD-TFT 的频率默认是48MHz,超出了5--12 的范围(见图八),但这个值是灰色的、无法更改。这是因为LTDC还没有启用,像素时钟是通过LTDC的寄存器配置的,所以到这一步还无法配置像素时钟。下面配置LTDC,需要三个步骤,先配置LTDC的参数:

 

图十五

Display Type 选 RGB888,是因为LTDC的硬件接口是RGB各占8-bit,共24条数据线(跟显存数据格式RGB565等不是一个概念、不要混淆)。

然后配置图层参数:

 

图十六

为了简化,选择了一个图层(layer1,直接显示、不关layer2的事了),图像格式是RGB565,这是显存中数据的格式。我们将在代码编程时,通过ST的图像格式转换工具将一个demo图片转化成C语言数组数据,而这个数据是RGB565的,所以上面layer1要选RGB565格式。Buffer的起始地址设置成了0xC000 0000,这是开发板上SDRAM的地址,我们的测试程序为了简化,不使用SDRAM作显存,而是直接从片内FLASH中读取图片,在CUBEMX生成的代码中,需要修改这个地址(见后)。Alpha选了最大值255,就是完全不透明显示图片(即原图)。如果Alpha=128,将看到半透明的图片;Alpha=0的话,就什么也看不到了。

第三步,也是容易被忽略的一步,检查LTDC用到的GPIO复用管脚是否正确。这是CUBEMX默认配置的:

 

图十七

与开发板原理图对比,上图中大部分GPIO的配置不对。按照电路图重新配置如下:

 

图十八

LTDC本身的所有参数配置完毕了(为什么强调“本身”?见后),再回到时钟配置页,因为LTDC使能了,图十四绿框中的参数不再是灰色的了,按下图将像素时钟DCLK配置成9.8MHz:

 

图十九

至此,所有参数配置完成了吗?没有,还差一点点。在图四时说过 LCD_BL_CTRL 和 LCD_DISP 2个信号线,它们不是LTDC本身具有的,是控制液晶面板必须的,需要将这两个GPIO配置成输出模式、并初始化成高电平:

 

图二十

全部配置工作完成,生成KEIL代码。(完整代码下载地址:https://github.com/haidongqing/ltdc-demo)

在main.c文件中,修改 MX_LTDC_Init():

 

图二十一

0xC000 0000是图十六配置的参数,例程中图片数据是保存在flash中的。图片数据保存在头文件 RGB565_480x272.h 中:

 

图二十二

编译、烧写,运行后的结果:

 

图二十三

 

touchgfx用到的三大硬件接口技术:FMC(SDRAM)、QaudSPI(NOR FLASH)、LTDC(TFT Panel),到今天全部介绍完了,下一步将进入touchgfx开发的正题:使用CUBEMX从零开始配置touchgfx!(待续......)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32硬件基础--LTDC显示图像 的相关文章

  • Oracle日常性能查看

    判断回滚段竞争的SQL语句 xff1a xff08 当Ratio大于2时存在回滚段竞争 xff0c 需要增加更多的回滚段 xff09 select rn name rs GETS rs WAITS rs WAITS rs GETS 100
  • Double.ToString 方法 (String)

    double numbers 61 1054 32179 195489100 8377 1 0437E21 1 0573e 05 string specifiers 61 34 C 34 34 E 34 34 e 34 34 F 34 34
  • stm32驱动微雪墨水屏1.54inch e-Paper V2

    我一起驱动墨水屏 一 墨水屏相关基础 xff08 摘自微雪官方 xff09 二 干起来PART2 配置I OPART2 底层硬件接口必要的调用函数PART3 功能函数PART4 应用函数 三 应用注意 代码下载 xff1a https do
  • 2020-11-13

    三角翼无人机制作指南设计 一 接线 飞控 xff1a pixhawk 915MHz电台 xff0c 空速计 xff0c GPS xff1b 动力 xff1a Tmotor电机 电调 F150KV700 舵机 xff1a S43A标准mini
  • docker案例redis (pull、dockerfile两种方式)

    方式一 xff08 pull xff09 01 查询redis并拉取 docker search redis 查询 docker pull redis latest 拉取 docker images 02直接使用拉取的redis建立容器 d
  • 进程、内存和文件

    进程是操作系统里面的核心概念 它指的是一个运动中的程序 从名字上看 xff0c 进程表示的就是进展中的程序 一个程序一旦在计算机里运行起来 xff0c 它就称为一个进程 操作系统对进程的管理通过进程表来实现 进程表里存放的是关于进程的一切信
  • 蓝牙、红外线与wifi 区别以及不同频段无线电磁波的穿墙和绕过障碍物能力

    蓝牙 红外线与wifi 区别以及不同频段无线电磁波的穿墙和绕过障碍物能力 SurgePing 2015 04 22 16 52 30 35199 收藏 7 分类专栏 xff1a IOT 文章标签 xff1a 蓝牙 红外线 wifi 频段 无
  • js动态生成级联下拉列表

    html view plain copy print lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 0 Transitional EN 34 gt lt HTML gt lt HEAD gt lt TIT
  • 无人机学习之路——材料准备

    所需材料 xff08 大件 xff09 1 空心杯电机 4个 xff08 笔者用8520型号 xff0c 一般716以上比较常用 xff09 这个电机是直流有刷电机 xff0c 所以不需要电调 2 螺旋桨 正反各2个 xff08 一般旋转直
  • linux 应用编程(持续更新)

    在嵌入式 Linux 系统中 xff0c 我们编写的应用程序通常需要与硬件设备进行交互 Tips xff1a 本篇将以正点原子 ALPHA Mini I MX6U 开发板开发板出厂系统进行测试 进程间通信 管道FIFO信号消息队列信号量共享
  • FreeRTOS中汇编指令

    汇编程序前要加PRESERVE8 require8和preserve8c和汇编有8位对齐的要求 xff0c 这两个伪指令能够满意此要求 LDR和MOV LDR Rn label1 LDR指令负责将label1所代表的存储器中数据搬移到内部寄
  • PX4学习1(相关参考网址)

    官方开发指南 xff1a PX4用户指南 xff1a https docs px4 io master zh PX4开发指南 xff1a https dev px4 io master zh index html 北航可靠飞行控制组 xff
  • 2020硕博无人机文献调研(1)

    1 旋翼无人机自主降落技术研究 xff0c 山东大学 xff0c 岳文斌 创新点 xff1a 利用视觉Apriltag算法进行二维码识别 关于AprilTag详见 https blog csdn net han784851198 artic
  • PX4姿态控制基础

    无人机姿态控制代码实现的四个步骤 订阅数据 xff08 飞机现姿态 xff0c 飞机期望姿态 xff09 PID 外环计算 xff08 作用于姿态误差 xff0c 角速度 xff09 作用 xff1a 产生期望角速度 xff0c 并发布出去
  • PX4位置控制基础

    接受数据 xff08 获取位置信息 期望位置 xff09 外环控制PID xff08 位置环 xff09 xff1a 通过调节速度减小位置差 xff0c 位置差需要通过速度去弥补 判定模式不同 xff0c 位置差的来源 xff08 三种控制
  • ROS2开机程序自启动

    运行环境 系统 xff1a Ubuntu20ROS xff1a foxy 添加服务脚本 sudo vi etc systemd system rc local service 内容如下 xff1a Unit Description 61 e
  • 【STM32】条件编译不起作用是什么原因

    在工程中定义了几个条件编译 xff0c 用来适应不同的硬件设备 xff0c 但是好像不起作用似的 这种情况可能是在多个文件中使用了条件编译 xff0c 但是编译工程的时候又只是编译了部分文件 xff0c 即使有部分使用了条件编译的文件没有被
  • 一文看懂rtc实时时钟和单片机时钟的区别

    rtc实时时钟和单片机时钟的区别 实时时钟是指给日期及时间计数器累加的时钟 xff0c 通常是32768Hz xff0c 系统时钟是指单片机内部的主时钟 xff0c 给各个模块提供工作时钟的基础 xff0c CPU时钟是指经过CPU的PLL
  • PhotoScan处理无人机航拍照片GCP校正流程

    PhotoScan处理无人机航拍照片GCP校正流程 软件最近更新版本较频繁 xff0c 菜单条目变化较大 xff0c 但基本功能没变 Agisoft PhotoScan xff08 APS xff09 现改名 Metashape了 Phot
  • 2022年研发效能实践案例智库集-EQCon

    2022年研发效能实践案例智库集 xff1a Docs

随机推荐

  • git四区逻辑关系(工作区、暂存区、本地仓库、远程仓库)

  • 推荐一个提高实现目标效率和过滤不现实目标的方法:WOOP

    推荐一个提高实现目标效率和过滤不现实目标的方法 xff1a WOOP WOOP 分别是 Wish xff08 愿望 xff09 Outcome xff08 效果 xff09 Obstacle xff08 障碍 xff09 和 Plannin
  • 序列图教程-完整指南及示例

    Sequence Diagram Tutorial Complete Guide with Examples Creately
  • 什么是好的策略?

    好的策略是承认每个人都是自私的 xff0c 但是你的策略能够在人人都是自私的基础上获得全局利益的最大化 xff0c 如果你的全局利益最大化是建立在要求每个人都是大公无私的 xff0c 那就是失败的设计 xff0c 因为这必然会导致失败
  • 软件工程3.0

  • pod、container、sidecar

    pod是一个小家庭 xff0c 它把密不可分的家庭成员 container 聚在一起 xff0c Infra container则是家长 xff0c 掌管家中共通资源 xff0c 解决顺序和依赖关系 xff0c 家庭成员通过sidecar方
  • 4种SQL标准的事务隔离级别

    SQL标准的事务隔离级别包括 xff1a 读未提交 xff08 read uncommitted xff09 xff1a 一个事务还没提交时 xff0c 它做的变更就能被别的事务看到 读提交 xff08 read committed xff
  • 设计容器网络插件的初步思路

    同一个 Pod 里面的所有用户容器的进出流量 xff0c 可以认为都是通过 Infra 容器完成的 当为Kubernetes 开发一个网络插件时 xff0c 应该重点考虑的是如何配置这个 Pod 的 Network Namespace xf
  • 各种显示接口DBI、DPI、LTDC、DSI、FSMC

    各种显示接口DBI DPI LTDC DSI FSMC qq 23899395 2019 06 05 17 30 36 4810 收藏 36 版权 首先 xff0c MIPI xff08 Mobile Industry Processor
  • 在ubuntu 16.04安装ROS Kinetic

    ubuntu16 04 已经发布一个月了 xff0c ROS的Kinetic也已经发布 xff0c 需要了解ROS发行版及支持维护的时间等 xff0c 可以参考如下网页 xff1a http wiki ros org Distributio
  • ROS创建工作空间和功能包

    所有的ROS程序 xff0c 包括我们自己开发的程序 xff0c 都被组织成功能包 xff0c 而ROS的功能包被存放在称之为工作空间的目录下 因此 xff0c 在我们写程序之前 xff0c 第一步是创建一个工作空间以容纳我们的功能包 1
  • MPU-6000(6050)介绍

    MPU 6000 xff08 6050 xff09 简介 MPU 60X0是全球首例9 轴运动处理传感器 它集成了3 轴MEMS陀螺仪 xff0c 3 轴MEMS加速度计 xff0c 以及一个可扩展的数字运动处理器DMP xff08 Dig
  • lwip/uip移植之一

    最近一直想移植一个tcp ip协议栈到板子上 xff0c 于是想到了lwip和uip lwip是一个比较完整的协议栈 xff0c 功能强大 xff0c 结合ucos系统更是方便完美 xff0c 但是需要几十k的ram xff0c 这点在我f
  • Nvidia Xavier GPIO 输入输出 中断 PWM

    文章目录 前言Jetson GPIO安装可用引脚点亮LEDGPIO输出示例GPIO输入示例GPIO EventGPIO InterruptPWM微信公众号 前言 Nvidia Jetson AGX Xavier 硬件相关 这篇讲到Xavie
  • Jetson Xavier/XavierNX/TX2 CANFD 配置使用

    目录 TX2 Xavier NX Xavier CAN特性TX2 Xavier NX Xavier 载板引出位置CAN收发器NVIDIA CAN DriverXavier CAN 引脚配置Jetson CAN 设置设置开机运行查看连接状态C
  • Altium Designer使用Git构想

    今天看了dtysky的 体三维显示器 PCB部分 LED阵列 用脚本写的上万个LED的自动布局和自动布线 很震惊 很欣赏 很喜欢 或许有很多我们可以想象的空间 这篇主要写Git Git主要管理文本文件 二进制文件却不大合适 尽管有 使用 G
  • 如何拿到阿里offer的?面试流程及面试题

    一个偶然的开始 交待一下 非广告 xff0c 第一次用拉勾 xff0c 感觉做的挺好 xff0c 以前一直用51job 从7月分开始 xff0c 打算找工作 xff0c 一个偶然的机会 xff0c 拉勾上一个蚂蚁金服的同学找到我 xff0c
  • STM32和Linux(转载)

    Linux和stm32 一个是软件平台一个是硬件平台 xff0c 完全不一样的 xff08 记住 xff0c 是平台 xff01 xff09 这样说吧 xff0c 既然你喜欢单片机 xff0c 就先学stm32 xff0c 把硬件基础打牢
  • PX4飞控问题之参数重置问题

    PX4在上电的时候会出现参数重置的问题 xff0c 出现这个问题的机率很小 xff0c 可能上电几千甚至上万次才会出现一次重置的情况 xff0c 但一旦出现了参数重置 xff0c 飞机就无法飞行 xff0c 得重新校准传感器 要解决这个问题
  • STM32硬件基础--LTDC显示图像

    STM32硬件基础 LTDC显示图像 海东青电子 2019 11 13 23 40 05字数 2 635阅读 3 102 海东青电子原创文章 xff0c 转载请注明出处 xff1a https www jianshu com p 21638