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)