STM32如何通过FSMC点亮LCD

fsmc是flexible static memory controller(可变静态存储控制器)的简称,是stm32系列采用的一种新型的存储器扩展技术,支持sram、nor flash、lcd、psram、nand flash、pc card等。只在某些芯片上有,使用前要查看对应的手册确定。
在fsmc的角度来看,外部存储分成了4个固定的大小为256mb的bank。
bank1分成了4个子bank,每一个64mb大小,并且每个bank都有独立的片选,用来控制nor flash、ram、psram。bank2和bank3用来控制nand flash。bank4控制pc card。
不同的bank共享了地址、数据、读、写信号,其他信号根据bank的用途不同会有一些差别。
下面介绍下如何通过fsmc点亮lcd。lcd可以看作是一个sram,通过bank1控制。理论上支持8080接口的lcd都可以使用fsmc来点亮(不知是否有例外)。lcd有8位或16位接口的,fsmc的设置需要一致,本文以16位为例。
stm32的设置使用cubemx很方便,下面是针对fsmc的设置,其他基础设置这里就不罗列了。
这里使用了bank1的第四个子bank,片选是ne4;
内存类型是lcd接口;
lcd寄存器选择为a0,其他a1-a24都可以,这本来是存储器寻址信号,这里用来接lcd的rs信号,控制lcd是写命令(低0)还是写数据(高1)。;
数据选择16位。
再往下
写操作使能;
扩展模式disabled;
地址建立时间设置为6;
数据建立时间设置为6;
总线翻转时间设置为0.
上面建立时间范围如下表所示,实际要根据lcd的时序确定。
除了上面的配置,别忘了一般lcd还有个背光控制引脚。
之后生成代码。(只罗列了变量和函数内容,不是真正的函数)
背光引脚代码如下:
fsmc的初始化代码如下:
fsmc的引脚配置
fsmc模式和时序配置:
到此,fsmc的初始化就搞定了,后边就可以通过内存地址直接控制lcd了。这里有几个需要注意的点,下面来详细说说。
第一, 存储基地址
bank1的基地址是0x60000000,不同的子bank地址不同,通过haddr[27:26]这两位的值确定。我们选择了第四个,这两位是11,所以子bank的基地址是
0x60000000+(0x3<<26)=0x6c000000。
第二, 外部存储地址
haddr[25:0]存储了外部存储器的地址,对于8位和16位略有差别。
8位用到了haddr[25:0]的所有位,对映fsmc_a[25:0]。而16位只用了haddr[25:1],没有用haddr0,所以对于16位,haddr[25:1]就对映了fsmc_a[24:0]。
第三, lcd的数据or命令选择
lcd没有地址,我们引出的地址线实际上接到了lcd的rs或者叫d/c引脚上。当rs为低,则通过d[15:0]的是命令,当rs为高,则通过d[15:0]的是数据。上面我们选择了a0,在16位模式下,写命令的地址就是0x6c000000(haddr1为0),写数据的地址就是0x6c000002(haddr1为1)
(其实地址不唯一,只要保证haddr1的0和1准确就行,其他地址位随意,但是一般选择最简单或实用的地址,后边会提到)。
我们再假设选择a3,那么写命令的地址还是0x6c000000(haddr4为0),写数据的地址是0x6c000010(haddr4为1)。所以结论就是,写命令的地址可以都是0x6c000000,写数据的地址根据选择的地址线确定。这是最简单的地址。
第四, 巧用结构体,只需定义一个地址
在很多参考例程中,会出现下面的实现方法:
我们都知道结构体是顺序排列的,所以lcd_reg的地址是0x6c000000,变量大小是2个字节(16位),所以lcd_ram的地址就是0x6c000002,刚好就是我们选择a0地址线(haddr1)拉高的值。
那如果选择其他地址线,这里就需要做一点变动。比如选择a3,我们逆向操作来解决这个问题,a3写数据地址是0x6c000010,也就是lcd_ram的地址。lcd_reg比lcd_ram小两个字节,减2就得到了0x6c00000e,此时haddr4为0,那这个就是我们需要的lcd基地址,因为只有这个值加2后会变成写数据的地址,这就是那个实用的地址。
操作框图如下图所示,fsmc初始化好后就跟透明的一样,只需要往指定的地址送命令或者数据即可。类似串口蓝牙的透传,一旦设置配对好,就可以无视蓝牙的存在。
后面的事情就跟具体的lcd有关了,比如读取id,写初始化序列等,这里就不多介绍了。

盐雾试验箱的用途是什么
马斯克表示,特斯拉的目标是要让电池几乎不使用钴
一文带你读懂,人脸识别原理,以及部分手机采用的3D结构光原理
国内外超级电容器发展动态
IC Insights:去年只有中国大陆半导体营收增长了10%
STM32如何通过FSMC点亮LCD
24000毫安超大容量电池
什么平台才是工业互联网的关键
在TPT中创建SOTIF场景
电磁机械制动控制线路的工作原理
5G 未来已来
ADI上海开启新篇章,张江高科迎半导体巨头
新一代人机交互革命引领的万物智能时代已经到来
村田持续发展成为 5G 高性能组件的重要贡献者
工业机器人发展一片“火热”景象
高性能北斗模块带你了解核心星座部署完成的北斗三号全球系统
中国的5G正在成为整个社会的主流
OpenAI的研究者们提出了一种新的生成模型,能快速输出高清、真实的图像
中国工业互联网APP软件应用创新大赛,得到了广大人民的支持
孔板流量计在某石化装置的应用