你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
ST意法半导体中文论坛
»
论坛
›
【技术区】
›
ST开发工具
›
【HAL库每天一例】第041例:FSMC-扩展SRAM
返回列表
查看:
1560
|
回复:
1
【HAL库每天一例】第041例:FSMC-扩展SRAM
[复制链接]
haohao663
haohao663
当前离线
在线时间
498 小时
UID
331315
ST金币
0
蝴蝶豆
0
注册时间
2015-6-4
122
主题
129
回帖
0
蝴蝶豆
论坛元老
最后登录
2019-5-28
收听TA
发消息
发表于 2016-6-15 08:45:12
|
显示全部楼层
|
阅读模式
a0a.1 32b0c
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的
指导文档和视频教程
,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
YSF1_HAL-041. FSMC-扩展SRAM.zip
(4.9 MB, 下载次数: 56)
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****/
复制代码
回复
使用道具
举报
Ian-392967
Ian-392967
当前离线
在线时间
22 小时
UID
392967
ST金币
0
蝴蝶豆
0
注册时间
2015-1-11
0
主题
153
回帖
0
蝴蝶豆
中级会员
中级会员, 积分 392, 距离下一级还需 108 积分
最后登录
2020-1-5
收听TA
发消息
发表于 2016-7-2 07:13:35
|
显示全部楼层
a1024a.1 32b0c
多谢分享!
回复
支持
反对
使用道具
举报
返回列表
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表