【前言】
在ADC获取转换时,如果需要实现快速转换,如果使用poll来读取,那么需要浪费很多的CPU的资源,本篇记录如果配置ADC+DMA进行数据搬运,快速读取ADC并完成数值的平均。
【STM32CubeMX配置】
1、stm32F373只有一路ADC,所以只需要配置好通道就行了。如下图所示,使能通道1,其余参数如图所示。

2、打开DMA配置,添加一个通道,方向为从外设到内存,字节由于我们使用的是12位的ADC所以选择半字节16bit。

【代码实现】
生成代码后,我们在main中添加启动HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, ADC_BUF_LEN);
然后在实现自定义的回调函数:
/* USER CODE BEGIN 1 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
	//Running Point average, values in array may change during.
	float avrage = 0;
	uint8_t i;
	for(i = 0; i < ADC_BUF_LEN; i++){
		avrage += adc_buf[i];
	}
	//MAX 15 VOLTS
	U1_printf("ADC1_channle1 value:%.2f\r\n",avrage /ADC_BUF_LEN);
	HAL_ADC_Stop_DMA(&hadc1);
	
}
/* USER CODE END 1 */【验证】
下载到开发板后,就可以实现打印出采集到的数据了。


 
					
				
 
			
			
			
						
			 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

