你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
【HAL库每天一例】第041例:FSMC-扩展SRAM
[复制链接]
haohao663
提问时间:2016-6-15 08:45 /
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的
指导文档和视频教程
,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
YSF1_HAL-041. FSMC-æ©å±SRAM.zip
(4.9 MB, 下载次数: 99)
2016-6-15 08:43 上传
点击文件名下载附件
/**
******************************************************************************
* 硬石YS-F1Pro开发板例程功能说明
*
* 例程名称: YSF1_HAL-041. FSMC-扩展SRAM
*
******************************************************************************
* 说明:
* 本例程配套硬石stm32开发板YS-F1Pro使用。
* 版权归硬石嵌入式开发团队所有,请勿商用。
******************************************************************************
*/
【1】例程简介
FSMC:可变静态存储控制器,是STM32系列采用的一种新型的存储器扩展技术。
RAM在单片机作用类似与电脑的内存。STM32F106ZET6内部有64KB大小的RAM,对应一般工程程序
是足够使用的,但如果需要运行类似STemWin支持的界面设计就显得有点捉襟见肘,我们可以外部扩
展SRAM。
YS-F1Pro开发板板载1M字节的扩展SRAM,本例程对扩展SRAM进行读写测试。
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号 IO端口 目标功能引脚 出厂默认设置
JP1 PA10 TXD(CH340G) 已接入
JP2 PA9 RXD(CH340G) 已接入
【3】操作及现象
使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),
在电脑端打开串口调试助手工具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗口
可接收到信息。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
bsp_exSRAM.c文件内容
/**
******************************************************************************
* 文件名程: bsp_exSRAM.c
* 作 者: 硬石嵌入式开发团队
* 版 本: V1.0
* 编写日期: 2015-10-04
* 功 能: 液晶底层驱动函数实现
******************************************************************************
* 说明:
* 本例程配套硬石stm32开发板YS-F1Pro使用。
*
* 版权归硬石嵌入式开发团队所有,请勿商用。
******************************************************************************
*/
/* 包含头文件 ----------------------------------------------------------------*/
#include "exSRAM/bsp_exSRAM.h"
/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
/* 私有变量 ------------------------------------------------------------------*/
SRAM_HandleTypeDef hexSRAM;
static int FSMC_exSRAM_Initialized = 0;
static int FSMC_exSRAM_DeInitialized = 0;
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
/* 函数体 --------------------------------------------------------------------*/
/**
* 函数功能: 初始化扩展SRAM
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
void MX_FSMC_exSRAM_Init(void)
{
FSMC_NORSRAM_TimingTypeDef Timing;
/* FSMC配置 */
hexSRAM.Instance = FSMC_NORSRAM_DEVICE;
hexSRAM.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
/* hexSRAM.Init */
hexSRAM.Init.NSBank = FSMC_NORSRAM_BANK3; // 使用NE3
hexSRAM.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
hexSRAM.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
hexSRAM.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;//存储器数据宽度为16bit
hexSRAM.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
hexSRAM.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
hexSRAM.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
hexSRAM.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
hexSRAM.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; //存储器写使能
hexSRAM.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
hexSRAM.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;// 读写使用相同的时序
hexSRAM.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
hexSRAM.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
/* FSMC操作时间 */
Timing.AddressSetupTime = 0x00; //地址建立时间(ADDSET)
Timing.AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
Timing.DataSetupTime = 0x03; //数据保持时间(DATAST)为3个HCLK 4/72M=55ns
Timing.BusTurnAroundDuration = 0x00;
Timing.CLKDivision = 0x00;
Timing.DataLatency = 0x00;
Timing.AccessMode = FSMC_ACCESS_MODE_A; //模式A
HAL_SRAM_Init(&hexSRAM, &Timing, &Timing);//读写同样时序
__HAL_AFIO_FSMCNADV_DISCONNECTED();
}
/**
* 函数功能: 初始化扩展SRAM的IO引脚
* 输入参数: 无
* 返 回 值: 无
* 说 明:该函数被HAL_SRAM_MspInit函数调用
*/
static void HAL_FSMC_exSRAM_MspInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* 如果已经完成初始化就无需初始化第二遍 */
if (FSMC_exSRAM_Initialized)
{
return;
}
FSMC_exSRAM_Initialized = 1;
/* 使能相关端口时钟 */
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/* 使能FSMC外设时钟 */
__HAL_RCC_FSMC_CLK_ENABLE();
/** FSMC GPIO Configuration
PF0 ------> FSMC_A0
PF1 ------> FSMC_A1
PF2 ------> FSMC_A2
PF3 ------> FSMC_A3
PF4 ------> FSMC_A4
PF5 ------> FSMC_A5
PF12 ------> FSMC_A6
PF13 ------> FSMC_A7
PF14 ------> FSMC_A8
PF15 ------> FSMC_A9
PG0 ------> FSMC_A10
PG1 ------> FSMC_A11
PE7 ------> FSMC_D4
PE8 ------> FSMC_D5
PE9 ------> FSMC_D6
PE10 ------> FSMC_D7
PE11 ------> FSMC_D8
PE12 ------> FSMC_D9
PE13 ------> FSMC_D10
PE14 ------> FSMC_D11
PE15 ------> FSMC_D12
PD8 ------> FSMC_D13
PD9 ------> FSMC_D14
PD10 ------> FSMC_D15
PD11 ------> FSMC_A16
PD12 ------> FSMC_A17
PD14 ------> FSMC_D0
PD15 ------> FSMC_D1
PG2 ------> FSMC_A12
PG3 ------> FSMC_A13
PG4 ------> FSMC_A14
PG5 ------> FSMC_A15
PD0 ------> FSMC_D2
PD1 ------> FSMC_D3
PD4 ------> FSMC_NOE
PD5 ------> FSMC_NWE
PG10 ------> FSMC_NE3
PE0 ------> FSMC_NBL0
PE1 ------> FSMC_NBL1
*/
GPIO_InitStruct.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_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
GPIO_InitStruct.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_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
/**
* 函数功能: 初始化FSMC的IO引脚
* 输入参数: hsram:SRAM外设句柄指针
* 返 回 值: 无
* 说 明:该函数被HAL库内部函数调用
*/
void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram)
{
/* 初始化扩展SRAM的IO引脚 */
HAL_FSMC_exSRAM_MspInit();
}
/**
* 函数功能: 反初始化扩展SRAM的IO引脚
* 输入参数: 无
* 返 回 值: 无
* 说 明:该函数被HAL_SRAM_MspDeInit函数调用
*/
static void HAL_FSMC_exSRAM_MspDeInit(void)
{
/* 如果已经完成反初始化就无需初始化第二遍 */
if (FSMC_exSRAM_DeInitialized) {
return;
}
FSMC_exSRAM_DeInitialized = 1;
/* 禁用FSMC外设时钟 */
__HAL_RCC_FSMC_CLK_DISABLE();
/** FSMC GPIO Configuration
PF0 ------> FSMC_A0
PF1 ------> FSMC_A1
PF2 ------> FSMC_A2
PF3 ------> FSMC_A3
PF4 ------> FSMC_A4
PF5 ------> FSMC_A5
PF12 ------> FSMC_A6
PF13 ------> FSMC_A7
PF14 ------> FSMC_A8
PF15 ------> FSMC_A9
PG0 ------> FSMC_A10
PG1 ------> FSMC_A11
PE7 ------> FSMC_D4
PE8 ------> FSMC_D5
PE9 ------> FSMC_D6
PE10 ------> FSMC_D7
PE11 ------> FSMC_D8
PE12 ------> FSMC_D9
PE13 ------> FSMC_D10
PE14 ------> FSMC_D11
PE15 ------> FSMC_D12
PD8 ------> FSMC_D13
PD9 ------> FSMC_D14
PD10 ------> FSMC_D15
PD11 ------> FSMC_A16
PD12 ------> FSMC_A17
PD14 ------> FSMC_D0
PD15 ------> FSMC_D1
PG2 ------> FSMC_A12
PG3 ------> FSMC_A13
PG4 ------> FSMC_A14
PG5 ------> FSMC_A15
PD0 ------> FSMC_D2
PD1 ------> FSMC_D3
PD4 ------> FSMC_NOE
PD5 ------> FSMC_NWE
PG10 ------> FSMC_NE3
PE0 ------> FSMC_NBL0
PE1 ------> FSMC_NBL1
*/
HAL_GPIO_DeInit(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);
HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10);
HAL_GPIO_DeInit(GPIOE, 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_PIN_0|GPIO_PIN_1);
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5);
}
/**
* 函数功能: 反初始化FSMC的IO引脚
* 输入参数: hsram:SRAM外设句柄指针
* 返 回 值: 无
* 说 明:该函数被HAL库内部函数调用
*/
void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef* hsram)
{
HAL_FSMC_exSRAM_MspDeInit();
}
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码
赞
0
收藏
2
评论
1
分享
发布时间:2016-6-15 08:45
举报
请先
登录
后回复
1个回答
Ian-392967
回答时间:2016-7-2 07:13:35
a1024a.1 32b0c
多谢分享!
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表