Discuz! REAL TIME TECHNOLOGY

 找回密码
 立即注册
查看: 7326|回复: 0
打印 上一主题 下一主题

STM32F10x系列的ADC使用方法:

[复制链接]

44

主题

0

好友

4124

积分

内部组员

Rank: 8Rank: 8

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

下面简单讲一下流程:
(1)配置ADC的时钟:

通过库函数中的RCC_ADCCLKConfig()进行配置;
(2),配置GPIO,选择输入引脚:
关于引脚的具体编号,每款芯片都互不相同,所以需要根据自己所使用的芯片型号,查找芯片手册(注意,不是《中文参考手册》!)的 Pin Definitions表格。


找到一个合适的引脚,如下:


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


(3),配置GPIO的基本模式。
这个部分比较复杂,是整个配置流程的关键。推荐一个帖子,讲得很精辟。http://blog.sina.com.cn/s/blog_729813290101bxb7.html
下面是例子程序:

(4),开启通道,指的是开启规则通道。规则通道,是我们常用的一组通道,属于常规通道。另外有一个不常规的,就是“注入通道”,它的使用方式就像是“中断”的使用一样。具体的区别,可以参考这个帖子:http://www.cnblogs.com/nixianmin/p/3192634.html


(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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|Real Time Group

GMT+8, 2025-3-16 03:15 , Processed in 0.027500 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部