针对STM32H750VBT6 V版本芯片ADC采样率无法超过1Msps的问题,以下是可能的原因及解决方案的分步说明:
ADCCLK)由per_ck提供。确保per_ck的频率足够高(例如200MHz)。ADCCLK = per_ck / ADC_PRESCALER,分频系数应尽可能小(例如ADC_PRESCALER=4,得到50MHz的ADC时钟)。关键代码:
RCC_PeriphCLKInitTypeDef periph_clk_init = {0};
periph_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC;
periph_clk_init.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; // 假设PLL2输出高频per_ck
HAL_RCCEx_PeriphCLKConfig(&periph_clk_init);
// 设置ADC预分频
__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);ADC_SAMPLETIME的配置值(例如从ADC_SAMPLETIME_19CYCLES_5改为ADC_SAMPLETIME_2CYCLES_5)。 ADC_ChannelConfTypeDef sConfig = {0};
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5; // 最小采样时间
HAL_ADC_ConfigChannel(&hadc2, &sConfig);触发频率 = TIM3_CLK / (PSC + 1) / (ARR + 1)。TIM3_CLK=200MHz,设置PSC=0、ARR=49,触发频率=200MHz /1 /50=4MHz。 htim3.Instance = TIM3;
htim3.Init.Prescaler = 0; // 无分频
htim3.Init.Period = 49; // ARR=49
HAL_TIM_Base_Init(&htim3);
HAL_TIM_Base_Start(&htim3); // 启动TIM3ADC_OVERSAMPLING_DISABLE。 hadc2.Init.OversamplingMode = DISABLE;
HAL_ADC_Init(&hadc2); hdma_adc2.Init.Mode = DMA_CIRCULAR; // 循环模式
hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
HAL_DMA_Init(&hdma_adc2);通过以上步骤调整后,ADC采样率应能显著提升。若问题仍存在,建议联系ST技术支持,提供完整的时钟配置、ADC初始化代码及触发逻辑进一步排查。
举报
更多回帖