登录/注册

stm32f103多路ad采集

更多

在STM32F103系列微控制器上实现多路ADC采集,可以按照以下步骤进行:

1. 硬件配置

2. 软件配置步骤

2.1 初始化ADC

#include "stm32f10x.h"

void ADC_Config(void) {
    ADC_InitTypeDef ADC_InitStructure;

    // 使能ADC1时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    // ADC基本配置
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;          // 独立模式
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;                // 启用扫描模式
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;          // 连续转换模式
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 软件触发
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;      // 数据右对齐
    ADC_InitStructure.NbrOfChannel = 4;                         // 要转换的通道数量
    ADC_Init(ADC1, &ADC_InitStructure);

    // 设置规则组通道(示例使用4个通道)
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);  // PA0
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);  // PA1
    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);  // PA2
    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_55Cycles5);  // PA3

    // 使能ADC
    ADC_Cmd(ADC1, ENABLE);

    // ADC校准
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));
}

2.2 配置DMA(推荐用于多路采集)

#define ADC_BUFFER_SIZE  4  // 与通道数量一致
uint16_t ADC_ConvertedValue[ADC_BUFFER_SIZE];

void DMA_Config(void) {
    DMA_InitTypeDef DMA_InitStructure;

    // 使能DMA时钟
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

    // DMA通道配置(ADC1使用DMA1通道1)
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = ADC_BUFFER_SIZE;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;        // 循环模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);

    // 启用DMA
    DMA_Cmd(DMA1_Channel1, ENABLE);

    // 使能ADC的DMA请求
    ADC_DMACmd(ADC1, ENABLE);
}

2.3 启动ADC转换

// 在完成初始化后启动转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

3. 数据读取

4. 注意事项

  1. GPIO配置:

    // 启用GPIOA时钟并配置模拟输入模式
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
  2. 采样时间选择:根据信号源阻抗调整ADC_SampleTime参数

  3. 电压计算:

    float voltage = (float)raw_value * 3.3f / 4095; // 12位分辨率,3.3V参考电压
  4. 抗干扰措施:

    • 在模拟输入端添加RC滤波
    • 避免高频数字信号干扰
    • 必要时使用软件滤波算法
  5. 多ADC协同:如果需要同时采集更多通道,可以启用ADC2和ADC3(部分型号支持)

5. 扩展建议

建议结合STM32CubeMX进行图形化配置,可自动生成初始化代码。不同型号的STM32F103可能存在差异,具体配置请参考对应型号的参考手册和数据手册。

STM32F103VET6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

ARM系列STM32F103芯片的解密方法

本文介绍ARM系列STM32F103芯片的解密方法,其内核是Cortex-M3,内存从16K-512K都有。

2024-02-28 11:20:34

stm32f103 flash模拟eeprom

STM32F103是意法半导体(STMicroelectronics)推出的一款32位单片机系列,该系列芯片具有高性能和丰富的外设接口,广泛应用于工业控制、消费电子、汽车电子等领域。其中

2024-01-09 11:21:36

用于stm32f103 A/D信号采集的处理

用于stm32f103 A/D信号采集的处理

资料下载 jf_26042422 2023-08-01 18:13:00

STM32F103用户使用手册

STM32F103用户使用手册

资料下载 倚東聽海 2021-12-06 09:47:21

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32f103使用的DAC正弦波

基于STM32f103使用的DAC正弦波

资料下载 shyshyshy 2021-08-02 10:05:00

学习STM32F103的ADC功能

三勺最近在学习STM32F103的ADC功能,居然连最简单的独立模式的单通道的电压采集都不能实现,这就不能忍了,这是对智商的侮辱。

2023-10-24 16:06:03

ARM系列STM32F103芯片的解密方法

破解STM32F103芯片的方法

2023-09-19 09:03:40

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

STM32F103 GPIO内部电路图讲解

STM32F103 GPIO内部电路图讲解

2023-02-01 16:32:14

基于STM32F103单片机的矩阵按键设计

本实验使用STM32F103单片机,主题代码通用的。

2022-12-09 17:18:46

采用STM32F103硬件ADC功能进行光照强度采集

光照强度采集ADC方式采集,STM32F103本身自带有硬件ADC功能。将采集

2022-05-31 11:32:52

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

7天热门专题 换一换
相关标签