Discuz! REAL TIME TECHNOLOGY

标题: STM32F10x系列的ADC使用方法: [打印本页]

作者: DXiaoFei    时间: 2013-7-28 16:21
标题: STM32F10x系列的ADC使用方法:
本贴以STM32F107的ADC功能为例,简单讲一下其使用方法:
首先,要实现芯片内部自带的ADC功能,大致需要以下6个步骤:
1),配置ADC的采样时钟。
2),配置GPIO,选定哪根引脚作为ADC的输入。
3),配置ADC的基本模式,也就是说对ADC模块进行初始化。
4),开启通道,配置采样时间。
5),启动ADC,和芯片内部温度传感器通道(如果需要的话)。
6),自校正,调零。一般在程序第一次使用ADC的时候进行(也就是初始化一次就行)。
特别说明:如果要使用DMA,以及ADC中断等,需要额外进行配置,以及程序上的一些操作。这些在参考资料中讲得非常详细,所以这里就以实用为主,遇到了就解释,没遇到就略过。

下面简单讲一下流程:
(1)配置ADC的时钟:
[attach]1371[/attach]
通过库函数中的RCC_ADCCLKConfig()进行配置;
(2),配置GPIO,选择输入引脚:
关于引脚的具体编号,每款芯片都互不相同,所以需要根据自己所使用的芯片型号,查找芯片手册(注意,不是《中文参考手册》!)的 Pin Definitions表格。
[attach]1372[/attach]

找到一个合适的引脚,如下:
[attach]1373[/attach]
[attach]1375[/attach]
那么GPIO的36脚,也即PB1引脚可以用来作为ADC1、2的模拟输入端。注意,这里又遇到一个问题:同一根引脚怎么能给两个ADC使用?答案是:可以。这就是STM32的ADC强大的地方。具体请看《中文参考手册》相关章节。
下面是一个例子程序:
[attach]1374[/attach]

(3),配置GPIO的基本模式。
这个部分比较复杂,是整个配置流程的关键。推荐一个帖子,讲得很精辟。http://blog.sina.com.cn/s/blog_729813290101bxb7.html
下面是例子程序:
[attach]1376[/attach]
(4),开启通道,指的是开启规则通道。规则通道,是我们常用的一组通道,属于常规通道。另外有一个不常规的,就是“注入通道”,它的使用方式就像是“中断”的使用一样。具体的区别,可以参考这个帖子:http://www.cnblogs.com/nixianmin/p/3192634.html
[attach]1370[/attach]

(5),启动ADC。当上面的配置、初始化都准备好了,就可以启动ADC,这时就是对ADC“使能”。但是,“使能”不是“开始转换”,这是两个不同的概念。如果要转换,需要“触发”,触发分为软件触发和硬件触发,不管哪种,目的是使ADC在满足条件的时候才能开始转换(虽然它一直“开启”着)。
(6),调零,自校正。这部分,几乎是按部就班的程序语句,可以直接找个例子程序copy一下就行。但是,虽然简单,却不得不做,否则影响精度。
       到此为止,就能使用ADC了。我们只要在程序中,留一个触发命令:“ ADC_SoftwareStartConvCmd(ADC1, ENABLE); //”那么,程序执行时,ADC就会执行转换。而转换模式已经在上面设定好了,比如连续转换、单次转换。
       一般,转换完成之后,会有一个EOC中断,我们可以利用这个中断来计数,记录转换次数。在所有转换完成之后,如果开启了DMA功能,那么在DMA传输结束,又会有一个DMA中断,我们可以利用这个中断来对已有数据进行后处理,比如说滤波、串口显示等等。
       ADC功能较为简单,资料丰富,如果有哪些概念不清楚的,直接百度搜索基本可以找到答案。
推荐几个资料贴:
(1),数字滤波方法:http://hi.baidu.com/caiag/item/4bafc2150469d0fbddeeca74
(2),规则通道和注入通道:http://www.cnblogs.com/nixianmin/p/3192634.html





欢迎光临 Discuz! REAL TIME TECHNOLOGY (http://lodetech.ustc.edu.cn/bbs/) Powered by Discuz! X2.5