SumWave 2024-05-12 00:29 采纳率: 0%
浏览 63

STM32F103VET6的SRAM连接

我想使用STM32F103VET6的FSMC连接PSRAM拓展RAM,问题硬件设计时遇到疑惑
已知STM32F103VET6只有100个pin在cubeMX中的配置sram时发现它的地址信号与数据信号脚是共用的和STM32F103ZET6分离的不同,
以下是VET6的配置图片:

img

img

以下是zet6的配置图片:

img

img

然而SRAM的数据总线是分开的:

img

那就坑了数据册上看SRAM的写是要地址和数据同时输出才行:

img

该怎么连接才行呀?

  • 写回答

4条回答 默认 最新

  • 笑面虎 2024-05-12 00:29
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是如何将PSRAM(一种SRAM)通过FSMC(Flexible Static Memory Controller)接口连接到STM32F103VET6微控制器,并确保数据和地址信号能够正确地传输,因为您发现STM32F103VET6的FSMC配置与STM32F103ZET6的配置不同,特别是在地址和数据信号共用的情况下。

    【图片内容】:

    1. 第一张图片显示了STM32F103VET6的FSMC模式和配置,包括内存类型、控制信号和数据/地址位宽等参数。
    2. 第二张图片列出了一些特定的信号,如CSDN @SumWave,可能与PSRAM的片选或控制信号有关。
    3. 第三张图片展示了STM32F103ZET6的引脚分配,包括电源、地、数据和控制引脚。
    4. 第四张图片是一个块状图,显示了一个512K x 16的内存阵列,包括地址线、数据线和控制电路。
    5. 第五张图片是STM32F103VET6的FSMC配置,包括内存类型、地址和数据位宽、写操作、扩展模式和时序参数。
    6. 第六张图片描述了写入周期的时序图,包括地址、控制信号和数据信号的时序关系。

    【问题出现原因】:问题出现的原因是STM32F103VET6的FSMC接口在配置PSRAM时,地址和数据线是共用的,这与STM32F103ZET6的配置不同。在STM32F103VET6上,您需要确保在正确的时序下,地址和数据信号能够通过FSMC接口正确地传输。

    【问题解决方案】:为了解决这个问题,您需要确保:

    • 正确配置FSMC的地址和数据线,使其与PSRAM的规格相匹配。
    • 遵循PSRAM的数据手册,确保地址和数据信号的时序满足要求。
    • 使用STM32CubeMX工具自动生成初始化代码,确保FSMC的配置与硬件设计相匹配。

    【提供代码】:由于STM32CubeMX工具会根据硬件配置生成初始化代码,您需要使用该工具来生成FSMC的初始化代码。以下是使用STM32CubeMX生成的代码的一个示例:

    void FSMC_Init(void)
    {
      /* FSMC GPIO Configuration */
      // ... (省略了GPIO初始化代码)
    
      /* FSMC NOR/SRAM Bank1 initialization */
      FSMC_NORSRAM_InitTypeDef FSMC_NORSRAMInitStructure = {0};
      FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
      FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
      FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
      FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
      FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
      FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
      FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
      FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
      FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
      FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
      FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
      FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
      FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
      FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
      FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
      FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
    
      /* Enable FSMC Bank1_SRAM Bank */
      FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
    }
    

    【代码运行方式】:您需要在STM32的HAL库环境中运行此代码,通常是在Keil MDK、STM32CubeIDE或其他支持STM32的IDE中。

    【代码预期运行结果】:代码成功运行后,FSMC接口将被正确配置,并且能够与PSRAM进行通信。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月12日
  • 创建了问题 5月12日