STM32单片机FSMC模块的应用

发布者:SereneDreams最新更新时间:2024-02-28 来源: elecfans关键字:STM32  单片机  FSMC模块 手机看文章 扫描二维码
随时随地手机看文章

一、基本概念

1.与非总线复用的16位SRAM接口


FSMC配置

SRAM存储器和NOR闪存存储器共用相同的FSMC存储块,所用的协议依不同的存储器类型而有所不同。

控制SRAM存储器,FSMC应该具有下述功能:

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

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

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

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

正如配置NOR闪存存储器一样,用户必须按照SRAM存储器的数据手册给出的时序数据,计算和设置下列参数:

ADDSET:地址建立时间

ADDHOLD:地址保持时间

DATAST:数据建立时间


二、例程

1. FSMC_SRAM.C

/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************

* File Name : fsmc_sram.c

* Author : MCD Application Team

* Version : V2.0.1

* Date : 06/13/2008

* Description : This file provides a set of functions needed to drive the

* IS61WV51216BLL SRAM memory mounted on STM3210E-EVAL board.

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

* 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.

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

/* Includes ------------------------------------------------------------------*/

#include “fsmc_sram.h”

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

#define Bank1_SRAM3_ADDR ((u32)0x68000000)

#define SRAM_WRITE(Address, Data) (*(vu16 *)(Address) = (Data))

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

/* Private functions ---------------------------------------------------------*/

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

* Function Name : FSMC_SRAM_Init

* Description : Configures the FSMC and GPIOs to interface with the SRAM memory.

* This function must be called before any write/read operation

* on the SRAM.

* Input : None

* Output : None

* Return : None

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

void FSMC_SRAM_Init(void)

{

FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;

FSMC_NORSRAMTimingInitTypeDef p;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOE |

RCC_APB2Periph_GPIOF, ENABLE);

/*-- GPIO Configuration ------------------------------------------------------*/

/* SRAM Data lines configuration */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |

GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = 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_Init(GPIOE, &GPIO_InitStructure);

/* SRAM Address lines configuration */

GPIO_InitStructure.GPIO_Pin = 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;

GPIO_Init(GPIOF, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |

GPIO_Pin_4 | GPIO_Pin_5;

GPIO_Init(GPIOG, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;

GPIO_Init(GPIOD, &GPIO_InitStructure);

/* NOE and NWE configuration */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;

GPIO_Init(GPIOD, &GPIO_InitStructure);

/* NE3 configuration */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_Init(GPIOG, &GPIO_InitStructure);

/* NBL0, NBL1 configuration */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

GPIO_Init(GPIOE, &GPIO_InitStructure);

/*-- FSMC Configuration ------------------------------------------------------*/

p.FSMC_AddressSetupTime = 0;

p.FSMC_AddressHoldTime = 0;

p.FSMC_DataSetupTime = 2;

p.FSMC_BusTurnAroundDuration = 0;

p.FSMC_CLKDivision = 0;

p.FSMC_DataLatency = 0;

p.FSMC_AccessMode = FSMC_AccessMode_A;

FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;

FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;

FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;

FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;

FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;

FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;

FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;

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_SRAM Bank */

FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);

}

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

* Function Name : FSMC_SRAM_WriteBuffer

* Description : Writes a Half-word buffer to the FSMC SRAM memory.

* Input : - pBuffer : pointer to buffer.

* - WriteAddr : SRAM memory internal address from which the data

* will be written.

* - NumHalfwordToWrite : number of half-words to write.

*

* Output : None

* Return : None

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

void FSMC_SRAM_WriteBuffer(u16* pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)

{

for(; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */

{

/* Transfer data to the memory */

*(u16 *) (Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer++;

/* Increment the address*/

WriteAddr += 2;

}

}


关键字:STM32  单片机  FSMC模块 引用地址:STM32单片机FSMC模块的应用

上一篇:基于STM32的步进电机速度控制
下一篇:STM32单片机对TFTLCD的驱动设计

推荐阅读最新更新时间:2024-11-12 15:02

STM32的LCD12864液晶显示源程序
单片机源程序如下: #include config.h int main(void) { // int i=0,j=0; // int count=0; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 //LED_Init(); //初始化与LED连接的硬件接口 Init_12864(); //初始化带字库12864液晶 // Display_string(0,0, 单片机综合设计 ); //显示第1行 // Display_st
[单片机]
<font color='red'>STM32</font>的LCD12864液晶显示源程序
SysTick 定时器的使用
SysTick是STM32中的一个24位的定时器。 Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟,或者是外部时钟。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要查找芯片的器件手册来决定选择什么作为时钟源。 Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的
[单片机]
超低功耗单片机MSP430F413实现的智能遥控器
目前市场上常见的无线遥控器多数为四键和十二键,主要用于汽车防盗系统、家庭防盗系统及遥控玩具等方面,这些应用简单、实用、成本低。但对于一些工程中需要距离在100米以上,控制或设定一些数据时,并要求一个遥控器对多于12个甚至上百个设备时,上述遥控器对操作人员就不方便,而且系统性能不够稳定。鉴于上述情况我们便提出在此基础上,采用单片机编写地址,通过操作键设置,液晶显示遥控器的输出。同时对耗电量、多个控制的设定、便于携带、操作方便及性能稳定等的严格要求,于是便设计开发出一种新型智能遥控器。该型遥控器以TI公司的超低功耗单片机MSP430F413为微处理器,配有低功耗3位液晶显示器EDS812A,还有传输比很高的光,整个系统采用锂电池和高能
[单片机]
超低功耗<font color='red'>单片机</font>MSP430F413实现的智能遥控器
基于51单片机的“叮冬”门铃设计
1.实验任务   当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。 2.电路原理图 图4.19.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2).在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭; (3).把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上; 4.程序设计方法 (1).我们用单片机实定时/计数器T0来产生700 Hz 和500HZ的 频率 ,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率
[单片机]
基于51<font color='red'>单片机</font>的“叮冬”门铃设计
STC89单片机+TM1638超级秒表程序
超级秒表,具有计时功能,暂停功能,定时器功能,用起来超级好玩。 单片机源程序如下: #ifndef _TM1638_H #define _TM1638_H #include REG52.H #define DATA_COMMAND 0X40 #define DISP_COMMAND 0x80 #define ADDR_COMMAND 0XC0 //TM1638模块引脚定义 sbit DIO=P1^0; sbit CLK=P1^1; sbit STB=P1^2; //共阴数码管显示代码 unsigned char code tab ={0
[单片机]
基于Micro-ROS的机器人控制MCU
网报道(文/李宁远)对于熟悉机器人应用的,ROS想必定是不会陌生的。ROS可以说是目前机器人相关开源社区最流行的项目。每一种类型的机器人都需要以的实际情况编写符合需要的功能,起初代码的复用率很低,大大阻碍了机器人的发展。 ROS便是为机器人在研发的过程中的代码复用提供支持的开源框架,大量的机器人开源项目,从感知到控制、从定位到构图、从导航到可视化,几乎都使用ROS作为基础。 cro-ROS从何而来? Micro-ROS实际上是从ROS2优化而来的轻量级ROS系统,用于在各种机器人应用中在上实现第二代机器人操作系统ROS 2,通过使用通用框架,它可以实现与传统机器人、和设备的互操作性。ROS2基于ROS升级而来,如果说R
[机器人]
51单片机存储器结构介绍(1)
MCS-51单片机在物理结构上有四个存储空间: 1、片内程序存储器 2、片外程序存储器 3、片内数据存储器 4、片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1、片内外统一编址的64K的程序存储器地址空间(MOVC) 2、256B的片内数据存储器的地址空间(MOV) 3、以及64K片外数据存储器的地址空间(MOVX) 在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。 程序内存ROM 寻址范围:0000H ~ FFFFH 容量64KB E
[单片机]
51<font color='red'>单片机</font>存储器结构介绍(1)
一文读懂汽车控制芯片(MCU)分类及性能要求
01 控制类芯片介绍 控制类芯片主要就是指MCU(Microcontroller Unit),即微控制器,又叫单片机,是把CPU的主频与规格做适当缩减,并将存储器、定时器、A/D转换、时钟、I/O端口及串行通讯等多种功能模块和接口集成在单个芯片上,实现终端控制的功能,具有性能高、功耗低、可编程、灵活度高等优点。 车规级MCU示意图 ※资料来源:公开资料、编写单位提供 汽车是MCU的一个非常重要的应用领域,据IC Insights数据,2019年全球MCU应用于汽车电子的占比约为33%。高端车型中每辆车用到的MCU数量接近100个,从行车电脑、液晶仪表,到发动机、底盘,汽车中大大小小的组件都需要MCU进行把控。早期,汽车中应
[嵌入式]
一文读懂汽车控制芯片(<font color='red'>MCU</font>)分类及性能要求
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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