0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32如何通过FSMC点亮LCD

CHANBAEK 来源:头条号科G栈 作者:头条号科G栈 2023-03-23 10:02 次阅读

FSMC是Flexible static memory controller(可变静态存储控制器)的简称,是STM32系列采用的一种新型的存储器扩展技术,支持SRAM、Nor Flash、LCD、PSRAM、NAND Flash、PC Card等。只在某些芯片上有,使用前要查看对应的手册确定。

在FSMC的角度来看,外部存储分成了4个固定的大小为256MB的bank。

pYYBAGQbsyeALt0FAADB_IK47Us138.jpg

Bank1分成了4个子bank,每一个64MB大小,并且每个bank都有独立的片选,用来控制Nor Flash、RAM、PSRAM。Bank2和Bank3用来控制NAND Flash。Bank4控制PC Card。

不同的Bank共享了地址、数据、读、写信号,其他信号根据bank的用途不同会有一些差别。

pYYBAGQbsyiAGyDKAABGVE_gg2U739.jpg

下面介绍下如何通过FSMC点亮LCD。LCD可以看作是一个SRAM,通过Bank1控制。理论上支持8080接口的LCD都可以使用FSMC来点亮(不知是否有例外)。LCD有8位或16位接口的,FSMC的设置需要一致,本文以16位为例。

STM32的设置使用cubeMX很方便,下面是针对FSMC的设置,其他基础设置这里就不罗列了。

poYBAGQbsymAV1oDAAG_xbnM61k692.jpg

这里使用了bank1的第四个子bank,片选是NE4;

内存类型是LCD接口;

LCD寄存器选择为A0,其他A1-A24都可以,这本来是存储器寻址信号,这里用来接LCD的RS信号,控制LCD是写命令(低0)还是写数据(高1)。;

数据选择16位。

再往下

写操作使能;

扩展模式Disabled;

地址建立时间设置为6;

数据建立时间设置为6;

总线翻转时间设置为0.

上面建立时间范围如下表所示,实际要根据LCD的时序确定。

poYBAGQbsyqANpN1AAG8n4G7s4c892.jpg

除了上面的配置,别忘了一般LCD还有个背光控制引脚。

pYYBAGQbsyuAWK0mAAAarHjrZ-E294.jpg

之后生成代码。(只罗列了变量和函数内容,不是真正的函数)

背光引脚代码如下:

poYBAGQbsy2AVjKEAAHLHXBr2dY483.jpg

FSMC的初始化代码如下:

FSMC的引脚配置

pYYBAGQbsy-AdO4cAAIoVVKqGcw275.jpg

FSMC模式和时序配置:

pYYBAGQbszGAKNHfAAJQf3B5r_g171.jpg

到此,FSMC的初始化就搞定了,后边就可以通过内存地址直接控制LCD了。这里有几个需要注意的点,下面来详细说说。

第一, 存储基地址

bank1的基地址是0x60000000,不同的子bank地址不同,通过HADDR[27:26]这两位的值确定。我们选择了第四个,这两位是11,所以子bank的基地址是

0x60000000+(0x3<<26)=0x6c000000。

poYBAGQbszOAYBVmAACWOmFuhXk160.jpg

第二, 外部存储地址

HADDR[25:0]存储了外部存储器的地址,对于8位和16位略有差别。

pYYBAGQbszSALu5vAAAavL2HumE336.jpg

8位用到了HADDR[25:0]的所有位,对映FSMC_A[25:0]。而16位只用了HADDR[25:1],没有用HADDR0,所以对于16位,HADDR[25:1]就对映了FSMC_A[24:0]。

pYYBAGQbszWAbnv2AAC81il_JTM837.jpg

第三, 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准确就行,其他地址位随意,但是一般选择最简单或实用的地址,后边会提到)。

pYYBAGQbszaAPt73AACjAfu5ZAQ101.jpg

我们再假设选择A3,那么写命令的地址还是0x6c000000(HADDR4为0),写数据的地址是0x6c000010(HADDR4为1)。所以结论就是,写命令的地址可以都是0x6c000000,写数据的地址根据选择的地址线确定。这是最简单的地址。

pYYBAGQbszaAXM9rAADrhh7RyYU120.jpg

第四, 巧用结构体,只需定义一个地址

在很多参考例程中,会出现下面的实现方法:

pYYBAGQbszeAKcvZAAB9YNtN71o340.jpg

我们都知道结构体是顺序排列的,所以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后会变成写数据的地址,这就是那个实用的地址。

poYBAGQbsziATdmqAAB4Dg8Xu7w197.jpg

操作框图如下图所示,FSMC初始化好后就跟透明的一样,只需要往指定的地址送命令或者数据即可。类似串口蓝牙的透传,一旦设置配对好,就可以无视蓝牙的存在。

poYBAGQbszmAG-uqAADLTESdCI8539.jpg

后面的事情就跟具体的LCD有关了,比如读取ID,写初始化序列等,这里就不多介绍了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4278

    浏览量

    164087
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161979
  • sram
    +关注

    关注

    6

    文章

    742

    浏览量

    113898
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348735
  • FSMC
    +关注

    关注

    0

    文章

    54

    浏览量

    37929
收藏 人收藏

    评论

    相关推荐

    关于STM32F103使用FSMC同步模式问题求解

    大家好,我现在正在使用STM32F103的FSMC同步模式。 需要读取高速ADC数据,ADC是8位并口,但需要一个时钟去触发转换,在时钟上升沿读取数据,速度20M, 我看FSMC的同步模式正好有
    发表于 04-17 08:13

    STM32实例教程,带你了解FSMC的功能和用法[‸]()

    PC 存储卡。STM32通过FSMC可以与SRAM、 ROM、 PSRAM、 NOR Flash和NANDFlash等存储器的引脚直接相连。STM32F1的
    发表于 03-15 15:53

    使用MM32F3270 FSMC驱动TFT-LCD

    使用MM32F3270 FSMC驱动TFT-LCD
    的头像 发表于 09-27 15:34 470次阅读
    使用MM32F3270 <b class='flag-5'>FSMC</b>驱动TFT-<b class='flag-5'>LCD</b>

    STM32F1系列MCU硬件电路FSMC接口设计

    FSMCSTM32F1提供的一个静态存储控制器,是MCU用来扩展存储器,可用来驱动SRAM、Nor Flash、NAND Flash。这里先简单讲解下这三种存储器的应用场合。
    发表于 09-27 14:33 1282次阅读
    <b class='flag-5'>STM32</b>F1系列MCU硬件电路<b class='flag-5'>FSMC</b>接口设计

    STM32FSMC是如何驱动8080总线的液晶的?

    STM32de FSMC是如何驱动8080总线的液晶的?看了半天数据手册也不知道如何接线了,液晶有16位的数据总线,而FSMC的有20多位。
    发表于 09-26 07:38

    STM32FSMC和FMC有什么区别?

    STM32FSMC和FMC有什么区别呢? 有的系列,比如F103是FSMC,有的系列,M4就是FMC了。这两者有什么区别呢?
    发表于 09-26 06:17

    基于STM32开发板点亮LCD例程

    网络上配套STM32开发板有很多LCD例程,主要是TFT LCD跟OLED的。从这些例程,大家都能学会如何点亮一个LCD。但这代码都有下面这
    的头像 发表于 09-24 11:54 1191次阅读
    基于<b class='flag-5'>STM32</b>开发板<b class='flag-5'>点亮</b><b class='flag-5'>LCD</b>例程

    QVGA TFT-LCD直接驱动使用STM32F10xx FSMC外设

    电子发烧友网站提供《QVGA TFT-LCD直接驱动使用STM32F10xx FSMC外设.pdf》资料免费下载
    发表于 09-21 14:36 2次下载
    QVGA TFT-<b class='flag-5'>LCD</b>直接驱动使用<b class='flag-5'>STM32</b>F10xx <b class='flag-5'>FSMC</b>外设

    TFT LCDFSMC的硬件连接大容量STM32F10xxx FSMC接口

    电子发烧友网站提供《TFT LCDFSMC的硬件连接大容量STM32F10xxx FSMC接口.pdf》资料免费下载
    发表于 09-21 11:42 0次下载
    TFT <b class='flag-5'>LCD</b>与<b class='flag-5'>FSMC</b>的硬件连接大容量<b class='flag-5'>STM32</b>F10xxx <b class='flag-5'>FSMC</b>接口

    使用大容量STM32F10xxx的FSMC驱动外部的存储器

    电子发烧友网站提供《使用大容量STM32F10xxx的FSMC驱动外部的存储器.pdf》资料免费下载
    发表于 09-21 10:03 0次下载
    使用大容量<b class='flag-5'>STM32</b>F10xxx的<b class='flag-5'>FSMC</b>驱动外部的存储器

    存储控制器FSMC与触摸屏介绍

    FSMC(Flexible Static Memory Controller,灵活的静态存储控制器)是STM32系列采用的一种新型的存储器扩展技术,使用FSMC外设来管理扩展的存储器。
    发表于 07-27 17:23 1861次阅读
    存储控制器<b class='flag-5'>FSMC</b>与触摸屏介绍

    浅析STM32 FSMC操作LCD的过程

    FSMC称为灵活的静态存储器,它能够与同步或异步存储器和16位PC存储器卡连接,STM32F4的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。
    发表于 07-22 14:46 2346次阅读
    浅析<b class='flag-5'>STM32</b> <b class='flag-5'>FSMC</b>操作<b class='flag-5'>LCD</b>的过程

    STM32FSMC外设简介

    Flexible static memory controller(FSMC)灵活的静态存储控制器。FSMC可以连接异步或同步存储器或16位PC存储卡
    的头像 发表于 07-11 16:07 1122次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>FSMC</b>外设简介

    STM32F407-点亮LED灯

    点亮LED需要首先初始化。这块STM32F4开发板的LED共有4个,都是链接到GPIO上的。
    发表于 06-07 16:46 1393次阅读
    <b class='flag-5'>STM32</b>F407-<b class='flag-5'>点亮</b>LED灯

    微控制器的FSMC到底是咋回事?(下)

    摘要:上一篇文章我们具体讲解了FSMC的原理配置,这一章主要是关于使用FSMC的SRAM初始化流程,以及使用STM32CubeMX对FSMC进行配置。
    发表于 05-14 10:27 1456次阅读
    微控制器的<b class='flag-5'>FSMC</b>到底是咋回事?(下)