引脚定义

FSMC配置步骤

1.使能对应引脚GPIO时钟

2.配置GPIO引脚模式

3.使能FSMC时钟

4.FSMC初始化

5.存储器块使能

举例


#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的更多相关文章

  1. stm32 外扩SRAM使用问题

    当把外扩SRAM内存拷贝到片上SRAM内存时使用内存拷贝函数memset()或者原子定义的mymemset()函数,编译器会提示空间不足. 原因是这两个函数一个是只能对片上SRAM操作,一个是只能对外 ...

  2. stm32f103vct6外扩sram芯片

    STM32F103是一款高性价比.多功能的单片机,配备常用的32位单片机片外资源,基于ARM Cortex-M3的32位处理器芯片,片内具有256KB FLASH,48KB RAM ( 片上集成12B ...

  3. STM32 ~ 外扩SRAM

    字节控制功能.支持高/低字节控制. 看看实现 IS62WV51216 的访问,需要对 FSMC进行哪些配置. 这里就做一个概括性的讲解.步骤如下: 1)使能 FSMC 时钟,并配置 FSMC 相关的  ...

  4. STM32F407 外扩SRAM

    字节控制功能.支持高/低字节控制. 看看实现 IS62WV51216 的访问,需要对 FSMC进行哪些配置. 这里就做一个概括性的讲解.步骤如下: 1)使能 FSMC 时钟,并配置 FSMC 相关的  ...

  5. STM32标准外设库中USE_STDPERIPH_DRIVER, STM32F10X_MD的含义

    在项目中使用stm32标准外设库(STM32F10x Standard Peripherals Library)的时候,我们会在项目的选项中预定义两个宏定义:USE_STDPERIPH_DRIVER, ...

  6. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  7. STM32片外SRAM作运行内存

    本例演示用的软硬件: 片内外设驱动库:STM32CubeF41.24.1的HAL库1.7.6,2019年4月12日 IDE:MDK-ARM 5.28.0.0,2019年5月 开发板:片外SRAM挂在F ...

  8. 【转】STM32 FSMC总线深入研究

    原文:http://group.chinaaet.com/116/48112 由于CPU与FPGA通信的需要,以及对8080总线的熟悉,首选采用了STM32的FSMC总线,作为片间通信接口.FSMC能 ...

  9. stm32 fsmc 功能讲解(转)

    LCD有如下控制线:CS:Chip Select 片选,低电平有效RS:Register Select 寄存器选择WR:Write 写信号,低电平有效RD:Read 读信号,低电平有效RESET:重启 ...

随机推荐

  1. 【转】用python读写excel的强大工具:openpyxl

    最近看到好几次群里有人问xlwt.wlrd的问题,怎么说呢,如果是office2007刚出来,大家用xlsx文件用不习惯,还可以理解,这都10年过去了喂,就算没有进化到office2016,还在用of ...

  2. Flutter中的Container和Text组件的常用属性

    效果图: import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends St ...

  3. java获取当前路径的方法

    1.System.getProperty("user.dir") 函数获取当前路径 // 获取当前路径方式1 System.out.println(System.getProper ...

  4. Game and Application Protocol

    This privacy policy details the information collected by the team ("we" or "our" ...

  5. iOS 给view,button,text filed,label等添加边框和颜色

    self.tfaaa.layer.borderWidth = 2; self.tfaaa.layer.borderColor = [UIColor blueColor].CGColor;

  6. spring 使用@AspectJ注解开发Spring AOP

    选择切点 Spring是方法级别的AOP框架,而我们主要也是以某个类的某个方法作为切点,用动态代理的理论来说,就是要拦截哪个方法织入对应AOP通知. 代码清单:打印角色接口 package com.s ...

  7. Intellij热部署插件JRebel的详细配置及图解

    参考博客地址:https://blog.csdn.net/nyotengu/article/details/80629631 参考博客地址:https://blog.csdn.net/weixin_4 ...

  8. 方法重载overload与方法重写overwrite

    方法重载overload: 在同一个类中,出现相同的方法名,与返回值无关,参数列表不同:1参数的个数不同 2参数类型不同 在调用方法时,java虚拟机会通过参数列表来区分不同同名的方法 方法重写ove ...

  9. mysql 事物控制语言

    事务控制语言(DTL)    什么是事务        通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行.        那么我们说,这个“一次性执行”的过程,可以称为“一个事务” ...

  10. linux的fcntl函数

    fcntl可实现对指定文件描述符的各种操作,例如获取/设置 文件的是否可以被读写的状态,等其他状态. int fcntl (int __fd, int __cmd, ...);The remainin ...