tag 标签: fsmc

相关博文
  • 热度 15
    2013-7-9 20:50
    1834 次阅读|
    0 个评论
    三、说了这么久的理论,来个实例分析更加形象了,首先硬件连线要明白 在原理图或者开发手册上面能够确定引脚复用问题 地址引脚: (A0-A5 :PF0 - PF5) (A6-A9: F12-F15 ) (A10-A15:PG0-PG5) (A16-A18:PD11-PD13) (A19-A22:PE3-PE6) (A23-PE2) 片选信号(NEx:PG12)因为我选择的是block4 写使能(NWR:PD5) 读使能(NOE:PD4) 至此控制引脚基本完成 下面就是数据引脚: PD14-FSMC-D0 ----LCD-DB0 PD15-FSMC-D1 ----LCD-DB1 PD0-FSMC-D2 ----LCD-DB2 PD1-FSMC-D3 ----LCD-DB3 PE7-FSMC-D4 ----LCD-DB4 PE8-FSMC-D5 ----LCD-DB5 PE9-FSMC-D6 ----LCD-DB6 PE10-FSMC-D7 ----LCD-DB7 PE11-FSMC-D8 ----LCD-DB8 PE12-FSMC-D9 ----LCD-DB9 PE13-FSMC-D10 ----LCD-DB10 PE14-FSMC-D11 ----LCD-DB11 PE15-FSMC-D12 ----LCD-DB12 PD8-FSMC-D13 ----LCD-DB13 PD9-FSMC-D14 ----LCD-DB14 PD10-FSMC-D15 ----LCD-DB15 有了这些硬件连线是没有任何问题的 四、正式分析 程序 1、硬件引脚 配置 函数   01 void LCD_CtrlLinesConfig(void) 02 { 03 GPIO_InitTypeDef GPIO_InitStructure; 04 /* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */ 05 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); //使能FSMC 06   07 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | 08 RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG | 09 RCC_APB2Periph_AFIO, ENABLE); 10 //IO口复用功能时钟 11 /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14), 12 PD.10(D15), PD.14(D0), PD.15(D1) as alternate 13 function push pull */ 14   15 /*D端口初始化*/ 16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | 17 GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | 18 GPIO_Pin_15; 19 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 20 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 21 GPIO_Init(GPIOD, GPIO_InitStructure); 22   23 /*E端口初始化*/ 24 /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10), 25 PE.14(D11), PE.15(D12) as alternate function push pull */ 26   27 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | 28 GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | 29 GPIO_Pin_15; 30 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 31 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 32 GPIO_Init(GPIOE, GPIO_InitStructure); //将配置写入GPIOE管脚 33   34 /*A0地址线*/ 35 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 36 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 37 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 38 GPIO_Init(GPIOF, GPIO_InitStructure); 39   40 /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */ 41 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; 42 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 43 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 44 GPIO_Init(GPIOG, GPIO_InitStructure); 45   46   47 /*复位端口PE6*/ 48 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; 49 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 50 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 51 GPIO_Init(GPIOE, GPIO_InitStructure); 52   53   54 GPIO_ResetBits(GPIOE,GPIO_Pin_6); //复位脚 55   56 DelayMs(50); //延时50ms 57   58 GPIO_SetBits(GPIOE, GPIO_Pin_6); //将复位脚拉高 59 } 细心观察,能够发现就是上面说的那些引脚嘛! 2、接下来的就是比较重要的FSMC的配置了 先上 代码 ,然后慢慢分析吧   01 void LCD_FSMCConfig(void) 02 { 03 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; 04 FSMC_NORSRAMTimingInitTypeDef p; 05   06 /*-- FSMC Configuration ------------------------------------------------------*/ 07 /*----------------------- SRAM Bank 4 ----------------------------------------*/ 08 /* FSMC_Bank1_NORSRAM4 configuration */ 09 p.FSMC_AddressSetupTime = 0; 10 p.FSMC_AddressHoldTime = 0; 11 p.FSMC_DataSetupTime = 2; 12 p.FSMC_BusTurnAroundDuration = 0; 13 p.FSMC_CLKDivision = 0; 14 p.FSMC_DataLatency = 0; 15 p.FSMC_AccessMode = FSMC_AccessMode_A; 16   17 /* 18 Color LCD configuration ------------------------------------ 19 LCD configured as follow: 20 - Data/Address MUX = Disable 21 - Memory Type = SRAM 22 - Data Width = 16bit 23 - Write Operation = Enable 24 - Extended Mode = Enable 25 - Asynchronous Wait = Disable 26 */ 27 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; 28 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; 29 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; 30 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; 31 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; 32 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; 33 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; 34 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_Be " " target= "_blank" for eWaitState; 35 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; 36 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; 37 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; 38 //FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable; 39 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 40 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = p; 41 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = p; 42   43 FSMC_NORSRAMInit(FSMC_NORSRAMInitStructure); 44   45 /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */ 46 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); 47 } a、首先是时间参数的配置,我们在初始化的时候设置的bank4,所以这里对应的也是bank4,本函数主要使用了两种类型的结构体对FSMC进行配置,第一种 为 FSMC_NORSRAMInitTypeDef类型的结构体主要用于NOR FLASH的模式配置,包括存储器类型、数据宽度等。另一种的类型为FSMC_NORSRAMTimingInitTypeDef    
  • 热度 15
    2013-7-9 20:46
    1399 次阅读|
    0 个评论
    在完成IO驱动彩屏的试验后,就准备着手使用FSMC来驱动彩屏,先了解一下预备知识 一、所谓的FSMC机制 简单介绍FSMC在这篇博文里面很清楚,推荐一下 http://blog.csdn.net/king_ bin gge/article/details/8718566 然后还有就是这篇学习笔记,也还行 http://www.cnblogs.com/hduxyc/archive/2011/05/17/2048099.html 个人觉得有了这两篇博文再加上我们的参考手册足够搞定FSMC驱动彩屏了 二、FSMC之我见 开始只是谈到别人对FSMC的理解,注意这里只讨论FSMC控制TFT,也就是在FSMC的NOR\PSRAM模式控制LCD,所以我们以下的分析都是基于这种模式的。 1、我们之前通过使用GPIO来模拟8080/6800时序从而达到驱动彩屏的,同样需要明白的一点就是我们也只是使用FSMC来模拟8080 /6800时序,只不过这个读写速度有些快(使用了总线嘛),仅此而已!如果不明白8080/6800时序是怎样的或许在这个文库里面能找到你想要的 http://wenku.baidu.com/view/a8c98600cc1755270722083e.html 简单一点就是:8080是通过“读使能(RE)”和“写使能(WE)”两条控制线进行读写操作。  6800是通过“总使能(E)”和“读写选择(W/R)”两条控制线进行 2、那么了解到FSMC的三总线如下! 数据线:这个可以分为8位的和16位,这个不难理解,就是之指一次穿上红8位还是16位数据,我的是16位的,8位的有一个懒得用。 地址线:既然我们访问的外NOR FLASH,那么一定会有相应的地址线,那么这些地址线在哪里呢?肯定是通过GPIO引脚复用的。有A0 -- A23 24根,能够控制访问16M的空间,也就是一个子bank; 控制总线:它的控制总线只有三根:读使能信号,写使能信号,片选信号。所以这里和我们8080时序相比,少了复位信号线和数据/命令控制线,怎么办?继续看! 3、了解了FSMC会有这三总线的概念,那么接下来就是如何转化为我们需要的时序了。 对比一下FSMC访问外nor flash和8080访问时序如下 差别似乎很小是吧,简单说就是在数据/指令选择和复位信号上的区别。 4、在这里我们使用的软件方法来完善FSMC转化为8080的读写时序 在参考手册上的存储系统能找到,芯片留给我们外扩的存储器(NOR FLASH、PSRAM这类可直接寻址的器 件)地址是从0x60000000开始的,意思就是当我们访问0x60000000的时候,那就是相当于访问外部nor flash了(我们只讨论这种情况),那么他就会自动产生FSMC的时序 在这里,我们所需要添加的就是D/C选择信号,如何实现呢?我们是通过,一根地址线来实现的,当我们把A0多对应的GPIOF0(引脚默认复用)接到TFT的RS端, 然后执行访问0x60000000的指令,那么RS是否就是低电平选择为数据呢?又加入我们访问的地址是0x60000001的时候,那么RS是否就是高电平,从而选择的就是指令传送呢?答案当然是肯定的!所以我们就解决了这个问题,复位信号就更好解决了,直接和 开发 板的复位引脚接在一起就好了,就这么简单!
  • 热度 18
    2012-12-24 18:23
    1738 次阅读|
    0 个评论
      FSMC : flexible static memory controller 灵活静态存储控制器,可用于STM32芯片控制NOR FLASH、PSRAM和NAND FLASH 存储芯片。 功能介绍: (1)STM32的FSMC 有三个中断源,经过逻辑或连到NVIC单元, (2)写入FIFO; (3)  代码可以在除NAND闪存和PC卡外的片外存储器运行; (4) 目标频率fCLK为HCLK/2,即当系统时钟为72MHz时,外部访问是基于36MHz时钟;系统时钟为 48MHz时,外部访问是基于24MHz时钟。     这里我们使用FSMC的NOR/PSRAM模式控制LCD,所以重点看框图中NOR FLASH 控制信号线部分 时序图: (1)读:     (2)写:   NADV是在地址、信号线复用时作为锁存信号的,如果复用,则需要连接使用,如果不复用,那么不需要理会。   接着,我们来看一下SSD1289的8080时序图   STM32用普通IO接口也可以进行模拟,但是这样做的话速度慢,尤其是显示数据量大的图片时候,相比于FSMC驱动,IO模拟驱动的效率更低。  2、FSMC模拟8080时序 对比信号线可知,片选、读写使能和数据线都相同,唯独8080信号线是数据命令选择端,而FSMC-NOR信号线是A ,所以,我们可以用A 中的某一位来地代替此数据命令线。比如说拿A0代替,则是奇数地址时数据线所传输的是数据,而偶地址时,传输的是命令。 具体实现方法便是在程序中利用指针变量向不同的地址单元写入数据。这样,就可以由FSMC模拟出8080接口控制LCD了。   3、触摸屏控制芯片TSC2046 4、红牛开发板参考连接图   6、初始化FSMC模式 注意FSMC中没有对应于LCD中背光BLACK_LIGHT,和复位RESET要么用地址线A25~A0中某一位来模拟,或者用普通的IO。 7、需要添加的库文件 startup/start_stm32f10x_hd.c CMSIS/core_cm3.c CMSIS/system_stm32f10x.c  FWlib/misc.c                     FWlib/stm32f10x_spi.c FWlib/stm32f10x_rcc.c  FWlib/stm32f10x_exti.c FWlib/stm32f10x_gpio.c FWlib/stm32f10x_fsmc.c  
相关资源
  • 所需E币: 0
    时间: 2022-3-15 02:33
    大小: 156.58KB
    上传者: samewell
    STM32与FSMC机制分析和使用.zip
  • 所需E币: 0
    时间: 2021-3-15 18:51
    大小: 128.2KB
    上传者: stanleylo2001
    STM32的FSMC灵活静态存储器控制器
  • 所需E币: 4
    时间: 2019-12-24 21:50
    大小: 136.42KB
    上传者: rdg1993
    FSMC,TFTLCD……
  • 所需E币: 5
    时间: 2019-12-24 18:51
    大小: 375.5KB
    上传者: 微风DS
    LCD和SRAM同时工作测试代码……
  • LCD
    所需E币: 4
    时间: 2019-12-24 18:52
    大小: 15.6KB
    上传者: 二不过三
    LCD……
  • 所需E币: 4
    时间: 2019-12-24 18:52
    大小: 424.76KB
    上传者: 2iot
    FSMC驱动LCD……
  • 所需E币: 3
    时间: 2019-12-24 15:38
    大小: 52.43KB
    上传者: wsu_w_hotmail.com
    STM32通过FSMC读写SRAM……
  • 所需E币: 5
    时间: 2019-12-24 15:12
    大小: 1.18MB
    上传者: 978461154_qq
    FSMC总线控制LCD……
  • 所需E币: 4
    时间: 2019-12-24 11:21
    大小: 1.36MB
    上传者: 16245458_qq.com
    FSMC读写FPGA测试工程.……
  • 所需E币: 3
    时间: 2019-12-22 14:08
    大小: 3.29MB
    上传者: givh79_163.com
    STM32F2技术培训_灵活的静态存储控制器_FSMC灵活的静态存储控制器FSMC1培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作2培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作3FSMC特性简介FSMC管理1GB空间,拥有4个Bank连接外部存储器每个Bank有独立的片选信号每个Bank有独立的时序配置同步批量传输访问最高频率可达60MHzfCLK=HCLK/2支持的存储器类型静态地址映射存储器SRAMPSRAM可以在这些外部存储执行代码NOR/ONENANDROMLCD接口支……
  • 所需E币: 3
    时间: 2019-12-19 14:31
    大小: 2.33MB
    上传者: 238112554_qq
    100脚STM32+SRAM原理图和PCB,附FSMC驱动代码……
  • 所需E币: 4
    时间: 2019-12-19 14:31
    大小: 179.42KB
    上传者: wsu_w_hotmail.com
    100脚STM32+SRAM原理图和PCB,附FSMC驱动代码……
  • 所需E币: 4
    时间: 2019-12-24 16:13
    大小: 1.38MB
    上传者: wsu_w_hotmail.com
    零死角玩转stm32-高级篇4、FSMC详解(3.2寸液晶触摸画板)0、友情提示《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。M3的世界,与野火同行,乐意惬无边。另外,野火团队历时一年精心打造的《STM32库开发实战指南》将于今年10月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。内容上会给你带来更多的惊喜。是一本学习STM32必备的工具书。敬请期待!-第2页-4、液晶触摸画板4.1实验简介本实验向大家介绍如何使用STM32的FSMC接口驱动LCD屏,及使用触摸屏控制器检测触点坐标。4.2LCD控制器简介LCD,即液晶显示器,因为其功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互,目前仍是各种电子显示设备的主流。因为STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有这些驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32芯片通过驱动芯片来控制液晶屏和触摸屏。以野火3.2寸液晶屏(240*320)为例,它使用ILI9341芯片控制液晶屏,通过TSC2046芯片控制触摸屏。4.2.1ILI9341控制器结构液晶屏的控制芯片内部结构非常复杂,见错误!未找到引用源。。最主要的是位于中间G……
  • 所需E币: 4
    时间: 2019-12-24 16:51
    大小: 1.12MB
    上传者: quw431979_163.com
    STM32利用FSMC驱动LCDSSD1289……