关于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,这时候单片机就可以以正常的状态运行了