一 单通道采样
参考资料:css
《STM32库开发实战指南》 刘火良,杨森著函数
原理性质的东西仍是少讲,由于上面那本书里面讲解的很详细了,直接来看硬件电路图spa
这里使用的是3362电位器(10K),即用STM32来测量PB0和GND两端的电压,这样的电路设计比较简单也容易理解,可是存在必定的弊端,下面给出《STM32库开发实战指南》上面配套的硬件电路图 设计
若是设计电路图的话,能够参考这种思路。3d
个人收获
1 引脚初始化的时候须要注意 code
每个ADC通道都对应一个GPIO引脚,看图中的ADC123_IN10,表示这个引脚(PC0)能够配置为ADC1的通道10,或者是ADC2的通道10,或者是ADC3的通道10,这个地方很是重要,涉及到后面ADC初始化时函数的调用。blog
好比当咱们使能ADC时,咱们调用的函数是图片
ADC_Cmd();
若是咱们使用的是ADC1,那么上面函数的写法就应该是资源
ADC_Cmd(ADC1,ENABLE);
相应的若是是ADC2,那么上面函数的写法就是开发
ADC_Cmd(ADC2,ENABLE);
另外须要注意的是,咱们这里的ADC使用了DMA,因此若是你使用的是ADC1,那么对应的DMA就应该是DMA1的通道1
若是使用的是ADC2或者是ADC3就须要本身去查找手册,看看对应的是哪一个DMA的那个通道。
在后面上传的程序中能够看到DMA初始化的时候有这么一条语句
DMA_Init(DMA1_Channel1);
这就是初始化DMA1的通道1
相应的
DMA_Cmd(DMA1_Channel1,ENABLE);
就是使能DMA1的通道1
总结一句,配置的IO口不一样,对应ADC和DMA就不一样。
在单通道的ADC采样中,注意上面这一个点就能够了,可是多通道采样还须要注意其余的一些地方
二 多通道采样
仍是看上面的电路图
这里咱们假设使用PB0和PC0端口来采集电压。
stm32有三个ADC,每一个ADC对应16个通道,这里咱们只是用其中的两个通道来作说明。
在程序中PB0设置为ADC1的通道8,PC0设置为ADC1的通道10。
须要注意的几个点:
1 引脚的配置,在上面已经说到
2 ADC模式的一些配置
对ADC模式的配置主要是经过对ADC_InitTypeDef结构体成员的初始化来完成的。
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
结构体的这个成员主要是用来设置ADC的扫描模式,咱们使用通道8和通道10,固然要容许ADC进行通道的扫描
ADC_InitStructure.ADC_NbrOfChannel=2;
这个结构体成员是用来代表要转换的通道数目,这里咱们使用通道8和通道10两个通道,那么这个值必然是2。
ADC_RegularChannelConfig();
这是一个很是重要的函数
这是从《stm32库函数使用手册》中截到的图,关于函数具体参数的使用能够去看该手册。
下面结合程序来看一下这个函数的使用
函数的第三个参数是用来设置采样顺序的,看咱们的程序,也就是说咱们设置ADC1的通道8先进行采样,接着ADC1的通道10再进行采样。
写到这里,基本上多通道ADC采样程序就差很少了,至于具体的DMA使用能够参考我后面上传的程序。
如今发现仍是不能用复制粘贴功能,因此具体的程序须要到个人资源里下载