登录/注册

MM32F031C8T 多通道ADC例程

更多

以下是基于MM32F031C8T微控制器的多通道ADC采样例程,采用轮询方式实现,适用于需要同时采集多个模拟信号的场景(如温度、电压等)。


步骤说明

  1. 开启时钟:使能ADC和GPIO端口时钟。
  2. 配置GPIO:将ADC通道对应的引脚设为模拟输入模式。
  3. 初始化ADC参数:设置扫描模式、连续转换、数据对齐等。
  4. 配置规则组通道顺序:定义多通道的转换顺序和采样时间。
  5. 校准ADC:执行校准以提高转换精度。
  6. 启动转换并读取数据:轮询等待转换完成,读取各通道数据。

代码示例

#include "mm32_device.h"
#include "mm32f0xx_adc.h"
#include "mm32f0xx_gpio.h"
#include "mm32f0xx_rcc.h"

#define ADC_CHANNEL_NUM 3   // 使用3个通道(示例:通道0、1、2)

uint16_t adc_values[ADC_CHANNEL_NUM]; // 存储ADC转换结果

void ADC_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct;
    ADC_InitTypeDef ADC_InitStruct;

    // 1. 开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

    // 2. 配置GPIO为模拟输入(假设通道0-PA0, 通道1-PA1, 通道2-PA2)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 3. 初始化ADC参数
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStruct.ADC_ScanMode = ENABLE;       // 扫描模式
    ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; // 连续转换
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
    ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 软件触发
    ADC_Init(ADC1, &ADC_InitStruct);

    // 4. 配置规则组通道顺序和采样时间
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41_5Cycles); // 第1个转换:通道0
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_41_5Cycles); // 第2个转换:通道1
    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_41_5Cycles); // 第3个转换:通道2

    // 5. ADC校准
    ADC_Cmd(ADC1, ENABLE);
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));

    // 6. 启动转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

int main(void) {
    ADC_Init();

    while(1) {
        // 等待所有通道转换完成
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

        // 读取各通道数据
        adc_values[0] = ADC_GetConversionValue(ADC1); // 读取通道0
        adc_values[1] = ADC_GetConversionValue(ADC1); // 读取通道1
        adc_values[2] = ADC_GetConversionValue(ADC1); // 读取通道2

        // 在此处理ADC数据(如通过串口发送或算法计算)
        // ...
    }
}

关键配置说明

  1. 通道顺序:通过ADC_RegularChannelConfig设置通道转换顺序(参数2为转换序号)。
  2. 采样时间ADC_SampleTime_41_5Cycles表示采样周期,可根据信号源阻抗调整(阻抗高则延长采样时间)。
  3. 连续转换模式:使能后ADC会自动重新启动转换,无需手动触发。

注意事项

如有进一步问题(如DMA传输或具体应用场景),可继续补充说明!

使用STM32L031F6在hal库下进行ADC+DMA通道采集,采集的电压值始终为0的原因?

使用STM32L031F6芯片 在hal库下进行ADC+DMA多通道采集

2024-03-14 07:06:55

MM32F3270 ADC注入通道

MM32F3270 ADC注入通道

2023-09-27 15:59:56

如何采用STM32F103C8T6的通道进行adc采集呢

如何采用STM32F103C8T6的通道进行adc采集呢?求解

2021-12-13 07:31:21

AN0051 从MM32F031移植到MM32F0140(中文版)

AN0051 从MM32F031移植到MM32F0140(中文版)

资料下载 ah此生不换 2023-02-22 18:49:25

APM32F030C8T6_ADC_ADC Vref参考电压数值读取出错

APM32F030C8T6_ADC_ADC Vref参考电压数值读取出错

资料下载 33391 2022-11-09 21:04:01

APM32F030C8T6_ADC_ADC初始化出现异常

APM32F030C8T6_ADC_ADC初始化出现异常

资料下载 张亮 2022-11-09 21:03:20

分享一款可兼容替换STM32F030C8T6的灵动MM32F031C8T6

通用MCU MM32F031C8T6使用高性能的ARM内核M0的32位微控制器,工作频率最高可达72兆赫兹,内置高速存储器,拥有丰富的增强型I/O端口和外设连接到外部总线。包含1个12位的ADC、1

资料下载 佚名 2021-11-26 17:21:14

STM32F030C8T6替换料灵动微MM32F031C8T6

),以及广泛的增强型外设和I / O。所有器件都提供标准的通信接口(多达两个I 2 C,多达两个SPI和多达六个USART),一个12位ADC,七个通用16位定时器和一个高级控制PWM定时器。意法半导体MCU STM

资料下载 远不及你 2021-11-26 16:21:15

MCU MM32F031C8T6的工作频率及其工作模式

通用MCU MM32F031C8T6使用高性能的ARM内核M0的32位微控制器,工作频率最高可达72兆赫兹,内置高速存储器,拥有丰富的增强型I/O端口和外设连接到外部总线。包含1个12位的ADC、1

2021-12-09 06:26:18

怎样去编写STM32F030C8T6 通道ADC采集的程序

怎样去编写STM32F030C8T6 多通道ADC采集的程序?

2021-10-19 08:40:57

MM32F103 ADC+DMA 通道采样

MM32F103 ADC+DMA 多通道采样请问软件如何配置?

2021-08-27 14:48:13

灵动微MM32SPIN25PF与MM32F031C8T6产品具有哪些特性?

灵动微MM32SPIN25PF产品具有哪些特性?灵动微MM32F031C8T6产品具有哪些特性?

2021-04-19 06:15:59

MM32F031K6T6产品特性介绍

STM32F030K6T6兼容替换灵动MM32F031K6T6

2021-01-01 07:06:22

MM32F031C8T6产品特性有哪些

MM32F031C8T6产品特性

2020-12-30 07:02:04

STM32F030C8T6兼容替换型号MM32F031C8T6介绍

STM32F030C8T6兼容替换型号MM32F031C8T6

2020-12-30 06:16:18
7天热门专题 换一换
相关标签