STM32H7 SDMMC1初始化阶段无响应问题排查求助
STM32H7 SDMMC1无响应问题求助
问题现象
- KEIL调试模式下,SDMMC1寄存器无任何位切换,完全无响应
- 示波器未检测到MMC初始化相关信号,时钟、CMD及数据线均无波动
- 此前通过软SDIO实现过功能,但切换到硬件SDMMC1后,无论是HAL驱动还是直接寄存器操作都没有反应
代码片段
void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SDMMC1_MMC_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USB_DEVICE_Init(); while (1) { if (UserRxBufferFS[0] == 0x97) // 收到eMMC触发命令 { UserRxBufferFS[0] = 0; SDMMC1->POWER = 1; // 调试时发现该寄存器无变化,原因未知? MX_SDMMC1_MMC_Init(); SDMMC_PowerState_ON(&hmmc2); // 用HAL操作电源寄存器也无变化 SDMMC_SendCommand(&hmmc2, 0); // 示波器观测CMD线无任何动作 } } } static void MX_SDMMC1_MMC_Init(void) { hmmc1.Instance = SDMMC1; hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; hmmc1.Init.BusWide = SDMMC_BUS_WIDE_1B; hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; hmmc1.Init.ClockDiv = 0; } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** 电源配置更新使能 */ HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); /** 配置主内部稳压器输出电压 */ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} /** 根据指定参数初始化RCC振荡器 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 1; RCC_OscInitStruct.PLL.PLLN = 80; RCC_OscInitStruct.PLL.PLLP = 2; RCC_OscInitStruct.PLL.PLLQ = 4; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3; RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; RCC_OscInitStruct.PLL.PLLFRACN = 0; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** 初始化CPU、AHB和APB总线时钟 */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } }
更新信息
- RCC配置如图所示(注:原图未提供)
- stm32h7xx_hal_rcc.h中的
__HAL_RCC_C1_SDMMC1_CLK_ENABLE()未激活
内容的提问来源于stack exchange,提问作者KlimDuda
相关产品推荐
相关产品推荐

