STM32之FSMC驱动LCD深入理解
目前市场上的LCD种类繁多,驱动方式也多种多样。
一般都是液晶面板,液晶控制器,触摸控制器三种器件进行组合的。
现在的LCD驱动框图如下:
带液晶驱动器的LCD一般都内置显存,采用8080/SPI接口。
不带液晶驱动器的LCD一般都采用RGB接口。
现在深入理解一下用FSMC/FMC模拟8080接口驱动:
8080接口 | FSMC/FMC | 功能 |
---|---|---|
CSX | Nex | 片选信号 |
WRX | NWR | 写使能 |
RDX | NOE | 读使能 |
D[15:0] | D[15:0] | 数据信号 |
D/CX | A[x] 某一位地址线 | 数据/指令选择 |
LCD常见的驱动芯片ILI9341用8080接口进行驱动的话,只要满足它的驱动时序就可以驱动LCD了,只是用普通的IO进行时序模拟比较复杂罢了。常见的方式是采用FSMC进行模拟,而FSMC和8080信号线和时序看起来基本一致,只是FSMC多了许多地址线而已。
从FSMC时序图来看,在一个写入周期内,除了地址信号,其它信号都是一致的,而地址信号A[25:0]在整个写入周期内都在生效,但是8080接口没有地址信号只有D/CX(数据/指令切换)信号,而D/CX信号只需要一个IO,那我们就可以将A[25:0]中的一个IO当作D/CX信号来用。
那么D/CX信号怎么实现呢?
D/CX信号高电平表示图像数据,低电平表示指令数据。
对于8080接口来说它一个周期需要D[15:0]+D/CX共17位数据就可以进行数据解析了,
而对于FSMC接口来说它一个周期需要发送A[25:0]+D[15:0]共42位数据。
数据宽度是16位的话就要注意FSMC_A地址信号和内部存储地址的对应关系,FSMC_A0对应内存地址的bit1,依次类推,FSMC_A24对应内存地址的bit25
我们以FSMC_Bank1_NORSRAM1作为片选内存进行分析:
地址 | 数据 | 二进制 |
---|---|---|
0x6000 0000 | 0x01 | 0000 0001 |
0x6000 0001 | 0xa0 | 1010 0000 |
0x6000 0003 | 0x1b | 0001 1011 |
0x6000 0000 | 0x24 | 0010 0100 |
FSMC_Bank1_NORSRAM1首地址是0x6000 0000,那么FSMC的地址寻址从0x6000 0000开始,假设FSMC要从首地址发数据,那它的A[25:0]就是0x6000 0000的低26位数据,它的D[15:0]就是0x01 0xa0 (0000 0001 1010 0000)。
假如我们的8080接口连的是FSMC_A1这个地址线,那么我们要发送指令的话A1这个IO就需要一直是0才可以,而A1对应内存地址的bit2,我们从地址0x6000 0000开始随便找一个bit2是0的地址,就可以通过这个地址发送指令数据了(只要不超出NORSRAM1的地址范围就行),比如0x6000 0000或0x6000 0001或0x6000 0002…,这些地址bit2都是0,给这些地址写数据就相当于发送指令数据了。
如果我们要发送图像数据,那么A1这个IO就需要一直是1才可以,那我们就需要从地址0x6000 0000开始随便找一个bit2是1的地址,就可以通过这个地址发送图像数据了(只要不超出NORSRAM1的地址范围就行),比如0x6000 0004或0x6000 0005或0x6000 0006…,这些地址bit2都是1,给这些地址写数据就相当于发送图像数据了。
因此FSMC模拟8080接口的指令地址和图像数据地址不是唯一的,只要满足时序要求的地址都可以进行数据传输。
一般我们都是从片选内存的首地址开始寻找指令地址和图像数据地址,这时候就用到置0和置1的方法了。
置0:Addr&=~(1<<n)
置1:Addr|=(1<<n)
16位数据宽度的FSMC_A[24:0]和内存地址的对应关系是:FSMC_A0对应内存地址的bit1,依次类推,FSMC_A24对应内存地址的bit25。
Addr是内存的首地址,n=FSMC_Ax+1。A0的话n=1,A1的话n=2…
Addr=0x6000 0000
指令地址:0x6000 0000&=~(1<<2) ----->0x6000 0000
图像数据地址:0x6000 0000|=(1<<2)---->0x6000 0004
其实也没有那么难理解了,地址随便猜了,总有正确的,O(∩_∩)O
STM32之FSMC驱动LCD深入理解相关推荐
- 8、STM32 FSMC驱动LCD(ILI93xx)
本文使用FSMC驱动LCD显示,关于建议先看之前的7.STM32 FSMC驱动SRAM一文 硬件连接: 一.CubeMx配置FSMC驱动LCD ILI93xx 此章只为快速使用LCD,不涉及原理.指令 ...
- STM32 - 使用FSMC控制LCD
1. FSMC简介 STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器,FSMC 是 Flexible Static Memory Controller 的缩写,译为灵活的静态存储控制器. ...
- STM32驱动LCD原理
目录 01.使用FSMC驱动LCD 02.标准8080接口 03.使用FSMC驱动8080接口 04.颜色模式 TFTLCD即薄膜晶体管液晶显示器.它与无源TN-LCD.STN-LCD的简单矩阵不同, ...
- FSMC驱动TFTLCD原理,时序和寄存器介绍
一,FSMC简介 FSMC:灵活的静态存储控制器 能够与同步或异步存储器和16位PC存储器卡连接 STM32的FSMC接口支持包括SRAM.NAND FLASH.NOR FLASH和PSRAM等存储器 ...
- STM32 FSMC 驱动16脚12864lcd液晶显示屏
写在前面 在学习了两天STM32 FSMC后,总算是拿这个东西做了第一个应用,关于FSMC是什么东西怎么用,CSDN中有很多介绍,但是,估计新手刚看都是一头雾水(我就是),不过,你仍必须反反复复地看, ...
- STM32 的FSMC功能理解
FSMC全称"静态存储器控制器". 使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线. (1)当 ...
- STM32驱动LCD实战
目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...
- STM32的FSMC
文章目录 FSMC接口介绍 扩展内存 FSMC内部原理 FSMC 的框图 驱动SRAM 驱动TFTLCD FSMC内存划分 FSMC的分块 存储块1的介绍 存储块1的分区 存储块1的地址 不同数据宽度 ...
- 对“用FSMC驱动TFT-LCD”的烂笔头
对"用FSMC驱动TFT-LCD"的烂笔头 前几天在某宝上买的F4小板子到了,板子上带一块3.2寸320*240的电阻屏.然后就想着把正点原子的LCD驱动和uc/GUI移植到这个小 ...
最新文章
- 一步一图,带你重头梳理微服务架构!
- 《JS权威指南学习总结--第八章 函数》
- mysql画事实表_sql生成事实表数据库
- oracle10g自带的公共同义词,10g ALL_SYNONYMS同义词查询性能下降
- android通讯录管理(获取联系人,通话记录,短信消息),Android通讯录管理(获取联系人、通话记录、短信消息)(二)...
- ts获取服务器数据_基于Nginx的媒体服务器技术-线上公开课
- 在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 2
- 【hive】如何设置hive以及MapReduce的压缩方式?
- mysql数据库创建交叉表查询_sql – 我需要知道如何创建交叉表查询
- ngin IP跳域名 域名跳域名 if多判断
- 实验六:流类库与I/O
- 【MATLAB】几种特殊矩阵,Hilbert矩阵,Toeplitz矩阵,Vandermonde矩阵......
- 欧姆龙plc学习笔记(七)
- Mysql复制表结构与表数据
- Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
- 未知USB设备(设备描述符请求失败)解决方法之一
- 36周岁这年,我终于知道该怎么活了!
- SVN上文件出现左侧黄色箭头右侧绿色箭头的双向箭头
- 不错的每日站会的一个实践
- JSP内置对象和四大作用域
热门文章
- Word2019 如何快速统一图片大小,将其他图片设置为参照图片大小
- 从土木到IT——搬砖男的一点经历(一)
- DX-11Q信号继电器
- PP助手电脑版 v2.3.3.4675 官方版
- Undefined symbols for architecture i386和”_OBJC_CLASS_$_xx文件名, referenced from:
- 用串口连接 设置超级终端管理交换机(转)
- android 轻松实现在线即时聊天【图片、语音、表情、文字】等!含源码!
- 《炬丰科技-半导体工艺》提高MLCC电介质的可靠性
- python开发工具PyCharm详细使用
- yolov4-keras实现抽烟检测(源码+数据集)