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

STM32F103——ADC之再理解

[复制链接]
馒头弟 发布时间:2015-1-10 20:29
本帖最后由 馒头弟 于 2015-1-10 20:47 编辑 , P/ E1 V. b3 y/ r; Y' ]
4 o* O- y! y# v$ e% T4 x5 ?- q
先来一段正点mini板的ADC初始化例子" o- z% u$ \7 {' u. W: [  z
  1. Stm32_Clock_Init(9);( h% ]6 C0 h  x. G! H2 Z. }4 H
  2. void  Adc_Init(void)
    # \3 D5 ^$ H8 F% t) \# b4 Y
  3. {    9 S# Q5 w- j0 y9 T4 W: p  t4 f
  4.         //先初始化IO口1 _9 g& \! G5 F" s
  5.          RCC->APB2ENR|=1<<2;    //使能PORTA口时钟
    6 H. c& y) _4 d& [
  6.         GPIOA->CRL&=0XFFFF0000;//PA0 1 2 3 anolog输入) m1 U) E0 k  s, k  s8 X* ]
  7.         //通道10/11设置                        
    ! F% t" H- |2 o+ e" u. g, _+ F
  8.         RCC->APB2ENR|=1<<9;    //ADC1时钟使能          + @! h( p' h' Z6 r
  9.         RCC->APB2RSTR|=1<<9;   //ADC1复位- z3 _( ?2 }# ^/ @. Y* X+ `
  10.         RCC->APB2RSTR&=~(1<<9);//复位结束            9 m' S9 Y( G7 R9 I9 U. z' J0 J
  11.         RCC->CFGR&=~(3<<14);   //分频因子清零        
    + t7 l) ?! N& k/ N
  12.         //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!: c/ B. O  {* e7 j# i" ]
  13.         //否则将导致ADC准确度下降! - J, a% M% M! ]* T8 ]9 b
  14.         RCC->CFGR|=2<<14;               
    2 c  N) a! R1 [1 Q: k
  15. 0 w6 v# ?4 k/ G  k
  16.         ADC1->CR1&=0XF0FFFF;   //工作模式清零( q1 t9 d, Z/ Y& U
  17.         ADC1->CR1|=0<<16;      //独立工作模式  # l1 N. j1 x: A* x" Y( X
  18.         ADC1->CR1&=~(1<<8);    //非扫描模式          ' d; a$ o$ q# T! [4 q* D
  19.         ADC1->CR2&=~(1<<1);    //单次转换模式" }  E0 E0 H* A9 k% W- `7 X. W( J
  20.         ADC1->CR2&=~(7<<17);           
    9 c( F# c' J' J/ i+ c
  21.         ADC1->CR2|=7<<17;           //软件控制转换  4 ^" y% o& O' V9 b3 Q: ]) j" Y; C
  22.         ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!        必须使用一个事件来触发
    ( {8 H6 B- H, U1 c: f& E! v
  23.         ADC1->CR2&=~(1<<11);   //右对齐         # w( n, M* b. N
  24.         ADC1->SQR1&=~(0XF<<20);( L. Q, d0 r2 w1 `% u& Q" r
  25.         ADC1->SQR1&=0<<20;     //1个转换在规则序列中 也就是只转换规则序列1                            6 y" s- A6 c) M2 U8 f! U! F
  26.         //设置通道0~3的采样时间
    6 D" T) Z6 Y! g8 z
  27.         ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采样时间清空         
    3 P) m# N+ y6 _; Y" k5 ^( r
  28.         ADC1->SMPR2|=7<<9;      //通道3  239.5周期,提高采样时间可以提高精确度         0 b& [  U8 n! v! L4 H* f( K
  29.         ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度         
    $ W- m' r5 O( y, ?' d
  30.         ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度         : L% R0 H2 g) X: D6 `! D
  31.         ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度         + r. z& {5 [( r- g
  32. 7 C, C2 n7 |3 ~
  33.         ADC1->CR2|=1<<0;            //开启AD转换器         2 {, q: F! V3 V3 L3 c
  34.         ADC1->CR2|=1<<3;        //使能复位校准  ' R2 {4 `5 f, @1 J2 K1 J* \1 X
  35.         while(ADC1->CR2&1<<3);  //等待校准结束                          , z: W, n2 q9 u. D7 I0 B# n
  36.     //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。                  
    ) H5 |/ F: Y% d! N$ c% \
  37.         ADC1->CR2|=1<<2;        //开启AD校准           
    # m$ O0 F+ x$ r: ~  M3 v! C7 n
  38.         while(ADC1->CR2&1<<2);  //等待校准结束
    # S2 g! q5 S' ^, z( c
  39.         //该位由软件设置以开始校准,并在校准结束时由硬件清除  ( ^7 e  z0 C$ q. ^7 @+ u
  40. }
复制代码

4 N2 F& P2 ~( w

( U8 H$ j6 Q# \4 Z初始化中可以看到,SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!当ADC的时钟频率超过14MHz时,ADC的精度将会显著下降。

) Q  R! l- v7 @! tSTM32F103xx系列称为增强型产品,增强型产品的最高时钟频率可以达到72MHz。$ y8 e3 \1 T2 H. G& f) N
STM32F101xx系列称为基本型产品,基本型产品的最高时钟频率可以达到36MHz。- O2 v- L4 f$ K" Z9 M
根据设计,当ADC模块的频率为14MHz时,可以达到ADC的最快采样转换速度。
4 z: B" j  r: }9 z+ a; G8 w+ |# a9 ?9 p3 @. p$ w0 f6 _
要得到14MHz的ADC频率,就要求SYSCLK的频率是14MHz的倍数,即14MHz、28MHz、42MHz、56MHz、70MHz、 84MHz等;
5 t7 _# f0 f, D8 I) P# B+ H5 v9 \
9 l2 @0 F! Q6 m# |" o( K对于基本型产品14MHz和28MHz处于它的最大允许频率范围内;' l3 ]( k4 S) `6 [, X. R/ k
对于增强型产品,14MHz、28MHz、42MHz、56MHz和 70MHz几种频率都在它的最大允许频率范围内,但因为ADC预分频器的分频系数只有2、4、6、8这几个,使用70MHz不能得到最大的14MHz,所以要想得到最快的ADC转换速度,在本例(f103xx)增强型产品上能用的最快SYSCLK频率是56MHz。* ^- e  ~$ t0 ]4 q, p5 `& S! y, ^
; F; J& S: s& e2 q
ADC的速度由2个参数决定,它是采样时间和转换时间之和:) o1 K. ~' o- |8 A5 u
        TCONV = 采样时间 + 12.5个ADC时钟周期
' p4 i* C( d+ f- t
% r# v- a+ D, x2 U在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万次。
. H' `: ~5 d& G5 s# U& `! R# w
6 i4 C1 G5 I5 w4 O& D# `& Z" @# l+ R
& ?( P+ M1 \- U& c: ^. q8 {

" \* `. Q) A+ o( r5 N4 X
! x+ o# [4 l# N3 ~% `+ n

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:39, t4 Y) b/ k9 L2 g5 }
帖子前最好再系统介绍一下该芯片型号的AD资源。这理解也只能给新手看了,厉害的人看这个就是常识。。。mini ...

* g8 }' o( c6 U  k% Q7 b" k多谢学长,以后多多指教哈
博根 回答时间: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, G4 I# `' C6 D! |/ L
不错呢 赞一个
7 s' h; X: x9 G9 S: H5 B( ?
多谢支持大家有什么心得共享共同进步哈
馒头弟 回答时间:2015-1-10 20:43:27
z00 发表于 2015-1-10 20:41  ?( d0 j/ I4 c- c+ ^4 c2 G- r
额  没中奖;。。。

% m+ B- i4 ]3 H! l失之东隅取之桑榆
末未本 回答时间:2015-1-10 20:56:56
我是来抽奖的!帖子MARK一下
馒头弟 回答时间:2015-1-10 21:12:50
末未本 发表于 2015-1-10 20:56) m1 E, F) s. m5 d: s( z
我是来抽奖的!帖子MARK一下
; _4 Y- ?6 ^# L
你抽奖,大材小用了
羿日光年 回答时间: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- U$ L* ]# v2 |
支持一个

8 A) {6 B8 a' _; |0 ^1 b求赐教
馒头弟 回答时间:2015-1-10 22:12:43
Veiko 发表于 2015-1-10 21:29
8 s% P5 O' |8 d2 v& t$ y0 |我觉得应该是取之南海,放诸西海
8 B! E8 b) H' B& p0 }; j: S. B
看不懂,不理解
12下一页

所属标签

相似技术帖

官网相关资源

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