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

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

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

STM32CubeMx之FSMC靈活靜態(tài)存儲器控制器

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-05-30 09:25 ? 次閱讀

1.簡介

?FSMC模塊能夠與同步或異步存儲器和16位PC存儲器卡接口,它的主要作用是:
● 將AHB傳輸信號轉換到適當?shù)耐獠吭O備協(xié)議
● 滿足訪問外部設備的時序要求
所有的外部存儲器共享控制器輸出的地址、數(shù)據(jù)和控制信號,每個外部設備可以通過一個唯一的片選信號加以區(qū)分。 FSMC在任一時刻只訪問一個外部設備。
FSMC具有下列主要功能:
● 具有靜態(tài)存儲器接口的器件包括:
? ─ 靜態(tài)隨機存儲器(SRAM)
? ─ 只讀存儲器(ROM)
? ─ NOR閃存
? ─ PSRAM(4個存儲器塊)

● 兩個NAND閃存塊,支持硬件ECC并可檢測多達8K字節(jié)數(shù)據(jù)
● 16位的PC卡兼容設備
● 支持對同步器件的成組(Burst)訪問模式,如NOR閃存和PSRAM
● 8或16位數(shù)據(jù)總線
FSMC管理1GB空間,擁有4個Bank連接外部存儲器,每個Bank有獨立的片選信號,每個Bank有獨立的時序配置,同步批量傳輸訪問最高頻率可達60MHz
支持的存儲器類型:
靜態(tài)地址映射存儲器:SRAM、PSRAM、NOR/ONENAND、ROM
LCD接口:支持8080和6800模式
NANDFlash和16位PCCard

2.外掛設備地址映射

pYYBAGKTf62AOVN-AAHcF6hKG8I493.pngpoYBAGKTf_GAYyz6AAIGy-UqnYI637.png

NOR/PSRAM是”static memory map”設備: 256M字節(jié)的空間需要28根地址線尋址,HADDR表示內(nèi)部AHB地址線;
HADDR[27:26]用來對4個region尋址;
HADDR[25:0]用來對外部地址FSMC[25:0];
無論8位/16位寬度,F(xiàn)SMC_A[0]始終連接外部設備地址A[0]
當外接設備16位數(shù)據(jù)寬度:HADDR[25:1]–>FSMC_A[24:0]
當外接設備8位數(shù)據(jù)寬度:HADDR[25:0]–>FSMC_A[25:0]

poYBAGKTg3uAPTfhAAD5NzLmbcs205.png#pic_center

3.LCD硬件接口

poYBAGKTgCyAAmI6AAQCN-Trsxo095.png

LCD屏
?分辨率:320*480;3.5寸;
?驅動方式:8080并口時序(Intel公司),16位真彩色(RGB565);
?屏幕驅動IC:NT35310;

pYYBAGKTgIKAP2jrAABzs-rp6cI825.png

4.軟件設置

?1.芯片選擇

poYBAGKTgJ2AfplTAAGGsV4_t44569.png

2. 時鐘配置

在這里插入圖片描述pYYBAGKTgLqAYpIrAADd010he_s984.png

3.FSMC配置
?根據(jù)LCD硬件接口可知LCD接在FSMC_Blank1的region4上。

pYYBAGKTgQWAFIeQAAM0gaFeqUo471.pngpYYBAGKTgROAcWfuAADPhfES4Ww313.png

5 代碼生成

?1.FSMC配置代碼

pYYBAGKTgVWAEUIDAAWpru7EKik372.png

FSMC寄存器配置可參考STM32中文參考手冊第19章靈活靜態(tài)存儲器控制器(FSMC)。

poYBAGKTgZWAbJZRAAGrJsRyJGg405.pngpYYBAGKTgaaAKZk7AAGk_ZxIbT8135.png

2.LCD顯示圖片和顯示漢字示例
(1) 讀寫數(shù)據(jù)

根據(jù)LCD硬件接口時序8080,要想實現(xiàn)對LCD屏數(shù)據(jù)顯示則需要完成LCD寫數(shù)據(jù)和寫寄存器,LCD接在FSMC_Blank1的region4上,通過地址線FSMC_A10作為數(shù)據(jù)命令選擇線,通過FSMC地址映射關系可知:
讀寫寄存器地址:0x6c000000
讀寫數(shù)據(jù)地址:0x6c000800
寫寄存器和寫數(shù)據(jù)代碼如下:

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#define LCD_WR_REG *((volatile u16 *)0x6c000000)
#define LCD_WR_DAT *((volatile u16 *)0x6c000800)	
/*LCD寫寄存器*/
static void LcdWriteReg(u16 reg)
{
	LCD_WR_REG=reg;
}
/*LCD寫數(shù)據(jù)*/
static void LcdWriteData(u16 dat)
{
	LCD_WR_DAT=dat;
}

(2)設置光標指令0X2A 和0X2B
該指令是頁地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置縱坐標( x 坐標)

poYBAGKTg3-AFLshAAEUMUjmm3Q823.png#pic_center

在默認掃描方式時,該指令用于設置 x 坐標,該指令帶有 4 個參數(shù),實際上是 2 個坐標值: SC 和 EC,即列地址的起始值和結束值, SC 必須小于等于 EC,且 0≤SC/EC≤239。一般在設置 x 坐標的時候,我們只需要帶 2個參數(shù)即可,也就是設置 SC 即可,因為如果 EC 沒有變化,我們只需要設置一次即可,從而提高速度。

0X2B 指令,該指令是頁地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置縱坐標( y 坐標)。

pYYBAGKTg4CAbijiAAEAMnPAyGo118.png#pic_center
/*設置光標*/
static void LCD_SetCursor(u16 x,u16 y)
{
	LcdWriteReg(0x2A);//設置x坐標
	LcdWriteData(x>>8);
	LcdWriteData(x&0xff);
	LcdWriteReg(0x2B);//設置y坐標
	LcdWriteData(y>>8);
	LcdWriteData(y&0xff);	
}

(3)寫入數(shù)據(jù)到GRAM指令0x2C
??該指令是寫 GRAM 指令,在發(fā)送該指令之后,我們便可以往 LCD 的 GRAM 里面寫入顏色數(shù)據(jù)了,該指令支持連續(xù)寫 (地址自動遞增)。

在這里插入圖片描述
/*清屏函數(shù)*/
void LCD_Clear(u16 c)
{
	u32 i=0;
	LCD_SetCursor(0,0);//設置光標
	LcdWriteReg(0x2c);//開始寫數(shù)據(jù)到GRAM
	for(i=0;i<320*480;i++)
	{
		LcdWriteData(c);
	}
}

(4)顯示圖片
??通過圖片取模工具Img2Lcd進行圖片取模:

pYYBAGKTgmaAVCkfAA6BaLQRpTU001.png

?將生成的圖片數(shù)據(jù)放到工程中:

pYYBAGKTgn6ARXRDAAGzVgrNpdA198.png
/*lcd圖片顯示*/
void LCD_DrawBMP(u16 x,u16 y,u16 w,u16 h,const u8 *buff)
{
	u16 i,j;
	u16 temp;
	LcdWriteReg(0x2A);//設置x坐標
	//設置x的起始坐標
	LcdWriteData(x>>8);
	LcdWriteData(x&0xff);
	//設置x的結束坐標
	LcdWriteData((x+w)>>8);
	LcdWriteData((x+w)&0xff);
	LcdWriteReg(0x2B);//設置y坐標
	//設置y的起始坐標
	LcdWriteData(y>>8);
	LcdWriteData(y&0xff);		
	//設置y的結束坐標
	LcdWriteData((y+h)>>8);
	LcdWriteData((y+h)&0xff);		
	LcdWriteReg(0x2c);//開始寫數(shù)據(jù)到GRAM
	for(i=0;i>8);
	LcdWriteData(0);
	//設置x的結束坐標
	LcdWriteData(320>>8);
	LcdWriteData(320&0xff);
	LcdWriteReg(0x2B);//設置y坐標
	//設置y的起始坐標
	LcdWriteData(0>>8);
	LcdWriteData(0);		
	//設置y的結束坐標
	LcdWriteData(480>>8);
	LcdWriteData(480&0xff);			
}
;i++)>

(5)漢字顯示

pYYBAGKTgvmAc3SNAARpDWfFFAc215.png

??通過PCtoLCD2002進行漢字取模,取模方式:高位在前,逐行式。

/*
漢字取模方式:逐列式,高位在前,高度需保證為8個倍數(shù)
*/
void LCD_Display_Font(u16 x,u16 y,u8 size,u8 *font,u16 c)
{	
	u16 i,j;
	u8 temp;
	u16 x0=x;
	for(i=0;i*size>

6 示例效果

poYBAGKTgyOAF_sRAAKWKfmZF2Q710.pngpYYBAGKTgzmAGlBdAAkpTGHcwrI665.png

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

    關注

    34

    文章

    4363

    瀏覽量

    166199
  • 存儲器
    +關注

    關注

    38

    文章

    7366

    瀏覽量

    163092
  • STM32
    +關注

    關注

    2258

    文章

    10828

    瀏覽量

    352492
  • FSMC
    +關注

    關注

    0

    文章

    54

    瀏覽量

    38056
收藏 人收藏

    評論

    相關推薦

    STM32接口中FSMC/FMC難點問題理解

    FSMC,即靈活靜態(tài)存儲控制器,能夠與同步或異步存儲器和 16 位 PC
    的頭像 發(fā)表于 04-19 12:36 ?1.6w次閱讀
    <b class='flag-5'>STM32</b>接口中<b class='flag-5'>FSMC</b>/FMC難點問題理解

    STM32FSMC外設簡介

    Flexible static memory controller(FSMC)靈活靜態(tài)存儲控制器。FS
    的頭像 發(fā)表于 07-11 16:07 ?1707次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>FSMC</b>外設簡介

    淺析STM32 FSMC操作LCD的過程

    FSMC稱為靈活靜態(tài)存儲器,它能夠與同步或異步存儲器和16位PC存儲器卡連接,
    發(fā)表于 07-22 14:46 ?3561次閱讀
    淺析<b class='flag-5'>STM32</b> <b class='flag-5'>FSMC</b>操作LCD的過程

    存儲控制器FSMC與觸摸屏介紹

    FSMC(Flexible Static Memory Controller,靈活靜態(tài)存儲控制器)是S
    發(fā)表于 07-27 17:23 ?3910次閱讀
    <b class='flag-5'>存儲</b><b class='flag-5'>控制器</b><b class='flag-5'>FSMC</b>與觸摸屏介紹

    STM32FSMC詳解

    FSMC詳解1、FSMC簡介:FSMC,即靈活靜態(tài)存儲控制
    發(fā)表于 12-06 06:25

    【技術精選】嵌入式STM32原創(chuàng)征文活動精選文章

    網(wǎng)絡協(xié)議棧移植步驟與方案STM32CubeMX定時PWM輸出STM32CubeMxSD卡驅動STM
    發(fā)表于 07-27 18:26

    STM32F2靈活靜態(tài)存儲控制器FSMC

    FSMC特性簡介和FSMC框圖外掛存儲器地址映射 AHB接口 NOR/PSRAM控制器 接口信號 支持的存儲器和訪問方式異步傳輸 同步突發(fā)傳
    發(fā)表于 09-13 06:54

    STM32FSMC機制FlaSh存儲器擴展

    STM32FSMC機制FlaSh存儲器擴展  引 言   STM32是ST(意法半導體)公司推出的基于ARM內(nèi)核Cortex-M3的32位微控制器系列。Cortex-M3內(nèi)核是為
    發(fā)表于 11-27 10:07 ?1496次閱讀
    <b class='flag-5'>STM32FSMC</b>機制FlaSh<b class='flag-5'>存儲器</b>擴展

    F2產(chǎn)品技術培訓_13.外部靜態(tài)存儲器控制器FSMC

    F2產(chǎn)品技術培訓_13.外部靜態(tài)存儲器控制器FSMC
    發(fā)表于 03-15 14:41 ?11次下載

    STM32系列微控制器新型存儲器擴展技術--FSMC有什么優(yōu)點?

    Flash控制器管理第1個BANK,NAND/PC Card控制器管理第2~4個BANK。由于兩個控制器管理的存儲器類型不同,擴展時應根據(jù)選用的
    發(fā)表于 07-19 07:20 ?2856次閱讀
    <b class='flag-5'>STM32</b>系列微<b class='flag-5'>控制器</b>新型<b class='flag-5'>存儲器</b>擴展技術--<b class='flag-5'>FSMC</b>有什么優(yōu)點?

    基于FPGA和STM32FSMC通信

    FSMC簡介:FSMC靈活靜態(tài)存儲控制器,FSMC
    發(fā)表于 07-28 09:35 ?1.2w次閱讀

    STM32F10xxx FSMC外圍設備驅動外部存儲器的數(shù)據(jù)和使用手冊免費下載

    本申請說明描述了如何使用高密度STM32F10xxx FSMC(柔性靜態(tài)存儲器控制器)外圍設備來驅動一組外部
    發(fā)表于 12-27 16:03 ?28次下載
    <b class='flag-5'>STM32</b>F10xxx <b class='flag-5'>FSMC</b>外圍設備驅動外部<b class='flag-5'>存儲器</b>的數(shù)據(jù)和使用手冊免費下載

    嵌入式單片機基礎篇(二十)FSMC

    FSMC詳解1、FSMC簡介:FSMC,即靈活靜態(tài)存儲控制
    發(fā)表于 11-23 18:21 ?17次下載
    嵌入式單片機基礎篇(二十)<b class='flag-5'>之</b><b class='flag-5'>FSMC</b>

    STM32學習STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)

    STM32學習STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)
    發(fā)表于 12-07 11:51 ?28次下載
    <b class='flag-5'>STM32</b>學習<b class='flag-5'>之</b><b class='flag-5'>STM32cubeMX</b>軟件安裝與使用(附<b class='flag-5'>STM32cubeMX</b>5.2.1下載地址)

    為什么可以利用FSMC來使用外部RAM

    為什么可以利用FSMC來使用外部RAM呢,首先了解一下STM32里的FSMC。大容量且引腳數(shù)在100腳以上的STM32F103芯片都帶有FSMC
    發(fā)表于 04-28 16:22 ?1873次閱讀