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

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

3天内不再提示

STM32CubeMx之FSMC灵活静态存储器控制器

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-30 09:25 次阅读

1.简介

FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是:
● 将AHB传输信号转换到适当的外部设备协议
● 满足访问外部设备的时序要求
所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。 FSMC在任一时刻只访问一个外部设备。
FSMC具有下列主要功能:
● 具有静态存储器接口的器件包括:
  ─ 静态随机存储器(SRAM)
  ─ 只读存储器(ROM)
  ─ NOR闪存
  ─ PSRAM(4个存储器块)

● 两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据
● 16位的PC卡兼容设备
● 支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM
● 8或16位数据总线
FSMC管理1GB空间,拥有4个Bank连接外部存储器,每个Bank有独立的片选信号,每个Bank有独立的时序配置,同步批量传输访问最高频率可达60MHz
支持的存储器类型:
静态地址映射存储器:SRAM、PSRAM、NOR/ONENAND、ROM
LCD接口:支持8080和6800模式
NANDFlash和16位PCCard

2.外挂设备地址映射

pYYBAGKTf62AOVN-AAHcF6hKG8I493.pngpoYBAGKTf_GAYyz6AAIGy-UqnYI637.png

NOR/PSRAM是”static memory map”设备: 256M字节的空间需要28根地址线寻址,HADDR表示内部AHB地址线;
HADDR[27:26]用来对4个region寻址;
HADDR[25:0]用来对外部地址FSMC[25:0];
无论8位/16位宽度,FSMC_A[0]始终连接外部设备地址A[0]
当外接设备16位数据宽度:HADDR[25:1]–>FSMC_A[24:0]
当外接设备8位数据宽度: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配置
 根据LCD硬件接口可知LCD接在FSMC_Blank1的region4上。

pYYBAGKTgQWAFIeQAAM0gaFeqUo471.pngpYYBAGKTgROAcWfuAADPhfES4Ww313.png

5 代码生成

1.FSMC配置代码

pYYBAGKTgVWAEUIDAAWpru7EKik372.png

FSMC寄存器配置可参考STM32中文参考手册第19章灵活静态存储器控制器(FSMC)。

poYBAGKTgZWAbJZRAAGrJsRyJGg405.pngpYYBAGKTgaaAKZk7AAGk_ZxIbT8135.png

2.LCD显示图片和显示汉字示例
(1) 读写数据

根据LCD硬件接口时序8080,要想实现对LCD屏数据显示则需要完成LCD写数据和写寄存器,LCD接在FSMC_Blank1的region4上,通过地址线FSMC_A10作为数据命令选择线,通过FSMC地址映射关系可知:
读写寄存器地址:0x6c000000
读写数据地址:0x6c000800
写寄存器和写数据代码如下:

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写数据*/
static void LcdWriteData(u16 dat)
{
	LCD_WR_DAT=dat;
}

(2)设置光标指令0X2A 和0X2B
该指令是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标( x 坐标)

poYBAGKTg3-AFLshAAEUMUjmm3Q823.png#pic_center

在默认扫描方式时,该指令用于设置 x 坐标,该指令带有 4 个参数,实际上是 2 个坐标值: SC 和 EC,即列地址的起始值和结束值, SC 必须小于等于 EC,且 0≤SC/EC≤239。一般在设置 x 坐标的时候,我们只需要带 2个参数即可,也就是设置 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)写入数据到GRAM指令0x2C
  该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD 的 GRAM 里面写入颜色数据了,该指令支持连续写 (地址自动递增)。

在这里插入图片描述
/*清屏函数*/
void LCD_Clear(u16 c)
{
	u32 i=0;
	LCD_SetCursor(0,0);//设置光标
	LcdWriteReg(0x2c);//开始写数据到GRAM
	for(i=0;i<320*480;i++)
	{
		LcdWriteData(c);
	}
}

(4)显示图片
  通过图片取模工具Img2Lcd进行图片取模:

pYYBAGKTgmaAVCkfAA6BaLQRpTU001.png

 将生成的图片数据放到工程中:

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);//开始写数据到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个倍数
*/
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

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

    关注

    34

    文章

    4416

    浏览量

    167221
  • 存储器
    +关注

    关注

    38

    文章

    7462

    浏览量

    163662
  • STM32
    +关注

    关注

    2266

    文章

    10880

    浏览量

    355082
  • FSMC
    +关注

    关注

    0

    文章

    55

    浏览量

    38116
收藏 人收藏

    评论

    相关推荐

    STM32接口中FSMC/FMC难点问题理解

    FSMC,即灵活静态存储控制器,能够与同步或异步存储器和 16 位 PC
    的头像 发表于 04-19 12:36 1.7w次阅读
    <b class='flag-5'>STM32</b>接口中<b class='flag-5'>FSMC</b>/FMC难点问题理解

    STM32FSMC外设简介

    Flexible static memory controller(FSMC)灵活静态存储控制器FS
    的头像 发表于 07-11 16:07 1873次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>FSMC</b>外设简介

    浅析STM32 FSMC操作LCD的过程

    FSMC称为灵活静态存储器,它能够与同步或异步存储器和16位PC存储器卡连接,
    发表于 07-22 14:46 3870次阅读
    浅析<b class='flag-5'>STM32</b> <b class='flag-5'>FSMC</b>操作LCD的过程

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

    FSMC(Flexible Static Memory Controller,灵活静态存储控制器)是S
    发表于 07-27 17:23 4364次阅读
    <b class='flag-5'>存储</b><b class='flag-5'>控制器</b><b class='flag-5'>FSMC</b>与触摸屏介绍

    STM32FSMC详解

    FSMC详解1、FSMC简介:FSMC,即灵活静态存储控制
    发表于 12-06 06:25

    【技术精选】嵌入式STM32原创征文活动精选文章

    网络协议栈移植步骤与方案STM32CubeMX定时PWM输出STM32CubeMxSD卡驱动STM
    发表于 07-27 18:26

    STM32F2灵活静态存储控制器FSMC

    FSMC特性简介和FSMC框图外挂存储器地址映射 AHB接口 NOR/PSRAM控制器 接口信号 支持的存储器和访问方式异步传输 同步突发传
    发表于 09-13 06:54

    STM32FSMC机制FlaSh存储器扩展

    STM32FSMC机制FlaSh存储器扩展  引 言   STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为
    发表于 11-27 10:07 1523次阅读
    <b class='flag-5'>STM32FSMC</b>机制FlaSh<b class='flag-5'>存储器</b>扩展

    F2产品技术培训_13.外部静态存储器控制器FSMC

    F2产品技术培训_13.外部静态存储器控制器FSMC
    发表于 03-15 14:41 11次下载

    STM32系列微控制器新型存储器扩展技术--FSMC有什么优点?

    Flash控制器管理第1个BANK,NAND/PC Card控制器管理第2~4个BANK。由于两个控制器管理的存储器类型不同,扩展时应根据选用的
    发表于 07-19 07:20 2928次阅读
    <b class='flag-5'>STM32</b>系列微<b class='flag-5'>控制器</b>新型<b class='flag-5'>存储器</b>扩展技术--<b class='flag-5'>FSMC</b>有什么优点?

    基于FPGA和STM32FSMC通信

    FSMC简介:FSMC灵活静态存储控制器FSMC
    发表于 07-28 09:35 1.2w次阅读

    STM32F10xxx FSMC外围设备驱动外部存储器的数据和使用手册免费下载

    本申请说明描述了如何使用高密度STM32F10xxx FSMC(柔性静态存储器控制器)外围设备来驱动一组外部
    发表于 12-27 16:03 28次下载
    <b class='flag-5'>STM32</b>F10xxx <b class='flag-5'>FSMC</b>外围设备驱动外部<b class='flag-5'>存储器</b>的数据和使用手册免费下载

    嵌入式单片机基础篇(二十)FSMC

    FSMC详解1、FSMC简介:FSMC,即灵活静态存储控制
    发表于 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下载地址)
    发表于 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。大容量且引脚数在100脚以上的STM32F103芯片都带有FSMC
    发表于 04-28 16:22 1916次阅读