2022年6月17日STM32——LCD液晶显示
一.FSMC外设
显示器属于计算机的I/O设备,CRT显示器、LCD液晶显示器、LED点阵显示器及OLED显示器。
显示器参数:
1.像素:像素是组成图像的最基本单位要素,显示器的像素指它成像最小的点
2.分辨率:行像素值 x 列像素值
3.色彩深度:显示器的每个像素点能表示多少种颜色,用“位”(bit)来表示。
4.显示器尺寸:大小用英寸表示,如5英寸、21英寸,这个长度指屏幕对角线的长度。
5.点距:两个相邻像素点之间的距离,相同尺寸的屏幕,分辨率越高,点距越小,画质越细腻。
屏幕控制:
RGB接口(RGB Interface):
(1)RGB信号线:RGB信号线各有8根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。显示屏支持RGB888格式,一共24位数据线,表示2^24种颜色。
(2)同步时钟信号CLK:液晶屏与外部使用同步通讯,以CLK作同步时钟,每个时钟传输一个像素点数据。
(3)水平同步信号HSYNC:表示液晶屏一行像素数据的传输结束,每传输完成液晶屏的一行像素数据时,HSYNC会发生电平跳变。
(4)垂直同步信号VSYNC:表示液晶屏一帧像素数据的传输结束,每传输完成液晶屏的一帧像素数据时,VSYNC会发生电平跳变。帧是图像的单位,一副图片称为一帧。“帧/秒”来表示液晶屏的刷新特性,即每秒可以显示多少帧图像。
(5)数据使能信号DE:表示数据的有效性,当DE信号线为高电平时,RGB信号线表示的数据有效。
液晶数据传输时序:
显存:用于存储显示数据的存储器,显示一般至少要能存储液晶屏的一帧显示数据,如分辨率为800x480的液晶屏,使用RGB888格式显示,它的一帧显示数据大小为:3(字节) x 800 x 480 = 1152000字节;若使用RGB565格式显示,一帧显示数据大小为:2(字节) x 800 x 480 = 768000字节。
野火3.2寸液晶屏:内部包含ILI9341的液晶控制器芯片,使用8080接口与单片机通讯。外部包含电阻触摸的控制器XPT2046。
ILI9341液晶控制器:
野火显示屏信号线:
写命令时序图:
写命令时序由片选信号CSX拉低开始,对数据/命令选择信号线D/CX置低电平表示写入的是命令地址,写信号WRX为低,读信号RDX为高表示数据传输方向为写入,数据线D[17:0]输出命令地址。第二次传输是命令的参数,D/CX置高电平,表示写入的命令数据。
FSMC灵活的静态存储控制器FSMC(Flexible Static Memory Controller)用来管理扩展的存储器
FSMC外设结构图:
①:特殊的是FSMC_NE1/2/3/4对应STM32内部不同的地址区域,当访问到相应的区域,FSMC_NEx就会自动设置为低电平。
②:NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器
NOR FLSH 有 FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器、FSMC_BWTR1/2/3/4写时序寄存器。
FSMC_BCR配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。
FSMC_BTR配置SRAM访问时的各种时间延迟
FSMC_BWTR用于控制写时序的时间参数
③:FSMC外设挂载在AHB总线上,时钟信号来自HCLK(72MHz),控制器的同步时钟输出就是由它分频得到。
FSMC地址映射:
FSMC外设支持输出多种不痛的时序以便控制不同的存储器,有ABCD四种模式。
下面对控制异步NOR FLASH使用的模式B进行讲解
读时序:
写时序:
用FSMC模拟8080时序
信号线对比:
D/CX线,当它为高电平时为数值,低电平时为命令。
要用FSMC的A地址线来产生D/CX信号:用FSMC的A0地址线与ILI9341芯片8080接口的D/CX信号线连接,当A0为高电平为数值,当A0为低电平为命令。
NOR FLASH时序结构体:配置FSMC_BRT和FSMC_BWTR寄存器
FSMC结构体:配置FSMC_BCR寄存器
硬件结构:
红色划线处配置要看清楚,特别是FSMC_A16得配置。
FSMC_NE1是0x6000 0000 - 0x63FF FFFF地址,FSMC_A16位为命令位0x6000 0000,数据位是0x6002 0000,由temp = temp | (1<<(16+1))和temp = temp &= ~(1<<(16+1))得
软件设计:
1.初始化通讯使用的目标引脚及端口时钟
2.使能FSMC外设的时钟
3.配置FSMC为异步NOR FLASH模式以仿真8080时序
4.建立机制使用FSMC向液晶屏发送命令及数据
5.发送控制命令初始化液晶屏
6.编写液晶屏的绘制像素点函数
7.利用描点函数制作各种不同的液晶显示应用
ili9341_lcd.c文件:
GPIO初始化注意背光BK引脚和复位RST引脚配置为推挽输出,其他引脚配置成复用推挽输出!
FSMC结构体配置:
FSMC_DataSetupTime和FSMC_AddressSetupTime要注意,因为我们用异步NOR FLASH的方式模拟8080时序。
这里不太知道怎么看:从上面时序图得知ILI9341写周期最小为66ns,读周期最小为45+20=65ns。
当把ADDSET =1 及DATST = 4和时间单位1/72微妙带入以下公式:
读周期:Trc = ((ADDSET+1)+(DATST+1)+2)*(1/72) = 125ns
写周期:Twc = ((ADDSET + 1 )+(DATST + 1))*(1/72) = 97ns
读写函数:
_inline内敛函数在调用它的地方原样替换函数内容。
最主要是ILI9341_CMD_ADDR 和 ILI9341_DATA_ADDR的地址确定
FSMC_Ax引脚输出高电平表示传输数据,输出低电平表示传输命令
我们用的是FSMC_NE1作为8080_CS片选信号,访问地址是0x6000 0000 ~ 0x63FF FFFF,然后用的是FSMC_A16地址线作为命令/数据选择线RS信号,即在FSMC_A16输出高电平的地址表示数据,输出低电平表示命令。
FSMC_A16地址线为高电平需要第16位为1即可,即0x6000 0000 |=(1<<16) = 0x6001 0000
FSMC_A16地址线为低电平需要第16位为0即可,即0x6000 0000 &=~(1<<16) = 0x6000 0000
由于:
我们使用的是16位的数据访问方式,所以HADDR与FSMC_A的地址线连接关系会左移一位,即HADDR1与FSMC_A0对应
那么FSMC_A16地址线需要改变:
FSMC_A16地址线为高电平:0x6000 0000 |=(1<<(16+1))= 0x6002 0000 (数据线)
FSMC_A16地址线为高电平:0x6000 0000 &= ~(1<<(16+1))= 0x6000 0000 (命令线)
背光控制:
软件复位:
初始化ILI9341寄存器:
具体的命令号要去ILI9341技术手册搜
ILI9341初始化:
在ILI9341显示器开窗:
//定义ILI9341常用命令
#define CMD_SetCoordinateX 0x2A //设置X坐标
#define CMD_SetCoordinateY 0x2B //设置Y坐标
2AH命令后,后面有4个参数,第一第二个是起始点,第三第四个是结束点。
在ILI9341显示器中填充形状中的颜色:
先开窗再填充像素命令(0x2C),RGB888_2_RGB565(R,G,B)是格式转换
#define RGB888_2_RGB565(R,G,B) (uint16_t)(((R&0x1F) << 11) | ((G&0x3F) << 5) | (B&0x1F) )
原理是:
上图来源于:
(5条消息) RGB888转换为RGB565格式_Healer19的博客-CSDN博客_rgb888转rgb565
for循环里面就是填充颜色
设置ILI9341的光标坐标:
再ILI9341显示器的某一点以某种颜色进行填充:
液晶屏扫描模式:
ILI9341_MORE_PIXEL这里是320
ILI9341_LESS_PIXEL这里是240
0-7模式设置如下:
还有很其他函数,可在野火参考程序里面找到,自己学习。
遇到一个问题但我没能解释说明
原因是勾选了C99Mode,取消C99 Mode就不会报这个错,但是具体什么原因解释不了。
2022年6月17日STM32——LCD液晶显示相关推荐
- 第13届蓝桥杯省赛真题剖析-2022年4月17日Scratch编程初中级组
[导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第122讲. 第13届蓝桥杯省赛举办了两次,这是202 ...
- 第十三届蓝桥杯省赛(2022年4月17日)C++中级组题解
目录 前言 一.选择题 1.题目描述 2.参考答案 二.编程题 1.比较大小 题目描述 题目解析 AC代码 2.分成整数 题目描述 题目解析 AC代码1(模拟) AC代码2(dfs) 3.组合 题目描 ...
- 2022年10月17日【Jiawei_Z】WPF的容器章节
所有的WPF布局容器都派生自System.Windows.Controls.Panel. Panel继承自FrameworkElement. 在Panel中有一个比较重要的属性是UIElementCo ...
- 【前端作业系列】HTML基础点 , 训练表格(2022年6月17日作业)
一.产品价格效果1展示 HTML代码部分 <!DOCTYPE html> <html><head><meta charset="utf-8" ...
- 2022年3月17日美国Embarcadero公司正式发布 RAD Studio Delphi 11.1 Alexandria
Embarcadero 盛大宣布发布 RAD Studio 11 Alexandria Release 1,也称为 RAD Studio 11.1,以及 Delphi 11.1 和 C++Builde ...
- UP主排名丨飞瓜数据B站平台充电周榜排行榜2022年1月17日-1月23日
飞瓜轻数发布2022年1.17-1.23飞瓜数据UP主充电周榜排行榜(B站平台),分别从UP主充电总人数.充电人数增量.充电人数增长率等客观数据维度展示B站UP主充电数据情况. 通过飞瓜数据UP主充电 ...
- pmp每日三题(2022年2月17日)
今日三题答案-BDC 1.项目经理发现公司的质量保证(QA)部门可能没有足够的人员根据合同约定的进度计划测试项目产品.项目经理首先应该怎么做? A. 审查问题日志 B. 更新风险登记册 C. 取消一些 ...
- 2022年1月17日
总结了一个关于链表的合并的模板,可以进行排序合并,主要思路是head1和head2两个链表从第一位置开始依次比较,最后存储到head3中: 构建一个双向链表并进行删除和插入操作,按要求输出. 输入格式 ...
- 【历史上的今天】5 月 17 日:面向对象编程之父出生;国内全面接入互联网;惠普收购 Cray
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 5 月 17 日,在 1969 年的今天,国际电信联盟第二十四届行政理事会正式通过决议,决定把国际电 ...
最新文章
- __cplusplus的用处
- 201803考试批次2C 程序设计语言,201803考试批次2可视化程序设计(VB)D卷
- NLP 预训练家族再思考
- RabbitMQ (三)消息重试
- Docker学习与和应用(二)_使用Docker
- 开放网络的承诺:它真的做到了吗?
- 用c语言读取和写入文件数据
- php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
- linux的usermod命令参数,linux usermod命令参数及用法详解
- bzoj1211: prufer序列 | [HNOI2004]树的计数
- Java编程思想目录
- java进度条代码,java进度条代码该怎么编写?
- asp html5 ajax,ASP – AJAX 与 ASP | 菜鸟教程
- 仿宋gb2312字体 官方版
- 《实变函数简明教程》,P63,可测集上的连续函数一定可测
- 离线强化学习(Offline RL)系列1:离线强化学习原理入门
- android 6.0 vs ios9,安卓6.0彻底看呆!iOS 9安装率曝光 完胜
- asterisk注册河南联通ims
- 2020iOS开发工程师面试题汇总(内含面试技巧)-看完BATJ面试官对你竖起大拇指!
- 记录一下学习嵌入式的方法和小窍门