STM32 ADC多通道DMA采集实战:从配置到避坑指南

STM32 ADC多通道DMA采集:原理、配置与实战避坑指南 模数转换器(ADC)是嵌入式系统中将模拟信号转换为数字量的核心外设,其工作原理基于逐次逼近或积分等技术,将连续的电压信号离散化为微控制器可处理的数字值。在数据采集场景中,ADC的性能直接决定了系统精度与实时性。传统轮询或中断方式在高频多通道采样时会导致CPU负载过重,影响系统整体效率。直接存储器访问(DMA)技术通过硬件控制器在外设与内存间直接搬运数据,无需CPU介入,从而解放了处理器资源。这种ADC与DMA的协同工作模式,构成了高效数据采集系统的技术基石,其价值在于显著提升吞吐量、降低系统延迟,并确保数据 阅读详情

1. STM32 ADC多通道DMA采集的核心价值

在实际的嵌入式开发中,我们经常需要同时采集多个模拟信号,比如同时读取四个灰度传感器的值来让智能小车实现循迹功能。如果你用传统的轮询方式逐个采集,CPU会被完全占用,根本做不了其他事情。而使用ADC多通道配合DMA采集,就像请了个专职助理——ADC负责转换模拟信号,DMA负责把转换结果自动搬运到内存,CPU只需要偶尔过来看看数据就行,解放了双手去做更重要的任务。

我刚开始接触STM32的时候,最头疼的就是配置多通道ADC和DMA。官方手册写得过于技术化,网上的教程又零零碎碎,配置起来总是遇到各种奇怪的问题。后来经过多个项目的实战,我终于摸清了其中的门道,今天就把这些经验毫无保留地分享给大家,让你少走弯路。

多通道DMA采集的核心优势在于高效和实时。想象一下,如果你要同时监测4个温度传感器的数据,采用轮询方式读取,每个通道转换需要十几微秒,加上代码执行时间,等读完第4个通道,第一个通道的数据可能已经变化了。而用DMA方式,所有通道的转换结果会自动按顺序存储到数组中,数据几乎是在同一时间窗口内采集的,保证了数据的一致性。

2. CubeMX配置详解:一步一图跟着做

STM32CubeMX真是ST微电子给开发者的一份大礼,图形化配置让初始化变得简单多了。不过里面的选项太多了,如果理解不透彻,配置错了会导致各种奇怪的问题。下面我带大家一步步配置一个4通道ADC+DMA的实例。

引脚配置阶段:首先找到你要使用的ADC通道对应的引脚。比如我要用ADC1的通道2、3、14、15,对应到STM32F103系列是PA2、PA3、PC4、PC5。在CubeMX的Pinout视图中,将这些引脚配置为"Analog"模式。这里有个重要知识点:GPIO模拟模式会禁用数字输入输出缓冲器,让引脚呈现高阻抗状态,避免数字电路对模拟信号的干扰。

ADC参数配置:转到"Analog"标签下的"ADC1"设置,关键参数如下:

  • Scan Conversion Mode: Enabled(必须开启才能多通道采集)
  • Continuous Conversion Mode: Enabled(开启连续转换)
  • DMA Continuous Requests: Enabled(允许DMA连续请求)
  • Number Of Conversion: 4(因为我们有4个通道)
  • External Trigger Conversion Source: Software trigger(软件触发)

通道顺序配置:在"ADC1"设置下方的"Rank"选项中,需要为每个通道配置转换顺序和采样时间。这里很容易出错的一点是:Rank值决定了通道转换的顺序,而不是通道编号本身。我把通道2设为Rank1,通道3设为Rank2,通道14设为Rank3,通道15设为Rank4。采样时间设置为56个周期,比默认的3个周期长很多,这样可以有效平均噪声,让读数更稳定。

DMA配置:这是最关键的一步。转到"DMA Settings"标签,点击"Add"添加DMA通道。对于ADC1,通常是DMA2 Stream0或DMA1 Channel1(具体取决于型号)。配置参数如下:

  • Direction: Peripheral To Memory(外设到内存)
  • Priority: Low(优先级,根据实际情况设置)
  • Mode: Circular(循环模式,自动重复采集)
  • Increment Address: Memory(内存地址自增,外设地址不变)
  • Data Width: Half Word(半字,因为ADC是12位精度)

完成这些配置后,点击"Generate Code",CubeMX就会为你生成完整的初始化代码。不过生成的代码只是基础框架,我们还需要根据实际需求进行优化和调整。

3. DMA循环模式的优势与配置技巧

DMA的循环模式(Circular Mode)是多通道ADC采集的精髓所在。在这种模式下,DMA会自动重复整个传输过程,不需要CPU干预。就像建立一个自动化的流水线:ADC负责生产数据,DMA负责打包运输,CPU只需要在仓库(内存)里取用成品就行了。

我强烈推荐使用循环模式而不是普通模式,原因很简单:避免数据断档。在普通模式下,DMA传输完一轮数据后就停止了,你需要重新启动它。如果恰好在重启的瞬间有新的ADC数据产生,就会丢失这个数据点。而循环模式下,DMA在传输完最后一组数据后,会自动回到数组开头重新开始,实现无缝衔接。

配置循环模式时,有几点需要特别注意: 内存缓冲区大小:你的数组大小应该与采集通道数匹配。对于4通道采集,如果你希望每通道存储100个样本,就需要定义一个400元素的数组。DMA会按顺序填充:0-3索引是第一次采集的4个通道,4-7是第二次,依此类推。

数据对齐方式:STM32的ADC是12位精度,但数据寄存器是16位的。一定要设置DMA为半字传输(Half Word),并确保ADC数据对齐方式为右对齐。这样你得到的数值就是直接的12位ADC值,不需要额外处理。

中断配置:虽然DMA循环模式不需要频繁中断,但有时候我们还是需要在半传输或全传输完成时得到通知。可以在CubeMX中启用DMA的传输完成中断(TCIE)或半传输中断(HTIE),然后在中断中处理数据。不过要注意中断频率不能太高,否则会失去使用DMA的意义。

在我的实际项目中,我发现循环模式下一个常见问题是数据覆盖。因为DMA在后台持续搬运数据,如果你的数据处理速度跟不上数据采集速度,新的数据就会覆盖尚未处理的老数据。解决方法是使用双缓冲区机制:当DMA填充前半部分缓冲区时,你处理后半部分的数据;当DMA切换到后半部分时,你处理前半部分的数据。这样永远不会有冲突。

4. 常见问题与解决方案:踩过的坑你别再踩

通道串扰问题:这是我遇到过最棘手的问题之一。现象是某个通道的读数会受到其他通道的影响,特别是当某个通道电压较高而相邻通道悬空时,悬空通道会读到异常的"残影"电压。这是因为STM32的ADC各通道共享同一个采样保持电容,前一个通道的电压会残留在电容上影响下一个通道的采样。

解决串扰问题有几种方法:

  1. 硬件解决:给未使用的ADC引脚接10kΩ的下拉电阻到GND,避免引脚悬空
  2. 软件解决:增加采样时间,让采样电容有足够时间稳定。我从原来的3个周期增加到56个周期后,串扰现象明显减轻
  3. 数据处理:在代码中判断异常值。如果某个通道的读数突然变得不合理(比如悬空通道读数大于100),就丢弃这个值或用上次的有效值代替

中断频率过高:有时候配置不当会导致DMA中断过于频繁,CPU大部分时间都在处理中断,根本来不及做其他事情。这个问题在使用小缓冲区时特别明显。

我的解决方案是:增大缓冲区大小和调整采样时间。比如原来用4元素的数组(刚好存4个通道的一次采集),我改为40元素的数组(存10次采集的数据)。这样DMA填满整个缓冲区才产生一次中断,中断频率降低了10倍。同时适当增加ADC采样时间,进一步降低整体采样率。

数据错位问题:有时候会发现各个通道的数据对不上号,比如通道1的数据跑到了通道2的位置。这通常是DMA内存地址自增设置错误导致的。确保DMA配置中"Memory Increment"设置为Enable,这样每次传输后DMA会自动指向下一个内存地址。如果这个设置错了,所有数据都会堆在同一个地址上。

校准问题:STM32的ADC需要校准才能达到最佳精度。一定要在ADC初始化后调用HAL_ADCEx_CalibrationStart()函数进行校准。我曾经忽略这一步,结果ADC读数总是有几十个字的偏差。注意校准要在ADC启动前进行,且某些系列(如F4)的MCU不支持软件校准。

5. 实战代码编写与调试技巧

有了CubeMX生成的基础代码,我们还需要添加一些关键代码才能让整个系统工作起来。首先定义一个全局数组来存储ADC数据:

uint16_t adc_values[40];  // 10组数据 * 4个通道

在main函数中初始化并启动ADC:

// 校准ADC(如果支持)
if (HAL_ADCEx_CalibrationStart(&hadc1) != HAL_OK) {
    Error_Handler();
}

// 启动ADC DMA采集
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_values, 40) != HAL_OK) {
    Error_Handler();
}

这里第二个参数40表示要传输的数据总量,对于4通道采集10次,就是40个数据。

数据处理技巧:由于DMA循环模式会不断覆盖旧数据,我们需要定期将有效数据复制到另一个数组进行处理。我通常使用双缓冲区策略:

uint16_t working_buffer[40];
uint32_t last_count = 0;

void process_adc_data() {
    // 检查是否有新数据
    if (dma_transfer_count != last_count) {
        // 复制当前数据到工作缓冲区
        memcpy(working_buffer, adc_values, sizeof(adc_values));
        last_count = dma_transfer_count;
        
        // 处理数据...
        for (int i = 0; i < 10; i++) {
            uint16_t ch1 = working_buffer[i*4];
            uint16_t ch2 = working_buffer[i*4+1];
            uint16_t ch3 = working_buffer[i*4+2];
            uint16_t ch4 = working_buffer[i*4+3];
            
            // 你的处理逻辑 here
        }
    }
}

调试技巧:当ADC读数不符合预期时,我有一套调试流程:

  1. 先检查引脚配置:确认GPIO已设置为模拟模式
  2. 检查参考电压:用万用表测量VDDA和VSSA电压,确保稳定在3.3V
  3. 验证单个通道:先配置为单通道模式,测试每个通道是否正常工作
  4. 检查DMA传输:在DMA中断中设置断点,看数据是否按预期传输
  5. 使用SysTick定时器:创建一个精确的延时,控制ADC采样率

6. 性能优化与高级应用

当你掌握了基本的ADC多通道DMA采集后,可以进一步优化性能和扩展应用。

采样率精确控制:CubeMX生成的代码使用软件触发,采样时间不够精确。对于需要精确采样率的应用(如音频采集),可以使用定时器触发ADC转换。配置一个定时器,将其TRGO输出连接到ADC的触发源,这样就能实现精确的采样间隔控制。

过采样技术:如果你需要高于12位的分辨率,可以使用过采样技术。比如想要14位分辨率,可以采集16个样本求平均,这样有效位数增加2位。DMA配合过采样特别方便,只需要设置足够大的缓冲区,然后在DMA中断中处理求平均即可。

低功耗优化:在电池供电的应用中,功耗是关键考虑因素。可以配置ADC在单次转换模式,需要采样时才启动转换,完成后自动进入低功耗模式。DMA可以在不唤醒CPU的情况下完成数据传输,最大程度节省功耗。

多ADC并行采集:对于需要同步采集多个信号的高端应用,STM32的多ADC并行模式可以大显身手。比如ADC1和ADC2可以同时采样不同的通道,然后通过DMA将数据交织存储。这种模式复杂但性能强大,适合电机控制等应用。

我在一个工业监测项目中就使用了多ADC并行采集,同时测量电机的三相电流和电压。ADC1采集三相电流,ADC2采集三相电压,DMA将6个通道的数据交错存储。这样得到的数据几乎是同一时刻的采样,完美反映了电机的实时状态。

最后提醒大家,ADC性能受到PCB布局和电源质量的显著影响。如果追求高精度,务必保证模拟电源干净稳定,模拟地

STM32G031多通道ADC采集实战:CubeMX+DMA配置避坑指南(附串口调试技巧) 本文详细介绍了STM32G031多通道ADC采集的实战技巧,重点解析了CubeMX配置与DMA参数设置的关键点,包括时钟源选择、采样时间配置、DMA循环模式等。通过HAL库实现高效数据采集,并提供了串口调试优化方案,帮助开发者避开常见陷阱,提升嵌入式开发效率。 阅读详情

相关推荐

STM32F2 ADC配置实战:从固件库汉化到多通道DMA采集避坑指南

模数转换器(ADC)是嵌入式系统中连接模拟与数字世界的关键外设,其核心原理是将连续的模拟信号量化为离散的数字值。理解ADC的分辨率、采样率、转换模式等基础概念,是进行精准数据采集的前提。在工程实践中,通过合理配置ADC的时钟、采样时序和触发源,可以构建高效稳定的数据采集系统。其技术价值在于能够将传感器信号、电压电流等物理量转换为微控制器可处理的数字信息,是实现物联网感知、工业控制、仪器仪表等应用的基础。本文以STM32F2系列微控制器的标准外设库为例,深入剖析ADC模块的硬件架构与固件库驱动配置,并结合DM

weixin_34188805的博客 228

告别轮询!用STM32G030C8T6的DMA+ADC多通道采集,实现后台高效数据搬运

本文详细介绍了如何利用STM32G030C8T6的DMA+ADC多通道采集技术,实现高效数据搬运。通过配置DMA控制器和ADC模块,开发者可以摆脱传统轮询方式的限制,显著降低CPU占用率并提升数据采集效率。文章包含硬件配置、代码实现及性能优化技巧,是嵌入式开发的实用指南。

weixin_29185199的博客 317

STM32—ADC多通道采集电压

文章目录ADC详解程序说明函数主体引脚配置ADC和DMA配置主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍:ADC详解 程序说明 为了使这次代码阅读方便,博主没有在头文件中宏定义变量,都是直接采样库函数中的规定形参。此次采用多通道采集电压,使用ADC1的通道10、11、12、13、14、15一共六个通道,采用DMA将转...

肥宅快乐博客 1万+

stm32 HAL库 ADC+DMA多通道采集

1、检查是否在之前调用,不然程序会死掉2、如果ADC_Values是uint32_t类型的,并不影响数据搬运行为,但访问时,得到的uint32_t类型的数值是通道ch1和ch2合并而来的,还要取高16位和低16位将两帧分开。对于每一帧,低12位是数据,剩余的4位被0填充。3、adc通常,采样周期应该大于等于转换时间,以确保在每次转换之间有足够的时间。采样时间可以设置。检查转换时间是否够用!!Sampling Time不够用的话程序。

m0_64551204的博客 2万+

【STM32CubeMX学习指南---ADC多通道采集与DMA传输】

通过上述配置,系统将实现定时器触发ADC多通道采样,并通过DMA自动传输数据到内存,软件只需定期读取内存中的转换结果即可。

智闲电子设计的博客 2330

第6章 STM32CubeMX | HAL库之ADC多通道数据采集(轮训、DMA、DMA+TIM)

一、ADC简介1.1 采样定理1.2 模式介绍: 使用STM32CUBEMX配置了多通道后,这一项默认开启且无法设置成关闭。这个模式就是自动扫描你开启的所有通道进行转换,直至转换完。例如你开启了CH0、CH1、CH2、CH3这四个通道,启动转换后ADC会自动将这4个通道全部转换完,但是这种连续性是可以被打断的,所以就引出了间断模式。: 在CUBE中选中ENABLE就是连续模式,DISABLE就是单次模式。开启连续模式后,ADC的转换不由其他控制。

xiaoluoshan的专栏 2516

STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)

STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) ​ 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用。如果只使用了一个通道,用时令ADC转换而后读取DR寄存器即可。多通道时,可利用ADC+DMA可实时,有序的转存多通道数据至程序内存(数组),用时可随时访问并索引到对应通道。 CubeMX配置 时钟配置如下: ​ 原先经常忽视时钟的信息,这里注意一下ADC1,2,3的时钟频率,其于ADC采样时间有关。如果时钟配置的很高,那么选择1.5Cycles可能不

tpytpytpy的博客 2万+

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1748

STM32CubeMX教程14 ADC - 多通道DMA转换

使用STM32CubeMX软件配置STM32F407开发板的ADC实现ADC多通道DMA采集,具体为使用ADC_IN5/6/7三个通道进行DMA连续ADC转换

lc_guo的博客 1万+

关于 MCU 芯片外围电路的快速入门介绍

MCU 外围电路的核心是“围绕 MCU 需求,搭建稳定、匹配的外部支撑”,入门阶段无需掌握复杂设计,只需先吃透供电、复位、时钟、IO 驱动、基础通信这五大模块,再逐步扩展存储、显示、传感器等进阶功能。实践中多调试、多参考成熟方案,是快速掌握外围电路设计的关键。码字不易,若觉得本文对你有用,欢迎,相关技术热点时时看🔥🔥🔥​​​…

JiaWen的博客 1650

避坑指南:PyCINRAD处理CINRAD雷达数据时遇到的5个典型报错及解决方案

本文针对使用PyCINRAD库处理CINRAD雷达基数据时常见的5个典型报错,提供了详细的解决方案。内容涵盖环境配置、数据读取、PPI可视化及性能优化等核心环节,重点解决了版本兼容性、数据异常处理和中文乱码等实际问题,帮助用户高效处理雷达基数据并生成准确的PPI图像。

cc789的博客 1068

STM32 ADC多通道采集

ADC多通道采集(阻塞模式、ADC_DMA模式)ADC多通道采集(阻塞模式)ADC多通道采集(DMA模式) ADC多通道采集(阻塞模式) 1、时钟源配置 2、配置RCC时钟(选择第三个选项 Crystal/Ceramic Resonator 晶体/陶瓷谐振器 ) 3、配置一个LED灯,在程序编写中让它闪烁代表程序没有死机。 4、设置调试模式,我们选择SW 5、设置串口,因为我们的程序采集到了adc的数值之后会发送到串口调试助手上,证明ADC采集是否成功。选择异步模式、波特率是默认的11520

weixin_45935114的博客 2万+

AD9361 RSSI配置实战:从寄存器到精准功率测量的避坑指南

本文详细解析了AD9361芯片的RSSI配置实战,从寄存器设置到精准功率测量的全流程避坑指南。通过优化模式选择、测量持续时间及高级参数配置,实现高精度信号强度测量,并分享实际项目中的校准流程与性能优化技巧,帮助工程师提升射频接收链路的测量精度。

weixin_38166557的博客 447

STM32 f407 多通道ADC采集+DMA传输 基于HAL库和Cubemx配置

很多教程喜欢从HAL_ADC_Start()和HAL_ADC_Start_IT()开始教,这样虽然能让理论知识理解的更加充分,但我觉得不是很有必要。因为其实HAL_ADC_Start_DMA ()内部的实现中是调用了HAL_ADC_Start_IT()的,用多了遇到问题多了自然就会去看内部实现了,然后自然而然就明白了。至于HAL_ADC_Start()这种阻塞式实现,完全不会用的到。先会用,再精通!

weixin_57904199的博客 8719

【webrtc】openh264编码:动态配置码控参数触发IDR编码

SetRates 下发RateControlParameters 给到openh264 编码器 void SetRates(const RateControlParameters& parameters) override; LayerConfig 编码器这边的配置是layerconfig,具体到层的: std::vector<LayerConfig> configurations_; void H264EncoderImpl::SetRates(const RateCo.

突围 726

【05】昊一源科技——昊一源科技 嵌入式笔试, 校招,题目记录及解析

本文记录了昊一源科技嵌入式校招笔试题目及解析,涵盖计算机基础、汇编语言、网络协议、C语言编程等内容。主要包括:1)补码真值计算;2)MCS51汇编指令执行后寄存器状态;3)网络广播地址计算;4)TCP协议特点;5)C语言三目运算符应用;6)宏定义优先级问题;7)字符指针与数组的区别;8)C++静态成员变量应用;9)三位完全平方数查找程序。题目难度适中,涉及嵌入式开发常见知识点,对求职者基础能力考察全面。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1309

stm32之adc多路采集+dma传输

STM32 ADC简介:   12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。对于小容量、中容量和大容量产品. ADC主要特征:   ● 12位分辨率 ● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断  

weixin_38931060的博客 2万+

windows 10 等保3级配置核查与加固(附自动化加固脚本)

关闭注册表编辑器,然后重新启动计算机。\\r\\n 对于OPC通讯站(server\\\\client),【密码最长存留期】需要设置为0,即密码不过期。‌445端口‌:修改注册表禁用。打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\\\\计算机配置\\\\Windows设置\\\\安全设置\\\\本地策略\\\\安全选项”,在右边窗格中找到“Microsoft网络客户端:将未加密的密码发送到第三方SMB服务器”,双击,配置为“已禁用”,确定。

悦分享 160

stm32的DMA+ADC多通道数据采集

stm32只有一个规则转换数据寄存器DR,因此普通方法不能同时采集多个通道的数据,利用DMA功能一次可以最多采集16个通道的数据。

qq_40459947的博客 9345

C# NX二次开发-查找连续倒圆角面

可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。这个是初步思路,如果有更好的思路可回复讨论一下。

fhqiwmc的博客 621

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32的ADC+DMA采集

ADC+DMA采集

qq_40993639的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【STM32 CubeMX HAL库 ADC多通道+DMA实现】

帮助小白快速通过STM32CubeMX实现ADC多通道数据转换任务。

weixin_45936798的博客 5197

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32 CUbeIDE ADC采集 单通道和多通道 DMA

STM32 CUbeIDE ADC采集单通道和多通道 DMA 1、ADC采集单通道1.1 、创建工程选择ADC1.2、重定向printf 可以输出小数1.3、开启 ADC DMA2、ADC采集2通道   STM32拥有 1~3个 ADC STM32F101/102系列只有 1个 ADC)),这些 ADC可以独立使用,也可以使用双重模式(提高采样率)。 STM32的 ADC是 12位逐次逼近型的模拟数字转换器。它有 18个通道,可测量 16个外部和 2个内部信号源。各通道的 A/D转换可以单次、连续、扫描或

青烨慕容 1万+

STM32 单ADC,多通道,DMA传输的多路数据采集

一、简介 ADC相关配置分为:时钟使能,GPIO配置,ADC功能配置,DMA功能配置以及定时触发的相关配置。 最终实现功能为:单个ADC,10个通道分别采集十路电压,DMA搬运,定时器触发,定时器中断中读取采集的数值。   二、程序   main(void) { RCC_Configuration(); //时钟初始化 GPIO_Config(); //GPIO...

城南花已开的博客 4770

STM32 HAL库ADC+DMA采集详解

最近在用ADC采集电压时发现一个问题,就是一个adc如果开启多个通道,无法直接对指定通道利用HAL库函数对它进行采集。本文详细介绍STM32 HAL库下ADC多通道采集的几种实现方式,包括基础配置、DMA传输以及实际应用示例。

2301_80825409的博客 9492

STM32——多通道ADC的DMA方式采集方法

前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法。 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 多通道ADC的配置 #define Channel_Num 9 //9 ¸adc的通道数,本例使用9个通道 #define Sample_Num 10 //采样次数,本例使用平均滤波...

夜风的博客 3万+
上一篇: RGB LCD 彩条驱动与显示时序设计
下一篇: Simulink代码生成实战:基于EasyHEX与FLOAT协议的串口数据可视化调试
study
博客等级 码龄27年 67粉丝 1642原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值