你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的ADC采样与多通道ADC采样

[复制链接]
STMCU 发布时间:2020-9-3 10:44

一 单通道采样


参考资料:

《STM32库开发实战指南》 刘火良,杨森著


原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来看硬件电路图



这里使用的是3362电位器(10K),即用STM32来测量PB0和GND两端的电压,这样的电路设计比较简单也容易理解,但是存在一定的弊端,下面给出《STM32库开发实战指南》上面配套的硬件电路图






如果设计电路图的话,可以参考这种思路。


我的收获


1 引脚初始化的时候需要注意





每一个ADC通道都对应一个GPIO引脚,看图中的ADC123_IN10,表示这个引脚(PC0)可以配置为ADC1的通道10,或者是ADC2的通道10,或者是ADC3的通道10,这个地方非常重要,涉及到后面ADC初始化时函数的调用。

比如当我们使能ADC时,我们调用的函数是

  1. ADC_Cmd();
复制代码

如果我们使用的是ADC1,那么上面函数的写法就应该是

  1. ADC_Cmd(ADC1,ENABLE);
复制代码

相应的如果是ADC2,那么上面函数的写法就是

  1. <font face="" "="">ADC_Cmd(ADC2,ENABLE)</font>;
复制代码

另外需要注意的是,我们这里的ADC使用了DMA,所以如果你使用的是ADC1,那么对应的DMA就应该是DMA1的通道1



如果使用的是ADC2或者是ADC3就需要自己去查找手册,看看对应的是哪个DMA的那个通道。

在后面上传的程序中可以看到DMA初始化的时候有这么一条语句

  1. <p style="line-height: 26px;"><font face="" "=""><font style="font-size: 18px" color="#000000">
  2. </font></font></p><font color="#000000">DM<font face="" "="">A_Init</font>(DMA1_Channel1)[color=rgb(136, 0, 0) !important]<font face="" "=""><i>;</i></font></font>
复制代码


这就是初始化DMA1的通道1

相应的


  1. DM<font face="" "="">A_Cmd</font>(DMA1_Channel1,ENABLE)[color=rgb(136, 0, 0) !important]<font face="" "=""><i>;</i></font>
复制代码


就是使能DMA1的通道1


总结一句,配置的IO口不同,对应ADC和DMA就不同。

在单通道的ADC采样中,注意上面这一个点就可以了,但是多通道采样还需要注意其他的一些地方



二 多通道采样



还是看上面的电路图


这里我们假设使用PB0和PC0端口来采集电压。


stm32有三个ADC,每个ADC对应16个通道,这里我们只是用其中的两个通道来做说明。


在程序中PB0设置为ADC1的通道8,PC0设置为ADC1的通道10。


需要注意的几个点:


1 引脚的配置,在上面已经说到


2 ADC模式的一些配置


对ADC模式的配置主要是通过对ADC_InitTypeDef结构体成员的初始化来完成的。

  1. ADC_InitTypeDef ADC_InitStructure;
复制代码
  1. <font face="" "="">ADC_InitStructure.ADC_ScanConvMode</font>=[color=rgb(0, 153, 0) !important]<font face="" "="">ENABLE;</font>
复制代码


结构体的这个成员主要是用来设置ADC的扫描模式,我们使用通道8和通道10,当然要允许ADC进行通道的扫描


  1. <font face="" "="">ADC_InitStructure.ADC_NbrOfChannel</font>=[color=rgb(0, 153, 0) !important]<font face="" "="">2;</font>
复制代码




这个结构体成员是用来表明要转换的通道数目,这里我们使用通道8和通道10两个通道,那么这个值必然是2。


  1. <font face="" "="">ADC_RegularChannelConfig()</font>;
复制代码

这是一个非常重要的函数




这是从《stm32库函数使用手册》中截到的图,关于函数具体参数的使用可以去看该手册。


下面结合程序来看一下这个函数的使用



函数的第三个参数是用来设置采样顺序的,看我们的程序,也就是说我们设置ADC1的通道8先进行采样,接着ADC1的通道10再进行采样。



收藏 评论2 发布时间:2020-9-3 10:44

举报

2个回答
ts2000 回答时间:2020-9-3 11:14:42
感谢分享!!!
genghongbo 回答时间:2020-9-3 19:18:24
好文。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版