想修改 HAL 的 SDMMC_DATATIMEOUT
我用STM32CubeIDE开发STM32L4A6ZGTx,板子上留了一个用户 SD 卡。如果在该卡初始化时出现问题,系统会陷入循环SD_FindSCR() at stm32l4xx_hal_sd.c:3,970 0x8039632
SD_WideBus_Enable() at stm32l4xx_hal_sd.c:3,822 0x803947a
HAL_SD_ConfigWideBusOperation() at stm32l4xx_hal_sd.c:2,643 0x8038db0
BSP_SD_Init() at sd_diskio.c:190 0x8025d18
SD_initialize() at sd_diskio.c:225 0x8025da4
具体是在这里:
while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND))
{
if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))
{
*(tempscr + index) = SDMMC_ReadFIFO(hsd->Instance);
index++;
}
if((HAL_GetTick() - tickstart) >=SDMMC_DATATIMEOUT)
{
return HAL_SD_ERROR_TIMEOUT;
}
}
能不能修改 stm32l4xx_ll_sdmmc.h 中的这个值?
#define SDMMC_DATATIMEOUT ((uint32_t)0xFFFFFFFFU)
不建议直接修改 stm32l4xx_ll_sdmmc.h 推荐修改超时时间,或修改HAL库的配置 超时问题可能是硬件引起的 降低时钟频率看看 用最新版本的STM32L4 HAL库 可能是SDMMC_DATATIMEOUT 默认值过大,导致硬件问题如信号质量差时程序卡死。 建议通过逻辑分析仪或示波器抓取SDMMC信号,分析时钟和数据线的波形是否正常。
页:
[1]