STM32F429 >> 22. FMC_扩展外部SDRAM(Code)

发布者:灵感发电站最新更新时间:2019-08-29 来源: eefocus关键字:STM32F429  FMC  扩展外部SDRAM 手机看文章 扫描二维码
随时随地手机看文章

本代码用型号为“IS42S16400J”的 SDRAM 芯片为 STM32 扩展内存。


它的行地址宽度为 12 位,列地址宽度为 8 位,内部含有 4 个 Bank,数据线宽度为 16 位,容量大小为8MB。


SDRAM 硬件连接图:

在这里插入图片描述

SDRAM 与 STM32 相连的引脚非常多,主要是地址线和数据线。


bsp_sdram.h

/**

  ******************************************************************************

  * @file    bsp_sdram.c

  * @author  Waao

  * @version V1.0.0

  * @date    24-Feb-2019

  * @brief   This file contains some board support package's functions for the configuration of the SysTick.

  *            

  ******************************************************************************

  * @attention

  *

  * None

*

  ******************************************************************************

  */


#ifndef __BSP_SDRAM_H_

#define __BSP_SDRAM_H_


#include

#include

#include

#include



#define IS42S16400J_SIZE                         0x800000


#define SDRAM_DEBUG_ON                           1

#define SDRAM_INFO(fmt, arg...)                  printf("<<- SDRAM-INFO ->> "fmt"n", ##arg)

#define SDRAM_ERROR(fmt, arg...)                 printf("<<- SDRAM-ERROR ->> "fmt"n", ##arg)

#define SDRAM_DEBUG(fmt, arg...)                 do{

                                                     if(SDRAM_DEBUG_ON)

                                                       printf("<<- SDRAM-DEBUG ->> [%d]"fmt"n", __LINE__, ##arg);

                                                    }

                                                 while(0)


/* Bank selection */

#define FMC_BANK_SDRAM                           FMC_Bank2_SDRAM  

#define FMC_COMMAND_TARGET_BANK                  FMC_Command_Target_bank2


/* Data BaseAddress */

#define SDRAM_BANK_ADDR                          ((uint32_t)0xD0000000)


/* Data width */

#define SDRAM_MEMORY_WIDTH                       FMC_SDMemory_Width_16b 


/* SDRAM CAS Latency */

#define SDRAM_CAS_LATENCY                        FMC_CAS_Latency_2  


#define SDCLOCK_PERIOD                           FMC_SDClock_Period_2        /* Default configuration used with LCD */


#define SDRAM_READBURST                          FMC_Read_Burst_Enable  


/* The relevant definition of FMC SDRAM mode configuring register */

#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)

#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)

#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)

#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)

#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)

#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)

#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)

#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)

#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)

#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) 

#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200)      

/******************************************************************/


/* A row colunm address signal line */    

#define FMC_A0_GPIO_PORT        GPIOF

#define FMC_A0_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A0_GPIO_PIN         GPIO_Pin_0

#define FMC_A0_PINSOURCE        GPIO_PinSource0

#define FMC_A0_AF               GPIO_AF_FMC


#define FMC_A1_GPIO_PORT        GPIOF

#define FMC_A1_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A1_GPIO_PIN         GPIO_Pin_1

#define FMC_A1_PINSOURCE        GPIO_PinSource1

#define FMC_A1_AF               GPIO_AF_FMC


#define FMC_A2_GPIO_PORT        GPIOF

#define FMC_A2_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A2_GPIO_PIN         GPIO_Pin_2

#define FMC_A2_PINSOURCE        GPIO_PinSource2

#define FMC_A2_AF               GPIO_AF_FMC


#define FMC_A3_GPIO_PORT        GPIOF

#define FMC_A3_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A3_GPIO_PIN         GPIO_Pin_3

#define FMC_A3_PINSOURCE        GPIO_PinSource3

#define FMC_A3_AF               GPIO_AF_FMC


#define FMC_A4_GPIO_PORT        GPIOF

#define FMC_A4_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A4_GPIO_PIN         GPIO_Pin_4

#define FMC_A4_PINSOURCE        GPIO_PinSource4

#define FMC_A4_AF               GPIO_AF_FMC


#define FMC_A5_GPIO_PORT        GPIOF

#define FMC_A5_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A5_GPIO_PIN         GPIO_Pin_5

#define FMC_A5_PINSOURCE        GPIO_PinSource5

#define FMC_A5_AF               GPIO_AF_FMC


#define FMC_A6_GPIO_PORT        GPIOF

#define FMC_A6_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A6_GPIO_PIN         GPIO_Pin_12

#define FMC_A6_PINSOURCE        GPIO_PinSource12

#define FMC_A6_AF               GPIO_AF_FMC


#define FMC_A7_GPIO_PORT        GPIOF

#define FMC_A7_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A7_GPIO_PIN         GPIO_Pin_13

#define FMC_A7_PINSOURCE        GPIO_PinSource13

#define FMC_A7_AF               GPIO_AF_FMC


#define FMC_A8_GPIO_PORT        GPIOF

#define FMC_A8_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A8_GPIO_PIN         GPIO_Pin_14

#define FMC_A8_PINSOURCE        GPIO_PinSource14

#define FMC_A8_AF               GPIO_AF_FMC


#define FMC_A9_GPIO_PORT        GPIOF

#define FMC_A9_GPIO_CLK         RCC_AHB1Periph_GPIOF

#define FMC_A9_GPIO_PIN         GPIO_Pin_15

#define FMC_A9_PINSOURCE        GPIO_PinSource15

#define FMC_A9_AF               GPIO_AF_FMC



#define FMC_A10_GPIO_PORT        GPIOG

#define FMC_A10_GPIO_CLK         RCC_AHB1Periph_GPIOG

#define FMC_A10_GPIO_PIN         GPIO_Pin_0

#define FMC_A10_PINSOURCE        GPIO_PinSource0

#define FMC_A10_AF               GPIO_AF_FMC



#define FMC_A11_GPIO_PORT        GPIOG

#define FMC_A11_GPIO_CLK         RCC_AHB1Periph_GPIOG

#define FMC_A11_GPIO_PIN         GPIO_Pin_1

#define FMC_A11_PINSOURCE        GPIO_PinSource1

#define FMC_A11_AF               GPIO_AF_FMC


/* BA address line */

#define FMC_BA0_GPIO_PORT        GPIOG

#define FMC_BA0_GPIO_CLK         RCC_AHB1Periph_GPIOG

#define FMC_BA0_GPIO_PIN         GPIO_Pin_4

#define FMC_BA0_PINSOURCE        GPIO_PinSource4

#define FMC_BA0_AF               GPIO_AF_FMC


#define FMC_BA1_GPIO_PORT        GPIOG

#define FMC_BA1_GPIO_CLK         RCC_AHB1Periph_GPIOG

#define FMC_BA1_GPIO_PIN         GPIO_Pin_5

#define FMC_BA1_PINSOURCE        GPIO_PinSource5

#define FMC_BA1_AF               GPIO_AF_FMC


/* DQ data signal line */

#define FMC_D0_GPIO_PORT        GPIOD

#define FMC_D0_GPIO_CLK         RCC_AHB1Periph_GPIOD

#define FMC_D0_GPIO_PIN         GPIO_Pin_14

[1] [2] [3] [4]
关键字:STM32F429  FMC  扩展外部SDRAM 引用地址:STM32F429 >> 22. FMC_扩展外部SDRAM(Code)

上一篇:STM32F429 >> 22. FMC_扩展外部SDRAM(一)
下一篇:STM32 >> 矩阵键盘(代码风格优美,简明易懂)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved