你的Lucifer 2024-02-06 21:37 采纳率: 0%
浏览 27
已结题

基于H750的sram配置

用h750外接了一个sram,能向地址里写数(一个循环数),但从地址里取数出来就会无法进入断点,memory里地址数据不再更新,初始化配置有什么毛病吗?求牛人们看看

img

  • 写回答

13条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-06 21:37
    关注
    获得0.75元问题酬金

    引自免费微信小程序:皆我百晓生

    在配置STM32H750连接外部SRAM时,你已经提供了一部分初始化代码。从代码片段中可以看出,你正在设置FMC(Flexible Memory Controller)的相关参数以与外部SRAM进行交互。但是,根据你的描述,存在写入数据后无法正常读取且无法进入断点的问题。

    首先,我们分析一下给出的FMC NORSRAM控制器初始化代码:

    // 选择对应的NOR/SRAM BANK
    g_sram_handler.Init.NSBank = (SRAM_FSMC_NEX == 1) ? FMC_NORSRAM_BANK1 :
                       (SRAM_FSMC_NEX == 2) ? FMC_NORSRAM_BANK2 :
                       (SRAM_FSMC_NEX == 3) ? FMC_NORSRAM_BANK3 : FMC_NORSRAM_BANK4;
    
    g_sram_handler.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
    g_sram_handler.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
    g_sram_handler.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_8; // 假设是8位宽
    g_sram_handler.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_ENABLE;
    g_sram_handler.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
    g_sram_handler.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
    g_sram_handler.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
    g_sram_handler.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
    g_sram_handler.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
    g_sram_handler.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
    g_sram_handler.Init.WriteBurst = FMC_WRITE_BURST_ENABLE;
    
    // 设置读写时序控制寄存器
    fsmc_writetim.AddressSetupTime = 0x05; // 5个HCLK周期
    fsmc_writetim.AddressHoldTime = 0x03; // 地址保持时间(这里应该是笔误?应为0x05与上面一致)
    fsmc_writetim.DataSetupTime = 0x05; // 数据建立时间
    fsmc_writetim.BusTurnAroundDuration = 0x05;
    fsmc_writetim.AccessMode = FMC_ACCESS_MODE_A;
    
    // 初始化FMC NOR/SRAM控制器
    HAL_SRAM_Init(&g_sram_handler, &fsmc_readwritetim, &fsmc_readwritetim);
    

    针对问题,有几个可能的原因:

    1. 时序配置错误:检查fsmc_writetimfsmc_readwritetim是否正确设置了SRAM所需的读写时序。不同的SRAM芯片可能需要不同的时序参数,请确保这些值与SRAM的数据手册中推荐的时序相匹配。

    2. 地址/数据总线宽度不匹配:确认所用SRAM的数据宽度是否与配置中的MemoryDataWidth相符。

    3. 中断与断点问题:如果在读取操作期间发生中断,可能会导致调试器无法进入断点。检查是否有未处理的中断或其他异常情况干扰了读取操作的执行流程。

    4. 电源与复位:确保SRAM有足够的稳定电源,并检查其复位信号是否正常。

    5. 硬件连接问题:检查STM32与SRAM之间的硬件连接是否正确无误,包括地址线、数据线、控制线等。

    6. 读写操作模式:虽然代码中配置了写操作使能,但未看到针对读操作的具体说明,理论上读操作也应该启用。不过HAL_SRAM_Init函数会同时应用读写时序,一般不需要单独配置。

    要解决这个问题,建议按照以下步骤排查:

    • 校验SRAM芯片手册,确保所有时序参数正确。
    • 检查并验证STM32与SRAM之间的接口连线及电源、复位信号。
    • 在读写操作前后插入延时或使用DMA传输,避免由于时序过紧而出现的问题。
    • 使用示波器或逻辑分析仪捕捉相关信号,直观地查看读写过程是否符合预期。

    如果以上信息不能直接解决问题,请提供更多关于问题现象以及系统运行环境的详细信息,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月14日
  • 赞助了问题酬金15元 2月6日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
  • ¥21 matlab可以把图像数据转换为小波分析吗