|
原本想着SDRAM初始化完成后,就可以像操作内存那样操作SDRAM,但实际发现以下几点疑问:
1、HAL库每次操作SDRAM前后都有一次上锁和解锁操作,这么做的目的是什么?访问内存时可没见过这个操作啊;2、上锁之后,紧接着又判断SDRAM句柄的状态,状态异常直接返回错误,合着每次读写SDRAM后我还得再判断一次是否读写成功了?
3、SDRAM需要STM32的控制器不断的发送刷新指令去自我刷新,仿真时打了断点似乎SDRAM中的数据并没有丢失,难道停在断点的时候STM32还在给SDRAM发生刷新命令?
HAL_StatusTypeDef HAL_SDRAM_Write_8b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint8_t *pSrcBuffer, uint32_t BufferSize)
{
__IO uint8_t *pSdramAddress = (uint8_t *)pAddress;
uint32_t tmp = 0U;
/* Process Locked */
__HAL_LOCK(hsdram);
/* Check the SDRAM controller state */
tmp = hsdram->State;
if(tmp == HAL_SDRAM_STATE_BUSY)
{
return HAL_BUSY;
}
else if((tmp == HAL_SDRAM_STATE_PRECHARGED) || (tmp == HAL_SDRAM_STATE_WRITE_PROTECTED))
{
return HAL_ERROR;
}
/* Write data to memory */
for(; BufferSize != 0U; BufferSize--)
{
*(__IO uint8_t *)pSdramAddress = *pSrcBuffer;
pSrcBuffer++;
pSdramAddress++;
}
/* Process Unlocked */
__HAL_UNLOCK(hsdram);
return HAL_OK;
}
|
|