在STM32F429/GD32F450中用FMC/EXMC初始化SDRAM

目录

 

1、硬件

2、初始化时序

3、配置FMC总线的寄存器

3.1 控制寄存器

3.2 时序寄存器

3.3 命令寄存器

3.4 刷新间隔reg

4、MCU配置代码

5、CL定义


1、硬件

选用华邦W9825G6KH-6I。以micron的片子手册作为对比参考。

    

手册参数如下:

 

  

2、初始化时序

华邦手册只有简单的描述:

3、配置FMC总线的寄存器

通过配置控制、时序、命令、刷新间隔等寄存器,MCU能自动生成控制SDRAM的接口时序。每次根据操作模式的不同向CMD寄存器写入不同数据。

3.1 控制寄存器

3.2 时序寄存器

3.3 命令寄存器

此寄存器中[21:9]为初始化过程中用的 LOAD MODE reg 内容。

3.4 刷新间隔reg

4、MCU配置代码

5、CL定义

可取值2或3.

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我可以提供以下的初始化代码,以实现GD32F450IIH6的EXMC同步模式初始化: 1. 首先,需要在库文件中定义EXMC参数结构体,代码如下: ``` typedef struct { uint32_t EXMC_AddressSetupTime; uint32_t EXMC_AddressHoldTime; uint32_t EXMC_DataSetupTime; uint32_t EXMC_BusTurnAroundDuration; uint32_t EXMC_CLKDivision; uint32_t EXMC_DataLatency; uint32_t EXMC_AccessMode; } EXMC_NORSRAMTimingInitPara; ``` 2. 然后,需要定义EXMC初始化函数,代码如下: ``` void EXMC_NORSRAMInit(EXMC_NORSRAMInitPara* EXMC_NORSRAMInitStruct, EXMC_NORSRAMTimingInitPara* EXMC_NORSRAMTimingInitStruct) { /* 1. 配置NORSRAM的时序参数 */ EXMC_NORSRAMTimingInit(EXMC_NORSRAMTimingInitStruct); /* 2. 配置NORSRAM初始化参数 */ EXMC_NORSRAMInitStruct->EXMC_AsyncWait = EXMC_AsyncWait_Disable; EXMC_NORSRAMInitStruct->EXMC_ExtendedMode = EXMC_ExtendedMode_Disable; EXMC_NORSRAMInitStruct->EXMC_WriteMode = EXMC_WriteMode_Enable; EXMC_NORSRAMInitStruct->EXMC_WaitSignal = EXMC_WaitSignal_Disable; EXMC_NORSRAMInitStruct->EXMC_WrapBurstMode = EXMC_WrapBurstMode_Disable; EXMC_NORSRAMInitStruct->EXMC_WriteBurstMode = EXMC_WriteBurstMode_Disable; EXMC_NORSRAMInitStruct->EXMC_ReadWriteTimingStruct = EXMC_NORSRAMTimingInitStruct; EXMC_NORSRAMInitStruct->EXMC_WriteTimingStruct = EXMC_NORSRAMTimingInitStruct; /* 3. 调用库函数进行初始化 */ EXMC_NORSRAMInit(EXMC_NORSRAMInitStruct); } ``` 3. 最后,需要在主函数中调用EXMC初始化函数,如下所示: ``` int main(void) { /* 1. 定义EXMC参数结构体 */ EXMC_NORSRAMInitPara EXMC_NORSRAMInitStruct; EXMC_NORSRAMTimingInitPara EXMC_NORSRAMTimingInitStruct; /* 2. 配置EXMC时序参数 */ EXMC_NORSRAMTimingInitStruct.EXMC_AddressSetupTime = 4; EXMC_NORSRAMTimingInitStruct.EXMC_AddressHoldTime = 2; EXMC_NORSRAMTimingInitStruct.EXMC_DataSetupTime = 8; EXMC_NORSRAMTimingInitStruct.EXMC_BusTurnAroundDuration = 1; EXMC_NORSRAMTimingInitStruct.EXMC_CLKDivision = 2; EXMC_NORSRAMTimingInitStruct.EXMC_DataLatency = 2; EXMC_NORSRAMTimingInitStruct.EXMC_AccessMode = EXMC_AccessMode_A; /* 3. 调用EXMC初始化函数 */ EXMC_NORSRAMInit(&EXMC_NORSRAMInitStruct, &EXMC_NORSRAMTimingInitStruct); /* 4. 主函数其他代码 */ return 0; } ``` 以上是一个简单的初始化代码示例,其中需要根据具体的需求进行调整。同时,需要注意在使用EXMC前,还需要开启EXMC时钟和GPIO时钟。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值