stm32 FSMC-外扩SRAM IS62WV51216

发布者:as8849402最新更新时间:2018-05-13 来源: eefocus关键字:stm32  FSMC  外扩SRAM  IS62WV51216 手机看文章 扫描二维码
随时随地手机看文章

引脚定义 
12

FSMC配置步骤

1.使能对应引脚GPIO时钟 
2.配置GPIO引脚模式 
3.使能FSMC时钟 
4.FSMC初始化 
5.存储器块使能

举例 
1

#define Bank1_SRAM3_ADDR    ((u32)(0x68000000))  //首地址0x60000000,每块0x40000000


void SRAM_gpio_init()

{

    GPIO_InitTypeDef gpiof = 

    {

        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, //FSMC_A0 - FSMC_A9

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };

    GPIO_InitTypeDef gpiog0_5 = 

    {

        GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5, //FSMC_A10 - FSMC_A15

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };

    GPIO_InitTypeDef gpiod = 

    {

        GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | //FSMC_A15 - FSMC_A18

        GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_0 | GPIO_Pin_1 | //FSMC_D0 - FSMC_D3

            GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10, //FSMC_D13 - FSMC_D15

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };

    GPIO_InitTypeDef gpioe = 

    {

        //FSMC_D4 - FSMC_D12

        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_Speed_50MHz,

        GPIO_Mode_AF_PP

    };


    GPIO_InitTypeDef gpioe0_1 = 

    {

        GPIO_Pin_0 | GPIO_Pin_1, //FSMC_NBL0-FSMC_NBL1

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };

    GPIO_InitTypeDef gpiod4_5 = 

    {

        GPIO_Pin_4 | GPIO_Pin_5, //FSMC_NOE - FSMC_NWE

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };

    GPIO_InitTypeDef gpiog10 = 

    {

        GPIO_Pin_10, //片选

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);


    GPIO_Init(GPIOF, &gpiof);

    GPIO_Init(GPIOG, &gpiog0_5);

    GPIO_Init(GPIOD, &gpiod);

    GPIO_Init(GPIOE, &gpioe);

    GPIO_Init(GPIOE, &gpioe0_1);

    GPIO_Init(GPIOD, &gpiod4_5);

    GPIO_Init(GPIOG, &gpiog10);

}


void FSMC_sram_init()

{

    FSMC_NORSRAMInitTypeDef fsmc = {0};

    FSMC_NORSRAMTimingInitTypeDef FSMC_ReadWriteTimingStruct = {0};


    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);


    FSMC_ReadWriteTimingStruct.FSMC_AddressSetupTime = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_AddressHoldTime = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_DataSetupTime = 0x08;

    FSMC_ReadWriteTimingStruct.FSMC_BusTurnAroundDuration = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_CLKDivision = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_DataLatency = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_AccessMode = FSMC_AccessMode_A;


    fsmc.FSMC_Bank = FSMC_Bank1_NORSRAM3;

    fsmc.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;

    fsmc.FSMC_MemoryType = FSMC_MemoryType_SRAM;

    fsmc.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;

    fsmc.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;

    fsmc.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;

    fsmc.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;

    fsmc.FSMC_WrapMode = FSMC_WrapMode_Disable;

    fsmc.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

    fsmc.FSMC_WriteOperation = FSMC_WriteOperation_Enable;

    fsmc.FSMC_WaitSignal = FSMC_WaitSignal_Disable;

    fsmc.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; //扩展模式使能

    fsmc.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

    fsmc.FSMC_ReadWriteTimingStruct = &FSMC_ReadWriteTimingStruct;

    fsmc.FSMC_WriteTimingStruct = &FSMC_ReadWriteTimingStruct;

    FSMC_NORSRAMInit(&fsmc);


    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);

}


void SRAM_read(u8 *buf, u32 addr, u32 num)

{

    u32 i = 0;


    for(i = 0; i < num; i++)

    {

        buf[i] = *(u8*)(Bank1_SRAM3_ADDR + addr + i);

    }

}


void SRAM_write(u8 *buf, u32 addr, u32 num)

{

    u32 i = 0;

    u8 *p = (u8*)(Bank1_SRAM3_ADDR + addr);


    for(i = 0; i < num; i++)

    {

        *(p + i) = buf[i];

    }

}


关键字:stm32  FSMC  外扩SRAM  IS62WV51216 引用地址: stm32 FSMC-外扩SRAM IS62WV51216

上一篇:STM32使用内部振荡器及其和外部晶体振荡器的区别
下一篇:关于STM32的BOOT0和BOOT1

推荐阅读最新更新时间:2024-03-16 16:02

中断之NVIC
NVIC NVIC:嵌套向量中断寄存器 Nested vectored interrupt controller (NVIC)。 NVIC:是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对 Cortex-M3 内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 STM32 的 NVIC 是 Cortex-M3 的 NVIC 的一个子集。 NVIC 结构体的定义 typedef struct{ __IO uint32_t ISER ; //中断使能寄存器 uint32_t RESERVED0 ; __IO uint32_t
[单片机]
中断之NVIC
物联网之STM32开发三(USART串口)
内容概要: 串行通信的基本概念 串口寄存器介绍 STM32实现串口数据的收发 HAL串口库函数的使用及printf的实现 串行通信的基本概念: 内容概要: 通信的基本概念 USART介绍 串口的电路连接 串口的通信协议 同步通信和异步通信: 通信,最少要有两个对象,一个收,一个发。 同步通信:一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,大家根据时钟信号的变化进行通信。 异步通信:是指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同布。 串行通信和并行通
[单片机]
物联网之<font color='red'>STM32</font>开发三(USART串口)
STM32 DMA 自我学习 简单总结
简单记录一下STM32的DMA的配置说明-------- 根据野火的串口的DMA程序,自己简单理解说明----- ----第一部分----DMA配置----- void USART1_DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //时钟 DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base; //设置DMA源:串口数据寄存器地址----基地址----如果后面打开了地址自增---则会传输连续
[单片机]
<font color='red'>STM32</font> DMA 自我学习 简单总结
基于STM32智能家居系统的设计与实现
智能家居(又称智能住宅)是以住宅为平台,兼备建筑、网络通信、信息家电、设备自动化,集系统、结构、服务、管理为一体的安全、高效、舒适、便利、环保的居住环境。利用综合布线技术、网络通信技术、智能家居一系统设计方案安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统。对比普通家居系统,智能家居不仅满足了人们对居住环境的基本要求,提供舒适安全且宜人的家庭生活空间。还能够主动提供全方位的信息服务,联合外部资源,做出智能化响应。但这类系统通常代价昂贵,控制方式单一,且易受到干扰。因此,在设计实现智能控制的同时,研制一个成本低、实用性强并能普及寻常百姓家的智能家居系统成为必然趋势。 本设
[单片机]
基于<font color='red'>STM32</font>智能家居系统的设计与实现
STM32 OLED显示流程(简略)
前两天刚学了战舰的OLED显示实验,下面是我总结的OLED显示方法: 比如我们想让OLED显示屏显示一个字符串:“CODE”,主函数是这么两条语句: ,(63和48是字符串在屏幕中显示的位置,这里我们不管他。。)这两条语句的拆解步骤如下: 1、既然是显示字符串,我们就得调用字符串显示函数: 2、这个字符串显示函数通过指针*p不断调用字符显示函数: 来显示字符串中的每个字符 3、字符是怎么组成的?由点组成的嘛。。在OLED_ShowChar()函数中又调用画点函数: 把每个字符的点阵全部画完(如1206,1608,2412) 4、每次画一个点不能没地方保存呐。所以我们再STM32的SRAM中开辟的一块128*8字节(128*8*8位
[单片机]
<font color='red'>STM32</font> OLED显示流程(简略)
基于stm32f103zet6之使用FSMC驱动TFT的学习
在完成IO驱动彩屏的试验后,就准备着手使用FSMC来驱动彩屏,先了解一下预备知识 一、所谓的FSMC机制 简单介绍FSMC在这篇博文里面很清楚,推荐一下 http://blog.csdn.net/king_bingge/article/details/8718566 然后还有就是这篇学习笔记,也还行 http://www.cnblogs.com/hduxyc/archive/2011/05/17/2048099.html 个人觉得有了这两篇博文再加上我们的参考手册足够搞定FSMC驱动彩屏了 二、FSMC之我见 开始只是谈到别人对FSMC的理解,注意这里只讨论FSMC控制TFT,也就是在FSMC的NOR\PSRAM模式控制LCD
[单片机]
基于stm32f103zet6之使用<font color='red'>FSMC</font>驱动TFT的学习
STM32 JTAG/SWD禁用导致无法烧写解决方法
由于STM32的引脚功能较多,在为了方便硬件的使用,常会使用复用,重映射的功能,这里主要提及的是SWD和JTAG端口的引脚对应出现的问题。为了使得TIM2能够重映射到PA15和PB3,所以得对TIM2进行重映射,但是这样是不够的,因为下载调试端口SWD默认就占用了该引脚,所以重映射无效,因此必须先启动时钟 void Relay_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GP
[单片机]
STM32 printf问题
STM32 printf问题 怎么老是出现idenfier FILE is Undefined ,问题出在哪啊?望指教,谢谢! 我程序代码配置如下: #include stm32f10x.h #include stm32_eval.h #include stdio.h #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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