你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H7A3RGT6 ADC 8位采样速度只能达到3.5MSPS达不到数据手册上的7MSPS ?

[复制链接]
onlap 提问时间:2026-1-3 11:44 / 未解决
STM32H7A3RGT6 ADC 8位采样速度大约只有3.5MSPS达不到数据手册上的7MSPS

通过运算放大器输入180Hz正弦波测试频率 用TIM5捕获波形上升沿触发TIM6工作,
每次DMA结束后,停止采样 通过320*240显示屏显示波形,每100个数据取一个点显示,根据显示波形的数量,推算出采样频率,
达到3.5MHz采样率时大约显示1.2个周期的波形(3 500 000/100/180=194点/周期波形)
调整TIM6的ARR值
当TIM6的触发频率最开始为280 000 000/1/300=0.93Mhz  最开始提高触发频率,采样率会随触发频率上升
当TIM6的触发频率调整到280 000 000/1/150=1.86Mhz  ADC1+ADC2的合计每秒的采样数大约为3.5MHz
再继续升高触发频率 采样数不会继续上升
如果设置为同步采样模式 TIM6触发频率可以设置到280 000 000/1/80=3.5Mhz  每个ADC(ADC1和ADC2)的采样数大约为3.5MHz
再继续升高触发频率 采样数不会继续上升
一个ADC1采用自动连续模式采样最高采样数也是大约为3.5MHz
达不到数据手册中描述的7MHz

双ADC同步采样模式,每秒的采样数大约为3.5MHz
采用双ADC交替采样,ADC1+ADC2每秒的采样数大约为3.5MHz,也无法将采样频率提高1倍

以上测试没有考虑数据的精度,只测试采样率
以上不知是哪里设置有问题,采样数无法达到7MHz

以下为程序代码 不知道哪里出问题 请大家指点 谢谢

static void ADC_TRIG_TIM6_Init(unsigned short Prescaler,unsigned short ARR)
{

/* USER CODE BEGIN TIM6_Init 0 */

/* USER CODE END TIM6_Init 0 */

LL_TIM_InitTypeDef TIM_InitStruct = {0};//配置定时器计时参数

/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);//开启TIM6的时钟

//        LL_TIM_DisableCounter(TIM6);
LL_TIM_DeInit(TIM6);

/* TIM6 interrupt Init */
//  NVIC_SetPriority(TIM6_DAC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
//  NVIC_EnableIRQ(TIM6_DAC_IRQn);

/* USER CODE BEGIN TIM6_Init 1 */

/* USER CODE END TIM6_Init 1 */
LL_TIM_SetClockSource(TIM6, LL_TIM_CLOCKSOURCE_INTERNAL);//使用内部时钟
TIM_InitStruct.Prescaler =Prescaler-1;//预分频数值
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;//向上计数模式
TIM_InitStruct.Autoreload = ARR-1;//自动重装载值
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;//外部时钟滤波器分频值(内部时钟模式不起作用)
TIM_InitStruct.RepetitionCounter = 0;//重复寄存器,此参数不起作用,(TIM1使用此参数)
LL_TIM_Init(TIM6, &TIM_InitStruct);
LL_TIM_EnableARRPreload(TIM6);

LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_UPDATE);
LL_TIM_DisableMasterSlaveMode(TIM6);
/* USER CODE BEGIN TIM6_Init 2 */

//                LL_TIM_DisableCounter(TIM6);
LL_TIM_EnableCounter(TIM6);//打开TIM6

}

void DUAL_REG_INTERL_TIM6_ADC12_8B_Init(unsigned short Prescaler,unsigned short ARR,unsigned int *buff_Addr0, unsigned short

trans_Num)//PC4 双通道倍速采样
{
uint32_t wait_loop_index;
LL_GPIO_InitTypeDef LL_GPIO_Struct={0};
LL_ADC_InitTypeDef ADC_InitStruct = {0};
LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0};
LL_ADC_CommonInitTypeDef ADC_CommonInitStruct = {0};
LL_DMA_InitTypeDef LL_DMA_Struct={0};
/* 使能相应时钟 */
LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOB);
LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOC);
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_ADC12);
//        __HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);        /* 选择ADC的时钟源为per_ck->HSI=64M */
LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLL2P);
//        LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
/* 配置ADC2采样通道 */
/**ADC2 GPIO Configuration
PC4   ------> ADC2_INP4
*/
LL_GPIO_Struct.Pin=LL_GPIO_PIN_4;
LL_GPIO_Struct.Mode=LL_GPIO_MODE_ANALOG;
LL_GPIO_Struct.Pull=LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOC, &LL_GPIO_Struct);

/* 配置ADC1采样通道 */
  /**ADC1 GPIO Configuration
PB1   ------> ADC1_INP5
*/

LL_GPIO_Struct.Pin=LL_GPIO_PIN_1;
LL_GPIO_Struct.Mode=LL_GPIO_MODE_ANALOG;
LL_GPIO_Struct.Pull=LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOB, &LL_GPIO_Struct);       
/* USE_ADC_WORK_MODE */

/* DMA controller clock enable */
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
//  DMA1_Stream0->CR&=~(1<<0); //关闭DMA传输
LL_DMA_DisableStream(DMA1, LL_DMA_STREAM_0);
LL_DMA_DeInit(DMA1, LL_DMA_STREAM_0);
while ( LL_DMA_IsEnabledStream(DMA1, LL_DMA_STREAM_0) != DISABLE){}//等待DMA可配置
// while(DMA1_Stream0->CR&0x01);//等待DMA可配置

/* DMA配置 */
LL_DMA_Struct.PeriphRequest=LL_DMAMUX1_REQ_ADC1;//通道选择
LL_DMA_Struct.Direction=LL_DMA_DIRECTION_PERIPH_TO_MEMORY;//外设到存储器模式
LL_DMA_Struct.Mode=LL_DMA_MODE_CIRCULAR;// DMA模式
LL_DMA_Struct.Priority=LL_DMA_PRIORITY_VERYHIGH;// 优先级:高
LL_DMA_Struct.NbData=trans_Num;//设置数据长度
LL_DMA_Struct.PeriphOrM2MSrcAddress=(uint32_t)&ADC12_COMMON->CDR;//外设地址 手册中描述有问标题 CDR的16-31位实际上没有数据
LL_DMA_Struct.MemoryOrM2MDstAddress=(unsigned int)buff_Addr0;//内存地址0
LL_DMA_Struct.PeriphOrM2MSrcDataSize=LL_DMA_PDATAALIGN_HALFWORD;// 外设数据单位16位 手册中描述有问标题 CDR的16-31位实际上没

有数据
LL_DMA_Struct.MemoryOrM2MDstDataSize=LL_DMA_MDATAALIGN_HALFWORD;// 内存数据单位16位 手册中描述有问标题 CDR的16-31位实际上没

有数据
LL_DMA_Struct.PeriphOrM2MSrcIncMode=LL_DMA_PERIPH_NOINCREMENT;// 外设地址不增
LL_DMA_Struct.MemoryOrM2MDstIncMode=LL_DMA_MEMORY_INCREMENT;// 内存地址自增
LL_DMA_Init(DMA1, LL_DMA_STREAM_0, &LL_DMA_Struct);
/* DMA双缓冲模式配置 */
//        LL_DMA_SetMemory1Address(DMA1, LL_DMA_STREAM_0, (unsigned int)buff_Addr1);//内存地址1
//  LL_DMA_EnableDoubleBufferMode(DMA1, LL_DMA_STREAM_0);        //使能双缓冲模式
//  LL_DMA_ClearFlag_TC0(DMA1);// 清除传输完成标志
/* 配置中断优先级 */
NVIC_SetPriority(DMA1_Stream0_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(DMA1_Stream0_IRQn);
/* 开启DMA传输完成中断 */
LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_0);//使能传输完成中断
//        LL_DMA_DisableStream(DMA1, LL_DMA_STREAM_0);
LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_0);

/*ADC2配置*/
LL_ADC_DeInit(ADC2);
/* 采样率设置 */
ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_8B;//采样率
ADC_InitStruct.LeftBitShift=LL_ADC_LEFT_BIT_SHIFT_NONE;//无数据位移
ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;//关闭低电压模式
LL_ADC_Init(ADC2, &ADC_InitStruct);
/* BOOST 位控制 */
LL_ADC_SetBoostMode(ADC2, LL_ADC_BOOST_MODE_50MHZ);
/* 规则采样参数配置 */
ADC_REG_InitStruct.TriggerSource=LL_ADC_REG_TRIG_SOFTWARE;//触发源
ADC_REG_InitStruct.DataTransferMode=LL_ADC_REG_DMA_TRANSFER_UNLIMITED;//DMA循环模式
ADC_REG_InitStruct.ContinuousMode=LL_ADC_REG_CONV_SINGLE;//单次转换
ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;//转换通道数 1
ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;        //关闭不连续模式
ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN;//数据溢出模式
LL_ADC_REG_Init(ADC2, &ADC_REG_InitStruct);
//  LL_ADC_REG_SetTriggerEdge(ADC2, LL_ADC_REG_TRIG_EXT_RISING);//上升沿触发

        /* ADC2初始化 */
/* 退出掉电模式 */
LL_ADC_DisableDeepPowerDown(ADC2);
/* 启动内部稳压器 */
LL_ADC_EnableInternalRegulator(ADC2);
/* 等待内部稳压器启动 */
wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US * (SystemCoreClock / (100000 * 2))) / 10);
while(wait_loop_index != 0)
{
wait_loop_index--;
}

/* 配置规则通道 */
LL_ADC_REG_SetSequencerRanks(ADC2, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_5);
LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_5, LL_ADC_SAMPLINGTIME_2CYCLES_5);
LL_ADC_SetChannelSingleDiff(ADC2, LL_ADC_CHANNEL_5, LL_ADC_SINGLE_ENDED);
/* 通道预选设置,这个很关键 */
ADC2->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_CHANNEL_5) & 0x1FUL));

        /* 启动校准 */
LL_ADC_StartCalibration(ADC2, LL_ADC_CALIB_OFFSET, LL_ADC_SINGLE_ENDED);
/* 等待校准完成 */
while(LL_ADC_IsCalibrationOnGoing(ADC2) != 0UL);

        /*ADC1配置*/
LL_ADC_DeInit(ADC1);
/* 采样率设置 */
ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_8B;//采样率
ADC_InitStruct.LeftBitShift=LL_ADC_LEFT_BIT_SHIFT_NONE;//数据位移
ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;//低电压模式 无
LL_ADC_Init(ADC1, &ADC_InitStruct);
/* BOOST 位控制 */
LL_ADC_SetBoostMode(ADC1, LL_ADC_BOOST_MODE_50MHZ);
/* 规则采样参数配置 */
ADC_REG_InitStruct.TriggerSource=LL_ADC_REG_TRIG_EXT_TIM6_TRGO;//触发源
ADC_REG_InitStruct.DataTransferMode=LL_ADC_REG_DMA_TRANSFER_UNLIMITED;//数据传送模式
ADC_REG_InitStruct.ContinuousMode=LL_ADC_REG_CONV_SINGLE;//单次转换
ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;//通道数量 1通道无扫描
ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;        //关闭不连续模式
ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN;//数据溢出模式
LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct);
LL_ADC_REG_SetTriggerEdge(ADC1, LL_ADC_REG_TRIG_EXT_RISING);//上升沿触发

        /* 设置ADC分频系数 */
ADC_CommonInitStruct.CommonClock = LL_ADC_CLOCK_ASYNC_DIV1;

/* 双重模式配置 */
ADC_CommonInitStruct.Multimode=LL_ADC_MULTI_DUAL_REG_INTERL;/* 仅常规交替模式 */
ADC_CommonInitStruct.MultiDMATransfer=LL_ADC_MULTI_REG_DMA_RES_8B;/*双通道混合DMA 8位数据模式*/
ADC_CommonInitStruct.MultiTwoSamplingDelay=LL_ADC_MULTI_TWOSMP_DELAY_3CYCLES_5;//双重模式触发延迟
LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC1), &ADC_CommonInitStruct);

        /* ADC1初始化 */
/* 退出掉电模式 */
LL_ADC_DisableDeepPowerDown(ADC1);
/* 启动内部稳压器 */
LL_ADC_EnableInternalRegulator(ADC1);
/* 等待内部稳压器启动 */
wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US * (SystemCoreClock / (100000 * 2))) / 10);
while(wait_loop_index != 0)
{
wait_loop_index--;
}

/* 配置规则通道 */
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_5);
LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_5, LL_ADC_SAMPLINGTIME_2CYCLES_5);
LL_ADC_SetChannelSingleDiff(ADC1, LL_ADC_CHANNEL_5, LL_ADC_SINGLE_ENDED);
/* 通道预选设置,这个很关键 */
ADC1->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_CHANNEL_5) & 0x1FUL));

/* 启动校准 */
LL_ADC_StartCalibration(ADC1, LL_ADC_CALIB_OFFSET, LL_ADC_SINGLE_ENDED);
/* 等待校准完成 */
while(LL_ADC_IsCalibrationOnGoing(ADC1) != 0UL);

/* 初始化采样定时器 */
ADC_TRIG_TIM6_Init(Prescaler,ARR);
}

DUAL_REG_INTERL_TIM6_ADC12_8B_Init(1,300,(unsigned int *)(unsigned int)OSC_ADC_ConvertedValue, 0xFFFF);//PB1 INP5 双通道倍速采



LL_ADC_Enable(ADC2);
while(LL_ADC_IsActiveFlag_ADRDY(ADC2) != SET);
LL_ADC_REG_StartConversion(ADC2);

LL_ADC_Enable(ADC1);
while(LL_ADC_IsActiveFlag_ADRDY(ADC1) != SET);
LL_ADC_REG_StartConversion(ADC1);

LL_TIM_EnableCounter(TIM6)
/**

* @brief  System Clock Configuration
* The system Clock is configured as follow :
  * System Clock source            = PLL (HSE)

    * SYSCLK(Hz)                     = 280000000 (CPU Clock)

      * HCLK(Hz)                       = 280000000 (Bus matrix and AHBs Clock)

        * AHB Prescaler                  = 1

          * CD APB3 Prescaler              = 2 (APB3 Clock  140MHz)

            * CD APB1 Prescaler              = 2 (APB1 Clock  140MHz)

              * CD APB2 Prescaler              = 2 (APB2 Clock  140MHz)

                * SRD APB4 Prescaler             = 2 (APB4 Clock  140MHz)

                  * HSE Frequency(Hz)              = 8000000

                    * PLL_M                          = 4

                      * PLL_N                          = 280

                        * PLL_P                          = 2

                          * PLL_Q                          = 4

                            * PLL_R                          = 2

                              * VDD(V)                         = 3.3

                                * Flash Latency(WS)              = 6

                                  * @param  None
                                  * @retval None
                                    */
                                /**

                                * @brief System Clock Configuration
                                * @retval None
                                  */
                                  void SystemClock_Config(void)
                                  {

                                /*AXI clock gating */
                                RCC->CKGAENR = 0xFFFFFFFF;

                                LL_FLASH_SetLatency(LL_FLASH_LATENCY_6);
                                while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_6)
                                {
                                }
                                LL_PWR_ConfigSupply(LL_PWR_LDO_SUPPLY);
                                LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE0);
                                while (LL_PWR_IsActiveFlag_VOS() == 0)
                                {
                                }

                                LL_RCC_HSI48_Enable();//使能内部48Mhz时钟

                                /* Wait till HSI48 is ready */
                                while(LL_RCC_HSI48_IsReady() != 1)
                                {

                                }
                                LL_RCC_LSI_Enable();//使能内部低速时钟32KHz

                                /* Wait till LSI is ready */
                                while(LL_RCC_LSI_IsReady() != 1)
                                {

                                }

                                //  LL_PWR_EnableBkUpAccess();
                                //  LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_MEDIUMLOW);
                                //  LL_RCC_LSE_Enable();//使能外部低速时钟32768Hz

                                //   /* Wait till LSE is ready */
                                //  while(LL_RCC_LSE_IsReady() != 1)
                                //  {

                                //  }

                                LL_RCC_HSE_Enable();//使能外部高速时钟8MHz
                                /* Wait till HSE is ready */
                                while(LL_RCC_HSE_IsReady() != 1)
                                {

                                }

                                LL_RCC_PLL_SetSource(LL_RCC_PLLSOURCE_HSE);//PLL时钟源为外部高速时钟
                                LL_RCC_PLL1P_Enable();//使能PLL1P
                                LL_RCC_PLL1Q_Enable();//使能PLL1Q
                                LL_RCC_PLL1R_Enable();//使能PLL1R
                                LL_RCC_PLL1_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_2_4);
                                LL_RCC_PLL1_SetVCOOutputRange(LL_RCC_PLLVCORANGE_WIDE);
                                LL_RCC_PLL1_SetM(4);//HSE/4=2MHz
                                LL_RCC_PLL1_SetN(280);//2MHz*280=560MHz
                                LL_RCC_PLL1_SetP(2);//560MHz/2=280MHz  PLL1时钟280MHz CPU SYSTICK
                                LL_RCC_PLL1_SetQ(4);//560MHz/4=140MHz
                                LL_RCC_PLL1_SetR(2);//560MHz/2=280MHz
                                LL_RCC_PLL1_Enable();//使能PLL1时钟

                                /* Wait till PLL is ready */
                                while(LL_RCC_PLL1_IsReady() != 1)
                                {
                                }

                                /* Intermediate AHB prescaler 2 when target frequency clock is higher than 80 MHz */
                                LL_RCC_SetAHBPrescaler(LL_RCC_AHB_DIV_2);  //   /2=140MHz(APB1 APB2 APB3 APB4)

                                LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL1);//系统时钟源为PLL1=280MHz

                                /* Wait till System clock is ready */
                                while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL1)
                                {

                                }
                                LL_RCC_SetAHBPrescaler(LL_RCC_AHB_DIV_1);//AXI AHB时钟预分频1  280MHz AHB1 AHB2 AHB3 AHB4
                                LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);//APB1时钟预分频2  140MHz  APB1_TIME*2
                                LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_2);//APB2时钟预分频2  140MHz  APB2_TIME*2
                                LL_RCC_SetAPB3Prescaler(LL_RCC_APB3_DIV_2);//APB3时钟预分频2  140MHz
                                LL_RCC_SetAPB4Prescaler(LL_RCC_APB4_DIV_2);//APB4时钟预分频2  140MHz
                                LL_SetSystemCoreClock(280000000);//系统时钟 280MHz

                                /* Update the time base */
                                if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK)
                                {
                                Error_Handler();
                                }
                                LL_CRS_SetSyncDivider(LL_CRS_SYNC_DIV_1);
                                LL_CRS_SetSyncPolarity(LL_CRS_SYNC_POLARITY_RISING);
                                LL_CRS_SetSyncSignalSource(LL_CRS_SYNC_SOURCE_LSE);
                                LL_CRS_SetReloadCounter(__LL_CRS_CALC_CALCULATE_RELOADVALUE(48000000,32768));
                                LL_CRS_SetFreqErrorLimit(34);
                                LL_CRS_SetHSI48SmoothTrimming(32);
                                }

                                /**

                                * @brief Peripherals Common Clock Configuration
                                * @retval None
                                  */
                                  void PeriphCommonClock_Config(void)
                                  {
                                  LL_RCC_PLL2P_Enable();//使能PLL2P 50MHz to ADC
                                  LL_RCC_PLL2_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_2_4);
                                  LL_RCC_PLL2_SetVCOOutputRange(LL_RCC_PLLVCORANGE_WIDE);
                                  LL_RCC_PLL2_SetM(4);//HSE/4=2MHz
                                  LL_RCC_PLL2_SetN(125);//2MHz*125=250MHz
                                  LL_RCC_PLL2_SetP(5);//250MHz/5=50MHz
                                  LL_RCC_PLL2_SetQ(1);//250MHz/1=250MHz
                                  LL_RCC_PLL2_SetR(1);//250MHz/1=250MHz
                                  LL_RCC_PLL2_Enable();//使能PLL2外设时钟

                                /* Wait till PLL is ready */
                                while(LL_RCC_PLL2_IsReady() != 1)
                                {
                                }

                                LL_RCC_PLL3P_Enable();//使能PLL3P 160MHz to SPI
                                LL_RCC_PLL3Q_Enable();//使能PLL3Q 48MHz to USB
                                LL_RCC_PLL3R_Enable();//使能PLL3R 96MHz to I2C
                                LL_RCC_PLL3_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_2_4);
                                LL_RCC_PLL3_SetVCOOutputRange(LL_RCC_PLLVCORANGE_WIDE);
                                LL_RCC_PLL3_SetM(4);//HSE/2=2MHz
                                LL_RCC_PLL3_SetN(240);//2MHz*240=480MHz
                                LL_RCC_PLL3_SetP(3);//480MHz/3=160MHz
                                LL_RCC_PLL3_SetQ(10);//480MHz/10=48MHz
                                LL_RCC_PLL3_SetR(12);//480MHz/12=40MHz
                                LL_RCC_PLL3_Enable();//使能PLL3外设时钟

                                /* Wait till PLL is ready */
                                while(LL_RCC_PLL3_IsReady() != 1)
                                {
                                }

                                }
收藏 评论5 发布时间:2026-1-3 11:44

举报

5个回答
wenyangzeng 回答时间:前天 14:39

应该是采用ADC连续采样+DMA模式,而不是通过定时器触发模式才能达到较高采样速度吧?

onlap 回答时间:前天 17:38

wenyangzeng 发表于 2026-1-3 14:39
应该是采用ADC连续采样+DMA模式,而不是通过定时器触发模式才能达到较高采样速度吧?
...

ADC+DMA测试速度也是3.5MSPS

butterflyspring 回答时间:昨天 09:44
可以验证一下各个时钟是否是期望的配置频率,看看有没有哪个时钟没有达到期望的频率。


onlap 回答时间:昨天 13:59

验证过输入频率180Hz正确 开始测试是随着tim6的频率上升,采样率也同步上升 ,说明时钟正确,只是到大约3.5M之后不上升,问题可能不在时钟

butterflyspring 回答时间:昨天 14:43
onlap 发表于 2026-1-4 13:59
[md]验证过输入频率180Hz正确 开始测试是随着tim6的频率上升,采样率也同步上升 ,说明时钟正确,只是到大 ...

最好量测一下实际ADC 的时钟是否是50Mhz,否则工作的速度就会有差异。

STM32H7A3RGT6 ADC CLOCK 50M.PNG




所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版