[其他ST产品] stm32cubeMX配置stm32h743 SDRAM

[复制链接]
5859|81
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:34 编辑

7772366311db1eefff.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:36 编辑

总结于:stm32cubemx读写SDRAM-W9825G6KH不知道为啥,这个地方一定要2分频,不然无法成功:
7644966311dfacd35d.png
本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外设与 SDRAM 通信(W9825G6KH)。
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:36 编辑

准备工作
硬件准备
487266311e1973a5f.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:37 编辑

开发板
首先需要准备一个开发板,这里我准备的是STM32F767IGT6的核心板。

SDRAM
核心板板载一片SDRAM,型号为 W9825G6KH,大小为 32 MB。

8093466311e3035b3b.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:37 编辑

软件准备
需要准备一份 W9825G6KH-6 的数据手册。

2. STM32 FMC外设概述
2.1. 什么是FMC
FMC全称Flexible Memory Controller,灵活的内存控制器,顾名思义,其主要作用是:负责向外部扩展的存储类设备提供控制信号。

FMC内存控制器支持的存储设备有:

Nor Flash、SRAM、PSRAM
Nand Flash
SDRAM
网卡DM9000(类存储设备)
此外,FMC外设还可以通过配置与LCD控制器连接,它提供Intel 8080并口模式和Motorola 6080并口模式,并且可以灵活的配置为指定的LCD接口类型。
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:37 编辑

FMC外设的功能框图 7327266311e6426771.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:38 编辑

外部设备的地址映射(重点)

从FMC的角度来看,外部的存储设备被分为几个固定大小的Bank,每个bank 256 MB

整个FMC外设映射地址的划分如图:

7396066311e7abaf9f.png

 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:38 编辑

2.3.1. Bank1

Bank1的地址空间为:0x6000 0000 - 0x6FFF FFFF,支持外接Nor Flash、PSRAM、SRAM等设备,还可以外接DM9000等类存储设备。

整个Bank1的地址空间被划分为四个子bank,每个子bank的大小为64MB,刚好对应FMC外设的地址总线(FMC_A[0:25])有26条(2^26=64MB)。

FMC还有两条内部总线ADDR[27:26],用这两路控制片选信号,如下表:

4777566311e9e1987a.png

2.3.2. Bank3

只能外接Nand Flash设备。

2.3.3. SDRAM Bank

只能外接SDRAM设备。

 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:39 编辑

使用STM32CubeMX生成工程
选择芯片型号
打开STM32CubeMX,打开MCU选择器:
8099766311eb70ed75.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:39 编辑

搜索并选中芯片STM32F767IGT6: 9749466311ed4000a6.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:40 编辑

配置时钟源
  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
  • 如果使用默认内部时钟(HSI),这一步可以略过;
这里我都使用外部时钟:
1979866311efa0c970.png
 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:41 编辑

配置串口

开发板板载了一个CH340换串口,连接到USART1,但是引脚不是默认引脚,需要手动修改。

接下来开始配置USART1并修改引脚:


1042066311f1c5d352.png

 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:41 编辑

配置FMC外设
在配置FMC外设的时候,需要了解所用SDRAM的一些参数

FMC配置

开发板上SDRAM(W9825G6KH)的原理图如下:

32366311f3bb7dbc.png


 楼主| 和下土 发表于 2024-4-30 23:44 | 显示全部楼层
本帖最后由 和下土 于 2024-5-1 00:41 编辑

通过原理图可以看出:

数据总线位宽使用了16bit:FMC D0 - FMC D15;
地址总线位宽使用了13bit:FMC A0 - FMC A12;
BANK选择信号线有两条:FMC BA0 和 FMC BA1;
时钟使能信号使用FMC SDCKE0,片选信号使能使用FMC SDME0,可以看出使用SDRAM区域1;
其它通用信号线:FMC SDNWE、FMC SDNCAS、FMC SDNRAS、FMC SDCLK;
数据掩码信号线使用 FMC NBL0 和 FMC NBL1,分别控制输出高8位还是低8位;
 楼主| 和下土 发表于 2024-5-1 00:42 | 显示全部楼层
根据这些信息,在STM32CubeMX中先配置SDRAM1的基本设置:
3938366311f5c5a184.png
 楼主| 和下土 发表于 2024-5-1 00:42 | 显示全部楼层
SDRAM基本参数配置
这部分信息从 SDRAM(W9825G6KH) 的数据手册中即可看到。

① 速度等级:当CL=3时最高速度为166Mhz。因为STM32F767的HCLK=216Mhz,所以需要进行二分频,使SDRAM的时钟频率为108Mhz。

5892666311f6a14d54.png
 楼主| 和下土 发表于 2024-5-1 00:42 | 显示全部楼层
行地址宽度和列地址宽度:有A0-A12 总共13条行地址线,有A0-A8总共9条列地址线。
1292866311f75a1745.png
 楼主| 和下土 发表于 2024-5-1 00:42 | 显示全部楼层
最后配置如下:
9461066311f8050a8d.png
 楼主| 和下土 发表于 2024-5-1 00:43 | 显示全部楼层
SDRAM时序参数配置
通过之前的设置,SDRAM的时钟频率为108Mhz,一个时钟周期就是9.26 ns,所以下面参数的单位都是9.26ns。

① LoadToActiveDelay:TMRD 定义加载模式寄存器的命令与激活命令或刷新命令之间的延迟,最小值为2个clk。

8577066311f955986d.png
 楼主| 和下土 发表于 2024-5-1 00:43 | 显示全部楼层
ExitSelfRefreshDelay:从退出自刷新到行有效的时间延迟,最小72ns,所以参数设置为8。
966866311fa6c4df6.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部