fsmc

STM32 FSMC使用之外扩RAM的妙用

匆匆过客 提交于 2020-02-29 04:33:37
在 STM32 上跑UCOS_II和UCGUI时,要想让屏幕稳定不闪,显示效果多样化,而且分配给每个任务的堆栈空间足够, STM32 内部的 RAM 肯定是不足的。最好的方法就是配置 FSMC 使内部 RAM 作为堆栈使用,而外部 RAM 作为变量存储和UCOS_II的任务堆栈。现在介绍 FSMC 以及如何配置,并写出启动文件中需要修改的地方。 来源: oschina 链接: https://my.oschina.net/u/2963604/blog/1810295

STM32使用SRAM扩展内存

帅比萌擦擦* 提交于 2020-02-04 03:46:39
目录 一、SRAM介绍 二、STM32F103系列的FSMC模块 三、初始化配置及数据访问 四、使全局变量定义在外部SRAM中的方法 五、参考文章及资料 一、SRAM介绍 SRAM( S tatic R andom- A ccess M emory)即静态随机存取存储器,所谓“静态”是指这种存储器只要保持通电,里面存储的数据就可以一直保持,但是掉电之后就会丢失。与DRAM(动态随机存取存储器)相比它不需要周期性的刷新里面的数据,操作简单,速度更快,但是更加的昂贵,集成度不如DRAM高。 本文使用的SRAM型号为 IS62WV51216,是 ISSI(Integrated Silicon Solution, Inc)公司生产的一颗16位宽 1M字节容量的CMOS静态内存芯片。 SRAM芯片(IS62WV51216) IS62WV51216引脚图 IS62WV51216引脚描述 地址线A0到A18寻址空间是512K,因为数据宽度为16位即两个字节,所以512K*2Byte = 1MB容量。LB和UB的功能是控制高低字节的数据有效性,真值表如下: 真值表 二、STM32F103系列的FSMC模块 FSMC(Flexible Static Memory Controller)即可变静态存储控制器,通俗的来说是STM32的一个强大的总线控制模块,它将AHB传输信号转换到适当的外部设备协议

STM32 TFT液晶屏与FSMC

怎甘沉沦 提交于 2019-12-01 07:21:45
目前网上的STM32的程序基本上都是从正点或者野火开发板为基础搞的,由于开发板的例程是基于正点的,但是板子的接线却不一致,这使得烧程序后液晶屏无法显示的问题。开发板的原理图如图 FSMC FSMC,即灵活的静态存储控制器,STM32F4 的FSMC 接口支持包括SRAM、NAND FLASH、NOR FLASH 和PSRAM 等存储器,我们这里使用的2.8寸液晶屏可以被看做是SRAM: 读写控制通过RD/WR设置 RS的高低控制是写数据还是写地址 我们希望使用SRAM的方式访问LCD,因此选择BANK1,原理图中RS接的是A12,即通过第12位决定是向LCD写命令还是写数据,片选信号接的NE4,可以知道 Bank1所选区 片选信号 地址范围 第1区 FSMC_NE1 0X6000,0000~63FF,FFFF 第2区 FSMC_NE2 0X6400,0000~67FF,FFFF 第3区 FSMC_NE3 0X6800,0000~6BFF,FFFF 第4区 FSMC_NE4 0X6C00,0000~6FFF,FFFF 基地址的范围是从 0x6c000000 开始的,由于FSMC的地址线 FSMC_A 的A[0]一定要和外设的A[0]接在一起,即已经被占用,不过对于LCD的液晶屏控制来说并不影响,选择其他FSMC_A的引脚依然可以满足RS控制,FSMC的地址范围为0-25

STM32F4+LCD屏幕驱动原理

余生颓废 提交于 2019-12-01 07:10:26
以下为LCD屏幕简单的驱动原理(屏幕型号为4.3寸 TFTLCD模块 驱动IC为NT35510): 1、首先介绍一下这个模块的引脚以及功能: LCD_CS:LCD片选信号 LCD_WR:LCD写信号 LCD_RD:LCD读信号 DB[17:1]:16位双向数据线 LCD_RST:硬复位LCD信号 LCD_RS:命令/数据标志(0:命令,1:数据) BL_CTR:背光控制信号 T_MISO/T_MOSI/T_PEN/T_CS/T_CLK:触摸屏接口信号(屏幕只显示时,这几个接口用不到) 2、用FSMC驱动LCD FSMC是灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接。FSMC可以驱动LCD的主要原因是因为FSMC的读写时序和LCD的读写时序相似,于是把LCD当成一个外部存储器来用。利用FSMC在相应的地址读或写相关数值时,STM32的FSMC会在硬件上自动完成时序上的控制,所以我们只要设置好读写相关时序寄存器后,FSMC就可以帮我们完成时序上的控制了。这里连接的时候有一个数据宽度连接的问题,根据STM32F4中文参考手册介绍,当LCD使用16位宽度的数据传输(也就是有16条数据线)的时候,HADDR数据传输到FSMC_A地址时需要右移一位。也就是HADDR[25:1]-->FSMC_A[24:0]对应相接。 FSMC_A是STM32的硬件的外部接口

fsmc 驱动lcd(二)地址的定义

£可爱£侵袭症+ 提交于 2019-12-01 07:01:44
这个地址的定义看了我一晚上,还是基础不牢 总算看懂了,记录如下: typedef struct { u16 LCD_REG; u16 LCD_RAM; } LCD_TypeDef; #define LCD_BASE ((u32)(0x6C000000 | 0x0000007E)) #define TFTLCD ((LCD_TypeDef *) LCD_BASE) 采用了A6 控制lcd的RS , NE4控制lcd的CS. 所有地址总线的bit7 为0 表示发送命令,为1表示数据。 #define TFTLCD ((LCD_TypeDef *) LCD_BASE) 之后, TFTLCD 就是结构体的首地址 0x6c00007e, 所以 TFTLCD -> LCD_REG地址 就是 0x6c00007e, 所以 TFTLCD -> LCD_RAM 地址就是 0x6c00007e+2= 0x6c000080。 来源: CSDN 作者: gonghaixu 链接: https://blog.csdn.net/gonghaixu/article/details/53750033

STM32F4——TFT-LCD原理及FSMC

不打扰是莪最后的温柔 提交于 2019-12-01 07:01:00
TFT-LCD 一、简介: TFT-LCD即薄膜晶体管液晶显示器,依据其尺寸、分辨率和驱动芯片的不同有很多分类,下边会依据2.8寸320X240分辨率以ILI9341芯片驱动的TFT-LCD做相关介绍。 二、接口: 模块采用16位并方式与外部连接,其相关接口图及信号线功能如下: CS:TFTLCD片选信号。WR:向TFTLCD写数据。RD:从TFTLCD读取数据。D[15:0]:16位数据线。RS:命令/数据标示(0,读写命令;1,读写数据)。 三、驱动时序: 对于写时序:CS拉低做片选,RS表示是要写数据还是要写命令,在WR信号线的上升沿获取数据线D[0:15]上的数据,在写时序上RD信号线总是处于高电平。对于读时序同理。 四、驱动流程: 对于LCD的驱动流程可由下图表示: 首先通过LCD_RST引脚做复位,再进行初始化序列,由于本人现阶段水平有限,先不去研究相关初始化序列,所以就直接运用LCD商家给出的初始化序列代码。无论是读写指令,都需要设置好坐标,再做出读写GRAM的相关指令。在随后涉及到颜色数据的相关处理,下边就针对颜色数据做一下相关说明。 对于颜色的设定也有多种格式,在这里只是针对RGB565颜色格式做说明。RGB565这样看(Red)[5位](Green)[6位](Blue)[5位],组成16位颜色深度。 五、指令: 对于ILI9341的指令有很多

STM32F103学习笔记 (十) TFTLCD 显示

吃可爱长大的小学妹 提交于 2019-12-01 07:00:45
看了TFTLCD和FSMC( 灵活的静态存储控制器 )的简介,还是一知半解,不知所云。 TFTLCD使用80并口,80 并口有如下一些信号线: CS: TFTLCD 片选信号。 WR:向 TFTLCD 写入数据。 RD:从 TFTLCD 读取数据。 D[15: 0]: 16 位双向数据线。 RST:硬复位 TFTLCD。 RS:命令/数据标志( 0,读写命令; 1,读写数据)。 只是记住FSMC在使用的时候要初始化和使能就行了。 关于lcd.c这个文件竟然接近3000行,好吧,我是写不出来,只能在主函数里调用了。 main.c: int main(void) { u8 x=0; u8 lcd_id[12]; //存放LCD ID字符串 delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 LCD_Init(); POINT_COLOR=RED; sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。 while(1) { switch(x) { case 0:LCD_Clear(WHITE)

STM32F10xx 通过 FSMC 与 ILI93xxTFTLCD驱动的通信的若干问题

怎甘沉沦 提交于 2019-12-01 07:00:26
关于FSMC的介绍请参考STM32中文参考手册,第9章“灵活的静态存储控制器” 问题 1. 为什么使用FSMC 连接 ILI93xxLCD 驱动? 答: ①. ILI93xx 使用的是 16 位并口接口传数据,而 FSMC 可以实现总线方式传送,比单纯的 IO 口操作速度更快。同时这个 16 位并口采用的是 intel8080 时序 ,FSMC 中也也有类似的时序,只是某些方面有区别。 简单一点说就是: 8080通过双总线控制,数据线,控制线(包括读使能 信号,写使能信号,片选信号,复位信号,数据 / 命令选择信号) FSMC 通过三总线控制,数据线,地址线,控制线(包括读使能信号,写使能信号,片选信号) 相比 8080 时序, FSMC 少了复位信号和数据 / 命令选择信号。(由于 FSMC 比 8080 时序多了地址线,所以可以通过地址线存放数据 / 命令选择信号) 问题 2 : 为什么在 FSMC 使用 bank1 ,区域 1 , A16 做数据 / 命令选择信号 的情况下, LCD_REG 的地址是 0x6000 0000, 而 LCD_RAM 的地址是 0x6002 0000 ? 为什么给 LCD_REG 这个地址 0x6000 0000 中写数据就是向 ILI93xx 控制器写命令(或者直接说写寄存器),而向 LCD_RAM 这个地址 0x6002 0000

利用STM32的FSMC控制2.8寸TFTLCD问题。

三世轮回 提交于 2019-12-01 06:59:50
一、LCD地址结构体 typedef struct { u16 LCD_REG; u16 LCD_RAM; } LCD_TypeDef; //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作为数据命令区分线 //注意设置时STM32内部会右移一位对其! 111 1110=0X7E #define LCD_BASE ((u32)(0x6C000000 | 0x0000007E)) #define LCD ((LCD_TypeDef *) LCD_BASE) 1、LCD为指针强制类型转换,指向NE4(Bank1第四区) A6。 2、 为什么会右移一位? 因为 当 Bank1 接的是 16 位宽度存储器的时候: HADDR[25:1] --> FSMC[24:0] 。 当 Bank1 接的是 8 位宽度存储器的时候: HADDR[25:0] --> FSMC[25:0] 。 而 不论外部接 8 位 /16 位宽设备, FSMC_A[0] 永远接在外部设备地址 A[0] 。 这里, TFTLCD 使用的是 16 位数据宽度,所以 HADDR[0] 并没有用到,只有 HADDR[25:1] 是有效的,对应关系变为: HADDR[25:1]--> FSMC[24:0] ,相当于右移了一位。 另外, HADDR[27:26] 的设置

STM32f103的TFTLCD和FSMC的使用

社会主义新天地 提交于 2019-12-01 06:59:18
多功能采集显示平台将通过 STM32 的 FSMC 接口来控制 TFTLCD 的显示,所以本节分为两个部分,分别介绍 TFTLCD 和 FSMC 。 TFT -LCD 即薄膜晶体管液晶显示器。其英文全称为: Thin Film Transistor-Liquid Crystal Display 。 TFT - LCD 与无源 TN - LCD 、 STN - LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管( TFT ),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 TFT -LCD 也被叫做真彩液晶显示器。 FSMC ( Flexible Static Memory Controller ,可变静态存储控制器 ) 是 STM32 系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。 多功能采集显示平台使用的 LCD 的驱动芯片是 ILI9325 ,有一个 16 位的变址寄存器( IR )、一个 18 位的写数据寄存器( WDR )和一个 18 位的读数据寄存器( RDR )。变址寄存器( IR )存储来自控制寄存器和内部的 GRAM 的指令信息。写数据寄存器( WDR )用来暂时存储要被写到控制寄存器和内部的 GRAM 中的数据