唐纳德d 发表于 2025-10-23 13:45

想修改 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)



classroom 发表于 2025-10-23 16:11

不建议直接修改 stm32l4xx_ll_sdmmc.h

cr315 发表于 2025-10-23 17:12

推荐修改超时时间,或修改HAL库的配置

duo点 发表于 2025-10-23 18:12

超时问题可能是硬件引起的

elephant00 发表于 2025-10-23 16:13

降低时钟频率看看

flycamelaaa 发表于 2025-10-23 19:14

用最新版本的STM32L4 HAL库

jcky001 发表于 2025-10-23 20:14

可能是SDMMC_DATATIMEOUT 默认值过大,导致硬件问题如信号质量差时程序卡死。

onlycook 发表于 2025-10-23 21:15

建议通过逻辑分析仪或示波器抓取SDMMC信号,分析时钟和数据线的波形是否正常。
页: [1]
查看完整版本: 想修改 HAL 的 SDMMC_DATATIMEOUT