cubemx关于SDRAM配置

关于SDRAM配置

在使用cubemx单独配置sdram时,如果没有在cubemx中使用到sdram,cubemx不会生成void MX_SDRAM_InitEx(void) 函数。所以会导致单片机在工程中使用到sdram时跑飞,导致单片机卡死。

当再次使用下载时遇到Could not stop Cortex-M device!Please check the JTAG cable.

Error: Flash Download failed - Target DLL has been cancelled

所以,当只需要单独调试SDRAM时,附上代码

FMC_SDRAM_CommandTypeDef command;   // 控制指令
void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
  __IO uint32_t tmpmrd = 0;
  
  /* Configure a clock configuration enable command */
  Command->CommandMode                  = FMC_SDRAM_CMD_CLK_ENABLE; // 开启SDRAM时钟
  Command->CommandTarget                = FMC_COMMAND_TARGET_BANK;  // 选择要控制的区域
  Command->AutoRefreshNumber            = 1;
  Command->ModeRegisterDefinition   = 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);    // 发送控制指令
  Hal_Delay(5);     //延时等待
  
  /* Configure a PALL (precharge all) command */ 
  Command->CommandMode                  = FMC_SDRAM_CMD_PALL;       // 预充电命令
  Command->CommandTarget                = FMC_COMMAND_TARGET_BANK;  // 选择要控制的区域
  Command->AutoRefreshNumber            = 1;
  Command->ModeRegisterDefinition   = 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);  // 发送控制指令
  
  /* Configure a Auto-Refresh command */ 
  Command->CommandMode                  = FMC_SDRAM_CMD_AUTOREFRESH_MODE;   // 使用自动刷新
  Command->CommandTarget                = FMC_COMMAND_TARGET_BANK;          // 选择要控制的区域
  Command->AutoRefreshNumber            = 8;                                // 自动刷新次数
  Command->ModeRegisterDefinition   = 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);    // 发送控制命令
  
  /* Program the external memory mode register */
  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2          |
                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |
                     SDRAM_MODEREG_CAS_LATENCY_3           |
                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |
                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
  
  Command->CommandMode                  = FMC_SDRAM_CMD_LOAD_MODE;  // 加载模块寄存器命令
  Command->CommandTarget                = FMC_COMMAND_TARGET_BANK;  // 选择要控制的区域
  Command->AutoRefreshNumber            = 1;
  Command->ModeRegisterDefinition   = tmpmrd;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);    // 发送控制指令
  
  hsdram->Instance->SDRTR |= ((uint32_t)((1386)<< 1));  // 设置刷新计数器
}

最后在void MX_FMC_Init(void) 中加入

HAL_SDRAM_Init(&hsdram2, &SdramTiming);     // 初始化FMC接口
    
    SDRAM_Initialization_Sequence(&hsdram2,&command);//配置SDRA
M

其他具体配置参考

关于解决下载不进去的方法:

方法一:复位下载,按住复位不放,点击下载,松开复位

方法2:串口ISP下载

方法三:把BOO0设置为3.3,BOOT1设置GND,再下载一遍看看。看看是不是因为之前的用户程序影响而下载不了,目的的清除上一次下载的程序。 例如不小心关了SWD接口或者晶振没配置对等情况,都会造成下载不了。这样在不运行用户程序的情况下,重新下载一个正常的例程,下载完毕之后,再把BOOT0改回GND,这时候单片机就可以以正常的状态运行了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值