91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

CHANBAEK ? 來源:頭條號科G棧 ? 作者:頭條號科G棧 ? 2023-03-23 10:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

pYYBAGQbsyeALt0FAADB_IK47Us138.jpg

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

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

pYYBAGQbsyiAGyDKAABGVE_gg2U739.jpg

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

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

poYBAGQbsymAV1oDAAG_xbnM61k692.jpg

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

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

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

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

再往下

寫操作使能;

擴(kuò)展模式Disabled;

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

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

總線翻轉(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的初始化就搞定了,后邊就可以通過內(nèi)存地址直接控制LCD了。這里有幾個(gè)需要注意的點(diǎn),下面來詳細(xì)說說。

第一, 存儲基地址

bank1的基地址是0x60000000,不同的子bank地址不同,通過HADDR[27:26]這兩位的值確定。我們選擇了第四個(gè),這兩位是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沒有地址,我們引出的地址線實(shí)際上接到了LCD的RS或者叫D/C引腳上。當(dāng)RS為低,則通過D[15:0]的是命令,當(dāng)RS為高,則通過D[15:0]的是數(shù)據(jù)。上面我們選擇了A0,在16位模式下,寫命令的地址就是0x6c000000(HADDR1為0),寫數(shù)據(jù)的地址就是0x6c000002(HADDR1為1)

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

pYYBAGQbszaAPt73AACjAfu5ZAQ101.jpg

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

pYYBAGQbszaAXM9rAADrhh7RyYU120.jpg

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

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

pYYBAGQbszeAKcvZAAB9YNtN71o340.jpg

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

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

poYBAGQbsziATdmqAAB4Dg8Xu7w197.jpg

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

poYBAGQbszmAG-uqAADLTESdCI8539.jpg

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

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

    關(guān)注

    36

    文章

    4615

    瀏覽量

    177204
  • 存儲器
    +關(guān)注

    關(guān)注

    39

    文章

    7738

    瀏覽量

    171652
  • sram
    +關(guān)注

    關(guān)注

    6

    文章

    819

    瀏覽量

    117458
  • STM32
    +關(guān)注

    關(guān)注

    2309

    文章

    11162

    瀏覽量

    373413
  • FSMC
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    39139
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    LCD保護(hù)方案

    LCD 模塊 LCD 模塊是 LCM( LCD Module)即 LCD 顯示模組,是指將玻璃和 LCD驅(qū)動(dòng)器集成到一起的
    的頭像 發(fā)表于 02-26 14:57 ?141次閱讀
    <b class='flag-5'>LCD</b>保護(hù)方案

    第2章 點(diǎn)亮你的LED

    本章的標(biāo)題是點(diǎn)亮LED,雖然任務(wù)很簡單,但是需要了解的單片機(jī)基礎(chǔ)知識卻很多,特別是對于初學(xué)者,剛開始要在頭腦中建立一個(gè)單片機(jī)的概念,然后通過點(diǎn)亮一個(gè)LED小燈來增加初學(xué)者對單片機(jī)的興趣和自信
    的頭像 發(fā)表于 10-13 15:52 ?511次閱讀
    第2章  <b class='flag-5'>點(diǎn)亮</b>你的LED

    LCD屏幕無法正確顯示效果如何解決?

    : 4.通過修改link文件將LCD緩存數(shù)組定義到SDRAM里面去: 5.在main線程中初始化和寫一個(gè)小方塊函數(shù): 6.下載后效果不理想。 這塊驅(qū)動(dòng)是正點(diǎn)的官方例程,在裸機(jī)的時(shí)候是沒有問題
    發(fā)表于 09-25 08:16

    分享一個(gè)嵌入式學(xué)習(xí)階段規(guī)劃

    采集4.I2C/SPI/TIM:對接傳感器、實(shí)現(xiàn) PWM 調(diào)速;FSMC/DAC:驅(qū)動(dòng) LCD、輸出模擬信號 (三)深度拓展階段(約 25 天) 核心目標(biāo):提升復(fù)雜項(xiàng)目能力,拓展技術(shù)邊界系統(tǒng)與界面:學(xué)
    發(fā)表于 09-12 15:11

    M55M1如何通過 EBI 驅(qū)動(dòng)同步信號 LCD 面板?

    [M55M1]通過 EBI 驅(qū)動(dòng)同步信號 LCD 面板
    發(fā)表于 08-19 06:27

    STM32L433 驅(qū)動(dòng)LCD斷碼屏,怎么單獨(dú)讓某個(gè)數(shù)字閃爍?

    STM32L433 驅(qū)動(dòng)LCD斷碼屏,怎么單獨(dú)讓某個(gè)數(shù)字閃爍
    發(fā)表于 06-23 07:49

    STM32L433使用LCD控制器驅(qū)動(dòng)段碼屏,請問有什么LCD降低功耗的方法嗎?

    STM32L433 使用LCD控制器驅(qū)動(dòng)段碼屏,有什么LCD降低功耗的方法嗎?
    發(fā)表于 06-23 07:12

    STM32L433VCT6 LCD復(fù)用引腳如何分配?

    背景:使用STM32L433VCT6驅(qū)動(dòng)段碼屏,33個(gè)段,其中用到一個(gè)PC10引腳,使用STM32CubeMX配置,只配置了LCD復(fù)用功能,但是用于LCD_SEG40還是
    發(fā)表于 06-20 08:26

    STM32N657X0Q為什么無法通過SPI驅(qū)動(dòng)st7796板子?

    求助大家,一般來說要想驅(qū)動(dòng)lcd外設(shè)應(yīng)該在stm32cubemx里配置什么,我的lcd可以正常供電但是就是燒錄程序后僅黑屏一瞬間然后繼續(xù)白屏,我感覺是沒有在stm32cubemx里配置
    發(fā)表于 06-19 07:21

    #LCD顯示屏 #HDMI #智能顯示 #驅(qū)動(dòng)方案

    lcd
    jf_65742179
    發(fā)布于 :2025年06月18日 10:07:54

    stm32cubumx使用1.28.0固件包無法初始化fsmc怎么解決?

    在使用CUBEMX配置fsmc驅(qū)動(dòng)norflash時(shí),勾選寫使能選項(xiàng),在初始化fsmc函數(shù)中,程序會進(jìn)入void Error_Handler(void)導(dǎo)致死機(jī),而這個(gè)情況在1.25.2版本并不會出現(xiàn)
    發(fā)表于 06-10 07:42

    stm32cubumx使用1.28.0固件包無法初始化fsmc怎么解決?

    在使用CUBEMX配置fsmc驅(qū)動(dòng)norflash時(shí),勾選寫使能選項(xiàng),在初始化fsmc函數(shù)中,程序會進(jìn)入void Error_Handler(void)導(dǎo)致死機(jī),而這個(gè)情況在1.25.2版本并不會出現(xiàn)
    發(fā)表于 06-06 07:16

    stm32cubumx使用1.28.0固件包無法初始化fsmc怎么解決?

    在使用CUBEMX配置fsmc驅(qū)動(dòng)norflash時(shí),勾選寫使能選項(xiàng),在初始化fsmc函數(shù)中,程序會進(jìn)入void Error_Handler(void)導(dǎo)致死機(jī),而這個(gè)情況在1.25.2版本并不會出現(xiàn)
    發(fā)表于 04-27 08:15

    如何通過J-Link實(shí)現(xiàn)STM32H5控制調(diào)試端口

    基于J-Link實(shí)現(xiàn)STM32H5安全編程介紹了在禁用TrustZone時(shí),如何通過J-Link實(shí)現(xiàn)STM32H5控制調(diào)試端口的安全鎖定或回歸打開。
    的頭像 發(fā)表于 03-17 10:25 ?1398次閱讀
    如何<b class='flag-5'>通過</b>J-Link實(shí)現(xiàn)<b class='flag-5'>STM32</b>H5控制調(diào)試端口