STM32HAL库学习笔记九——LCD显示

HAL库部署STM32LCD显示



前言

在参考多方资料后个人认为,部署LCD的显示从零搭建是比较费时的,要深度学习FSMC和LCD驱动相关知识学习成本较高,真正在应用时还是直接移植现成的驱动比较方便又不易出错。因此本文不会对驱动编写做特别详细的描述,以记录CubeMX的部署流程为主,关于FSMC更详细的知识可以参考以下博客。
STM32CubeMX学习笔记(39)——FSMC接口使用(TFT-LCD屏触摸)
STM32CubeMX系列|TFTLCD显示
stm32学习笔记 -根据外接存储器时序初始化FSMC结构体
STM32CubeMX | 35-使用硬件FSMC驱动TFT-LCD屏幕(MCU屏,NT35510控制器)
STM32CubeMX实战教程(七)——TFT_LCD液晶显示(附驱动代码)
使用STM32F103ZET霸道主板实现LCD显示屏显示


LCD显示屏简介

LCD全称液晶显示,利用液晶的物理特性制成。给液晶施加电场时,会改变它的分子排列,从而改变光线的传播方向,配合偏振光片,它就具有控制光线透过率的作用,再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少。结合红蓝绿三色显示结构就可以构成一个显示单位,输出不同的颜色,这样一个显示单位即像素。

液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,一般会使用 SRAM 或 SDRAM 性质的存储器,而这些专门用于存储显示数据的存储器,则被称为显存。一般来说,外置的液晶控制器会自带显存,而像 STM32F429 等集成液晶控制器的芯片可使用内部 SRAM 或外扩 SDRAM 用于显存空间。

液晶显示屏处理数据需要通过液晶控制器芯片控制。STM32F429等高性能芯片内置芯片控制器,F1系列的单片机没有内置,需要液晶屏自带控制器。控制器中包含有显存,单片机把要显示的数据通过引出的 8080 接口发送到液晶控制器,这些数据会被存储到它内部的显存中,然后液晶控制器不断把显存的内容刷新到液晶面板,显示内容。

液晶控制框图

实验使用的是野火3.2寸电阻屏,带有 ILI9341 液晶控制器芯片和XPT2046电阻触摸屏控制芯片。下图是 ILI9341的结构图。

该芯片最主核心部分是位于中间的 GRAM(Graphics RAM),它就是显存。GRAM
中每个存储单元都对应着液晶面板的一个像素点。它右侧的各种模块共同作用把 GRAM存储单元的数据转化成液晶面板的控制信号,使像素点呈现特定的颜色,而像素点组合起来则成为一幅完整的图像。

框图的左上角为 ILI9341 的主要控制信号线和配置引脚,根据其不同状态设置可以使芯片工作在不同的模式,如每个像素点的位数是 6、16 还是 18 位;可配置使用 SPI 接口、8080 接口还是 RGB 接口与 MCU 进行通讯。MCU 通过 SPI、8080 接口或RGB 接口与ILI9341 进行通讯,从而访问它的控制寄存器(CR)、地址计数器(AC)、及 GRAM。

在 GRAM 的左侧还有一个 LED 控制器(LED Controller)。LCD为非发光性的显示装置,它需要借助背光源才能达到显示功能,LED 控制器就是用来控制液晶屏中的 LED 背光源。
——来自野火stm32f103指南者开发教程

在这里插入图片描述

本实验中显示屏出厂就已经被配置好使用8080 接口通讯,使用 16 根数据线的 RGB565 格式。
8080写入时序图如下:
在这里插入图片描述
片选信号CSX置低电平开始通信,命令数据选择信号D/CX置低电平表示写入命令地址,置高电平表示写入数据地址。写入信号WRX置低电平读取信号RDX置高电平表示数据写入。

FMSC简介

FMSC是用来管理拓展存储器的外设,全称灵活静态存储控制器,可以用于驱动包括 SRAM、NOR FLASH 以及 NAND FLSAH 类型的存储器,不能驱动如 SDRAM 这种动态的存储器。

ILI9341 的 8080 通讯接口时序可以由 STM32 使用普通 I/O 接口进行模拟,但这样效率太低,而对比FMSC的通信时序和8080通信时序(下图所示为FSMC模式A控制SRAM的读写时序图),二者只在FMSC的地址线和8080的D/CX线上有区别,因此STM32 提供了一种特别的控制方法——使用 FSMC 接口实现 8080 时序。

使用FMSC模拟8080时只需要将FMSC的地址线中的一根视为D/CX线就可以了,为0表示命令,为1表示数据。
在这里插入图片描述

在这里插入图片描述

HAL库配置LCD显示

一、CubeMX配置

在设置CubeMX参数时我们往往需要参考硬件原理图配置合适的初始化参数,关于LCD的接口原理图如下,主要需要关注的就是右上方的复位引脚LCD_RST、背光引脚LCD_BL、片选线FSMC_NE1以及命令/地址选择线FSMC_A16。
在这里插入图片描述

1.新建工程,常规配置调试模式、时钟树、项目环境;
2.配置FSMC,根据接口原理图选择NE1,LCD接口类型,命令数据选择位选A16,数据长度为16位;
在这里插入图片描述
3.配置复位引脚和背光引脚,配置引脚PD12和PE1为推挽输出模式初始为低电平。
在这里插入图片描述

4.NOR/PSRAM1详细配置
详细的配置需要根据LCD控制器ILI9341数据手册配置,主要包括读写时序中的地址建立时间、数据建立时间、总线转化时间,这些时间要介于数据手册里要求的最小值和最大值之间,并不一定要是固定的数值。

NOR/PSRAM control:
Write operation(设置是否写使能): 如果禁止写使能, FSMC 只能从存储器中读取数据,不能写入。
Extended mode(设置是否使用扩展模式): 使用扩展模式时读写采用不同的配置,读时序使用 FSMC_BCR 寄存器,写时序使用 FSMC_BWTR 寄存器的配置。读写可以共用一种配置(野火的例程是这样),但读写速度是不一致的,写快读慢,最好还是分开配置。

NOR/PSRAM timing
首先需要关注的是Access mode,野火的教程中使用的是FSMC的模式B但在CubeMX里没有模式B的选项,因此本实验使用模式A,控制SRAM;

第三行总线转化周期在异步存储器无用,设为0;

在设置时序时间时常以HCLK为单位,1个HCLK=1/时钟频率(秒),f103的时钟频率是72MHZ,因此一个HCLK是1000/72ns=13.8ns。
地址建立时间和数据建立时间需要ILI9341参考数据手册设置,参考下图关于ADDSET和DATAST的说明和ILI9341的时序要求,可以得到:
读操作:
ADDSET:(ADDSET+1)*13.8ns = tast => ADDSET取0就可以
DATAST:(DATAST+3)*13.8ns = trdlfm => DATAST取23(虽然计算出来是这个值但测试时取更小的值也可以,并且我查阅的不同资料用的值也不一样,暂时不知道为什么
写操作:
ADDSET:(ADDSET+1)*13.8ns = tast => ADDSET取0就可以
DATAST:(DATAST+1)*13.8ns = twrl => DATAST取1

  • 7
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值