stm32用代码如何实现ADC对波形峰值的采样,求大神解答下,最好有个源文件作为参考。F1或F4的资料也行

直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输可以在无需任何CPU操作的情况下通过DMA快速传输传输。这样节省的CPU资源可供其它操作使用

DMA允许在后台执行数据传输,无需Cortex-MO处理器干预在此操作过程中,主处理器可以执行其它任务仅当整个数据块需要处理时,才会中斷主处理器这样即使传输大量数据也不会对系统性能造成太大影响。

DMA主要用于为不同的外设模块实现集中数据缓冲存储(通常在系统SRAM中)与分布式解决方案(其中每个外设都需要实现自己的本地数据存储)相比,DMA解决方案在硅片成本和功耗方面的成本较低

根据使用的產品型号的不同,有一个或两个DMA模块

STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器用于处理不同的DMA请求的优先级。

本篇文章主要介绍如何使用STM32CubeMX实现ADC在DMA下快速采集并且打印出去。

首先需要准备一个开发板这里峩准备的是NUCLEO-F030R8的开发板:

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源故都选择Disable选项,如下所示:

STM32F0的最高主频到48M所以配置48即可:

STM32f030中,有一个ADC(模拟/数字转换器)每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个ADC有16个外部通道、2个内部通道和一个VBAT 通道的信号

本文将开ADC嘚IN0、IN1、IN4一共三个通道,来分别读取ADC由于串口2和IN2,IN3复用故不使用IN2、IN3。配置如下:

最后设置生成独立的初始化文件

最后设置生成独立的初始化文件:

函数声明和串口重定向。

//放个延迟防止程序运行第一次读出数据有误 //除以30为求30次平均ADC值,乘以3.3为以3.3电压为基准除以4096为ADC配置为12位

以上的代码会在Q群里分享。QQ群:
或者关注微信公众号『记贴』,持续更新文章和学习资料,可加作者的微信交流学习!

我要回帖

 

随机推荐