STM32访问外部存储器 您所在的位置:网站首页 stm32外扩norflash STM32访问外部存储器

STM32访问外部存储器

2023-10-09 07:25| 来源: 网络整理| 查看: 265

作者:emouse

转自:http://blog.csdn.net/haozi_1989/article/details/6117165

基本说明

STM32访问外部存储器是需要配置FSMC的相关函数,在STM32固件库函数说明的中文翻译版中并没有这部分的说明,因此需要参考库函数的相关说明和库中自带的例程。

以下内容来自AN2784应用笔记:

2 与非总线复用模式的异步16位NOR闪存接口

2.1

FSMC配置

控制一个NOR闪存存储器,需要FSMC提供下述功能:

选择合适的存储块映射NOR闪存存储器:共有4个独立的存储块可以用于与NOR闪存、SRAM和PSRAM存储器接口,每个存储块都有一个专用的片选管脚。

使用或禁止地址/数据总线的复用功能。

选择所用的存储器类型:NOR闪存、SRAM或PSRAM。

定义外部存储器的数据总线宽度:8或16位。

使用或关闭同步NOR闪存存储器的突发访问模式。

配置等待信号的使用:开启或关闭,极性设置,时序配置。

使用或关闭扩展模式:扩展模式用于访问那些具有不同读写操作时序的存储器。

因为NOR闪存/SRAM控制器可以支持异步和同步存储器,用户只须根据存储器的参数配置使用到的参数。

FSMC提供了一些可编程的参数,可以正确地与外部存储器接口。依存储器类型的不同,有些参数是不需要的。

当使用一个外部异步存储器时,用户必须按照存储器的数据手册给出的时序数据,计算和设置下列参数:

ADDSET:地址建立时间

ADDHOLD:地址保持时间

DATAST:数据建立时间

ACCMOD:访问模式 这个参数允许 FSMC可以灵活地访问多种异步的静态存储器。共有4种扩展模式允许以不同的时序分别读写存储器。 在扩展模式下,FSMC_BTR用于配置读操作,FSMC_BWR用于配置写操作。(译注:如果读时序与写时序相同,只须使用FSMC_BTR即可。)

如果使用了同步的存储器,用户必须计算和设置下述参数:

CLKDIV:时钟分频系数

DATLAT:数据延时

如果存储器支持的话,NOR闪存的读操作可以是同步的,而写操作仍然是异步的。

当对一个同步的NOR闪存编程时,存储器会自动地在同步与异步之间切换;因此,必须正确地设置所有的参数

 

 

 

程序分析

[cpp] view plain copy print ?  /*-- FSMC Configuration ----------------------------------------------------*/    p.FSMC_AddressSetupTime = 0x05;     /*ADDSET  地址建立时间*/    p.FSMC_AddressHoldTime = 0x00;    /*ADDHOLD 地址保持时间*/    p.FSMC_DataSetupTime = 0x07;     /*DATAST 数据建立时间*/    p.FSMC_BusTurnAroundDuration = 0x00;   /*BUSTURN 总线返转时间*/    p.FSMC_CLKDivision = 0x00;      /*CLKDIV 时钟分频*/    p.FSMC_DataLatency = 0x00;     /*DATLAT 数据保持时间*/    p.FSMC_AccessMode = FSMC_AccessMode_B;   /*访问模式*/  /*NOR/SRAM的存储块,共4个选项*/    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;      /*是否选择地址和数据复用数据线*/    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;    /*连接到相应存储块的外部存储器类型*/    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;     /*存储器数据总线宽度*/    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;    /*使能或关闭同步NOR闪存存储器的突发访问模式设置是否使用迸发访问模式(应该就是连续读写模式吧)*/    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;     /*设置WAIT信号的有效电平*/    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;      /*设置是否使用环回模式*/    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;      /*设置WAIT信号有效时机*/    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;   /*设定是否使能写操作*/    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;    /*设定是否使用WAIT信号*/    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;     /*使能或关闭扩展模式,扩展模式用于访问具有不同读写操作时序的存储器,设定是否使用单独的写时序*/         FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;    /*设定是否使用异步等待信号*/    FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_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_NOR Bank */    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);        //  }    

实际例程

以下例程来自  stm3210e_eval_fsmc_nor.c具体信息参加固件库中源文件。

[c-sharp] view plaincopyprint? /**   ******************************************************************************   * @file    stm3210e_eval_fsmc_nor.c   * @author  MCD Application Team   * @version V4.3.0   * @date    10/15/2010   * @brief   This file provides a set of functions needed to drive the M29W128FL,    *          M29W128GL and S29GL128P NOR memories mounted on STM3210E-EVAL board.   ******************************************************************************   * @copy   *   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.   *   * © COPYRIGHT 2010 STMicroelectronics   */   /* Includes ------------------------------------------------------------------*/  #include "stm3210e_eval_fsmc_nor.h"  /** @addtogroup Utilities   * @{   */      /** @addtogroup STM32_EVAL   * @{   */   /** @addtogroup STM3210E_EVAL   * @{   */      /** @addtogroup STM3210E_EVAL_FSMC_NOR   * @brief      This file provides a set of functions needed to drive the M29W128FL,    *             M29W128GL and S29GL128P NOR memories mounted on STM3210E-EVAL board.   * @{   */   /** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Types   * @{   */   /**   * @}   */   /** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Defines   * @{   */   /**    * @brief  FSMC Bank 1 NOR/SRAM2     */  #define Bank1_NOR2_ADDR       ((uint32_t)0x64000000)  /* Delay definition */     #define BlockErase_Timeout    ((uint32_t)0x00A00000)  #define ChipErase_Timeout     ((uint32_t)0x30000000)   #define Program_Timeout       ((uint32_t)0x00001400)       /**   * @}   */     /** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Macros   * @{   */  #define ADDR_SHIFT(A) (Bank1_NOR2_ADDR + (2 * (A)))  #define NOR_WRITE(Address, Data)  (*(__IO uint16_t *)(Address) = (Data))    /**   * @}   */       /** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Variables   * @{   */   /**   * @}   */     /** @defgroupSTM3210E_EVAL_FSMC_NOR_Private_Function_Prototypes   * @{   */   /**   * @}   */     /** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Functions   * @{   */  /**   * @brief  Configures the FSMC and GPIOs to interface with the NOR memory.   *         This function must be called before any write/read operation   *         on the NOR.   * @param  None   * @retval None   */  void NOR_Init(void)  {    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;    FSMC_NORSRAMTimingInitTypeDef  p;    GPIO_InitTypeDef GPIO_InitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |                            RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);    /*-- GPIO Configuration ------------------------------------------------------*/    /*!


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有