zoukankan      html  css  js  c++  java
  • stm32 外部SRAM的初始化及使用

    初始化和使用都比较简单

    void FSMC_SRAM_Init(void)
    {
      FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
      FSMC_NORSRAMTimingInitTypeDef  p;
      GPIO_InitTypeDef GPIO_InitStructure;
        
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
        
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOE |
                             RCC_APB2Periph_GPIOF, ENABLE);
      
    /*-- GPIO Configuration ------------------------------------------------------*/
      /* SRAM Data lines configuration */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                    GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOD, &GPIO_InitStructure); 
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                    GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | 
                                    GPIO_Pin_15;
      GPIO_Init(GPIOE, &GPIO_InitStructure);
      
      /* SRAM Address lines configuration */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | 
                                    GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | 
                                    GPIO_Pin_14 | GPIO_Pin_15;
      GPIO_Init(GPIOF, &GPIO_InitStructure);
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | 
                                    GPIO_Pin_4 | GPIO_Pin_5;                               
      GPIO_Init(GPIOG, &GPIO_InitStructure);
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; 
      GPIO_Init(GPIOD, &GPIO_InitStructure);
       
      /* NOE and NWE configuration */  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;
      GPIO_Init(GPIOD, &GPIO_InitStructure);
      
      /* NE3 configuration */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
      GPIO_Init(GPIOG, &GPIO_InitStructure);
      
      /* NBL0, NBL1 configuration */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 
      GPIO_Init(GPIOE, &GPIO_InitStructure);
      
    /*
     * PG9 接到了 NORFLASH 的 CE 端,为了不让 NORFLASH的信号 影响到 SRAM
     * 这里先让 CE = 1 ,即 PG9 = 1 ,不然 SRAM 会测试不成功.
     * 或者在硬件设计时,NORFLASH 的 CE 管脚 上拉下.
     */
      //GPIO_InitTypeDef GPIO_InitStructure; 
      //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
      //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      //GPIO_Init(GPIOG, &GPIO_InitStructure);
      //GPIO_SetBits(GPIOG,GPIO_Pin_9);
      //片选已上拉
    /*-- FSMC Configuration ------------------------------------------------------*/ #if 1 p.FSMC_AddressSetupTime = 0; p.FSMC_AddressHoldTime = 0; p.FSMC_DataSetupTime = 2; p.FSMC_BusTurnAroundDuration = 0; p.FSMC_CLKDivision = 0; p.FSMC_DataLatency = 0; #elif 0 p.FSMC_AddressSetupTime = 15; p.FSMC_AddressHoldTime = 15; p.FSMC_DataSetupTime = 15; p.FSMC_BusTurnAroundDuration = 15; p.FSMC_CLKDivision = 8; p.FSMC_DataLatency = 15; #endif p.FSMC_AccessMode = FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; 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; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; 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_NORSRAMInit(&FSMC_NORSRAMInitStructure); /* Enable FSMC Bank1_SRAM Bank */ FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE); }

    使用就用绝对定位

    __attribute__((at(addr)))

    比如:

    unsigned char buffer[10000]  __attribute__((at(0x6800000))),即把数据buffer的地址定位到0x6800000

  • 相关阅读:
    delphi XE5下安卓开发技巧
    Android开发者必备的42个链接
    STORM_0007_Multi-Lang protocol of Storm/多语言协议的翻译
    STORM_0006_第二个storm_topology:WordCountTopology的代码与运行
    STORM_0005_第一个非常简单的storm topology的提交运行
    STORM_0004_windows下zookeeper的伪集群的搭建
    STORM_0003_linux_zookeeper_storm_遇到的几个问题
    数据结构与算法题目集(中文)7-19 求链式线性表的倒数第K项 (20分)
    数据结构与算法题目集(中文)7-11 关键活动 (30分) (关键路径!!!!)
    数据结构与算法题目集(中文)7-18 银行业务队列简单模拟 (25分)
  • 原文地址:https://www.cnblogs.com/r1chie/p/13967571.html
Copyright © 2011-2022 走看看