一.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液晶显示相关推荐

  1. 第13届蓝桥杯省赛真题剖析-2022年4月17日Scratch编程初中级组

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第122讲. 第13届蓝桥杯省赛举办了两次,这是202 ...

  2. 第十三届蓝桥杯省赛(2022年4月17日)C++中级组题解

    目录 前言 一.选择题 1.题目描述 2.参考答案 二.编程题 1.比较大小 题目描述 题目解析 AC代码 2.分成整数 题目描述 题目解析 AC代码1(模拟) AC代码2(dfs) 3.组合 题目描 ...

  3. 2022年10月17日【Jiawei_Z】WPF的容器章节

    所有的WPF布局容器都派生自System.Windows.Controls.Panel. Panel继承自FrameworkElement. 在Panel中有一个比较重要的属性是UIElementCo ...

  4. 【前端作业系列】HTML基础点 , 训练表格(2022年6月17日作业)

    一.产品价格效果1展示 HTML代码部分 <!DOCTYPE html> <html><head><meta charset="utf-8" ...

  5. 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 ...

  6. UP主排名丨飞瓜数据B站平台充电周榜排行榜2022年1月17日-1月23日

    飞瓜轻数发布2022年1.17-1.23飞瓜数据UP主充电周榜排行榜(B站平台),分别从UP主充电总人数.充电人数增量.充电人数增长率等客观数据维度展示B站UP主充电数据情况. 通过飞瓜数据UP主充电 ...

  7. pmp每日三题(2022年2月17日)

    今日三题答案-BDC 1.项目经理发现公司的质量保证(QA)部门可能没有足够的人员根据合同约定的进度计划测试项目产品.项目经理首先应该怎么做? A. 审查问题日志 B. 更新风险登记册 C. 取消一些 ...

  8. 2022年1月17日

    总结了一个关于链表的合并的模板,可以进行排序合并,主要思路是head1和head2两个链表从第一位置开始依次比较,最后存储到head3中: 构建一个双向链表并进行删除和插入操作,按要求输出. 输入格式 ...

  9. 【历史上的今天】5 月 17 日:面向对象编程之父出生;国内全面接入互联网;惠普收购 Cray

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 5 月 17 日,在 1969 年的今天,国际电信联盟第二十四届行政理事会正式通过决议,决定把国际电 ...

最新文章

  1. __cplusplus的用处
  2. 201803考试批次2C 程序设计语言,201803考试批次2可视化程序设计(VB)D卷
  3. NLP 预训练家族再思考
  4. RabbitMQ (三)消息重试
  5. Docker学习与和应用(二)_使用Docker
  6. 开放网络的承诺:它真的做到了吗?
  7. 用c语言读取和写入文件数据
  8. php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
  9. linux的usermod命令参数,linux usermod命令参数及用法详解
  10. bzoj1211: prufer序列 | [HNOI2004]树的计数
  11. Java编程思想目录
  12. java进度条代码,java进度条代码该怎么编写?
  13. asp html5 ajax,ASP – AJAX 与 ASP | 菜鸟教程
  14. 仿宋gb2312字体 官方版
  15. 《实变函数简明教程》,P63,可测集上的连续函数一定可测
  16. 离线强化学习(Offline RL)系列1:离线强化学习原理入门
  17. android 6.0 vs ios9,安卓6.0彻底看呆!iOS 9安装率曝光 完胜
  18. asterisk注册河南联通ims
  19. 2020iOS开发工程师面试题汇总(内含面试技巧)-看完BATJ面试官对你竖起大拇指!
  20. 记录一下学习嵌入式的方法和小窍门

热门文章

  1. C# 调用ComboBox控件的SelectedIndexChanged事件
  2. 工具+IDEA小插件
  3. QTreeWidget设置Delegate
  4. 交易系统开发之行情数据总结
  5. 《Oracle编程自学与面试指南》12:条件(Conditions)
  6. sqoop conditions原理
  7. 【程序分享】51汇听刷分程序
  8. luogu1889 士兵站队
  9. SWD协议通信的简单总结
  10. shell编程中declare命令的使用