初学stm32 --- ADC多通道采集

与单通道采集,主要区别就是设置转换通道个数、开启扫描模式、每个ADC通道和相应的GPIO都要进行配置

cpp 复制代码
void adc_dma_init(uint32_t DstAddress)
{
    ADC_ChannelConfTypeDef adc_channel_config_struct;
    
    dma_for_adc_init();
    
    g_adc_handle_struct.Instance = ADC1;                        /*是指ADC模块基地址为ADC1*/
    g_adc_handle_struct.Init.DataAlign = ADC_DATAALIGN_RIGHT;   /*选择数据右对齐*/
    g_adc_handle_struct.Init.ScanConvMode = ADC_SCAN_ENABLE;            /*开启扫描模式*/
    g_adc_handle_struct.Init.ContinuousConvMode = ENABLE;      /*开启连续模式*/
    g_adc_handle_struct.Init.NbrOfConversion = 6;               /*设置转换通道的数目为1*/
    g_adc_handle_struct.Init.DiscontinuousConvMode = DISABLE;   /*不开启间断模式*/
    g_adc_handle_struct.Init.NbrOfDiscConversion = 0;           /*配置间断模式的规则通道数目为0*/       
    g_adc_handle_struct.Init.ExternalTrigConv = ADC_SOFTWARE_START; /*选择软件触发转换*/

    HAL_ADC_Init(&g_adc_handle_struct);                     /*初始化ADC*/
    
    HAL_ADCEx_Calibration_Start(&g_adc_handle_struct);      /*校准ADC*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_0;              /*设置ADC通道为通道0*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_1;            /*设置为第一个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_1;              /*设置ADC通道为通道1*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_2;            /*设置为第二个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_2;              /*设置ADC通道为通道2*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_3;            /*设置为第三个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_3;              /*设置ADC通道为通道3*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_4;            /*设置为第四个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_4;              /*设置ADC通道为通道4*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_5;            /*设置为第五个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    
    adc_channel_config_struct.Channel = ADC_CHANNEL_5;              /*设置ADC通道为通道5*/
    adc_channel_config_struct.Rank = ADC_REGULAR_RANK_6;            /*设置为第六个转换顺序*/
    adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;    /*设置采样周期为239.5个ADC时钟周期*/
    HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
    

    HAL_NVIC_SetPriority(DMA1_Channel1_IRQn,2,2);
    HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
    
    HAL_DMA_Start_IT(&g_dma_handle_for_adc_struct,(uint32_t)&ADC1->DR,DstAddress,0);
    HAL_ADC_Start_DMA(&g_adc_handle_struct,&DstAddress,0);
}
相关推荐
晊晌_h4 小时前
嵌入式硬件——51单片机
单片机·mcu·51单片机·位运算·硬件基础
Rocktech_ruixun9 小时前
机器人本地跑LLM大模型对主板硬件有什么要求?瑞迅科技RK3588/3568方案选型解析
人工智能·科技·嵌入式硬件·机器人·边缘计算
天空'之城11 小时前
单片机基础核心知识点汇总(三十四)
单片机·嵌入式硬件
Horn Still Sounds12 小时前
51单片机入门:硬件基础、位运算、数码管动态显示完整梳理
嵌入式硬件·mongodb·51单片机
三佛科技-1873661339713 小时前
24W-48W隔离双绕组非标自供电芯片LP3718CD(电路原理图)
单片机·嵌入式硬件
糖糖单片机设计15 小时前
基于 STM32 的小型鸟类宠物繁殖系统
stm32·嵌入式硬件·宠物
电子元器件选型哥17 小时前
一文讲清LLC谐振电路工作原理
单片机·嵌入式硬件·硬件工程师·电子元器件·器件选型
HUI-47418 小时前
EG1162|SOP‑16 高压同步整流降压控制器,最高 600V 输入,大电流 5V 输出优选
嵌入式硬件·硬件工程
POMAGTOR18 小时前
【5G 通讯 POGOPIN 弹簧顶针连接器解决方案】
网络·嵌入式硬件·5g
ZLG_zhiyuan18 小时前
测试方案 | 从“000”到“111”,高效完成100BASE-TX以太网眼图测试
单片机·嵌入式硬件