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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:
2 G; F# b* ~* C1 U在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。
8 l2 q0 i* s7 G5 s) v5 U" g
5 o  P. ^1 Y$ F& h1、  时钟设置:包括引脚时钟和外设时钟:0 B9 b7 y0 ]" P0 X$ c  N) F

* I: k5 `' X6 a# `RCC_XXXPeriphClockCmd();
6 h2 N& ~! v1 |5 G  u4 Q; }0 @- T6 a% ]5 c& A
2、  引脚连接:即把引脚和外设功能进行连接;
. r' ]2 ~/ K* ~" _" u. @; ^) o5 U' Z2 V$ ]& d6 A( u" C
GPIO_PinAFConfig();* E' A5 I  w$ z: z' Q7 _

3 V6 b# O8 r$ P' ?% k& L& d如下功能需要引脚与外设连接。* T9 T7 ^, l! B1 {& E
# |. Y9 _+ d: Y
  *     @arg GPIO_AF_RTC_50Hz
' q7 J$ k4 I5 N$ T- w9 y' V3 O2 F) Q0 r9 g9 N
  *     @arg GPIO_AF_MCO
0 h3 }7 H* q' e9 U: ~
6 U8 A/ o. m2 [; @# x  *     @arg GPIO_AF_TAMPER* n: N5 G2 z$ P. ^# ]
$ d# w% r) d' ?" k! Y, a* _( U
  *     @arg GPIO_AF_SWJ
' R. l. l% l) N0 r9 X2 N( D
4 |# B0 z# e' k9 ]  *     @arg GPIO_AF_TRACE
, g) P. l' m( f& ~1 X* t- V) L  V6 G+ [. n
  *     @arg GPIO_AF_TIM1
* ^* J, X) i! f+ ]% L5 U& g' l3 R, Y( K0 v' k" [
  *     @arg GPIO_AF_TIM2$ ?: ?$ R5 P4 f5 l+ d  K3 r3 |5 H( ^

9 H( W/ c0 v! O- O  a+ ^  *     @arg GPIO_AF_TIM33 m( t1 d/ K. O. M
: j0 H) ]% `, B- _' M; _
  *     @arg GPIO_AF_TIM4- w  n' i2 b* b* {; Z3 c

! @6 J" ]. L4 c7 V3 E  *     @arg GPIO_AF_TIM5% J7 ?# l) h* F1 r$ R9 d. {
3 B- t" C; F2 |# y% [$ U
  *     @arg GPIO_AF_TIM8# E- ?6 X1 Q# [- Y$ s

) f& B3 `1 G& r- @  *     @arg GPIO_AF_TIM9
! `  b' E$ z) z  X7 N- B0 F/ d3 F, O- {! P0 P6 e* T, Y( q& b
  *     @arg GPIO_AF_TIM10+ J# S1 l# l' ^# @

* B- W& U% u# n5 b( l" u3 c  *     @arg GPIO_AF_TIM11
5 q2 r# ]/ \+ A3 j2 ]+ S3 v: ]( m; M6 G8 v: ^, U) N
  *     @arg GPIO_AF_I2C1
) ?: {0 [2 `( Z" d
  p/ w7 _; t9 l3 ]$ Z+ E5 y  *     @arg GPIO_AF_I2C2
0 w! q1 m' ]* M4 t
  B7 [3 F. ^" Z; O4 q& v  *     @arg GPIO_AF_I2C3
. `  Y6 Q0 }. {4 Q! r! L0 ], I- P
$ v$ p, q- e% t/ t$ z9 f) J  *     @arg GPIO_AF_SPI1
7 E& D( o6 g+ [, p/ g" C* m4 p# s+ x: `5 `  v% B
  *     @arg GPIO_AF_SPI27 k" N1 \! z, p2 X+ E
( ]# U1 r+ m4 I& {8 N
  *     @arg GPIO_AF_SPI3
! b6 J; s" u' j1 L8 n  s  Y8 b+ [/ C" u! ]
  *     @arg GPIO_AF_USART1" \3 y, Z6 c* }
! w  R' ^. X9 f% H) h
  *     @arg GPIO_AF_USART2: m* u+ b) G! E2 S$ Z

; n+ S' E% }# N. B( J5 o. n  *     @arg GPIO_AF_USART3
5 J/ g/ \/ ]7 t$ Z: p
# o( G- D" }# c1 i6 F  *     @arg GPIO_AF_UART4: x6 E6 q) ]& R; N  V  Y0 }; N

3 Z  T3 E' q, B3 Y; d+ Z0 Z  *     @arg GPIO_AF_UART5* [7 W+ V; _: x6 L/ l" E! p
$ f7 {* D7 p; [# L/ z
  *     @arg GPIO_AF_USART6
2 ?! L2 k% h& V, O* E1 t0 [) n6 B& p* @1 F+ f$ G% h3 s$ b1 r4 c
  *     @arg GPIO_AF_CAN1! _; @# a6 r; h# \8 A# q* p+ |. R
* q& U0 B% k3 R: w' K' }0 n3 ]
  *     @arg GPIO_AF_CAN2; {4 V3 A) B, Y6 w% ?2 }7 g1 D1 ]

; K. }# m& w) S9 }  *     @arg GPIO_AF_TIM12; [& R: k, T$ n& a/ C" O# F
# i) U5 R7 K. d) w0 [4 u: f3 N
  *     @arg GPIO_AF_TIM13. k( n" ^7 Y9 a9 B  |
* L% V& ?) t! v$ y' r, f7 e
  *     @arg GPIO_AF_TIM14+ ]9 t( {3 \. i( W8 h2 O% n
" S( T8 S( p/ v; J' e7 r. F7 Q
  *     @arg GPIO_AF_OTG1_FS
- v  o8 f+ P6 f8 n* I) K* i$ r& W' S9 z
  *     @arg GPIO_AF_OTG2_HS/ a1 z; y* n' n* V' j

1 j1 G$ t- _) s- D  *     @arg GPIO_AF_ETH/ Y2 Q  E2 e% S$ C

) v, X- E. A# w: s2 K  *     @arg GPIO_AF_FSMC
7 v. s; s8 @, t2 d5 G
& A6 }3 c; A: e  *     @arg GPIO_AF_OTG2_FS
* N' g; }5 }! v. |* w5 J3 Y) u
8 x+ m/ ^. x8 U  *     @arg GPIO_AF_SDIO0 C  b* d( ]3 V* [9 |" W
( v, y' ~& [  w3 P- ~; j* J( \
  *     @arg GPIO_AF_DCMI7 V1 e* V1 K) R7 H; M/ u; W7 C

0 W$ w$ C' @- H. \- e. [  *     @arg GPIO_AF_EVENTOUT
* s2 S; b! {6 z3 G1 A- `9 _
4 J: B$ e6 r9 b9 i7 q5 E& m* C3、  初始化GPIO配置:
4 u5 |9 B- A, m: A1 d  l/ b
2 K  t6 _4 x* r" P5 z% P7 mGPIO_Init();. c$ p$ ?" H: `3 ^! t

2 d  W4 O# x: W8 m- b' Y4、  外设初始化:) L5 p0 M1 o& ~7 H  V

2 ]1 L/ N& {5 k4 e9 u如UART初始化如下:
3 C) P# v; y8 L6 _, h- ?1 `
; H% }) Y9 ]! h9 \# a: ^
  1. USART_InitStructure.USART_BaudRate = 115200;% X1 J/ ]( X9 ~3 r+ [
  2. 2 n1 M2 i/ W  B: ?- R$ J, |: K
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    ( G& V4 U) h) W0 p( i0 b; w; {6 q

  4. ; w# ]2 P5 Y2 \& o
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;/ l! a: ^+ u/ ]& }0 c
  6. ( d% O0 T  W. }/ S) w8 A' S
  7. USART_InitStructure.USART_Parity = USART_Parity_No;
    ( Q5 x. \- y: P

  8. - ~1 a' h! j% u
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;% l0 e0 o5 G+ R- U1 H

  10. - E  V4 E, n2 V! i
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;( S! Q) q4 h7 J1 v; `/ u  r

  12. ) B( T8 Q0 c3 s# G0 |, ^
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码

% z& G" S7 ?8 X9 ~; i0 H) [" C' V! v" J4 B
ADC初始化如下:(多路模式)# k4 N9 D  F& K; m. R0 y

% K5 \8 f6 s# }# D7 N
  1. // DMA1_Stream0 channel0 configuration **************************************/
      [  @. T3 ~! H' J9 x/ C
  2. " X0 f; C; L, e# \5 I: a9 g* p1 U
  3.   DMA_DeInit(DMA2_Stream0);
    9 t2 {, ?) W1 O3 D* v

  4. 8 T% t3 k7 H/ w0 o
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    ; ]" S! J0 [# [

  6. 5 j! q( Y# d* u/ [$ d
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址
    / K. Z+ V3 r* S: m: v

  8. & {8 w5 @/ Y. U' @
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址
    ' {0 L! R/ m1 \, ?  L+ t& W
  10. . K9 Q) B% a7 O/ q& s5 D
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存+ J  f9 r; \* K7 }1 m4 `; j
  12. 3 @. W+ e* }* U6 A" F9 e  H  M4 S
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    . q, N1 u$ c" s  n
  14. : y1 `4 n3 Q. G, t4 I3 H+ w
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变
    ) x. _) Y/ Z4 S1 T8 t% P

  16. , \0 E4 R. ~; K4 S7 _3 ^0 \
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)
    ( A5 g2 T: n6 K, P; S
  18. ! W) f$ [7 P7 y" u; j# p4 k' d
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字9 F+ I$ q7 s9 a9 y6 n& g$ _) M

  20. & X! q) k1 w- o4 S7 f
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字  i6 `$ A, U" ]0 g# N
  22. 1 ]6 `0 Y6 T2 L( g5 Q
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式
    # R, m' G& x: j0 c  G
  24. 1 W0 z0 }" X6 m3 I8 T6 X- w
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    4 w/ c$ {4 G% U0 ~
  26. 4 r) x+ ~1 C. l% ~4 Q
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;/ s( _4 m4 H3 s  {# }7 W, p0 B' j
  28. 4 @$ F$ ]" k% N
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    / j5 k. c- |/ `; ~: ]

  30. . P! Z+ T3 j. |" r8 d" H* V" R$ j
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;) |% o2 J2 M0 Q6 Q8 i

  32. 0 O, u" |6 e  I: @7 P$ V3 [' z
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/% T* M% o1 z$ p& P, d/ [

  2. 3 ?2 A3 Q7 m* O1 ?, m
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/
    ; ^  d; w3 \; ^9 T* ^$ \

  2. 8 i7 Z2 W) n! C
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/2 F& p3 [: i8 F7 Q) k% B) _
  2. $ r# U, c+ `- F0 {
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式
    " i" f/ h9 ^; N$ I8 p8 Q$ K8 |

  4. - w* k+ l% A) c% \
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频8 T+ X! w7 r. U8 z& x1 _3 ^

  6. 4 Z: ^2 |7 t# \! K6 M  Q5 ^
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    7 l* p1 S3 r/ x* Y1 S4 u2 |/ [
  8.   ^/ ^0 o1 y. I5 P! L+ M' a1 z
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期: q" T% m" M' C1 t
  10. 9 \( }; C5 l, @4 ]$ @, L: B1 c
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/
    % Y& {6 r4 J( h) S) i# W7 z" o9 c

  2. " @+ y4 N( `$ m* \  F- A
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度, x2 \, X% U; [' R9 ^! \
  4. ' F. E0 {3 M6 K& Z: ]' W
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路4 S( {( S$ s$ h/ }9 \
  6. , a. {  }3 u. k. P) \# h' s8 l
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式
    . T" D# L9 U: G7 F7 c. L  |4 O

  8. & n0 e. {0 p* j9 a5 j7 f
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发
    & ]1 p2 P- A% t1 C
  10. 8 ]/ u4 s( W6 f& O
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐- B3 [) i  @+ h
  12. 7 s9 \; p" |" {: `' g1 Z
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数
    ' M& x7 u! L" h6 [3 B3 i

  14. . u  d4 V. {4 w1 }
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/
    . t8 P8 n: z8 i/ [4 }7 G
  2. ( k& }; Z% W4 ?! Y) W
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);# d% F- a& @7 V! ~

  4. 4 x* @9 g- A, s' |
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);% U$ k' q: e( t' \9 r& ]5 O" F2 r
  6. # m) r) L4 ~' z" H
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);
    ; \7 {% D+ P, l0 m+ \
  8. 5 P+ Y4 Z7 f3 s& z+ X' M
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/) E- k/ z* K# m4 a  ]/ ~& \# U/ f

  2. 7 `4 G; I( ~7 m2 d/ C. P1 }
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/" W4 E: f' k! r( ~& ]9 J

  2. 6 Z5 v) [: I% q
  3.        ADC_DMACmd(ADC1, ENABLE);+ A+ g% J% u5 z4 X' q
复制代码
  1. //*************** Enable ADC1 ***************/1 t  R" N! ]4 W5 g+ C( K, `

  2. 3 D8 L9 x1 f) m2 A. z
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码
  1. ) e/ x; w0 H8 P$ \
  2. //******* Start ADC1 Software Conversion *****/9 h, \; }4 w6 Q  j6 n( m9 z

  3. 1 g# w4 s5 ~% v8 t8 V; ^
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码
% ?' G% G3 x4 n) D5 R9 z
- }' }: E8 G& i
5、  中端配置:1 O- N" e: P+ t8 C
! U' j$ ]! X4 ~% b% D
以下为串口中断配置:
. A' z1 |! `% z% A: z8 o- p4 t% M! }5 Q( y6 i, Y
  1. void NVIC_Configuration(void)- l' J( L. n$ C
  2. 7 d3 m2 g& l" n# `' r% |$ W7 r
  3. {
    ! t( V- p* G$ {  g% S% L

  4. ( }, X% H0 C: \2 D
  5.    NVIC_InitTypeDef NVIC_InitStructure;$ b( ~" K# P1 ^9 I, N
  6. 5 D( I$ \  u' s6 P* b& {

  7. " f/ j1 @# d# j
  8. * _  y0 E( O: k# ~' C* x- y0 f
  9.   /* Configure the NVIC Preemption Priority Bits */
    4 o  J2 x1 @2 t  R3 N7 E3 `
  10. ( K2 w2 c' C* t% V* G4 f3 I1 ^
  11.   /* Configure one bit for preemption priority */
    " W$ i9 p  j1 E

  12. 8 F# D. `( A! \1 h
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
    / V1 E$ p8 E- {% O' w" g$ [& h% ?" G, Z

  14. ) M0 f  i3 K+ c( @: H
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              ; R, f, g4 }& p0 e

  16. 0 p, `' w+ h# o( k- q( u3 h/ I5 L; h

  17. 4 _5 a! Z, R+ }
  18. & Y" R- N  w7 G
  19.   /* Enable the USART1 Interrupt */2 Z, @( M8 W  ]  b  y1 Q0 P! ~' K2 c
  20. 9 ]9 A6 B$ _; l
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断7 K( ^/ V5 j* N: Z5 l  t, U

  22. 7 k, e: z: {) F: F
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0) u) L( {- Z/ W. I1 ~

  24. / z+ L& l8 v6 }# }6 Q
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0; k! s  p3 I3 B" v# Y0 h
  26. # |$ r* @# q+ |4 a
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能
    $ J  M1 z7 ^7 W  b

  28. / o, [2 U7 u  d4 S+ }1 L7 `  n
  29.   NVIC_Init(&NVIC_InitStructure);
    5 x2 f) C; h$ L6 E8 i' q6 X

  30. , ?7 F( d* K& _! c* w& ]
  31. }
    ) l2 f  O! H7 z% y5 \' ]1 F5 w, M0 e
  32. 1 N4 I( d$ Z1 b: @; D! \& f) ]
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断1 Q1 F& ]. n0 ], V1 t
  34. 3 F! @  L, T2 c7 S  Y
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断
    0 R1 n) V' ~6 p
  36. ( f" T) X7 J# ?* M, J' `# B8 U
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
    % A& e% q5 P; u3 D9 l+ R% q+ K# A
复制代码

/ ?$ K' k5 ?0 i8 X/ R6、  使能外设功能:! T: U& a' k+ c7 ]

4 b$ R: m. Q5 ?串口使能:5 Y' n/ e0 v! n/ @' b- ^% B

; S' M# l9 Z/ l5 V; e) W8 L
  1. USART_Cmd(USARTx, ENABLE);
    1 m8 z1 x$ t( D( v  L2 I' J
  2. , p6 s+ w+ L  E1 ~- o/ ]2 C
  3. ADC使能:, D& ]2 Y1 G2 D- t4 @! x' t
  4. 2 \1 R& i7 c: f0 P2 F% |; h
  5. ADC_Cmd(ADC1, ENABLE);7 k5 N2 b" b% ?2 ]. I9 `1 C' d# y/ s
复制代码
% F2 p  V8 A) H. {

+ X. V3 e4 U$ }
收藏 评论0 发布时间:2021-12-4 17:03

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版