历史上的今天
今天是:2024年08月29日(星期四)
2019年08月29日 | STM32F429 >> 22. FMC_扩展外部SDRAM(Code)
2019-08-29 来源:eefocus
本代码用型号为“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
史海拾趣
|
看到网上很多网友对TI 6000系列DSP优化工作感到苦恼,在此我总结下我的优化经验,希望对大家有帮助。 一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最 ...… 查看全部问答> |
|
【ATMEL技术问题】关于KEIL下AT91R40008启动代码问题 用KEIL 软件建立一个工程,自动生成一个启动代码STartup.S ; 但是问题来了,这个代码有点不知所云,编译出错哦啊,请大侠指点!下面是代码 /*****************************************************************************/;/* STARTUP.S: Start ...… 查看全部问答> |
|
菜鸟提问:SHBrowseForForlder()不能用,怎么代替 我是个初学者,我这个平台不能使用SHBrowseForForlder()这个方法,想找另外一个方法来代替SHBrowseForFolder,达到相同的效果, 或者可以不用打开浏览文件夹着个对话框,直接可以保存文件到指定目录也可以。劳驾各位帮忙啊… 查看全部问答> |
|
关于BT与WIFI共存时的设计,小弟有些问题,实在是不太明白,请教各位高手。 1. 我在网上看到有人说如果蓝牙和WIFI的物理隔离达到30dB以上,则两者之间的相互影响可以基本忽略。请问如果才能做到物理隔离达到30dB以上呢?是否天线距离远一些就可以 ...… 查看全部问答> |
|
小弟刚刚做了一块基于pc104总线的DA板卡,但是现在要与基于pc104总线的3350主板进行交互,主要是对pc104总线的数据进行读取,需要制作驱动,小弟第一次开发,有那位大侠能够给一个例子或其他的资料,多谢… 查看全部问答> |
|
有一个如下的uc/os-II源代码,就是采用信号量机制使两个任务共享一个串口com1,去打印一条字符串。 [code] #include \"config.h\" #define Task0StkLengh 64   ...… 查看全部问答> |
|
课后练习七之定时器 (定时器看起来简单,却搞了好久,和之前的430定时器不太一样,看了很多次,还有很多没弄出来的地方,有几个地方还是没懂) 1.TIMER_A由以下部分组成 [1] 计数器部分 输入的时钟源具有4种选择,所选择的时钟源又可 ...… 查看全部问答> |
|
5位半的数字万用表没有一千块RMB是拿不下来的,本帖想讨论能否设计一种廉价的方案实施一个5位半表呢? ICL7135是4位半AD转换器,价格低廉,才4块钱多些,如果采用过采样编程技术,是否可以做出一个5位半分辨率的万用表呢? 欢迎讨论。 如果经研 ...… 查看全部问答> |




