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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:- N# B" `! q/ m# D  G
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。/ G$ x9 e  u. g# j/ @6 n3 J
( z7 g3 q0 Y% y' s5 P
1、  时钟设置:包括引脚时钟和外设时钟:: D' S- m# ^5 B

5 E; b8 T1 I! F1 Z; R. p$ @, SRCC_XXXPeriphClockCmd();7 V' }- d1 m) k5 }5 v0 z
% ~6 T! H5 G% M1 \9 O# n  t* q" d
2、  引脚连接:即把引脚和外设功能进行连接;) H- |* N9 l5 }9 h9 X8 r2 z

) I+ s% f) q& i( C7 |$ R% NGPIO_PinAFConfig();
4 }6 Q9 J. A7 `7 t4 E0 e! F; X; ^; o
如下功能需要引脚与外设连接。
! \) z& X4 W# Y$ _) j1 {
& J, v  U1 ?! U  *     @arg GPIO_AF_RTC_50Hz# E- f8 ~' b# R3 T
8 X1 g9 R9 X- G6 a6 L
  *     @arg GPIO_AF_MCO+ ?+ ]! T( B4 [+ S7 _5 D6 b

: G; ?! F& B; u  *     @arg GPIO_AF_TAMPER2 S; Y+ R4 d" m2 Z3 u; B

- b" j; F" W+ V9 i" x0 `% e  *     @arg GPIO_AF_SWJ( i) {. T8 X# `6 }! ?

4 `" x# u6 c0 Q8 ]& z  *     @arg GPIO_AF_TRACE
# T6 {9 y3 p0 r  M( t7 u5 k; F
& n: ^) f9 D" _( p  *     @arg GPIO_AF_TIM1
# \7 ~% z$ ]- v$ q, d5 {6 ^! f. A- l! `9 O+ a! z" m, l7 y
  *     @arg GPIO_AF_TIM2
7 M6 n3 e% |. H& A  B
3 L* Y: L6 f9 R  *     @arg GPIO_AF_TIM3
! w( k+ T9 S) L9 S; T6 q* ?( s/ @3 d% t. ^" k
  *     @arg GPIO_AF_TIM44 A( @! J/ @" {
6 h( C( d; s: N0 E# y3 J' V3 Q5 C
  *     @arg GPIO_AF_TIM5( f* j+ K: i# k) W1 V  V

; N4 p. _1 x1 Q' c! G0 g  *     @arg GPIO_AF_TIM8
; o- e0 d& l  n6 M2 y' d/ T( b' W! @2 i' M! S, W) z7 L  Z" I# h
  *     @arg GPIO_AF_TIM9
/ W9 {3 V. R( f' l5 \4 Y! k& |) N7 F8 b
  *     @arg GPIO_AF_TIM10" v* V! ?* a; S% c; ~: D' T- k$ v
5 y, ]: G6 t% |
  *     @arg GPIO_AF_TIM11- Q0 k5 O% F4 w* X) K2 t6 ~8 C/ B
) {) c: t' m. o; W
  *     @arg GPIO_AF_I2C1
' Q/ S# K! L% u! }+ C
: C$ t+ O" s# M  u7 x# K8 h  *     @arg GPIO_AF_I2C20 z" B# c2 i) D8 M" D9 k5 U
% m- k! J. e: m9 n( A
  *     @arg GPIO_AF_I2C31 Z( e' @  F7 S& Y: Y8 h' u  M# R$ R

2 Q. a" y1 F3 }0 q  *     @arg GPIO_AF_SPI1. ~# E) v# U' o3 W2 E, ^
5 Y  K3 }( p7 U' P7 T
  *     @arg GPIO_AF_SPI2
, E7 O+ H# z/ [' d+ ~
: t1 T& A' q% U. v' w) k  *     @arg GPIO_AF_SPI3
8 d6 P. @( }& j# A) C. u$ Z2 `+ p! t
  *     @arg GPIO_AF_USART1. b9 E# a6 }, ]% c4 O5 o9 V
3 G) M2 q; Q* A9 H/ [7 g. @8 Q+ C
  *     @arg GPIO_AF_USART22 [. e  B% n& T$ o2 R' _
4 A9 y" C3 ~+ _: v* O; }' A
  *     @arg GPIO_AF_USART35 L, [5 l- [3 v1 s! c/ \9 G, i

0 J* V5 _) }( ^: U  *     @arg GPIO_AF_UART4! |) l0 x' j6 f5 z. X2 t+ k

+ b7 d6 c+ }3 M% D  *     @arg GPIO_AF_UART5/ {0 e  M, N% L- G& D! R/ {& n3 D" E- V3 ?
. E- B- `, l. p8 J; h: O
  *     @arg GPIO_AF_USART6( f7 J9 J! \' M* e8 o* Q# A

) m7 U1 y6 R9 X+ J7 \; G  *     @arg GPIO_AF_CAN1
! M5 S5 o2 \' ~) I% z; a) Q+ L+ O
. C) L; O  n" U  *     @arg GPIO_AF_CAN2$ e  @6 |4 f9 @5 n/ w
" t9 h) C5 E0 B/ c- m3 a
  *     @arg GPIO_AF_TIM123 }. L* F! ~- b; C' u  [6 {( M) A
7 V6 A$ e. [: D& f1 ?- ]! K# `
  *     @arg GPIO_AF_TIM13
# p; E" i2 E+ F" r
, d" }! A2 a, v6 B4 z  *     @arg GPIO_AF_TIM14$ @7 m! \9 p8 M& P$ x3 |6 G
) }* D. Y% e: a! U* e0 I# m
  *     @arg GPIO_AF_OTG1_FS. a( U, ~6 n6 ?, b
2 t% _3 t/ B: K* {0 b: y( l, j
  *     @arg GPIO_AF_OTG2_HS
& k' k( R9 q& M, I0 Y0 X  V4 D- {( x4 i6 I1 h: G& x
  *     @arg GPIO_AF_ETH
; I, Y# C' L& _
7 U6 a" x( \+ l: r" S. g  *     @arg GPIO_AF_FSMC1 P6 I3 k9 K/ X  g" ^7 r. z

: p6 O0 L5 d6 ^' ^  *     @arg GPIO_AF_OTG2_FS8 f/ o9 W/ H8 i- u
8 d, b- J+ c) d% G" ^
  *     @arg GPIO_AF_SDIO
4 n1 s+ ?, d( S+ J& U, d% K
9 C, r9 L0 A4 V7 S7 a- D  *     @arg GPIO_AF_DCMI
7 [% i+ x* h. v/ x* D9 F* E# [7 y( Y1 t" R7 e
  *     @arg GPIO_AF_EVENTOUT" h# T2 }( F/ m+ {2 O
/ e# k- O2 b9 e, }( [
3、  初始化GPIO配置:
5 F) y# u+ l0 n; [7 K  o3 I( g& L$ _/ d' Y; V% N
GPIO_Init();
& A! j$ n2 \, |- v. q1 D
+ V" ?6 v. @% L1 Z/ P2 R: G% Q; r* A4、  外设初始化:% ^3 Q9 f$ O# d) ?

, v" c8 g& o% H4 I如UART初始化如下:
, w$ M& g* f7 T1 T4 @# O: W/ v) b1 G2 c/ j/ a- q3 U: u$ t1 h9 o
  1. USART_InitStructure.USART_BaudRate = 115200;* m) a; v1 H7 P7 p& }3 p

  2. 6 r* s6 ?  ?( i( R8 d% T# b
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
      K/ w7 j# ^, h, w: y9 `
  4. # K6 p' n- K5 ?- y% e# b
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;: }  `& V$ Z- ^; s. v1 R6 ?2 Q

  6. & I; t  L% |- a& ?' n
  7. USART_InitStructure.USART_Parity = USART_Parity_No;
    * @5 P6 E" Y7 [# S
  8. & ~9 U! [& c  J) M/ \3 T9 n
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    9 G5 l5 `0 o' ^$ H. G

  10. . |$ j# t) z% w; G9 ?
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    8 T8 k$ b- w& h# u
  12. 7 n+ b8 q$ t5 T+ r$ }6 b$ H5 h
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码
% m/ m( x1 e2 {3 i& [
$ ]1 J& J- l# ^
ADC初始化如下:(多路模式). y; D9 i. u; Y7 J3 q& M4 |
: d8 X* X* U/ I5 }
  1. // DMA1_Stream0 channel0 configuration **************************************/
    . R1 e/ b- B( D, |
  2. ' j6 `/ G% }3 {
  3.   DMA_DeInit(DMA2_Stream0);  J* z6 o  d; d" O1 v( V  L2 V) {
  4. . k+ Y8 ^8 D6 B( U' A8 i
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0; * H! g- {; n' W8 i3 B
  6. 5 `9 v" w4 P# ]3 N$ @, W% v
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址  }3 \3 p1 G% I, A2 T

  8. . M& n3 @- E. l# X4 W% P7 [% d
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址. N0 z: _8 E0 X8 x

  10. - u; }6 W7 Y/ t! g2 S- ?8 V3 E
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存3 p4 x3 E4 p% ?
  12. 3 _: J7 U8 \: c' m9 B
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定% H# b! }! {# n6 ^6 t1 [
  14. 4 L( T; F1 q/ n6 m) u1 `
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变
    : u! `, q$ N/ R& u5 |! S

  16. ' _% A% I9 P0 ?8 }  M
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)
    ' a* M" z, j4 R3 G$ ]5 ?

  18. $ \# R5 X9 H& B
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字. e* |1 ?) u  z7 [7 r% V2 c" T
  20. + S& J/ {6 q& z& r+ @9 n2 U
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字5 b1 R* H- a0 C8 _& m$ k
  22. ) }7 n5 z  Y1 K% N) m
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式
    4 U& b; W5 N' y) C/ c# d: R

  24. 0 R, U* X0 }3 P$ q/ A: _
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    ' |  \; E9 X2 M' Y. e
  26. 6 x2 f9 N7 t; S# s/ B- @* n
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;7 F+ x3 f& {2 ?6 ~* m- r

  28. - o$ v! Y& e% ?9 s8 b" A
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;3 Y5 L% ]$ C9 Q2 k" v( e
  30. ( Q1 x* }9 p) r. c' t, z
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;2 ?4 \' X6 D  d  y
  32. ( n! E  [' A* y  y
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/# k% g: U- y2 |9 n
  2. ; R: B4 E, D$ L4 j
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/
    $ j3 \, U0 G) Y1 ?# S& b% R
  2. 5 g; F8 n$ D. f4 s: W# O. e3 x
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/
    * R; T8 l, B; ~0 c4 D

  2. $ H: s5 M6 `$ W% w4 F* Z
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式! [' c; w. ?. I0 a' n# q
  4. . m- k, `+ [' }) Y
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频
    ! _: O& c& E9 u, E- u8 |# |6 z# h

  6. 8 z5 B1 n. ^* F$ m# M
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    ; X7 o7 S. v& X# ]4 ?
  8. & q/ b1 N# o6 S6 A) \# |
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期
    ) U8 d0 B( T0 Z0 @3 \

  10. " p7 F6 y' \" N+ f( p/ |
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/0 C% h! M9 @# O
  2. - K2 g! a: `$ d1 t6 c& {
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度
    & G/ Q1 ~8 l: B
  4. 6 V- }; B+ D: ~) A
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    8 X3 S6 ~1 w! p: d' e9 P

  6. & D  }0 @8 y5 j3 B  f( w  Q$ Q
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式
    * }! W1 f( a% g, c

  8. 8 k  p% C6 S( a! W/ x" i) ~! t
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发2 y) T6 ]' m; y8 |( h

  10. 0 H# n% S, T: V( g/ l
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐
    * |" p# I4 ~* q2 P

  12. & G' h; E4 M6 j; Z' T4 {- M" Z
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数
    0 r' t. \1 }) _5 x' C  l" G
  14. : Q6 n0 H  R7 C9 S/ Q5 z) n
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/
    ( e* w) b4 g- m& T# m7 s

  2. 2 V: i& p) e  B
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);7 \9 r# u  @( O1 x
  4. - q* N; G' g" T  `- w
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);: Q: S6 A2 }/ B  h) Q3 U/ |

  6. % A; b! J2 ~' }! Z/ C2 w' v
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);( @& U6 [% h: R4 ]( F

  8. 0 U  j9 J3 R& a0 ?
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/, _, Y  w. ?/ `$ D

  2. " }! x; a3 F, h# v4 o4 ?- U
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/
    0 d5 h; Q/ J9 C1 f/ d
  2. % n. I; Z$ F2 `4 O$ s
  3.        ADC_DMACmd(ADC1, ENABLE);7 |- z0 F# R3 E* L
复制代码
  1. //*************** Enable ADC1 ***************/! g& {5 u4 Z# b$ g& `) V% |

  2. . O, M  b5 L- v4 ?
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码
  1. . }8 X9 j3 c0 v9 T/ h8 T. H
  2. //******* Start ADC1 Software Conversion *****/; A" S; H& Q, Z% F7 ]' c- M! Y- `
  3. & w2 m7 A6 B7 p1 x0 @
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码

6 X  b; N9 S) ]$ I
- v4 Z2 E( z0 c( r7 m8 F5、  中端配置:6 @% w, T) E- O$ N
5 q1 h: @8 W! a% _
以下为串口中断配置:2 V. u! u' ?6 x/ e) x

& f3 O- x& ?$ O
  1. void NVIC_Configuration(void)
    6 \- Z/ z( }7 c* Z+ I
  2. ( e5 g9 [2 J6 k' ?
  3. {' @5 b# x- b" C1 M# q+ ~* Z
  4. 4 |3 e+ ?# {, m. W
  5.    NVIC_InitTypeDef NVIC_InitStructure;
    5 ?: A! u5 y$ M: o

  6. 2 B- U3 ?! b  K) y
  7. 9 h/ O1 `8 C2 W' x) w- c

  8. & R7 v7 x5 \. e: O3 b
  9.   /* Configure the NVIC Preemption Priority Bits */ 8 t; {9 }! b0 z  P9 ^/ ~+ O" u
  10. . q; I  k. [2 M) ?: v
  11.   /* Configure one bit for preemption priority */4 M; J' g) d3 o: T; L  H
  12. 9 E- p3 O8 U0 ^, t
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   , w7 o& d+ C8 k0 A% O
  14. % E# ]* ?, n: g2 }+ l! ~
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              
    , g9 k$ E- P! l. A
  16. " n7 I. b0 F- v  d) z& g

  17.   u1 R) ?$ F/ r7 F7 p
  18.   C/ z: X6 ~; l. q
  19.   /* Enable the USART1 Interrupt */
    2 P8 g4 f' m3 G" m" n- m8 n1 f+ T

  20. 5 p* f6 |5 [% u; K
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断& W: S# e9 K& B) W
  22. ' U' L6 I' y8 k, D  ?7 B
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0
    4 H4 m# {4 k1 m7 ~9 U" _

  24. 2 b: K+ z2 R; \* C* N/ i
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0
      ]. F4 ]. ?0 W1 Y' |

  26. - K" n8 C. E+ }+ K3 g
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能7 Y# i' B" I, l4 X6 E
  28. ; d$ s/ K! }) j6 K1 @# H" o
  29.   NVIC_Init(&NVIC_InitStructure);- a# w  x& k4 A' W% R

  30. ; b0 A5 r& c2 H
  31. }9 d# S7 s' t- V9 f% E% ]

  32.   t) m3 |' M& l( @' \
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断( c+ w4 T% J1 W  l/ ^/ l8 c

  34. ' j2 D1 ]7 c; y( a
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断0 h% @8 r* Q0 Z0 E

  36. 2 [+ ?3 d( J) O& C1 |, w6 a
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断: i2 y% ~. ^- s* B
复制代码

6 d1 {8 n' A# x0 f8 W8 @! O7 D6、  使能外设功能:
3 @7 T$ h. q9 O, P0 F5 ]; t: Y+ r# t5 l4 ^
串口使能:" ^4 M& m1 G! A, G
" w0 g2 [& q( {7 Y0 |* B
  1. USART_Cmd(USARTx, ENABLE);
    $ o+ ?6 L/ s5 y4 A
  2. 7 p; U# K# s9 d& q: I" j+ M% e' U
  3. ADC使能:
    & |( h1 d6 v- X9 L: H/ H
  4.   ?7 w: @7 k3 _1 y
  5. ADC_Cmd(ADC1, ENABLE);/ P2 A) k1 f+ ?, J
复制代码
- N7 J8 N! {% l. Z7 P" ]2 r

- ?* A7 \  F; c( @( Z1 p1 Z
收藏 评论0 发布时间:2021-12-4 17:03

举报

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