DMA中断方式STM32cubemx的一些基础配置 HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1); 回调函数将flag变量u置1 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle) { u=1; y ; } 主函数 x ; printf("x=%d\r\n",x); if(x%5==0) {HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1);} HAL_Delay(1000); if(u==1) { ADC_vol = (float)(ADC_ConvertedValue*3.3/65536); printf("y=%d\r\n",y); u=0; printf("\r\n The current AD value = 0xX \r\n", ADC_ConvertedValue); printf("\r\n The current AD value = %f V \r\n", ADC_vol); } 主函数每5s开启一次ADC_DMA 连续转换模式,将ADC连续转换打开,DMA循环打开 HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1); while (1) { HAL_Delay(1000); if(u==1) { ADC_vol = (float)(ADC_ConvertedValue*3.3/65536); u=0; printf("\r\n The current AD value = 0xX \r\n", ADC_ConvertedValue); printf("\r\n The current AD value = %f V \r\n", ADC_vol); } } ADC 和DMA一直在转换,只需要打印电压值。 中断方式使用下面两个函数开启和关闭ADC中断 HAL_ADC_Start_IT(&ADC_Handle); HAL_ADC_Stop_IT(&ADC_Handle); 多通道DMA的ADC转换和单通道的区别是() HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_ConvertedValue, 4); 双重ADC单通道 交替采集 HAL_ADCEx_MultiModeStart_DMA(&ADC_Handle, (uint32_t*)&ADC_ConvertedValue, 1);//开启交替采集
|
|