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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:
+ K1 v& I8 ^% N5 H: f在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。% v; A: m' Y- t* F
8 w# [6 v% n! {( t# i
1、  时钟设置:包括引脚时钟和外设时钟:; p& D$ `; I) j  @) x% N& k
. J& u. K, w( z# C) g9 N0 |+ m' x
RCC_XXXPeriphClockCmd();
( q' G- k& ]% T- [' E- S. D$ u+ p1 @) {. C* S
2、  引脚连接:即把引脚和外设功能进行连接;
: j( X; x  j/ S" x
' e1 G) d3 i( c" G! l+ w# \GPIO_PinAFConfig();
5 [3 Z! y3 J' A6 l* [, m$ d
' [+ x, D5 y  o如下功能需要引脚与外设连接。* x, W0 @" d% }7 D- S; F( T9 E- a
; t9 u$ G* e# a. m3 K+ ]
  *     @arg GPIO_AF_RTC_50Hz0 ]# O- g. I2 T6 |" e( H1 ~$ O
8 s: `; ], q+ G' u$ @  e
  *     @arg GPIO_AF_MCO
0 z; g4 ?) V5 a/ q" b! @$ ?, i9 m8 s' S+ [7 ~( }  x" x
  *     @arg GPIO_AF_TAMPER
* s" A% Y7 a' J' S3 Q& Z( }, {+ H4 _! o$ x0 u; X' t- s
  *     @arg GPIO_AF_SWJ
4 B  z" |0 G0 u% F' w3 |, q0 d- I+ Y7 \3 Q1 }
  *     @arg GPIO_AF_TRACE
$ ^; \! `) A! [* g: x9 N
; @1 u: z1 K8 s7 }, Z  *     @arg GPIO_AF_TIM1
; y+ u0 j! n) m% A! c2 r
/ b5 u1 R# e! n5 f; t9 d% ?  *     @arg GPIO_AF_TIM2
2 A* I6 m! W1 @+ t$ l3 c5 L6 q8 \, k7 }4 s3 W
  *     @arg GPIO_AF_TIM3
0 X, c9 l' Q, q4 g. ?' J( ]6 ^" m, f0 _2 I0 |
  *     @arg GPIO_AF_TIM4
: ~5 d$ k( a0 k
% r4 _" q" q+ k; E8 d" y& d  *     @arg GPIO_AF_TIM5
2 D8 ]8 y# q( p. H% o4 i$ P" `3 u3 t, X$ }) [
  *     @arg GPIO_AF_TIM8( \% G9 w7 l0 `# A, V' j, s' ]

. B& ^* b! D7 a, G0 D  *     @arg GPIO_AF_TIM9  j2 t, ^1 j( ~8 n

8 s! g' h5 N1 X. D- G3 r) m6 t  *     @arg GPIO_AF_TIM10% N1 G( a3 g, f9 h. a( N/ l

) u# S5 B+ R( k) y8 |6 v  *     @arg GPIO_AF_TIM11/ [$ j- f! Q' U5 A* O( N

+ J5 O" [  ?# }8 a4 [  *     @arg GPIO_AF_I2C1
1 \9 h2 ~  r5 e& w5 q( u$ d# G' K& f0 [1 J3 p1 k) [
  *     @arg GPIO_AF_I2C22 E) E8 `8 O4 R! F  c, T9 d

, e9 R/ @* @9 ]& J  *     @arg GPIO_AF_I2C3) r0 J1 Y8 V- ~* |* y; g4 i3 z
9 p- u+ k& B$ L( r5 ^! q
  *     @arg GPIO_AF_SPI1
6 T/ y9 ]2 C( y, @% {# h9 F9 x
' w4 r2 t: X) ]' O8 J  *     @arg GPIO_AF_SPI2) b7 Y  f- M( y( o& r4 Z

8 ~' o: y4 w3 i) ]2 c" i9 O& R8 N' ~  *     @arg GPIO_AF_SPI3
4 {, y. E3 C' t: g) |+ P
7 I9 g' Y7 q9 M3 z  *     @arg GPIO_AF_USART1
( Z* y: _$ V" D' C. k/ Q3 F) D5 Q6 O. V" f3 K! |/ _9 J( N3 N4 R
  *     @arg GPIO_AF_USART2
% T0 h+ r" l% \$ F  ], P  K8 ?8 _( O
  *     @arg GPIO_AF_USART3' U* B$ a" P: H( D: q/ V

9 F- o8 c) K! T! W/ c& ~( W  *     @arg GPIO_AF_UART4
2 F* H1 i  Z5 m8 C4 P/ m/ I* A7 S
  *     @arg GPIO_AF_UART5
, x$ m( A; ^- x; e2 B$ N8 `8 b$ k' m3 h: T  K. h5 m' o6 i
  *     @arg GPIO_AF_USART6! y, ^% L1 [( Y( l2 ]. x" f# w" e+ g

: M. ~" j* n* X) ?1 y  *     @arg GPIO_AF_CAN1+ k& x( j0 X* |# C, @! E

! Y6 ?/ A" C: \2 e  ~# {" {  *     @arg GPIO_AF_CAN2
* Q" a2 O! b8 l1 M) @. ]
. f( B4 e. Z; q0 Z1 H3 e+ y  *     @arg GPIO_AF_TIM12
/ I& o. i8 v, P2 B* z- c, E) S: D: t; s; d. l6 j! W: [, ?2 @
  *     @arg GPIO_AF_TIM133 l( T- i5 ~/ H
; ?0 l" N+ P" n2 I2 ^9 V, d; x
  *     @arg GPIO_AF_TIM14) y& j. }2 _: X3 X, K

, @  H6 I/ k7 Z) t  *     @arg GPIO_AF_OTG1_FS
& h+ \/ v2 n  o% K" b
7 T! v2 s& @8 o# q1 Z# @; i% N- U  *     @arg GPIO_AF_OTG2_HS
( T0 i- m9 o8 f9 e2 O; N3 I9 M7 f
- v# f) `# ]0 S1 e2 ~- s  *     @arg GPIO_AF_ETH$ X7 @, c* R5 P3 P/ N+ J6 b: f8 Y

0 _8 f7 [# W# }5 F  *     @arg GPIO_AF_FSMC; M0 p2 R0 X6 c3 h$ S+ y

$ ^4 ?  B" o1 x# v9 g  *     @arg GPIO_AF_OTG2_FS
1 ^. ~0 n/ Z; T3 H( i% ]. ?4 W, z* i' w9 E/ A2 [
  *     @arg GPIO_AF_SDIO# _/ f6 ]& I% k( t5 M3 ]' l1 I1 a

$ R% t9 `3 l7 N  *     @arg GPIO_AF_DCMI& H+ j" {) C+ V0 Y& q1 p# T

1 e8 r2 w( ~& d. b) E; q  *     @arg GPIO_AF_EVENTOUT
' x4 }7 ^; l' T6 H6 t( Q# u2 G4 j! c$ [9 _
3、  初始化GPIO配置:- E6 Y6 i% M# l% B' f, |

6 Z" V4 g4 @  ?8 RGPIO_Init();4 T) l$ D" M$ [& h; o0 @# w0 H( @

! w0 y/ `3 |& V: ?4、  外设初始化:) G7 N8 t/ G% G! h5 h/ ]* t0 N2 X3 F# G
/ y, C4 p" B: ]
如UART初始化如下:
3 c1 x$ p, x, _5 }% k1 h# c$ d# Z' {4 W5 {& A
  1. USART_InitStructure.USART_BaudRate = 115200;! L; |, l, Y9 W
  2. % q' i9 c& g1 }
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    # p! p' [- [' [# @' C# c6 C" m

  4. & W. N: O+ M1 ^7 H, Y' Y
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;
    3 m9 j0 L6 N9 C

  6. : E, ^% x4 }& S9 O" t6 H' o2 D
  7. USART_InitStructure.USART_Parity = USART_Parity_No;- h1 L. A2 P, }2 e
  8. " x3 g6 L/ n  ]1 H8 a  F( Y
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;9 [9 R& `% `7 \% ]0 \8 B* L  N
  10. ! Y1 d( m' _/ i
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    6 m2 r0 c8 q! g& m  H; F$ n

  12. ' \$ r& S6 F- m: P! Y
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码

# @) Z, c! y" Q8 Y3 t' v; c& H) x- z) [' T
ADC初始化如下:(多路模式)* T5 o( G' C0 Z

/ V  s: y9 ~; C
  1. // DMA1_Stream0 channel0 configuration **************************************/
    4 C2 C. Z- p+ ^6 R! J
  2. ! g9 b0 l  E8 J1 P1 t
  3.   DMA_DeInit(DMA2_Stream0);
    6 B0 V' N& a7 {0 w/ Z
  4. 2 N0 x* {8 d( f0 m8 I: P' s
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0; 6 h& x6 ]$ o/ z" ^
  6. 1 b7 a. g9 \% Z/ {
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址5 t& R6 y& n% ~  o

  8. # N4 H* A, m+ _+ P* P2 f
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址
    1 C9 w5 h1 C; f/ R: a8 r( l0 m
  10. + H6 ^! S2 o: I" ~8 R! b
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存' @; N. i) a+ A/ i, h  Q
  12. 8 I. |5 r; a" v  t( \7 u; |
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    2 a% C9 E5 d1 N% w0 E+ K
  14. 3 J; z( V* j$ f1 k3 U* E: W
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变
    1 r  a8 A8 ^6 R3 O

  16. & L- o; ~! E9 a) n" L  w
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)5 e% x% x+ Z" c

  18. ' O, b' h& G4 |0 N6 P
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字, R0 i0 t* l* F/ G" _7 F
  20. 5 {9 `( N" P- C2 Y6 U+ p4 L8 k* g  [* I
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字% s8 v8 ~% D8 h3 u0 x; ?. W

  22. 2 A3 K# ?3 Y3 |) u
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式3 e; q/ O+ ~9 l' v4 w6 E8 k6 k$ z$ U" I
  24. : r) x% F, `  b: y: C, A9 r) [
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高. T: c# V2 W5 L! X( G- }- C$ L9 W$ T

  26. " i% o2 {9 L! c- n: P# Z* M, c
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;& p- j" w2 B' Z& [2 C/ L2 A8 Q+ S- N

  28. ' t9 ]/ p( V$ E" E8 X- D: i
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;. S1 T* n) ~9 ], ]2 W2 [# S
  30. 2 M: ^" |# J# i* S( p( r7 a4 }6 Z
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;7 F! ]! X( T( W# F! ]% d9 \1 G( Z4 D
  32. & n! L0 `% D1 X
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/
    5 q2 W! b8 K& ^7 ?, u
  2. / r( B7 D8 P0 O. ^3 `
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/ ; k( h' C9 Y* D; Z  f2 }( q! x

  2. 2 i. f! G% Y/ G4 X& {" C
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/
    ! y  m, w- A: {
  2. ! z& t" \: ^) d6 f. m3 m2 V
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式8 ]2 g, ?! U5 g: i1 P* O- a4 m

  4. + L* x( s- B. f% E
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频: q( v+ @& \* s+ `# G

  6. % {3 g% E5 z7 P# k* T% g) e) p$ F
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;  J# i$ l. w' N- u
  8. 9 M( M- l/ A. W- o9 s1 \$ p
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期
    1 r- V- |& h0 s$ ?: C- B1 f, m; {

  10. 4 c: \* x7 h& z4 b1 [
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/
    9 x- N% p! E0 X2 ]! W3 A) }6 C9 k

  2. ; V7 A2 @3 v: F
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度
    . f1 Q/ \' e# U, D, Q- \! E
  4. 8 J; {; ]2 P$ `( T3 F% ]
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    # O4 |8 ~9 Z$ M' r

  6. $ z. J$ M+ V) U, E- ~$ X8 ]8 B
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式" B: F! ^! Q+ b' _! s/ N7 V

  8. * n! J4 Q0 j$ Y0 _
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发3 h! F# ^( H- l, k; B

  10. 3 A3 U0 m& F- S  C
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐
    : S, a, z- l# e8 ]$ N) {* j. G

  12. ( {8 F% [, P5 g
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数2 |+ k3 C; h4 O) n$ Z

  14. ) Q7 c- ?* t0 D* E# H
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/4 l  ^6 S9 Q. V* y0 X, g% a% T2 S

  2. 9 G" U+ v  S* R) F0 @
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
    , ~& o" v, g* s) p; o" U

  4. 7 j8 U2 p8 O1 p/ i% ?
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);
    ' A: b  ?: R" m
  6. * _; C* j  a& `3 h( ?2 Y+ R
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);! ^4 \  ]* y2 `. q' G. e7 C

  8. + l- }. y. i2 ~1 b/ }
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/
    ' H5 T* d+ G+ w, x  z0 v- t

  2. 3 y! ?* C* r3 R0 h  Y
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/" \) m6 z) u# c- B' y6 |. Z

  2. & ?+ ~' F0 G1 Z* z" V* E
  3.        ADC_DMACmd(ADC1, ENABLE);) G/ ^3 q( c' N6 k
复制代码
  1. //*************** Enable ADC1 ***************/8 L" N: X, a, _" p& h

  2. 7 J5 b2 ^! E* F$ R& Q# O5 @
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码
  1. 4 C8 c( e( F& |. m  {3 x
  2. //******* Start ADC1 Software Conversion *****/0 @. E$ x. ]! [5 _$ [8 w  t
  3. " Z2 c  W/ M) V
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码

' T$ S) `: w/ R. G% |
$ e8 O. m- s1 W, v5、  中端配置:! u! ]' T% ]1 [6 f. j) ~
+ B! Z% s0 e3 @9 k0 J. {
以下为串口中断配置:
( b7 m2 _3 I6 v* \
! l" D: s" z1 A( M
  1. void NVIC_Configuration(void)% {; T! ]* x7 S: L* f$ p. T

  2. 2 W$ c0 [4 y7 l1 ~  ^
  3. {+ v5 o. }4 w( p6 k8 A  w
  4. / T" ?2 _: S- i$ m/ _
  5.    NVIC_InitTypeDef NVIC_InitStructure;
    & Y& U4 V6 o" p( T

  6. - c2 P6 U- h, ?. K8 I
  7. + m) ^: y5 B7 J0 Q5 S5 _' l6 @
  8. 4 D3 c# Y7 A3 \* f& Z4 |
  9.   /* Configure the NVIC Preemption Priority Bits */ 0 Q2 B% \' D7 {

  10. & P! m! h  I- _
  11.   /* Configure one bit for preemption priority */! \' h0 T" p( K/ u( V% q

  12. - J/ M7 E1 B# E& x: q
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   ) e0 k' E" I- r0 s6 E  o7 i& `

  14. - Z! h# S; [; h
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              6 n) r" e; j: M2 |7 h2 [! @8 {
  16. $ b6 R, n5 T9 Z) M8 i2 ?
  17. ) r$ A1 e4 t! w" m- F1 p& ?

  18. 5 h% {+ v5 F' ?; u
  19.   /* Enable the USART1 Interrupt */
    * Z3 l7 U' S2 g9 I8 G! J

  20. & O. h7 N4 e' i) u
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断$ V. |! _4 ]* J

  22. + A' _; J  [% D1 i( e& O! O! C
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0, l5 o+ W9 W" n3 z2 i
  24. . I5 h, C& @8 o- u$ N+ s7 f- d, n) n
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0
    % ?/ ~$ ^  x0 a2 n$ ?% D

  26. / j3 O1 R) |& }+ _" a% C( l5 l! K
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能9 D- G1 S# O* r6 S) t7 K

  28. ; W; ^, Q1 \3 p. q0 e1 @4 A. c
  29.   NVIC_Init(&NVIC_InitStructure);0 `! f9 z: N1 g0 x
  30. 2 f  _3 e5 @9 m/ J1 \$ g) F
  31. }
    & U9 f- ]8 }* o4 |

  32. * P' }3 ~% P1 i
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断
    6 o9 m0 p- [$ `8 J* ~4 E
  34. ; C/ @0 L  [* o0 m1 ^) _. N( @
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断
    1 |0 G4 H: n% S) v1 \/ V

  36. 5 n  U+ V- J* p* S; O* l1 G
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
    % |9 ?( [2 Q! s' [! F& j
复制代码

4 m1 Y# t% R0 H9 V8 }6、  使能外设功能:
% c/ ^0 z. R- k9 c7 a5 h* A3 ~& l, X& K7 q4 R
串口使能:9 U/ C0 Z) S2 v, Q% s( Q

. K2 @+ \! p/ \, f* ~4 b( G. M  _& L
  1. USART_Cmd(USARTx, ENABLE);
    & }+ Y* U! L6 K, ]+ f

  2. * J% ?9 _5 v9 d0 ]8 ]+ N
  3. ADC使能:% Y) u! Q6 E& F& h  N
  4. 5 M" u! E$ r4 E. j& R
  5. ADC_Cmd(ADC1, ENABLE);
    2 f  w  G! L; {9 b0 C* f+ p1 n
复制代码
; b& X8 p, s, e$ i# R; `
3 t$ d% [3 b, e* S
收藏 评论0 发布时间:2021-12-4 17:03

举报

0个回答

所属标签

相似技术帖

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