STM32:HAL多通道ADC数据采集

1、配置ADC,设置5个通道采集

2、使能DMA设置为循环模式

 生成工程后编写函数

1、校准ADC,开启DMA接收,在main函数初始化部分调用

#define ADC_MAX_NUM  5
#define BTN_BUFF_LEN 100
static uint16_t dma_adc_data[BTN_BUFF_LEN * ADC_MAX_NUM];
 1 /**
 2  * @brief 校准adc,开启DMA接收
 3  *
 4  */
 5 void Adc_Init(void)
 6 {
 7     // 校准
 8     HAL_ADCEx_Calibration_Start(&hadc1);
 9     HAL_ADC_Start_DMA(&hadc1, (uint32_t *)dma_adc_data, BTN_BUFF_LEN * ADC_MAX_NUM);
10 
11 }

/**DMA采集的数据存放buff,采集5个通道,每个通道采集BTN_BUFF_LEN次
* dma_adc_data数据存放方式:HAL_ADC_Start_DMA(&hadc1, (uint32_t *)dma_adc_data, BTN_BUFF_LEN * ADC_MAX_NUM);
* 数据采集u32类型,dma_adc_data为u16类型,
* 第1个u32:通道1和通道2
* 第2个u32:通道3和通道4
* 第3个u32:通道5和通道1
* 第4个u32:通道2和通道3
* 第5个u32:通道4和通道5
*/

dma_adc_data中,第0、5、10、15...个数据为第1通道数据,可求取平均数滤波获取当前ADC值,经测试,无通道间数据干扰的问题

/**DMA采集完成标志 */
uint8_t DMA_RECEIVE_OVER = 0;
/**获取的数据存放最大值和最小值 */
static uint16_t adc_max, adc_min;
/**数据累加 */
static uint32_t adc_add;
uint16_t ADC_Values[ADC_MAX_NUM] = {0};
/**
 * @brief Get the Adc Value object 处理原始数据,获取5个通道的数据
 */
static void Get_Adc_Value(void)
{
    if (DMA_RECEIVE_OVER == 1) // DMA数据采集完处理数据
    {
        DMA_RECEIVE_OVER = 0;

        for (uint8_t adc_channel = 0; adc_channel < ADC_MAX_NUM; adc_channel++)
        {
            adc_max = 0;
            adc_add = 0;
            adc_min = 0xffff;
            for (uint16_t i = 0; i < BTN_BUFF_LEN; i++)
            {
                adc_add += dma_adc_data[ADC_MAX_NUM * i + adc_channel];
                adc_max = adc_max > dma_adc_data[ADC_MAX_NUM * i + adc_channel] ? adc_max : dma_adc_data[ADC_MAX_NUM * i + adc_channel];
                adc_min = adc_min < dma_adc_data[ADC_MAX_NUM * i + adc_channel] ? adc_min : dma_adc_data[ADC_MAX_NUM * i + adc_channel];
            }
            ADC_Values[adc_channel] = (adc_add - adc_max - adc_min) / (BTN_BUFF_LEN - 2);
        }
        
    }
}

/**
 * @brief DMA采集完成中断服务函数
 *
 * @param hadc ADC句柄
 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    // 采集完成标志位置1
    DMA_RECEIVE_OVER = 1;
}

 

posted @ 2024-04-16 18:49  易安yan  阅读(3111)  评论(0)    收藏  举报