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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:' T  @" I$ u  {5 ?- E+ J) W% L
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。
2 N9 d7 N( Y5 `; S/ Q( |/ Q* c+ {$ l/ v, o! _" c; F! Z3 d
1、  时钟设置:包括引脚时钟和外设时钟:
% _# |6 Z/ x) N" s9 a2 c2 I" _2 f9 i3 J2 D4 u: q
RCC_XXXPeriphClockCmd();
+ F1 A& G0 S9 A/ W$ k
1 J* j/ A9 ~  I- `  H# f! n2、  引脚连接:即把引脚和外设功能进行连接;. {5 N4 g% ~* Q; S# ?
# t  r) S$ [' k' B$ i" J! n2 p
GPIO_PinAFConfig();" Z( J  X' {" W
! n9 B$ T1 C; [, W& x% I
如下功能需要引脚与外设连接。# [8 a6 G" k# l* q4 |+ R: |

. d* o7 R  L; ~1 D- s( e  *     @arg GPIO_AF_RTC_50Hz& _* _6 }0 A; c* t4 [

$ N' ~2 @4 C6 z6 y- \  *     @arg GPIO_AF_MCO
* T  `+ B6 S5 J6 G% z. j! t* B6 Q2 c5 m
  *     @arg GPIO_AF_TAMPER/ j" y7 k- W6 Z1 L6 F1 v) y
3 `1 H& _7 u) s, w5 N
  *     @arg GPIO_AF_SWJ& C; ~+ u: ~/ Y0 I) C: t
& n3 A  x) H0 _7 N
  *     @arg GPIO_AF_TRACE
) q3 c# s7 j* p+ H0 [$ b' s( M" @
* E+ f+ i3 Z# i  *     @arg GPIO_AF_TIM1' W$ X+ j8 @: `4 I# o9 c

: E; _+ X  m2 _) ~( a% m0 |. n1 O  *     @arg GPIO_AF_TIM2+ Q7 ]- c3 Q4 x% G; A" u
- z( t% ^. R4 y  n" K' [* O
  *     @arg GPIO_AF_TIM3
! D8 S5 L! E0 r8 K% G' f' b: R- Z  o
  *     @arg GPIO_AF_TIM4
' P3 ~* k- `4 f9 D; G8 L6 f" c& m9 F: b4 h% U( T
  *     @arg GPIO_AF_TIM5! X$ b! q) s* R, _9 ^  v+ V: p

7 G5 n- j! y' w. P) z2 o  *     @arg GPIO_AF_TIM8
! h  X5 X* x4 E0 p6 X% a
9 r! E& |; T: D  *     @arg GPIO_AF_TIM9& G6 W- v3 n3 B$ E( b! y3 O

7 T+ X9 g) q8 j& {- H+ E$ p" W' N, z  *     @arg GPIO_AF_TIM10
0 h! [& f2 B4 E  W" G8 k6 @: J. I* T/ k8 M( L  f4 x$ A5 N5 f
  *     @arg GPIO_AF_TIM11  j( U" _; A* [/ Q2 o/ ~) N" o

8 E4 C, x/ T9 v  s  L  *     @arg GPIO_AF_I2C1- t* r3 G% G' X9 D0 H1 ^
7 T/ ^$ G% S4 ]7 Z5 D0 C/ C
  *     @arg GPIO_AF_I2C2
: S* P$ i2 d. b  ]: L5 T5 L! o! ~% m6 b
9 ]  W  c4 ~/ {9 i$ M  *     @arg GPIO_AF_I2C3, l# o7 p3 h) J; |0 N* f
7 s3 W2 F& H8 `3 {$ C
  *     @arg GPIO_AF_SPI1
1 ?& U8 p$ p# e( D4 E3 a: C' w1 L' i0 D# b1 C- `6 j. F: Z
  *     @arg GPIO_AF_SPI2  W- z% U# `8 w5 a, \& `
7 j  Y4 i1 F2 f4 M+ g6 v
  *     @arg GPIO_AF_SPI3
" I( K% d0 D9 H8 F5 o5 s3 N4 g3 |7 n2 c5 Q; ?& `0 o+ k: V
  *     @arg GPIO_AF_USART1. y, [8 T, n/ X( \, ?* \- ~* K

8 s% B: V5 M5 D4 L  *     @arg GPIO_AF_USART20 `- Q7 D1 j) K) P' @  K

8 }2 N7 r. Y6 O+ Y  *     @arg GPIO_AF_USART3
$ z! t% L. F  p8 N. ]
# b' z( N7 K& |" K4 K$ k2 J0 f  *     @arg GPIO_AF_UART4% l0 W/ B( [' _, f- t" r5 F
9 Q( `( E0 c& q) @4 y
  *     @arg GPIO_AF_UART5, ^2 Q  k' f" r

# }5 u2 P4 D* x& p3 W  *     @arg GPIO_AF_USART6' u, Q! R0 \/ B) y7 E+ m! t( [7 O

$ w1 q  e1 N" L1 y  *     @arg GPIO_AF_CAN1, m* t- g7 O& ]3 U1 ~

. M+ ~* P7 B9 g( T$ y8 f  *     @arg GPIO_AF_CAN2/ [3 ~/ z8 I, h5 n  S- w! f" t( O

0 e, E: D" a- s  *     @arg GPIO_AF_TIM12& v: z0 t; Y( o# v' W8 D
0 p: Q9 r  V" i2 s
  *     @arg GPIO_AF_TIM13
' s& Z; I8 }- t8 i' B: N6 S
& F/ g: [: z8 T- p8 q4 a9 s0 [  *     @arg GPIO_AF_TIM14; b  }( L  L( c" e5 B/ w* {
2 o# f3 Y9 D  K: m, w, z
  *     @arg GPIO_AF_OTG1_FS
% t+ ~9 y% X. ]# _! h* F" T: L. h. S! Z
  *     @arg GPIO_AF_OTG2_HS  c) S3 s% {9 S+ v- J  u* d( [
1 K6 V: Y) Y4 j% ]
  *     @arg GPIO_AF_ETH) T3 {  ]" ?' ?7 L; b
2 K* j+ d( J4 ~. ]9 {: C
  *     @arg GPIO_AF_FSMC
8 a4 l: f  V+ `6 V8 D
( N, [3 t5 t  n8 @  *     @arg GPIO_AF_OTG2_FS' i! I# K* X7 u* p+ U! u

/ J' T6 l# F; ~5 |0 c, f7 m  *     @arg GPIO_AF_SDIO
* r  a1 x' j( ]5 n) o; {' E/ X+ _0 j. z  z' Z. ~' Y( m4 F% p
  *     @arg GPIO_AF_DCMI2 R+ N+ C5 ]: d7 J

/ ^6 \* b2 M5 G/ G' c6 M  *     @arg GPIO_AF_EVENTOUT7 O7 g3 O- m7 t+ K

7 W- t! Q7 h( h4 e7 t3、  初始化GPIO配置:
6 C! G* J3 _) _( G& j# [
; j7 j8 [. K/ {+ H* G# Y* E3 r# a; [GPIO_Init();& u, h5 O% X, x9 j/ l
& B) F& m2 A3 o: h6 D  y3 ]4 S
4、  外设初始化:6 z5 ?3 ~6 T- r/ h, k, Q& {1 p
3 L9 l, R& v0 ^8 S
如UART初始化如下:3 z+ B* ^2 v) U0 b( J: C6 _

# C$ n2 _1 m& f2 K" @) F
  1. USART_InitStructure.USART_BaudRate = 115200;6 O/ h+ {4 |5 Y# W2 ~* R5 b) y

  2. 6 Y+ S& o; `: t- F
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    8 {# M. }6 M, a, ^5 e" r* a
  4. $ _# m4 w" f) W
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;
    % V, Z2 O, }5 T, J7 B

  6. + ~. E& ]& z5 ^
  7. USART_InitStructure.USART_Parity = USART_Parity_No;# G1 d. G6 f& ^

  8. 9 m+ n; M7 E* O1 g9 O: H8 x
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;- y: D* Q9 _6 d/ e- j
  10. ; r; w% g+ z. g0 }( r6 w
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;3 T7 |+ E9 \6 \% P" i3 I7 `

  12. 8 D% B' M" a0 x# Y7 n
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码

. b+ Y- d) t2 H9 z1 \; \& l  G4 Y' ]: R( c
ADC初始化如下:(多路模式)+ U2 t7 P, v( [7 C) W# H' `- B. ]

# G4 z. L8 M7 i: f" Y" j
  1. // DMA1_Stream0 channel0 configuration **************************************/
    * j5 K6 c9 l" }
  2. : k0 U0 N( j9 T- q
  3.   DMA_DeInit(DMA2_Stream0);
    / l# l. V0 u' k' T
  4. 7 N+ m, s" o; ?: u! [/ e8 g5 e
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    4 G9 S; F  z0 C: J( z6 C! p
  6. : r7 a3 e9 M4 m- Y) Q9 ]
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址- G# g0 @2 A( V: r5 c
  8. 1 ]# ?3 R, H! S* O- |, T2 n
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址
    3 K9 V! z9 S, O
  10. 2 |: [% J) X7 r( [. K: c
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存
    % B9 d! f/ y# y8 h+ l7 G
  12. 4 q) X6 W4 W* v4 _( \0 P* v
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    9 _- A, X4 h6 O- z$ L+ x

  14. , b0 ~3 P4 c) }
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变$ y0 M$ r: K2 @
  16. / `1 R$ D% ]9 c; J+ }
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)2 W2 d) N6 ^  Q. q) F9 {

  18. ' D4 d9 K8 t% G  E  ]) D, w3 j
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字/ e! o: q0 @# H% K! |: D! B/ a

  20. 7 F# @; j& L" r
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字
    9 J% u7 Z8 B0 R  K+ a1 `
  22. # X+ t; |6 Y# S% \; e
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式
    * q. ?' y' H& f; J" r, a+ R* J

  24. : T  [# a' |* W+ J
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    4 f: D) F4 S  q: n2 g  g& f

  26. 3 Q) B# J! E; w
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;
      j6 a1 ~7 W' h

  28. 4 B# c- N* G( G* @
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;, o- {" ]$ E" R
  30. ) p! D. \% m& D- F$ G% _: m
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;' @: s+ @! D4 A; _

  32. 4 G& |, Y% c$ r2 z3 W
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/* `4 T/ b; ], F( K

  2. ' I. W. F  k0 s, t/ r
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/
    / g( i' c$ q( v
  2. % X' V& {/ D; V# j* t# ]+ Q1 q
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/+ v: }( R, ?0 T3 k1 v6 p7 Z
  2. + B3 |" ^' T- M. H: M) }1 z
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式
    # u6 H6 i* k1 ]2 ?
  4. 6 V0 V* B. _) m1 p
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频
    ' i( z; K4 @" t

  6. 6 B4 l2 V$ c& ~! W  X
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    ( R) @% Y: B: z8 X* N+ g2 h* r, ^
  8.   b2 I- h+ k: _9 e8 W( U/ j
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期$ J% `# M" o  x5 |! X3 J
  10. 6 Y+ a: W% `" f0 G- ~
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/
    / W  O( `$ V+ ~! J
  2. 1 L* p: k2 m, b  u9 E
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度, X6 S' g& B& u

  4. * v4 C0 i$ W0 S/ t2 `# Y
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    ' V- k% {0 x2 Y7 r
  6. $ m  p" L- O6 j6 ~: _) m+ D1 X+ }
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式6 b: x9 a$ s0 D
  8. ! d9 V2 r/ W1 I  `
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发& u0 C1 F; A0 u4 f- P, O" i
  10. 0 O! x+ C5 n: t9 r
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐
    & R! Y2 t1 X5 ~* o* b
  12. : z. r! O; Y7 r" Z; {7 ?; R" Z$ o
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数: L% L8 q' M. f
  14. 3 w% F% e4 u! N  H; U1 X( E' S
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/. h4 l* ~; R2 P( K1 e- E! P8 }$ _1 v
  2. % g# H7 Y3 ^$ `3 S; |$ p
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);' j9 {8 }) M, c' t7 ~1 Y& f. F
  4. ! ^6 ~; ^0 }  f- E, Y
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);9 R* {) \3 t  R* K; M- z) S8 m9 j
  6. 6 Z) _2 e9 s0 @6 u! J1 t, I( J
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);/ s4 R0 b  d8 b3 n) S  o

  8. 1 k0 J: `% j; H) I* D5 T' z$ ?
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/3 r" i- K3 C; ?# K3 X' T: e, w

  2. + d# g3 t# |4 i: q, m% Y
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/9 p- a% }# d' K$ v

  2. # f5 A, w0 x) {1 W# y6 B4 ]
  3.        ADC_DMACmd(ADC1, ENABLE);
    8 l  E" `2 N% C: s; I% {, A( o
复制代码
  1. //*************** Enable ADC1 ***************/0 o% M' }9 e* m$ A+ M

  2. / [2 |5 E- x( _9 q" M# `
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. ) w" W  R! P! v2 P
  2. //******* Start ADC1 Software Conversion *****/
    4 L# b. c4 {7 `

  3. - q4 _6 p2 Y- R8 e
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码

# [' B& G2 a. x* x8 l5 j  D$ z* H) n, F( g7 y
5、  中端配置:$ Q& S1 Q; n9 Q- x  q5 e8 V
. T# j: Y8 Z0 v
以下为串口中断配置:4 U$ w5 a, H6 g: D* r) X

& @, P4 ~' V$ }. v  {
  1. void NVIC_Configuration(void)& ], d( A7 m! N2 s8 {# c$ V
  2. : a4 K- w+ N  _' C( |  A
  3. {1 R# y  d4 k7 d' `2 K% h0 r, Y4 x
  4. % \' U8 L, C1 S( @3 d5 ~" s/ x
  5.    NVIC_InitTypeDef NVIC_InitStructure;
    7 v/ E* o( @( f

  6. 5 H# V2 i' C4 G5 {
  7. 4 y* L* l- D6 V- d( V- T1 Z+ \
  8. 4 R) O0 L/ s( o; K- q
  9.   /* Configure the NVIC Preemption Priority Bits */ ! Y( {* Q7 E0 V7 ?, p0 r* K% ^
  10. 5 z8 V0 m" c+ E$ ?: Q; Q
  11.   /* Configure one bit for preemption priority */
    + n5 I0 ~! v& c, e8 g, m3 Q9 E1 ]1 t4 K
  12. 3 ?+ T6 t5 E  B1 f2 r! V
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
    + ^. o, A  X* D  u- Q2 X& w, ~
  14. ; e1 w! G) ^' O. l
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              7 j+ s0 k) J1 x) ^
  16. 0 p" T' c7 z# \! B/ Y

  17. " A* b. K# S+ i7 p& [

  18. 4 [# R( p) ]3 ]& `' h4 e  {+ c
  19.   /* Enable the USART1 Interrupt */
    5 y. v+ C1 A& B: K8 u) O
  20. & H% n9 |3 ~5 g8 X, _/ J( u
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断
    ; H9 i8 U, c4 |8 d1 Z
  22. - N" b' a5 t$ I* a! }1 o
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0
    + T, q3 W& C3 P# ^5 d- F  v1 E

  24. 0 O, f- r/ J+ T: Z3 ~, s
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0! W$ J& l! }; |
  26. 8 ?: N9 m3 c1 k1 M
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能7 `7 v; F, Z+ p; S) O
  28. , i: m  Q7 v! e( }+ x" {
  29.   NVIC_Init(&NVIC_InitStructure);
    3 [4 h' d  `( \1 R
  30. 4 S; h1 i, L( N& b+ F0 C
  31. }' q5 k! F; J6 i$ @6 g

  32. 1 o. p" U2 }' V0 y6 a# U
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断; G  J  a" k# c2 ~! S

  34. 3 u) y+ c1 v6 T+ N
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断
    & k. ^9 a- F6 x- j0 }1 c3 }6 x
  36. 5 z4 n  c; N' G" _
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断5 r0 ^! M/ H- R& `, N+ d  o
复制代码
7 @' [- H/ _8 O1 J3 X# ]8 h/ k
6、  使能外设功能:4 R( m% n' w2 a: V) B* v

" `! o  F7 {5 ]0 W' `& }串口使能:
+ ^3 M+ i1 ~3 C' `9 T  Z
. f: V+ D3 w$ X) V
  1. USART_Cmd(USARTx, ENABLE);
    9 ^: D1 E* p0 i" I& F: f
  2. 8 y3 g0 U. U0 {' ^5 i+ W5 _
  3. ADC使能:
    ! _/ T8 H' Z$ P- E: a
  4. 4 _0 Z# E2 y6 N6 I. J
  5. ADC_Cmd(ADC1, ENABLE);! C) B" S: n4 \# A( n
复制代码
; L& L% w3 M* Y: V6 d  h/ J% n* y% S" q
! X0 G1 C: U- X5 t
收藏 评论0 发布时间:2021-12-4 17:03

举报

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