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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

STM32如何通過FSMC點亮LCD

CHANBAEK ? 來源:頭條號科G棧 ? 作者:頭條號科G棧 ? 2023-03-23 10:02 ? 次閱讀

FSMC是Flexible static memory controller(可變靜態(tài)存儲控制器)的簡稱,是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共享了地址、數(shù)據(jù)、讀、寫信號,其他信號根據(jù)bank的用途不同會有一些差別。

pYYBAGQbsyiAGyDKAABGVE_gg2U739.jpg

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

STM32的設置使用cubeMX很方便,下面是針對FSMC的設置,其他基礎設置這里就不羅列了。

poYBAGQbsymAV1oDAAG_xbnM61k692.jpg

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

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

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

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

再往下

寫操作使能;

擴展模式Disabled;

地址建立時間設置為6;

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

總線翻轉(zhuǎn)時間設置為0.

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

poYBAGQbsyqANpN1AAG8n4G7s4c892.jpg

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

pYYBAGQbsyuAWK0mAAAarHjrZ-E294.jpg

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

背光引腳代碼如下:

poYBAGQbsy2AVjKEAAHLHXBr2dY483.jpg

FSMC的初始化代碼如下:

FSMC的引腳配置

pYYBAGQbsy-AdO4cAAIoVVKqGcw275.jpg

FSMC模式和時序配置:

pYYBAGQbszGAKNHfAAJQf3B5r_g171.jpg

到此,F(xiàn)SMC的初始化就搞定了,后邊就可以通過內(nèi)存地址直接控制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的數(shù)據(jù)or命令選擇

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

(其實地址不唯一,只要保證HADDR1的0和1準確就行,其他地址位隨意,但是一般選擇最簡單或?qū)嵱玫牡刂罚筮厱岬剑?/p>

pYYBAGQbszaAPt73AACjAfu5ZAQ101.jpg

我們再假設選擇A3,那么寫命令的地址還是0x6c000000(HADDR4為0),寫數(shù)據(jù)的地址是0x6c000010(HADDR4為1)。所以結(jié)論就是,寫命令的地址可以都是0x6c000000,寫數(shù)據(jù)的地址根據(jù)選擇的地址線確定。這是最簡單的地址。

pYYBAGQbszaAXM9rAADrhh7RyYU120.jpg

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

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

pYYBAGQbszeAKcvZAAB9YNtN71o340.jpg

我們都知道結(jié)構體是順序排列的,所以LCD_REG的地址是0x6c000000,變量大小是2個字節(jié)(16位),所以LCD_RAM的地址就是0x6c000002,剛好就是我們選擇A0地址線(HADDR1)拉高的值。

那如果選擇其他地址線,這里就需要做一點變動。比如選擇A3,我們逆向操作來解決這個問題,A3寫數(shù)據(jù)地址是0x6c000010,也就是LCD_RAM的地址。LCD_REG比LCD_RAM小兩個字節(jié),減2就得到了0x6c00000e,此時HADDR4為0,那這個就是我們需要的LCD基地址,因為只有這個值加2后會變成寫數(shù)據(jù)的地址,這就是那個實用的地址。

poYBAGQbsziATdmqAAB4Dg8Xu7w197.jpg

操作框圖如下圖所示,F(xiàn)SMC初始化好后就跟透明的一樣,只需要往指定的地址送命令或者數(shù)據(jù)即可。類似串口藍牙的透傳,一旦設置配對好,就可以無視藍牙的存在。

poYBAGQbszmAG-uqAADLTESdCI8539.jpg

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

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

    關注

    34

    文章

    4363

    瀏覽量

    166195
  • 存儲器
    +關注

    關注

    38

    文章

    7366

    瀏覽量

    163092
  • sram
    +關注

    關注

    6

    文章

    757

    瀏覽量

    114450
  • STM32
    +關注

    關注

    2258

    文章

    10828

    瀏覽量

    352484
  • FSMC
    +關注

    關注

    0

    文章

    54

    瀏覽量

    38055
收藏 人收藏

    評論

    相關推薦

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

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

    stm32fsmc總線上同時掛載LCD屏和SRAM和單獨設置一個FSMC總線設備的有哪些區(qū)別?

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

    求助,關于STM32F103ZE+UC/GUI+7寸LCD硬件選擇問題求解

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

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

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

    FSMC_Bank1和FSMC_Bank1E沒有定義是怎么回事?

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

    關于STM32F103使用FSMC同步模式問題求解

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

    CKS32F4xx系列FSMC功能簡介

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

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

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

    關于STM32F103從外設到存儲器DMA通道數(shù)據(jù)格式的問題

    在基于STM32F103開發(fā)過程中遇到了一個瓶頸,就是圖片取模后的數(shù)據(jù)放在W25Q64當中,通過硬件SPI+DMA的方式直接將數(shù)據(jù)發(fā)送給FSMC,FSMC被用來驅(qū)動16bit的
    發(fā)表于 03-07 07:11

    使用STM32FSMC與CYUSB3014通信,3014的GPIF要設置成什么模式?

    需求是STM32的數(shù)據(jù)通過FSMC傳輸給CYUSB3014,再USB傳給PC。 1.請問使用STM32FSMC與CYUSB3014通信,3
    發(fā)表于 02-27 07:52

    使用MM32F3270 FSMC驅(qū)動TFT-LCD

    使用MM32F3270 FSMC驅(qū)動TFT-LCD
    的頭像 發(fā)表于 09-27 15:34 ?772次閱讀
    使用MM32F3270 <b class='flag-5'>FSMC</b>驅(qū)動TFT-<b class='flag-5'>LCD</b>

    STM32F1系列MCU硬件電路FSMC接口設計

    FSMCSTM32F1提供的一個靜態(tài)存儲控制器,是MCU用來擴展存儲器,可用來驅(qū)動SRAM、Nor Flash、NAND Flash。這里先簡單講解下這三種存儲器的應用場合。
    發(fā)表于 09-27 14:33 ?2363次閱讀
    <b class='flag-5'>STM32</b>F1系列MCU硬件電路<b class='flag-5'>FSMC</b>接口設計

    STM32FSMC是如何驅(qū)動8080總線的液晶的?

    STM32de FSMC是如何驅(qū)動8080總線的液晶的?看了半天數(shù)據(jù)手冊也不知道如何接線了,液晶有16位的數(shù)據(jù)總線,而FSMC的有20多位。
    發(fā)表于 09-26 07:38

    STM32FSMC和FMC有什么區(qū)別?

    STM32FSMC和FMC有什么區(qū)別呢? 有的系列,比如F103是FSMC,有的系列,M4就是FMC了。這兩者有什么區(qū)別呢?
    發(fā)表于 09-26 06:17

    基于STM32開發(fā)板點亮LCD例程

    網(wǎng)絡上配套STM32開發(fā)板有很多LCD例程,主要是TFT LCD跟OLED的。從這些例程,大家都能學會如何點亮一個LCD。但這代碼都有下面這
    的頭像 發(fā)表于 09-24 11:54 ?1671次閱讀
    基于<b class='flag-5'>STM32</b>開發(fā)板<b class='flag-5'>點亮</b><b class='flag-5'>LCD</b>例程