|
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) { } } |
关于硬件ECC
LPTIM5的事件Lptim5_ait作为14号Trigger input输入到DMAMUX2 Request generator触发BDMA未生成中断问题
选型,实现USB转2路CAN功能,目前看到STM32F407和STM32H750都有2路CAN,都能实现功能吗?
关于NAND FLASH加LittleFS的方案
DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)
STM32F103C8T6是否支持TIM3的PWM边沿触发AD采集
【经验分享】STM32H7 DMA+UART不定长接收实战:解决缓存溢出与数据错位问题
STM32H747 D2域的问题
官方有没有成熟的FTL
CUBEMX配置G474串口DMA传输,为什么接收正常发送不了?
微信公众号
手机版
应该是采用ADC连续采样+DMA模式,而不是通过定时器触发模式才能达到较高采样速度吧?
ADC+DMA测试速度也是3.5MSPS
验证过输入频率180Hz正确 开始测试是随着tim6的频率上升,采样率也同步上升 ,说明时钟正确,只是到大约3.5M之后不上升,问题可能不在时钟
最好量测一下实际ADC 的时钟是否是50Mhz,否则工作的速度就会有差异。