0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32如何通過(guò)FSMC點(diǎn)亮LCD

CHANBAEK ? 來(lái)源:頭條號(hào)科G棧 ? 作者:頭條號(hào)科G棧 ? 2023-03-23 10:02 ? 次閱讀

FSMC是Flexible static memory controller(可變靜態(tài)存儲(chǔ)控制器)的簡(jiǎn)稱(chēng),是STM32系列采用的一種新型的存儲(chǔ)器擴(kuò)展技術(shù),支持SRAM、Nor Flash、LCD、PSRAM、NAND Flash、PC Card等。只在某些芯片上有,使用前要查看對(duì)應(yīng)的手冊(cè)確定。

在FSMC的角度來(lái)看,外部存儲(chǔ)分成了4個(gè)固定的大小為256MB的bank。

pYYBAGQbsyeALt0FAADB_IK47Us138.jpg

Bank1分成了4個(gè)子bank,每一個(gè)64MB大小,并且每個(gè)bank都有獨(dú)立的片選,用來(lái)控制Nor Flash、RAM、PSRAM。Bank2和Bank3用來(lái)控制NAND Flash。Bank4控制PC Card。

不同的Bank共享了地址、數(shù)據(jù)、讀、寫(xiě)信號(hào),其他信號(hào)根據(jù)bank的用途不同會(huì)有一些差別。

pYYBAGQbsyiAGyDKAABGVE_gg2U739.jpg

下面介紹下如何通過(guò)FSMC點(diǎn)亮LCD。LCD可以看作是一個(gè)SRAM,通過(guò)Bank1控制。理論上支持8080接口的LCD都可以使用FSMC來(lái)點(diǎn)亮(不知是否有例外)。LCD有8位或16位接口的,F(xiàn)SMC的設(shè)置需要一致,本文以16位為例。

STM32的設(shè)置使用cubeMX很方便,下面是針對(duì)FSMC的設(shè)置,其他基礎(chǔ)設(shè)置這里就不羅列了。

poYBAGQbsymAV1oDAAG_xbnM61k692.jpg

這里使用了bank1的第四個(gè)子bank,片選是NE4;

內(nèi)存類(lèi)型是LCD接口;

LCD寄存器選擇為A0,其他A1-A24都可以,這本來(lái)是存儲(chǔ)器尋址信號(hào),這里用來(lái)接LCD的RS信號(hào),控制LCD是寫(xiě)命令(低0)還是寫(xiě)數(shù)據(jù)(高1)。;

數(shù)據(jù)選擇16位。

再往下

寫(xiě)操作使能;

擴(kuò)展模式Disabled;

地址建立時(shí)間設(shè)置為6;

數(shù)據(jù)建立時(shí)間設(shè)置為6;

總線(xiàn)翻轉(zhuǎn)時(shí)間設(shè)置為0.

上面建立時(shí)間范圍如下表所示,實(shí)際要根據(jù)LCD的時(shí)序確定。

poYBAGQbsyqANpN1AAG8n4G7s4c892.jpg

除了上面的配置,別忘了一般LCD還有個(gè)背光控制引腳。

pYYBAGQbsyuAWK0mAAAarHjrZ-E294.jpg

之后生成代碼。(只羅列了變量和函數(shù)內(nèi)容,不是真正的函數(shù))

背光引腳代碼如下:

poYBAGQbsy2AVjKEAAHLHXBr2dY483.jpg

FSMC的初始化代碼如下:

FSMC的引腳配置

pYYBAGQbsy-AdO4cAAIoVVKqGcw275.jpg

FSMC模式和時(shí)序配置:

pYYBAGQbszGAKNHfAAJQf3B5r_g171.jpg

到此,F(xiàn)SMC的初始化就搞定了,后邊就可以通過(guò)內(nèi)存地址直接控制LCD了。這里有幾個(gè)需要注意的點(diǎn),下面來(lái)詳細(xì)說(shuō)說(shuō)。

第一, 存儲(chǔ)基地址

bank1的基地址是0x60000000,不同的子bank地址不同,通過(guò)HADDR[27:26]這兩位的值確定。我們選擇了第四個(gè),這兩位是11,所以子bank的基地址是

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

poYBAGQbszOAYBVmAACWOmFuhXk160.jpg

第二, 外部存儲(chǔ)地址

HADDR[25:0]存儲(chǔ)了外部存儲(chǔ)器的地址,對(duì)于8位和16位略有差別。

pYYBAGQbszSALu5vAAAavL2HumE336.jpg

8位用到了HADDR[25:0]的所有位,對(duì)映FSMC_A[25:0]。而16位只用了HADDR[25:1],沒(méi)有用HADDR0,所以對(duì)于16位,HADDR[25:1]就對(duì)映了FSMC_A[24:0]。

pYYBAGQbszWAbnv2AAC81il_JTM837.jpg

第三, LCD的數(shù)據(jù)or命令選擇

LCD沒(méi)有地址,我們引出的地址線(xiàn)實(shí)際上接到了LCD的RS或者叫D/C引腳上。當(dāng)RS為低,則通過(guò)D[15:0]的是命令,當(dāng)RS為高,則通過(guò)D[15:0]的是數(shù)據(jù)。上面我們選擇了A0,在16位模式下,寫(xiě)命令的地址就是0x6c000000(HADDR1為0),寫(xiě)數(shù)據(jù)的地址就是0x6c000002(HADDR1為1)

(其實(shí)地址不唯一,只要保證HADDR1的0和1準(zhǔn)確就行,其他地址位隨意,但是一般選擇最簡(jiǎn)單或?qū)嵱玫牡刂?,后邊?huì)提到)。

pYYBAGQbszaAPt73AACjAfu5ZAQ101.jpg

我們?cè)偌僭O(shè)選擇A3,那么寫(xiě)命令的地址還是0x6c000000(HADDR4為0),寫(xiě)數(shù)據(jù)的地址是0x6c000010(HADDR4為1)。所以結(jié)論就是,寫(xiě)命令的地址可以都是0x6c000000,寫(xiě)數(shù)據(jù)的地址根據(jù)選擇的地址線(xiàn)確定。這是最簡(jiǎn)單的地址。

pYYBAGQbszaAXM9rAADrhh7RyYU120.jpg

第四, 巧用結(jié)構(gòu)體,只需定義一個(gè)地址

在很多參考例程中,會(huì)出現(xiàn)下面的實(shí)現(xiàn)方法:

pYYBAGQbszeAKcvZAAB9YNtN71o340.jpg

我們都知道結(jié)構(gòu)體是順序排列的,所以L(fǎng)CD_REG的地址是0x6c000000,變量大小是2個(gè)字節(jié)(16位),所以L(fǎng)CD_RAM的地址就是0x6c000002,剛好就是我們選擇A0地址線(xiàn)(HADDR1)拉高的值。

那如果選擇其他地址線(xiàn),這里就需要做一點(diǎn)變動(dòng)。比如選擇A3,我們逆向操作來(lái)解決這個(gè)問(wèn)題,A3寫(xiě)數(shù)據(jù)地址是0x6c000010,也就是LCD_RAM的地址。LCD_REG比LCD_RAM小兩個(gè)字節(jié),減2就得到了0x6c00000e,此時(shí)HADDR4為0,那這個(gè)就是我們需要的LCD基地址,因?yàn)橹挥羞@個(gè)值加2后會(huì)變成寫(xiě)數(shù)據(jù)的地址,這就是那個(gè)實(shí)用的地址。

poYBAGQbsziATdmqAAB4Dg8Xu7w197.jpg

操作框圖如下圖所示,F(xiàn)SMC初始化好后就跟透明的一樣,只需要往指定的地址送命令或者數(shù)據(jù)即可。類(lèi)似串口藍(lán)牙的透?jìng)鳎坏┰O(shè)置配對(duì)好,就可以無(wú)視藍(lán)牙的存在。

poYBAGQbszmAG-uqAADLTESdCI8539.jpg

后面的事情就跟具體的LCD有關(guān)了,比如讀取ID,寫(xiě)初始化序列等,這里就不多介紹了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4469

    瀏覽量

    169093
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7557

    瀏覽量

    164951
  • sram
    +關(guān)注

    關(guān)注

    6

    文章

    777

    瀏覽量

    115128
  • STM32
    +關(guān)注

    關(guān)注

    2277

    文章

    10952

    瀏覽量

    359244
  • FSMC
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    38305
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA與STM32通過(guò)FSMC總線(xiàn)通信的實(shí)驗(yàn)

    FSMC總線(xiàn)通信簡(jiǎn)介 FSMCSTM32系列采用的一種新型存儲(chǔ)器擴(kuò)展技術(shù)。在外部存儲(chǔ)器擴(kuò)展方面具有獨(dú)特的優(yōu)勢(shì),可根據(jù)系統(tǒng)的應(yīng)用需要,方便進(jìn)行不 同類(lèi)型大容量靜態(tài)存儲(chǔ)器的擴(kuò)展。 FSMC
    的頭像 發(fā)表于 11-12 17:20 ?2466次閱讀
    FPGA與<b class='flag-5'>STM32</b><b class='flag-5'>通過(guò)</b><b class='flag-5'>FSMC</b>總線(xiàn)通信的實(shí)驗(yàn)

    在rtthread系統(tǒng)中STM32103VET6使用硬件FSMC驅(qū)動(dòng)LCD刷屏速度慢怎么解決?

    STM32103VET6板子,使用rtthread系統(tǒng),用硬件FSMC驅(qū)動(dòng)LCD(SSD1963)時(shí),初始化時(shí)刷屏超級(jí)快,但進(jìn)入線(xiàn)程中速度就變慢了,請(qǐng)教有無(wú)大佬遇到過(guò)這樣的情況,有解決思路么?
    發(fā)表于 07-16 07:00

    stm32fsmc總線(xiàn)上同時(shí)掛載LCD屏和SRAM和單獨(dú)設(shè)置一個(gè)FSMC總線(xiàn)設(shè)備的有哪些區(qū)別?

    我想問(wèn)一下stm32fsmc總線(xiàn)上同時(shí)掛載LCD屏和SRAM和單獨(dú)設(shè)置一個(gè)FSMC總線(xiàn)設(shè)備的有那些區(qū)別(我只做個(gè)單個(gè)設(shè)備的掛載)那位大神和廠(chǎng)家能講一下嗎,有實(shí)例最好,我就是怕不會(huì)出現(xiàn)
    發(fā)表于 05-31 07:31

    求助,關(guān)于STM32F103ZE+UC/GUI+7寸LCD硬件選擇問(wèn)題求解

    實(shí)現(xiàn)的方案。不過(guò)CPLD我一點(diǎn)基礎(chǔ)也沒(méi)有。想選擇現(xiàn)成的控制模塊,通過(guò)FSMC以外部總線(xiàn)的方式連接,就像很多開(kāi)發(fā)板上帶的320*240的LCD一樣。不知STM32+UC/GUI推這么大的
    發(fā)表于 05-17 13:32

    stm32f429將NandFlash和SDRAM都外掛在FSMC總線(xiàn)上,LCD顯示很多黑線(xiàn)怎么解決?

    我使用stm32f429開(kāi)發(fā)板,將NandFlash和SDRAM都外掛在FSMC總線(xiàn)上, 而LCD的顯存是存放在SDRAM中,當(dāng)對(duì)NandFlash進(jìn)行格式化時(shí),LCD 顯示很多黑線(xiàn),
    發(fā)表于 05-17 07:20

    STM32F427的FSMC能接入AD7606的并行總線(xiàn)嗎?

    請(qǐng)問(wèn)各位大俠,STM32F427的FSMC能接入AD7606的并行總線(xiàn)嗎,現(xiàn)在FSMC上只掛接2片AD7606,時(shí)序上能配合嗎?
    發(fā)表于 05-17 06:57

    FSMC_Bank1和FSMC_Bank1E沒(méi)有定義是怎么回事?

    ?如標(biāo)題所述, FSMC_Bank1和FSMC_Bank1E 沒(méi)用定義,但是在stm3f4xx.h中明明有: ? ?#if defined (STM32F427_437xx) || defined
    發(fā)表于 05-15 08:00

    求助,關(guān)于STM32F407VET6 FSMC的地址問(wèn)題求解

    STM32F407VET6FSMC接口驅(qū)動(dòng) DM9000的問(wèn)題,PD7 接做為片選,PD11做為指令與數(shù)據(jù)的 代碼如下: #define DM9000_DATA*(vu16*)((u32
    發(fā)表于 05-15 07:49

    求助,關(guān)于STM32F407通過(guò)FSMC訪(fǎng)問(wèn)NAND FLASH問(wèn)題求解

    問(wèn)題描述:STM32F407通過(guò)FSMC外設(shè)訪(fǎng)問(wèn)三星NAND FLASH,系統(tǒng)時(shí)鐘是168MHz,始化外設(shè)GPI0D的PD0、PD1、PD3、PD4、PD6、PD11、PD12、PD14、PD15
    發(fā)表于 05-09 06:14

    LCD采用杜邦線(xiàn)連接GD32F103的板子可以正常驅(qū)顯,但在焊的PCB板子上不能顯示,為什么?

    STM32F103ZET6芯片帶有FSMC信號(hào),可以用此總線(xiàn)控制LCD,原子等產(chǎn)品上都是這么用的。 前一段時(shí)間自己設(shè)計(jì)了兩塊板子:一塊采用100引腳的將FSMC總線(xiàn)作為
    發(fā)表于 04-28 06:42

    stm32f405rg LQFP64封裝的芯片支持fsmc嗎?

    選取的是stm32f405rg芯片 預(yù)計(jì)是直接fsmc驅(qū)動(dòng)屏 但是我看了一下數(shù)據(jù)手冊(cè) 發(fā)現(xiàn)stm32f405rg LQFP64封裝的芯片 并沒(méi)有fsmc的引腳定義 那么它是不支持
    發(fā)表于 04-25 07:14

    關(guān)于STM32F103使用FSMC同步模式問(wèn)題求解

    大家好,我現(xiàn)在正在使用STM32F103的FSMC同步模式。 需要讀取高速ADC數(shù)據(jù),ADC是8位并口,但需要一個(gè)時(shí)鐘去觸發(fā)轉(zhuǎn)換,在時(shí)鐘上升沿讀取數(shù)據(jù),速度20M, 我看FSMC的同步模式正好有
    發(fā)表于 04-17 08:13

    CKS32F4xx系列FSMC功能簡(jiǎn)介

    本課講為大家講解CKS32F4xx系列產(chǎn)品的FSMC應(yīng)用實(shí)例,FSMC全稱(chēng)是Flexible Static Memory Controller,讀作靈活的靜態(tài)存儲(chǔ)控制器,顧名思義,MCU可以通過(guò)
    的頭像 發(fā)表于 04-14 15:06 ?1137次閱讀
    CKS32F4xx系列<b class='flag-5'>FSMC</b>功能簡(jiǎn)介

    stm32G474VETx的芯片驅(qū)動(dòng)LCD 8bit,讀不到LCD的ID,驅(qū)動(dòng)不正常的原因?

    F103的板卡,用FSMC驅(qū)動(dòng)LCD 8bit 沒(méi)有問(wèn)題 現(xiàn)在用stm32G474VETx的芯片驅(qū)動(dòng)同樣的屏,讀不到LCD的ID,驅(qū)動(dòng)不正常 用示波器看,讀寫(xiě)寄存器和寫(xiě)命令,RS一直
    發(fā)表于 04-10 08:02

    STM32實(shí)例教程,帶你了解FSMC的功能和用法[?]()

    PC 存儲(chǔ)卡。STM32通過(guò)FSMC可以與SRAM、 ROM、 PSRAM、 NOR Flash和NANDFlash等存儲(chǔ)器的引腳直接相連。STM32F1的
    發(fā)表于 03-15 15:53