【前言】
在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 */
【验证】
下载到开发板后,就可以实现打印出采集到的数据了。