LED原理与FSMC原理

一、STM32与触摸屏的连接方式
LED原理与FSMC原理_第1张图片

LCD-CSLCD片选信号;LCD-RSTLCD复位信号;nWE:写使能,连接LCDRW脚;nOE:输出使能连接LCDRD脚。
RS命令/数据标志0,读写命令;1,读写数据);D[150]16位双向数据线;LIGHT-PWM:LCD背光控制。

    //FSMC管脚初始化
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD,&GPIO_InitStructure);
    GPIO_SetBits(GPIOD,GPIO_Pin_13);//打开背光

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//复位
    GPIO_Init(GPIOE,&GPIO_InitStructure);
    
    //启用FSMC复用功能,复用上拉功能
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_14 //D0
                                |GPIO_Pin_15 //D1
                                |GPIO_Pin_0     //D2
                                |GPIO_Pin_1     //D3
                                |GPIO_Pin_8     //D13
                                |GPIO_Pin_9     //D14
                                |GPIO_Pin_10;//D15
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7     //D4
                                |GPIO_Pin_8     //D5
                                |GPIO_Pin_9     //D6
                                |GPIO_Pin_10 //D7
                                |GPIO_Pin_11 //D8
                                |GPIO_Pin_12 //D9
                                |GPIO_Pin_13 //D10
                                |GPIO_Pin_14 //D11
                                |GPIO_Pin_15;//D12
    GPIO_Init(GPIOE,&GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11 //RS
                                |GPIO_Pin_4     //nOE
                                |GPIO_Pin_5; //nWE
    GPIO_Init(GPIOD,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7; //NE1
    GPIO_Init(GPIOD,&GPIO_InitStructure);
二、FSMC简介
     2.1功能介绍:
● 将AHB传输信号转换到适当的外部设备协议
● 满足访问外部设备的时序要求
    所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。
● 具有静态存储器接口的器件包括:
─静态随机存储器(SRAM)
─只读存储器(ROM)
─NOR闪存
─PSRAM(4个存储器块)
● 两个NAND闪存块。
● 16位的PC卡兼容设备
● 8或16位数据总线
● 每一个存储器块都有独立的片选控制
● 每一个存储器块都可以独立配置
● 时序可编程以支持各种不同的器件:
─等待周期可编程(多达15个周期)
─总线恢复周期可编程(多达15个周期)
─输出使能和写使能延迟可编程(多达15周期)
─独立的读写时序和协议,可支持宽范围的存储器和时序
● PSRAM和SRAM器件使用的写使能和字节选择输出
● 将32位的AHB访问请求,转换到连续的16位或8位,对外部16位或8位器件的访问

  2.2框图介绍:
        FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。FSMC的框图如下图所示:
LED原理与FSMC原理_第2张图片 LED原理与FSMC原理_第3张图片

        STM32的FSMC支持8/16/32位数据宽度。FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块
三、FSMC驱动程序
void FSMC_Configuration(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;  

  p.FSMC_AddressSetupTime = 0x02;//地址建立时间
  p.FSMC_AddressHoldTime = 0x00;//地址保持时间
  p.FSMC_DataSetupTime = 0x05;//数据建立时间
  p.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间
  p.FSMC_CLKDivision = 0x00;//时钟分频
  p.FSMC_DataLatency = 0x00;//数据保持时间
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  //NOR FLASH 的 BANK1
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  //数据线与地址线不复用
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  //存储器类型 NOR FLASH
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  //数据宽度为 16 位
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  //使用异步写模式,禁止突发模式
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  //本成员的配置只在突发模式下有效,等待信号极性为低
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  //禁止非对齐突发模式
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  //本成员配置仅在突发模式下有效。NWAIT 信号在什么时期产生
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  //本成员的配置只在突发模式下有效,禁用 NWAIT 信号
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  //禁止突发写操作
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  //写使能
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  //禁止扩展模式,扩展模式可以使用独立的读、写模式
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  //配置读写时序
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  //配置写时序
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  //初始化FSMC
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  //使能FSMC BANK1_SRAM 模式
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
}

你可能感兴趣的:(stm32)