IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> HAL库+stm32cubeIDE+4.3寸LCD显示器驱动移植 -> 正文阅读

[嵌入式]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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:23:50  更:2021-07-27 16:26:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:54:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码