| 配置ADC和DMA 确保ADC配置为使用定时器触发,并且DMA配置正确。以下是关键配置步骤:
 
 配置ADC为外部触发模式。
 配置DMA传输。
 配置DMA的中断。
 
 void ADC_Config(void) {
 ADC_HandleTypeDef hadc;
 ADC_ChannelConfTypeDef sConfig;
 DMA_HandleTypeDef hdma_adc;
 
 __HAL_RCC_ADC1_CLK_ENABLE();
 __HAL_RCC_DMA1_CLK_ENABLE();
 
 // ADC configuration
 hadc.Instance = ADC1;
 hadc.Init.ScanConvMode = ENABLE;
 hadc.Init.ContinuousConvMode = DISABLE;
 hadc.Init.DiscontinuousConvMode = DISABLE;
 hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_TRGO;
 hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
 hadc.Init.NbrOfConversion = 4;
 
 HAL_ADC_Init(&hadc);
 
 // Configure ADC channels
 sConfig.Channel = ADC_CHANNEL_0;
 sConfig.Rank = 1;
 sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES5;
 HAL_ADC_ConfigChannel(&hadc, &sConfig);
 
 sConfig.Channel = ADC_CHANNEL_1;
 sConfig.Rank = 2;
 HAL_ADC_ConfigChannel(&hadc, &sConfig);
 
 sConfig.Channel = ADC_CHANNEL_2;
 sConfig.Rank = 3;
 HAL_ADC_ConfigChannel(&hadc, &sConfig);
 
 sConfig.Channel = ADC_CHANNEL_3;
 sConfig.Rank = 4;
 HAL_ADC_ConfigChannel(&hadc, &sConfig);
 
 // DMA configuration
 hdma_adc.Instance = DMA1_Channel1;
 hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY;
 hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE;
 hdma_adc.Init.MemInc = DMA_MINC_ENABLE;
 hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
 hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
 hdma_adc.Init.Mode = DMA_CIRCULAR;
 hdma_adc.Init.Priority = DMA_PRIORITY_HIGH;
 
 HAL_DMA_Init(&hdma_adc);
 
 __HAL_LINKDMA(&hadc, DMA_Handle, hdma_adc);
 
 HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
 
 HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcBuffer, 4 * 50);
 }
 
 void DMA1_Channel1_IRQHandler(void) {
 HAL_DMA_IRQHandler(&hdma_adc);
 }
 
 |