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

STM32F103——ADC之再理解

[复制链接]
馒头弟 发布时间:2015-1-10 20:29
本帖最后由 馒头弟 于 2015-1-10 20:47 编辑 , F  e, G1 v0 T+ a+ x
7 B% K+ D$ c. W/ L* x+ w1 O$ C5 H. @& m
先来一段正点mini板的ADC初始化例子
" V$ n- E8 r) }  l; K
  1. Stm32_Clock_Init(9);1 K4 `/ }8 H9 R
  2. void  Adc_Init(void)) p) b& q. b+ d; m  q% L
  3. {    ( e! j! {) o$ S6 b- H4 U( d
  4.         //先初始化IO口% X9 t  Z9 a2 V: a8 _
  5.          RCC->APB2ENR|=1<<2;    //使能PORTA口时钟 . Y5 G% W* @- W% U+ u
  6.         GPIOA->CRL&=0XFFFF0000;//PA0 1 2 3 anolog输入0 C0 P- _) g. f0 Q* e" w
  7.         //通道10/11设置                         9 c" K' k) X$ Q* |- c
  8.         RCC->APB2ENR|=1<<9;    //ADC1时钟使能          4 ~; T8 a9 S9 P+ O4 Y" T: f) D
  9.         RCC->APB2RSTR|=1<<9;   //ADC1复位
    1 Y) K! [  W( R! E, J5 {
  10.         RCC->APB2RSTR&=~(1<<9);//复位结束            
    $ M' \& ], l; v( ?# J# n
  11.         RCC->CFGR&=~(3<<14);   //分频因子清零        
    ' s8 H; l% |4 r0 L
  12.         //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
    ; i. y3 r2 T$ r  S
  13.         //否则将导致ADC准确度下降!
    1 ]: L4 y" e8 _9 T4 N* n
  14.         RCC->CFGR|=2<<14;               7 I: i( A0 }+ v  F) K. @8 y8 K

  15. ( Q' H& E& ~! X7 \4 o) ?8 t% f% V6 ~
  16.         ADC1->CR1&=0XF0FFFF;   //工作模式清零/ E* S& A( I, J5 X
  17.         ADC1->CR1|=0<<16;      //独立工作模式  & A, C) z" b% V# v' O
  18.         ADC1->CR1&=~(1<<8);    //非扫描模式          8 z. L1 Q0 {/ j3 ?  w
  19.         ADC1->CR2&=~(1<<1);    //单次转换模式# B0 b& }% ]5 z2 z
  20.         ADC1->CR2&=~(7<<17);           * j# K% V. l) c; p
  21.         ADC1->CR2|=7<<17;           //软件控制转换  + H3 }4 y2 S- R% o& v
  22.         ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!        必须使用一个事件来触发0 A4 p. h( v. w6 ]5 D
  23.         ADC1->CR2&=~(1<<11);   //右对齐         
    ) p3 J; u7 ]) s- w
  24.         ADC1->SQR1&=~(0XF<<20);# D3 Z3 \% V1 z( @
  25.         ADC1->SQR1&=0<<20;     //1个转换在规则序列中 也就是只转换规则序列1                           
    : n1 m1 m0 \! I( k2 @5 b
  26.         //设置通道0~3的采样时间
    . D9 p: A# I3 _+ l( c
  27.         ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采样时间清空          2 \+ @( E* C7 b* Y- `+ q. n
  28.         ADC1->SMPR2|=7<<9;      //通道3  239.5周期,提高采样时间可以提高精确度         9 [1 W0 w8 d' s8 g5 ^
  29.         ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度         
    ! n  T3 B2 q7 Y8 T5 [( d7 E
  30.         ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度         - f+ n/ R. u9 d- m9 G3 q! G
  31.         ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度         
    1 L/ d6 v4 S* W

  32. 7 _: E+ Q: \( ^
  33.         ADC1->CR2|=1<<0;            //开启AD转换器         # k, T; U5 w$ I6 s
  34.         ADC1->CR2|=1<<3;        //使能复位校准  * b+ W% t% |& [2 j  |: `, f. }, G
  35.         while(ADC1->CR2&1<<3);  //等待校准结束                          , p/ ]9 z  O* U* q
  36.     //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。                  
    7 P( ]" U# M; C
  37.         ADC1->CR2|=1<<2;        //开启AD校准           / d; A/ j' y7 e& h$ E! ^
  38.         while(ADC1->CR2&1<<2);  //等待校准结束
    , U: `! S8 l; `
  39.         //该位由软件设置以开始校准,并在校准结束时由硬件清除  6 o/ _4 o* }* [3 [, r; Z2 C3 |
  40. }
复制代码
. ^3 p! c! e# d$ E- e9 I2 Q

4 {, Y9 X1 s! Y, M% M8 u! }3 }初始化中可以看到,SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!当ADC的时钟频率超过14MHz时,ADC的精度将会显著下降。
  @/ _  f) U1 p7 `# b2 c: g4 Y
STM32F103xx系列称为增强型产品,增强型产品的最高时钟频率可以达到72MHz。3 z4 `$ e+ [4 H: {/ H: s* {! s) x' |6 y2 x
STM32F101xx系列称为基本型产品,基本型产品的最高时钟频率可以达到36MHz。
6 ~- l( F* c8 Y7 Q  |/ d根据设计,当ADC模块的频率为14MHz时,可以达到ADC的最快采样转换速度。/ G4 m9 i! l' s7 _& O
4 a/ @2 y: {7 E4 ^7 v0 O3 {
要得到14MHz的ADC频率,就要求SYSCLK的频率是14MHz的倍数,即14MHz、28MHz、42MHz、56MHz、70MHz、 84MHz等;. N" b% N- J1 v3 V

  }# V$ S+ M0 E2 b对于基本型产品14MHz和28MHz处于它的最大允许频率范围内;. b# L0 s& J7 H- V5 p5 l& X" `+ E
对于增强型产品,14MHz、28MHz、42MHz、56MHz和 70MHz几种频率都在它的最大允许频率范围内,但因为ADC预分频器的分频系数只有2、4、6、8这几个,使用70MHz不能得到最大的14MHz,所以要想得到最快的ADC转换速度,在本例(f103xx)增强型产品上能用的最快SYSCLK频率是56MHz。& C1 O2 a. K& {

5 {/ Q8 a5 G( P3 I4 \7 FADC的速度由2个参数决定,它是采样时间和转换时间之和:
2 h* `- p3 Q5 q/ B         TCONV = 采样时间 + 12.5个ADC时钟周期! R4 f1 K+ g9 m3 b; H- Z$ f
: L5 W) T0 w, v% T* S% _) H' {. ~% I
在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万次。( d1 G- w* a8 O# `
5 G% G' ]; b$ z& x& @
" b7 V- t7 S7 D) C9 I. p5 O8 n

# X3 [/ U* A$ `, I$ Y# b6 m0 D! P7 D
$ [# r8 h& O+ @$ \

5 J+ U6 r  q) @9 f' 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:39
0 P& O- J8 @) A4 d  R帖子前最好再系统介绍一下该芯片型号的AD资源。这理解也只能给新手看了,厉害的人看这个就是常识。。。mini ...
$ H# g& P' Z  o, B
多谢学长,以后多多指教哈
博根 回答时间: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:326 c! V, w" a# \) R6 N6 |' {
不错呢 赞一个

" F" Q0 f. a/ U' [8 @( Y多谢支持大家有什么心得共享共同进步哈
馒头弟 回答时间:2015-1-10 20:43:27
z00 发表于 2015-1-10 20:41
1 k  e+ m$ S* e  G7 y1 i& Q额  没中奖;。。。

; b# Y( N5 W3 z, w- w5 X失之东隅取之桑榆
末未本 回答时间:2015-1-10 20:56:56
我是来抽奖的!帖子MARK一下
馒头弟 回答时间:2015-1-10 21:12:50
末未本 发表于 2015-1-10 20:56
- J3 n; P) f: U9 t+ }* n我是来抽奖的!帖子MARK一下
. M+ ?2 E3 k( B! w) U6 n3 Y
你抽奖,大材小用了
羿日光年 回答时间: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
) k& }) P4 {/ ]+ a支持一个
6 y$ K$ k( h( Y0 R4 u0 V% Z. _
求赐教
馒头弟 回答时间:2015-1-10 22:12:43
Veiko 发表于 2015-1-10 21:29/ c7 g# r! V! R& w3 Z
我觉得应该是取之南海,放诸西海
8 D/ C  K' v+ H$ n! f* p
看不懂,不理解
12下一页

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版