HAL库+stm32cubeIDE+4.3寸LCD显示器驱动移植

HAL库+stm32cubeIDE+4.3寸LCD显示器

开发板:野火霸天虎V2

IDE:stm32CUBEIDE

烧录工具:openOCD

显示器基本参数

  • 像素
  • 分辨率:
  • 色彩深度:灰度值分布
  • 显示器尺寸
  • 点距

所使用液晶控制器

带了液晶控制器芯片

所以刷新率会慢一点(没有DMA)

液晶面板控制信号

信号名称说明
R[7:0]红色数据
G[7:0]绿色数据
B[7:0]蓝色数据
CLK像素同步时钟信号
HSYNC水平同步信号
VSYNC垂直同步信号
DE数据使能信号
  • RGB信号线
    • 代表了RGB的数据
  • CLK
    • 像素同步信号,每个时钟需要刷新
  • HSYNC
    • 屏幕刷新,按行刷;一行刷新的结尾
  • VSYNC
    • 一帧图像的结尾标志

液晶时序控制

image-20210723140044328

HBP:表示从水平同步信号开始到一行的有效数据开始之间的 CLK 的个数

HFP:表示一行的有效数据结束到下一个水平同步信号开始之间的 CLK 的个数

VBP :表示在一帧图像开始时,垂直同步信号以后的无效的行数

VFP:表示在一帧图像结束后,垂直同步信号以前的无效的行数

VSW :表示垂直同步信号的宽度,单位为行

HSW:表示水平同步信号的宽度,单位为同步时钟CLK的个数

在这些时间参数控制的区域,数据使能信号线“DE”都为低电平,RGB 数据线的信号无效,当“DE”为高电平时,表示的数据有效,传输的数据会直接影响液晶屏的显示区域。

触摸屏

触摸面板引出的信号线引入到GT917S 芯片,该芯片会对触摸信号进行采集并简化信号输出给外部控制器。

触摸面板的下方就是液晶面板,该液晶控制器使用的是8080接口

液晶屏的信号线及 8080 时序

NT35510 控制器根据自身的 IM[3:0] 信号线电平决定它与MCU 的通讯方式,它本身支持 SPI 及 8080 通讯方式

image-20210723143004042

image-20210723143046708

由图可知,写命令时序由片选信号 CSX 拉低开始,对数据/命令选择信号线 D/CX 也置低电平表示写入的是命令地址 (可理解为命令编码,如软件复位命令:0x01),以写信号WRX为低,读信号 RDX 为高表示数据传输方向为写入,同时,在数据线 D[23:0](或 D[15:0]) 输出命令地址,在 第二个传输阶段传送的是命令的参数,所以 D/CX 要置高电平,表示写入的是命令数据,命令数 据是某些指令带有的参数,如复位指令编码为 0x01,它后面可以带一个参数,该参数表示多少 秒后复位 (实际的复位命令不含参数,此处只是为了讲解指令编码与参数的区别)。 当需要把像素数据写入GRAM时,过程很类似,把片选信号CSX拉低后,再把数据/命令选择信 号线 D/CX 置为高电平,这时由 D[23:0] 传输的数据则会被 NT35510 保存至它的GRAM中。

stm32-FSMC解读

注意看下FSMC的框图,发下NOR和SRAM放一起,说明程序里这俩变量其实是结构是一样的(为啥单独拎出来讲一下,因为野火给的HAL库代码有点坑,首先是变量的定义和生成的有出入-都能用,就是无法理解,其次是忘了开写使能)

image-20210724131232764

image-20210724114419191

地址映射

野火所使用的LCD的MCU借口是NOR Falsh,所以要选用存储区域1,我们按照教程选了第3区域

image-20210724131119282

第一个存储区域的地址

image-20210726084821484

image-20210726085624685

解释:存储器要是8位的话,最大支持的外设地址为0~2^26-1个地址,也就是64MB的地址,所以容量就是512Mb

如果是16位的话,最高位不用,也还是支持512Mb(至于原因,存储器是按照字节,也就是8位来寻址的,16位是要读两次)

信号建立时间

image-20210726091808663

image-20210726091857099

信号时序

只针对8080时序

image-20210726092002057

image-20210726092455149

仅仅是FSMC的地址信号线 A[25:0] 与 8080 的数据/命令选择线 D/CX 有区别。而对于 D/CX 线,它为高电平的时候表示数值,为低电 平的时候表示命令,如果能使用 FSMC 的 A 地址线根据不同的情况产生对应的电平,那么就完 全可以使用 FSMC来产生 8080 接口需要的时序了

由于 FSMC会自动产生地址信号,当使用 FSMC向 0x6xxx xxx1、0x6xxx xxx3、0x6xxx xxx5⋯这 些奇数地址写入数据时,地址最低位的值均为1,所以它会控制地址线A0(D/CX)输出高电平,那 么这时通过数据线传输的信号会被理解为数值;若向 0x6xxx xxx0 、0x6xxx xxx2、0x6xxx xxx4⋯ 这些偶数地址写入数据时,地址最低位的值均为 0,所以它会控制地址线 A0(D/CX) 输出低电平, 因此这时通过数据线传输的信号会被理解为命令,见表 27‑6。

对应代码的话,就是要有一个写指令命令和读指令命令。当然,前提是我们要设置A[25:0]只有一位生效,原因,这样,才会符合D/CX的高低电平

代码移植

使用野火配套的代码就把它的GPIO口(会使用到软件复位)和FSMC口配置一下

image-20210726094109582

image-20210726094200177

解释:NE3-bank3,类型NOR Flas,地址只要1位,数据位16位,我们是异步传输,不需要用到时钟或者总线

image-20210726094351069

开启写方向使能,不需要进行扩展模式使用(就是写入和读取用同一个)

image-20210726094624519

接下来生成代码

在液晶显示的驱动包里,把GPIO_Config和FSMC_Config注释掉,就可以用了

image-20210726094848580
image-20210726094624519

接下来生成代码

在液晶显示的驱动包里,把GPIO_Config和FSMC_Config注释掉,就可以用了里面定义的俩全局变量也注释掉
image-20210726094848580

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL是针对STM32F407微控制器开发的一个软件,用于简化软件开发过程。而LCD是液晶显示器的缩写,是一种常见的显示设备。 使用HAL驱动STM32F407微控制器上的LCD可以实现图形和文本的显示。首先,我们需要初始化LCD引脚的配置,设置为输出模式,并根据LCD的特性选择合适的通信接口(如SPI或I2C)。 接下来,我们可以使用HAL提供的函数来控制LCD的显示,比如写入数据或命令。HAL可以为我们提供一个便捷的方式来设置LCD的显示模式、清除屏幕、打印文本和绘制图形等。 例如,我们可以使用HAL的函数来设置LCD的显示模式,比如设置为单行或多行显示,选择字符显示格式(如5x7或8x8),以及光标闪烁等。 我们还可以使用HAL的函数来清除屏幕,比如使用填充函数将屏幕上的所有像素点清零,或使用擦除函数将屏幕上的特定区域清除。 当需要显示文本时,我们可以使用HAL的函数来设置文本的字体大小、颜色和位置,并使用打印函数将文本显示在LCD上的指定位置。 如果需要在LCD上绘制图形,我们可以使用HAL提供的函数来设置图形的类型(如线、矩形、圆形等)、位置和颜色,并使用绘制函数将图形绘制在LCD上。 综上所述,使用HAL可以简化STM32F407微控制器上LCD驱动过程,帮助我们更方便地实现图形和文本的显示,并为开发者提供了丰富的函数来满足各种显示需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值