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

STM32F103——ADC之再理解

[复制链接]
馒头弟 发布时间:2015-1-10 20:29
本帖最后由 馒头弟 于 2015-1-10 20:47 编辑 5 E  H, a( f( G: D
5 S( ?& {( [9 ?6 K) x9 s) O
先来一段正点mini板的ADC初始化例子
* t$ p: d" i$ @3 z6 x+ Z6 @
  1. Stm32_Clock_Init(9);3 z! a2 z, f+ Q1 g& H
  2. void  Adc_Init(void)7 o# _. c$ o) }. }) N" H8 T
  3. {   
    8 M  x2 T  ?0 Z% Z! W! j  ~2 [
  4.         //先初始化IO口0 [- Z6 S8 ?- ~, e* n: H
  5.          RCC->APB2ENR|=1<<2;    //使能PORTA口时钟
    & H+ h3 {4 `$ a- b) g  a7 ?2 o0 J3 E
  6.         GPIOA->CRL&=0XFFFF0000;//PA0 1 2 3 anolog输入
    9 R% U1 Z( [6 c7 S' K
  7.         //通道10/11设置                        
    6 B+ C* d  Z4 k8 N$ X1 t+ C5 a
  8.         RCC->APB2ENR|=1<<9;    //ADC1时钟使能         
    . c+ i2 x+ K* n2 j1 L
  9.         RCC->APB2RSTR|=1<<9;   //ADC1复位' u0 A  X* Y+ I/ N, Q) h
  10.         RCC->APB2RSTR&=~(1<<9);//复位结束            
    % U* a* j" j2 i2 l' Y
  11.         RCC->CFGR&=~(3<<14);   //分频因子清零        
    ' a2 s4 v+ ^& C$ x9 z' {
  12.         //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
    2 N  J3 R& z0 \
  13.         //否则将导致ADC准确度下降! $ X8 L  ^6 Y0 J* Z1 ]
  14.         RCC->CFGR|=2<<14;               
    0 K: v" h2 T0 z# e  @' R

  15. # i0 X, m4 k" a3 a0 `
  16.         ADC1->CR1&=0XF0FFFF;   //工作模式清零
    4 h, r; M0 X1 n1 t
  17.         ADC1->CR1|=0<<16;      //独立工作模式  6 E! g% j  Z+ h0 {
  18.         ADC1->CR1&=~(1<<8);    //非扫描模式          4 H% I6 i1 H2 A7 n8 _  \
  19.         ADC1->CR2&=~(1<<1);    //单次转换模式* h. ~( O% i; \# Q$ f4 ]2 f
  20.         ADC1->CR2&=~(7<<17);           % Y# T9 Q  q3 H' i- K
  21.         ADC1->CR2|=7<<17;           //软件控制转换  
    % [5 K% |5 b# Q1 m+ a- G6 n7 j
  22.         ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!        必须使用一个事件来触发
    3 k1 g& ~, N7 a' j1 N( W: Y8 i
  23.         ADC1->CR2&=~(1<<11);   //右对齐         
    ! `7 b% M# R. i3 R/ t1 n
  24.         ADC1->SQR1&=~(0XF<<20);8 |1 V4 }+ @1 w0 e/ h  F: `3 p
  25.         ADC1->SQR1&=0<<20;     //1个转换在规则序列中 也就是只转换规则序列1                           
    % J% h3 h( i$ k7 B
  26.         //设置通道0~3的采样时间
    1 R1 Z+ I/ ^" I$ g/ V, q
  27.         ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采样时间清空         
    2 f3 L; E/ c/ ^
  28.         ADC1->SMPR2|=7<<9;      //通道3  239.5周期,提高采样时间可以提高精确度         
    $ G- S9 Q$ T$ M3 J3 i9 b) d
  29.         ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度         
    " r6 @& l1 {: M1 B( v! D+ r
  30.         ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度         
    7 C7 B$ G8 i8 r! H0 S, }* C
  31.         ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度         0 F5 `/ o7 s) f7 O! f- O

  32.   A. Z! x9 d/ k2 t! j1 Y- ^
  33.         ADC1->CR2|=1<<0;            //开启AD转换器         " f2 d. n" q: Y/ S. {- V2 L
  34.         ADC1->CR2|=1<<3;        //使能复位校准  0 d, ~$ k- S5 e# W5 _
  35.         while(ADC1->CR2&1<<3);  //等待校准结束                          
    ' [1 z8 [$ X8 g+ V9 S* V# W
  36.     //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。                  
    1 M) R. B  `0 m; S' K; ~4 j9 |
  37.         ADC1->CR2|=1<<2;        //开启AD校准           
    3 b* l+ V9 M5 g, E8 v: N# q
  38.         while(ADC1->CR2&1<<2);  //等待校准结束8 d9 V' P7 J+ B9 a. O( C
  39.         //该位由软件设置以开始校准,并在校准结束时由硬件清除  
    ; B3 B2 O4 O( h) v% H" N
  40. }
复制代码

: y- ^( _; f5 }! ~
( D/ x; |  S' w0 ]# @) Z
初始化中可以看到,SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!当ADC的时钟频率超过14MHz时,ADC的精度将会显著下降。

3 L9 L1 ?9 ^  c1 t6 vSTM32F103xx系列称为增强型产品,增强型产品的最高时钟频率可以达到72MHz。* u% ~& ^4 A7 v( a, A* ]! L) C
STM32F101xx系列称为基本型产品,基本型产品的最高时钟频率可以达到36MHz。
; g" I7 x! m" S- g" U根据设计,当ADC模块的频率为14MHz时,可以达到ADC的最快采样转换速度。
1 K' ?5 T1 k( y3 s3 U* P" T! r8 p0 q9 g4 F1 `' F2 `! i
要得到14MHz的ADC频率,就要求SYSCLK的频率是14MHz的倍数,即14MHz、28MHz、42MHz、56MHz、70MHz、 84MHz等;* m( r* M( ?) Z' f) N

/ M7 P7 O8 e% Y2 m# h对于基本型产品14MHz和28MHz处于它的最大允许频率范围内;
9 H8 f1 ]- o' _$ q; T- s对于增强型产品,14MHz、28MHz、42MHz、56MHz和 70MHz几种频率都在它的最大允许频率范围内,但因为ADC预分频器的分频系数只有2、4、6、8这几个,使用70MHz不能得到最大的14MHz,所以要想得到最快的ADC转换速度,在本例(f103xx)增强型产品上能用的最快SYSCLK频率是56MHz。* _# G8 D3 m: j3 f: g
9 j# y# C7 J% K5 ?5 i* O
ADC的速度由2个参数决定,它是采样时间和转换时间之和:+ }1 k0 v) V, ^. x. q5 k4 R( J
        TCONV = 采样时间 + 12.5个ADC时钟周期% e- \" I8 \( Z# A7 P8 O6 b6 Y
* X: p2 D- z! h
在STM32中,ADC的采样时间是由用户程序在一组预定的数值中选择,按照ADC的时钟周期计算,共有8种选择:1.5、7.5、13.5、28.5、41.5、55.5、71.5和239.5。按最小的1.5个时钟周期的采样时间计算,最短的TCONV等于14个时钟周期,如果ADC的时钟频率是14MHz,则ADC的速度为每秒100万次。, U; Z1 C7 K* c3 L

+ G; v# w; G' k% z, [8 A- `: u7 E1 _
9 h) ]: f1 r" W

# [& R+ g5 `. Z0 h% ?7 L" Y3 o7 x5 w

AD例程【正点mini板】.rar

下载

98.6 KB, 下载次数: 179

正点原子的配套程序

赞 收藏 4 评论25 发布时间:2015-1-10 20:29

举报

25个回答
runwn 回答时间:2015-1-10 21:39:22
帖子前最好再系统介绍一下该芯片型号的AD资源。这理解也只能给新手看了,厉害的人看这个就是常识。。。mini板还是不错的,配套视频教程我觉得不太好理解
馒头弟 回答时间:2015-1-10 22:13:49
runwn 发表于 2015-1-10 21:394 A3 ]' H. _, w! a
帖子前最好再系统介绍一下该芯片型号的AD资源。这理解也只能给新手看了,厉害的人看这个就是常识。。。mini ...
- {& V1 W4 g* c, o; q+ b7 f# B/ k* Q
多谢学长,以后多多指教哈
博根 回答时间:2015-1-10 20:32:52
不错呢 赞一个
mryao4 回答时间:2015-1-10 20:34:15
顶一个
513179 回答时间:2015-1-10 20:38:51
学习了,感谢分享
博根 回答时间:2015-1-10 20:41:46
额  没中奖;。。。
馒头弟 回答时间:2015-1-10 20:42:53
z00 发表于 2015-1-10 20:32# @* @3 B$ N6 u" H( t+ N
不错呢 赞一个

+ t: V1 d7 i9 P) p* l/ d# M多谢支持大家有什么心得共享共同进步哈
馒头弟 回答时间:2015-1-10 20:43:27
z00 发表于 2015-1-10 20:41
, G7 U- C3 s0 |, D; e4 e3 L额  没中奖;。。。
9 |3 V- A8 c6 \+ [; v
失之东隅取之桑榆
末未本 回答时间:2015-1-10 20:56:56
我是来抽奖的!帖子MARK一下
馒头弟 回答时间:2015-1-10 21:12:50
末未本 发表于 2015-1-10 20:56
/ Y2 N$ d- t4 B% p$ n我是来抽奖的!帖子MARK一下
& |1 d, s+ i0 Z" [) ?
你抽奖,大材小用了
羿日光年 回答时间:2015-1-10 21:14:45
支持一个
Veiko 回答时间:2015-1-10 21:29:48
我觉得应该是取之南海,放诸西海
bpdwn 回答时间:2015-1-10 21:30:56
菜鸟过来看啦,不过我是学DSP方向的
馒头弟 回答时间:2015-1-10 22:12:13
羿日光年 发表于 2015-1-10 21:14
1 S! B" ^! `% X8 e- }6 U# P5 u' n  i$ V支持一个

5 v  w4 N# c" ?5 [6 `求赐教
馒头弟 回答时间:2015-1-10 22:12:43
Veiko 发表于 2015-1-10 21:29  |1 n4 Z6 D" Y! T6 Y
我觉得应该是取之南海,放诸西海
. E. g( f3 k: n
看不懂,不理解
12下一页

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版