2025-11-08 06:24:37
外扩SRAM就是给STM32加内存。STM32F407内部有512KB SRAM,不够用的话要接外部SRAM。接法分两种:要么用扩展存储器接口(EMS),要么用通用IO口。EMS要连地址总线、数据总线、控制信号,比如A0-A15,D0-D31,CS、OE、WE这些。时钟要和主频同步,比如主频168MHz,外扩SRAM的时钟要分频到168MHz/8=21MHz。寄存器设置要改,比如EMMC或EMRS寄存器,设置地址范围和时序。
为什么这么操作呢?因为STM32F407的扩展存储器接口(EMS)能直接管理外部SRAM,省去复杂协议转换。手册里写明EMS支持8位、16位、32位总线,时钟分频系数1-8,时序参数如tRL(行地址建立时间)和tCH(列地址存取时间)必须匹配。比如接8位总线时,数据线只需连D0-D7,地址线A0-A7,但32位总线能一次传4字节,效率更高。时钟分频选8才能让外扩SRAM的21MHz和主频168MHz同步,否则数据会错位。寄存器设置里,EMRS寄存器要写地址范围,比如从0x20000000到0x200FFFFF,对应8MB SRAM。如果用通用IO口,得自己写驱动,比如模拟SPI或DMA传输,但速度会慢很多。比如接8MB SRAM用EMS只需改3个寄存器,而用IO口要写几百行代码。手册还警告说,如果外扩SRAM速度不够,读数据时必须插入等待状态,比如检测RDY信号,否则系统会死机。
本题链接: