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

【经验分享】STM32F2系列外设设置规则

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:
+ z1 ]8 G# }* E4 o" f% ]8 T$ _7 s在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。. g: @% O& V  Q. J" d, q. J$ a
4 G) ^( k! ~$ P$ i0 Q9 X% \$ z
1、  时钟设置:包括引脚时钟和外设时钟:; u% v6 v, {, C
; V) y' [0 Y- e4 Q2 ?6 w
RCC_XXXPeriphClockCmd();
) R# u% V! j* e) ?0 Z# a$ \  w# Z/ j: I" i: a, a$ [  S
2、  引脚连接:即把引脚和外设功能进行连接;% k0 a# R% f+ C; H7 B
0 @& {% t: d+ W
GPIO_PinAFConfig();
+ p" p  ^7 Q% R! I$ V) @+ h4 d
2 ?5 E4 e; s3 c' y5 J& v! X如下功能需要引脚与外设连接。) k$ S+ K2 ~; j. F
4 o' G9 ?* }  n" v# e6 b3 k
  *     @arg GPIO_AF_RTC_50Hz$ X- Z: m. Q; `- v% q
& o- |; e8 D& ^* n: d" V0 O" p
  *     @arg GPIO_AF_MCO* A# s; h' D9 c" @& ^. b

; K+ i1 f* H, {, k9 U. Q' j  *     @arg GPIO_AF_TAMPER
' J# I. w. @0 v& G/ W0 @, r
% z; W- y9 F# e8 p8 s  ]3 T  *     @arg GPIO_AF_SWJ/ I* ~0 s4 _' q/ y! b4 A
9 I* M: b! T1 v* o4 F
  *     @arg GPIO_AF_TRACE0 c3 {) z/ Z9 D( f9 Q
3 u2 \- y% m" J" H
  *     @arg GPIO_AF_TIM15 A' K0 W4 p+ a/ i3 H
1 x% m! ^# ?& V
  *     @arg GPIO_AF_TIM26 ], U8 A9 m% K
) V/ @- j+ V, z
  *     @arg GPIO_AF_TIM3
/ n& W7 d! a# E) L* |! {1 V+ q8 w+ s8 w' T" X( V
  *     @arg GPIO_AF_TIM4
2 H2 e4 l  G; `7 K; t* a: M5 l$ D9 k  W
  *     @arg GPIO_AF_TIM5+ _" |  e/ W9 q
9 {+ I! S( v3 k# ]
  *     @arg GPIO_AF_TIM8
8 ?! Z" Q) M2 d& ^$ [9 u1 T0 N+ M3 O$ P; A/ b6 v; y2 B2 I
  *     @arg GPIO_AF_TIM9
6 [2 ?6 p. @9 s, V9 {
2 h8 y: x  h* J+ l  *     @arg GPIO_AF_TIM10
7 {  e2 R+ q9 n. t/ P6 t" a  f7 W: g
  *     @arg GPIO_AF_TIM11
( R& e, Y$ [& d9 ?( q8 L
8 r! P0 A( o) g! S" t- v) M0 j  *     @arg GPIO_AF_I2C1: K8 e2 s; w7 Y2 D# c7 e0 w
* ]+ V( i5 a% U2 C
  *     @arg GPIO_AF_I2C2
. z$ g) v* Z1 P# N* y! ~$ x7 \, m3 i' b+ x6 V, r1 Z2 ?" E" |
  *     @arg GPIO_AF_I2C33 C$ Z9 X. M$ d5 W& {$ t

+ q8 T' c* M7 o  *     @arg GPIO_AF_SPI1
) \# v6 H. q. z) L" h( n: F/ Q8 F* a" i2 m6 K% }
  *     @arg GPIO_AF_SPI28 G6 S0 r6 F; }7 o- r
4 d( D$ L0 I" H, Z. j
  *     @arg GPIO_AF_SPI30 y% \1 \8 Q- z+ n
. L" V1 f' _, c2 G
  *     @arg GPIO_AF_USART1
1 |$ V. d# `) Y" i7 P
$ t/ T* X: b: {  *     @arg GPIO_AF_USART2
7 e3 t/ |' S) `9 f. [* t
6 r3 r% k* ^; h5 W$ O( d8 k. Q/ Y  *     @arg GPIO_AF_USART3/ C9 Z5 g. n3 s# z

5 X5 |3 s8 D* P: W0 h  *     @arg GPIO_AF_UART4
5 N# y. Y+ P- d* m. E& |$ O8 n% T8 N$ ?- S" E
  *     @arg GPIO_AF_UART51 Z/ C* F# N/ I4 \* t

" S& M' u9 c' r( G6 y& o" Y  V- T  *     @arg GPIO_AF_USART6
6 \4 Z3 u/ B- K1 X3 p7 P5 a$ B
+ |. h, h) |2 ^$ ~  *     @arg GPIO_AF_CAN12 K( q$ D0 t5 `* z1 m3 @

! V+ n) Q- i  k6 v4 W1 v2 Q0 I  *     @arg GPIO_AF_CAN2
  t3 N5 i5 V: y. ~% d& [5 |9 u& ^; Y3 t0 s; o: w" j* j2 W3 \
  *     @arg GPIO_AF_TIM12+ O( F6 z$ w5 G- @# ^. g

& F) u( p6 x& y5 z; `. f  *     @arg GPIO_AF_TIM130 s0 @: `; N2 e: W+ U, v3 s6 r# y

% \! U% C+ O/ L* D: {  *     @arg GPIO_AF_TIM14
  K, Y! n3 x6 G! \9 \9 r6 X
- ~; d7 Y: y  L- ^- c# q' D0 o( r  *     @arg GPIO_AF_OTG1_FS8 s( ?3 j9 F/ H* u2 r/ n8 |
% E* W  g: g" s, Y8 l: z
  *     @arg GPIO_AF_OTG2_HS& T$ @+ z2 y- j: f
7 V% x' v% S* n% u9 I& m
  *     @arg GPIO_AF_ETH( h8 D+ j# T: s9 U4 t

- Y) S' P& {1 k3 H- A6 d  *     @arg GPIO_AF_FSMC
3 B& i) b, ~( J0 e' |2 B' L) l/ m* x6 G- U( o  A3 \& M: H% y% p# W
  *     @arg GPIO_AF_OTG2_FS2 M4 L" S3 E9 X4 U- \& B0 V

& Z0 ^; V5 T; _9 z1 H; J( ]  *     @arg GPIO_AF_SDIO
6 s* [  P& v" u3 g) v4 N" ~3 u  `3 Q& _4 u* N2 \( ^+ H
  *     @arg GPIO_AF_DCMI
: ~# C0 R" r% o+ h) q1 P8 u* m" d7 `) E. t
  *     @arg GPIO_AF_EVENTOUT
  K" E" |- y0 |& }* P4 h/ U) U5 a. W+ C9 d. _! `( S7 w
3、  初始化GPIO配置:
/ O. T7 P& D8 I1 @( @5 v% \$ l1 Z0 j2 X9 k1 |$ [! U' U
GPIO_Init();
1 H  b7 W4 ]7 t+ ]3 L$ o2 M6 ?8 v( w: R- x" ~6 A  F
4、  外设初始化:6 G/ s6 c- M, |# L4 m/ t. T- K1 |8 P; C
% S$ Y4 R# {" L2 U5 g0 }. V. `
如UART初始化如下:9 _" O( {2 `+ w7 a. m5 q# A) n

, e1 ]0 a7 D% E2 T. {  O: K9 M
  1. USART_InitStructure.USART_BaudRate = 115200;1 z4 |. S, @% g* n- M

  2. 8 I- `7 O8 w0 T' P. u4 z1 x& r; A' U* B
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;! @' t; Y' m7 N9 |: S' z" g

  4. 2 h) E$ L. Q+ a8 t
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;
    1 r) _, S5 ~" v+ J! }% D
  6. 5 y: q- a8 [8 w1 h+ H% `6 R' k9 y
  7. USART_InitStructure.USART_Parity = USART_Parity_No;5 Z$ T1 m! T7 Q* Y$ {" g% a
  8. $ J0 R$ E! V- b9 v/ d
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;& Q/ W: [/ K& O# l
  10. ' [; N" g2 w7 r# ~  G: F
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;8 |' r4 [, A0 n9 K$ D/ s0 Y' F' Q
  12. : L1 |& i7 l* Z  a. t! ]- a, W% y) C, B
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码
, q% j2 \4 |( \' D/ G  \, S
6 ?- H( K/ m2 R& z5 W% Y
ADC初始化如下:(多路模式)' R% S; O" W" ^3 [6 B+ U
! Q5 j. w, }/ N
  1. // DMA1_Stream0 channel0 configuration **************************************/$ B- J3 }6 o1 u

  2. % d0 ]: {+ r8 Q" V+ y
  3.   DMA_DeInit(DMA2_Stream0);1 o$ I3 W) }  l0 G7 o

  4. ) u+ d0 {( q. h% K
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    0 {+ Q) q! }* u( E3 I8 }1 X
  6. ' |- l2 L/ ]/ m  Y6 y
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址
    2 H3 U. H9 C9 ?0 l, B% y" o# a

  8. 5 V( Z. `. U1 A# d
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址& Q5 o3 y# [: L
  10. 1 s; i( f; ?) R3 }
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存
    ; J- s! T& N1 w" F0 \+ {. T8 U& b
  12. & u) e* p. d* A* L
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    ) ]2 f) X2 j% t8 v- f/ h
  14. + l* k3 n5 X% Q9 E0 ~8 z+ g
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变$ e" I! D: _" M5 F' z

  16. ! o) v' {: D3 h/ c1 F
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)1 B2 c+ d& E0 B/ B1 h2 J$ ^. k

  18. 7 {  {% a& O' B0 O% P% Y8 a' I
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字' s' s# A* g5 s8 {1 H) V4 K

  20.   ^- M2 A0 Q+ `2 L
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字0 {$ S" a5 @0 v' u( a

  22. # N- r: n1 a( @
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式6 E% y/ \* E5 W) S

  24. ( O- d  [9 P7 T2 B& y# [
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    : E! L! _/ Y; E. R+ Q$ i) u" b$ c
  26. ' i; ?6 B; w( o1 L# u) g  T
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;
    / E  K+ t/ X; R# ?1 \7 F8 x

  28. ) Z6 o* {. E" s
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;& O5 s2 g2 N( k+ a
  30. + |" H5 m, O4 t8 n
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;0 o  t# D  Y9 G5 O* _3 R0 o, G2 c

  32. & l, r0 v* @; L+ f5 _$ |
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/" }" n/ [: [5 X  P& B8 ~4 Q+ I( Z

  2. ; ^9 o4 ^9 K, b  Z/ H4 l0 ^0 M
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/
    ) T* f4 L; O  m7 K3 c

  2. % ^" e4 l9 N# _) H5 j" y" O
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/
    , f% X1 G0 G7 z2 x% s( _
  2. : y5 O9 C2 i% v7 b1 T9 `
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式
    ' N: M# Z4 V" W
  4. 3 r# E! P4 o( a! M. l
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频  D0 X  \# ]1 j9 |3 W

  6. 7 n' f+ W  U4 B. Y$ G* x! ?
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;2 i+ r, P2 p5 R8 B2 L" g1 `: h4 r

  8.   K( G. z; y" C' {: D- W6 F: b" D
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期6 `6 x% {/ y, P! \$ {
  10. 9 i7 \. N% w2 K
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/6 l6 q, \+ \7 ?' A. _! d

  2. ' Y$ R0 p& `; V. U0 Y4 |. w, N, I8 U
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度# S) v$ A4 t0 j& y

  4. $ F; h* i5 c8 w& G9 b
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    ( e5 A5 M& C0 r1 V' ?7 m
  6. ' ?8 {5 ^7 F0 @; p7 U* ~0 n* B8 ?: @
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式1 @- }- n/ j3 g' I

  8. - S# K; v9 g) ]! w4 S  y$ [
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发
    , \& E; n, c; C
  10. " ?/ C4 H$ L$ ^/ u% d' d' D
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐
      k1 P7 S8 O" U0 R- \% ]: {
  12. ' p3 i1 Z( N2 \( o1 G
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数# M2 K3 `  c; W: O

  14. 9 w; U) _# A* _  G9 o
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/
    ' {% d: _! c% _: {
  2. 7 c" q+ U* Y( J1 w$ B6 x6 k
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);5 c/ q( N( a0 [. P

  4. : n1 T) @3 w4 W' S% k/ m
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);! E8 k# E. i8 h5 e

  6. : n6 V/ _( ?  D; q
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);
    " D! _9 d' I( ]3 o6 `8 f, g2 D

  8. # ^  x7 H. g. _
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/  @& O1 D6 n" j3 c5 F6 `
  2. 9 H: U' N/ a) l9 I4 H% n9 A
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/
    & T* A6 }# I  C) @" }8 Z4 M! t

  2. ( b  T" c1 q, v& v
  3.        ADC_DMACmd(ADC1, ENABLE);
    6 [# `" p) }, O3 D
复制代码
  1. //*************** Enable ADC1 ***************/, X, l. K' i5 g( u  I' F
  2. . a# D( c/ ^5 G
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. ! r1 k2 K/ T% X" O  s" R  |4 {
  2. //******* Start ADC1 Software Conversion *****/
    - B: H/ V2 R- Y3 a* p
  3. 5 \0 y' ~* Q! I0 K; ?
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码
  i9 j6 U; |0 ]9 h2 r1 h
! `0 h8 n' P8 i$ K$ U
5、  中端配置:1 P9 R3 R9 s5 M- o
+ {+ |0 x( b5 t. X7 c, O
以下为串口中断配置:
" y/ W# m6 X  ^3 H% o) q
! w1 V& ~3 k" F9 ]7 _& C0 L
  1. void NVIC_Configuration(void)
    6 f3 l2 B; S" f; C% f8 J( b

  2. 1 w! P  T6 C1 i4 Q7 N
  3. {
    $ o6 Q. x/ e# R- V& w1 a+ W- ?" f: u- C

  4. + J( I% x' k4 J! ]4 q
  5.    NVIC_InitTypeDef NVIC_InitStructure;- t6 d# F' w) Z

  6. ( J, e9 P! @. z  X: Z5 u/ J9 l* `4 ?

  7. ) I! H6 d& Y" G$ z8 V3 v
  8. 0 [) M! W1 Y# o1 `2 U
  9.   /* Configure the NVIC Preemption Priority Bits */
    3 m7 L3 q  }+ X9 y, L# @( P
  10. 8 ^. x! U' j# K
  11.   /* Configure one bit for preemption priority */  N: i% b% M0 F. g! q
  12. ( }5 ~3 V, L  O+ U% c
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
    + @6 O* }. q8 s7 }$ }% z+ |7 Z" E

  14. ' c' I) D! l) a
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              
    8 x- O, v, l1 y9 E+ B$ m% n# c

  16. 4 g" {4 T) X  E3 s! _

  17. * X0 Y+ @/ t( \' R

  18. * {& E3 {+ W, q4 e
  19.   /* Enable the USART1 Interrupt */5 \) Q) K, m+ V! o" m4 {
  20. % }3 Q" T4 G3 C: w/ m+ q% ?
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断
    # P8 Y+ Z) a( P+ K3 y! v$ ~6 N

  22. : z, m) q8 {! H5 c% P
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 03 B2 y) L' g7 O
  24. 1 K5 `- F1 e- W" t8 f6 F- K6 c) M, X
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0
    ! f1 J+ S* R0 O' ?! r$ V9 a% H
  26.   J, [# w8 j# d8 E  ~
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能) o5 M& S; K* d3 F' C; q
  28. 4 \/ f. ]4 l0 d& T1 s. b' h) K8 R
  29.   NVIC_Init(&NVIC_InitStructure);# _3 o& l3 }/ j0 k

  30. % b: r5 R6 p: y' L! ]; W
  31. }
    ) S' c# p4 d& c/ d: \% ?
  32. , l; a. A" }! O4 G
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断8 [& ~, r; D1 @" G- Z1 j! X

  34. # B% J5 v1 e  D% \
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断5 ~4 _9 S  }0 e; t) R

  36. ( T0 p, C1 [; P
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
    + J" O' A  T# e1 F
复制代码
: A& P) Y% K% ^* N( O% @
6、  使能外设功能:
% f  M6 i2 Z+ I" q" q: [2 E& v% X4 l: ]- [/ J# N: {
串口使能:! _# a" l2 O) u8 k: Z: I* T
2 T( k& h/ Z" B* K& W7 V8 a+ e# T5 @
  1. USART_Cmd(USARTx, ENABLE);0 z2 j/ P/ o6 `1 G5 g- I& T

  2. 4 V+ i: Q& r8 T7 T
  3. ADC使能:
    . n; ^- `1 P4 Z
  4. # F! s; B- h9 y5 M" i4 X% F0 D
  5. ADC_Cmd(ADC1, ENABLE);' c5 H! X" [4 `' @) @6 x
复制代码

7 O  n0 Q) D9 Y* L! X8 e6 t) B) O* a+ d
赞 收藏 评论0 发布时间:2021-12-4 17:03

举报

0个回答

所属标签

相似技术帖

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