STM32_H750_ADC总结

DMA中断方式

STM32cubemx的一些基础配置
注意H750引脚,很多引脚有后缀例如PC3_C(不是PC3)

ADC和DMA都不是连续模式
初始化开启DMA传输

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
判断flag变量u,打印adc转换数值
DMA部分选择DMA,不要选择BDMA(网上查了下BDMA只能用在D3域)

连续转换模式,将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单通道 交替采集
双重 ADC 交替模式,只适用于 ADC1 和 ADC2。双重 ADC 交替模式是针对同一通道的使用两个 ADC(ADC1 作为主 ADC, ADC2 作为从 ADC)交叉采集,就是在 ADC1 采样完等几个时钟周期后 ADC2 开始采样,此时 ADC1 处在转换阶段,当ADC2 采样完成再等几个时钟周期后 ADC1 就进行采样,充分利用转换阶段时间达到增快采样速度的效果

HAL_ADCEx_MultiModeStart_DMA(&ADC_Handle, (uint32_t*)&ADC_ConvertedValue, 1);//开启交替采集

使用 ADC_MultiModeTypeDef 结构体变量ADC_multimode 来配置 ADC 为双重 ADC 交替模式、 3 个周期的采样延迟、数据格式选择 32 位数据格式。(DMA设置为32位)来源:https://www.icode9.com/content-4-816701.html

(0)

相关推荐