uint8_t Adc1ConvEnd=0;
uint8_t Adc2ConvEnd=0;
int main(void)
{
/* USER CODE BEGIN 1 */
uint16_t ADC_Value[4];
uint16_t VBusValue;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
/* USER CODE BEGIN 2 */
MX_TIM1_Init();
HAL_TIM_Base_Start(&htim1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
// 用来触发ADC1采样
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
// 用来触发ADC2采样
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
MX_ADC1_Init();
MX_ADC2_Init();
// ADC1自动校准
if(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK )
{
Error_Handler();
}
// ADC2自动校准
if(HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK )
{
Error_Handler();
}
// ADC1使用DMA方式采样
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_Value, 4);
// ADC2使用中断方式采样
HAL_ADC_Start_IT(&hadc2);
/* 串口3用于调试打印信息 */
MX_USART3_UART_Init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
if(Adc1ConvEnd)
{
Adc1ConvEnd=0;
uint16_t averageValue = 0;
for(int i = 0; i < 4; i++)
{
averageValue += ADC_Value[i];
}
averageValue/=4;
printf("averageValue:%d\r\n",averageValue);
}
if(Adc2ConvEnd)
{
Adc2ConvEnd=0;
VBusValue=HAL_ADC_GetValue(&hadc2);
HAL_ADC_Start_IT(&hadc2);
printf("VBusValue:%d\r\n",VBusValue);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
//ADC回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc==&hadc1)
{
Adc1ConvEnd=1;
}
if(hadc==&hadc2)
{
Adc2ConvEnd=1;
}
}
双ADC的使用 PWM触发ADC采样 ADC中断和DMA ADC自动校准——STM32CubeMX
于 2024-03-04 09:35:49 首次发布