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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:0 P" j; j6 ~# n+ N
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。
0 R$ T3 b: a  i- i& m9 ^- I
5 L7 d% W$ C" n! h2 v1、  时钟设置:包括引脚时钟和外设时钟:
3 b/ T) g& y9 m/ U/ k# X+ x
- S% p: h5 ]+ yRCC_XXXPeriphClockCmd();1 ?  s! x/ Q7 _' o7 m6 T  Y

7 X5 E; _; l2 H$ W' g2、  引脚连接:即把引脚和外设功能进行连接;- ^* W$ N# f# L6 h( f, h4 n0 p
+ b6 C0 ~2 c, d9 S
GPIO_PinAFConfig();/ ^0 O7 w8 h+ t) K5 c0 X
! x" c+ s) V  O. Z
如下功能需要引脚与外设连接。+ a! E( t: |/ j5 ~/ v
1 T$ {4 B/ {3 b( ^6 v6 L. _6 I
  *     @arg GPIO_AF_RTC_50Hz
6 @; L/ U1 f! v- d* i7 X0 I5 I; }7 v: e  s& t; {
  *     @arg GPIO_AF_MCO
! v5 _9 B: P! G5 G9 X- q
5 x9 H( U; _$ |7 J5 \6 N  *     @arg GPIO_AF_TAMPER
6 z# T: G9 M# n/ A( ^
, Q' n5 }. @( [! s- n: Y$ i  *     @arg GPIO_AF_SWJ, s& j) a0 o9 S) f# p9 L+ U  _

3 N- j  L( L. q7 `& z# V3 y  *     @arg GPIO_AF_TRACE
0 D3 O  K# r; F+ p7 d
6 k% f& I, ~1 c  *     @arg GPIO_AF_TIM1
/ \3 T4 G5 O$ W9 R
9 Z* f  }+ j2 G, g5 C/ P  *     @arg GPIO_AF_TIM2& e1 T$ w) E2 G, ~
; v8 p% z" f1 j) g$ w6 L& X$ G
  *     @arg GPIO_AF_TIM3
$ q: r/ ^5 |; [3 t6 I! o- f$ e- q) |( f
  *     @arg GPIO_AF_TIM4
* [! G* ]' Y3 r) `+ y9 l" I; b; l. o" |6 H, E/ A
  *     @arg GPIO_AF_TIM5! c- X+ ^) i* Z- w# K" N  |9 }

# }( u: Z5 _0 z9 A1 S  *     @arg GPIO_AF_TIM8" W# {- C% w. ^; F0 [7 N
, k8 q2 p; x. K- Y
  *     @arg GPIO_AF_TIM9% e9 U+ Q3 [1 b! B+ @% q3 s

/ x& ^7 R" r1 C; f( @. p  *     @arg GPIO_AF_TIM10
, j* H" G! i( ]4 N
0 g  D6 T/ G9 K5 s0 P* m9 a' l  *     @arg GPIO_AF_TIM11
2 M9 \% v" \2 P* q# W
) N* O1 e# n7 y# [  {9 ?  *     @arg GPIO_AF_I2C1
$ y# {; p; g, H4 k9 S
/ P+ M& u( Y1 X4 w5 i6 I  *     @arg GPIO_AF_I2C2
0 y# u8 o( q6 I$ r' q' \- m7 ^4 W- ~9 }
  *     @arg GPIO_AF_I2C3
1 O" V9 h9 U4 [. H9 P! L* d# W
  *     @arg GPIO_AF_SPI1; d6 r. q, }8 p7 T9 r* r! e! W
8 c9 i* X7 g1 R4 t! `- a
  *     @arg GPIO_AF_SPI2
' h9 R+ l$ ?0 r6 S1 [0 u
' l, j8 }! q4 \0 W+ I# U  *     @arg GPIO_AF_SPI3
0 @& q0 a5 ]2 q4 T+ M4 N$ K
" S8 @: Y; y/ }5 w3 m9 F  *     @arg GPIO_AF_USART12 Q# a  }" k2 k5 [5 V( D! G
6 s4 S& k# a, S: n  a
  *     @arg GPIO_AF_USART23 L) _4 y$ W# Q8 p- i, D

: H* M$ V( J+ c' ]; D) J  *     @arg GPIO_AF_USART3& ^  _! L: {9 ?5 g' ^& u. C2 _9 \
" T- a3 ^& n. ^
  *     @arg GPIO_AF_UART4
4 V8 l" y1 ], o) J* p! [2 _$ e% l9 k; f; m) Z! S; x
  *     @arg GPIO_AF_UART58 x2 W) Y7 X& q

, ]( s0 x( M8 J  y  *     @arg GPIO_AF_USART6
8 A# d" E* _) V6 I5 X/ Z0 k( E' B7 B) B" ?0 Q' Y3 Z; [
  *     @arg GPIO_AF_CAN1
! s" R6 ]7 [7 m! f& r# ?/ m7 M2 K0 _. J
$ U" b8 g1 y9 ], F, |6 y3 d  *     @arg GPIO_AF_CAN2
  y- B; I7 T  R0 [' n% N4 B0 R  X
  *     @arg GPIO_AF_TIM127 H  o  D* o* {0 C( ^& u* {
- Q7 a: A  Z- G8 ?- j! |
  *     @arg GPIO_AF_TIM13
  \7 x) k7 B# v5 Z' c
$ W5 S4 s; X: E9 t* Y4 S4 j  *     @arg GPIO_AF_TIM142 ~2 a+ F. R; O% L# F- P9 r

% {  i4 x! Q0 u1 v. w  N$ D  *     @arg GPIO_AF_OTG1_FS% ~9 E- s  Q% s

3 f! |0 ?( b7 x  *     @arg GPIO_AF_OTG2_HS2 F' M* J5 A9 M

% }+ R; y, w' g9 P' A4 J8 ^  *     @arg GPIO_AF_ETH
' I/ b9 N$ B% v! X' U) F/ b) @  J/ D6 H3 Q  Z- X7 v
  *     @arg GPIO_AF_FSMC
$ B! ^- e7 C5 C7 K  J! h( e8 T) N( b, y& O$ L, g$ c/ |
  *     @arg GPIO_AF_OTG2_FS
8 v/ X! C# h' x* @+ l/ r3 c
$ X, s8 X& {- k( K( `  j  *     @arg GPIO_AF_SDIO
1 H. P* w6 J- d2 g/ U1 l$ {8 b" R- |5 `: @
  *     @arg GPIO_AF_DCMI' |, N8 W7 r! t( X" B! V

/ }* b8 k8 H# N* O3 v  *     @arg GPIO_AF_EVENTOUT. u; g. B# c  h) y7 r3 D
6 `. F: j* a6 ^9 P$ c
3、  初始化GPIO配置:
3 C. s7 O7 V) r; b5 r# i) _
; U2 n1 ?9 P, u' r5 L$ Q3 CGPIO_Init();
0 s2 P& A8 f* _* O
, b& B8 ]/ Q: F3 l3 {- s4、  外设初始化:* X) ^/ E, Z: g9 z0 I

, I/ @! t7 A* X6 t如UART初始化如下:: j0 B5 f6 O" P

# ~+ l) Q* H  Q
  1. USART_InitStructure.USART_BaudRate = 115200;
    ; b3 C  J7 X2 Q

  2. * X3 A8 @, B$ r$ [
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    6 c& x. s% i: ]3 I
  4. 8 Q$ q* N  N/ `' U" W$ j& s& V7 t
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;( Z5 b% k9 S8 [$ m( y+ _. \

  6. 3 o$ o9 ?+ t, W2 J! W  n
  7. USART_InitStructure.USART_Parity = USART_Parity_No;9 P7 H/ b8 T' h! k) v8 a7 c1 ]6 m

  8. 5 C  W6 m# Q' A+ c
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    # k, U" ]* P- U4 o& \

  10. " F/ X# x- W" ?( r3 A6 i
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;& l5 O" m4 K3 c/ m; V
  12. + N- N' y3 }! V5 M' S
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码

, i- Y$ S) h! c! O# Z1 y) Y5 z- x" @/ L( L7 q
ADC初始化如下:(多路模式)
/ @& G  A' E& ~' b2 X1 u, I4 j$ y& ^. s
  1. // DMA1_Stream0 channel0 configuration **************************************/7 n$ h$ e0 Z3 U4 H8 C& m# [

  2. ( d" ?3 J6 X9 b& k
  3.   DMA_DeInit(DMA2_Stream0);
    - j1 e$ [: L- j! c) J
  4. 7 E! x9 X8 H7 k3 Z3 v4 ?
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0; 8 \" @) U2 T' B# N6 {. D
  6. ) b9 ~3 h  P& x$ U( D
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址$ E  Y' o6 |& l& I4 _+ T) B: n

  8. 4 |# `4 i5 U7 F/ i
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址+ B$ w, H# D  Y$ B$ W. w

  10. 0 }  [) L3 C( T
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存
    1 v' o% B: \$ e3 p! q

  12. 3 O6 E1 H. T/ X) X
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    7 Q  g+ b2 B- J. {( w
  14. * o7 ?6 G* }5 y' H2 D6 a0 L
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变, N* O( }& e2 t' p3 \

  16. 5 B$ a  z  H9 N2 n* |1 j  t( P
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)
    / q. S1 h' h& `! n( L

  18. 5 N) ]/ f+ z& G1 z; n; Y5 F
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字
    % C# w) d$ A" Z3 k7 P+ a: {% R! G# |
  20. 0 I& }. ~2 ~' F- d
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字/ [$ \9 ~/ w" I, s4 ], Z9 z2 ^

  22. - z6 L' ^+ j7 k4 m) N8 w+ Q7 r! e! j
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式
    / }) }1 D" Q) N, E3 ]
  24. # s9 [; o* m& m/ r& i; T
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    5 T- o' A: F/ S
  26. % V& B$ o; J, C3 x+ |
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;
    8 c2 w2 N- C% `( f. o: Z9 ?
  28. ' [/ ?1 v) l2 F3 X$ x
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;% F5 L9 b9 T7 r; ?& d

  30. 1 {: D5 [# l$ w: X" {
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;# p7 p& @- F0 u* Y8 N9 O

  32. 6 S$ z9 u$ s4 C' j
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/
    2 {0 l8 W; o9 \2 P
  2. : L9 x9 l! ], H% i7 [$ c  U& g
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/ : T( c& ]* m3 g
  2. 8 H5 B8 o  N7 c( I( U0 v2 e  s9 [
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/' P0 ]6 P3 D- P/ J, g9 c$ Q( g8 s& D
  2. 7 m! Q- G; K+ D% _. `
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式6 i" ]+ W- N1 X

  4. + |/ L# N/ ~. R& b
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频
    # ^7 @' |/ w) w4 ^" H

  6. & {) X% [3 |& W1 m+ H
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    . x) H0 M( x6 l4 T

  8. * q4 }# |$ f$ u  {, e& ]. h' [6 I3 N
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期
    # r  R* }! X# t( g5 I
  10. 0 ?8 Y  {. [' o8 c) d
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/
    $ E3 [6 p. h% g1 `) |" `. i

  2. 3 t1 Y- u- T: A. c2 h7 n- r
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度
    ; a7 u2 {, t# R. e: H' T# d& G% R
  4. - \1 h! X" b8 ~) j
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    4 U7 ~8 V! E( w* Q' B- R
  6. * J1 z( t. l$ K: K$ l& R$ @( c
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式( i& A" F2 N0 }7 `. i0 Z
  8. " P/ v/ Z7 ]( w
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发
    0 L' d! F. o/ b& v# A4 m8 ^: _

  10. 2 r( T- f* z2 G3 V4 b3 ~+ ]2 U
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐3 B+ }4 T' R0 |) Z2 Y+ e/ P( F

  12. ( L' S9 J& v! n' Q" B
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数
    6 a( P$ y7 N4 x8 f
  14. ! u4 D; ]# V+ h6 I' O; Y
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/
    ) c! i) V! H- Z" I& S0 x+ R

  2. " |/ j( ]8 g- V0 G" g2 O( `; a; J' b
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
    ( @* t5 f; r3 D4 D( X4 X

  4. 2 Z. {4 E" R4 ]+ _9 e! o) B
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);) L/ n# W- d$ u  V3 Z- a, H7 x3 V

  6. * ^2 o( \9 q9 Y/ X; u
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);
    ! T" G8 P5 w& z+ [( D
  8. 9 q6 f' z- ~( Y1 _2 H/ o2 Y4 |9 H
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/
    " w1 N" ]. Z& J' c* x& E
  2. ) m8 h/ L6 M' R7 Q
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/
    7 G7 b6 H6 r* L# n) G

  2. 2 V# [) K; w! w) `: n4 C5 ~0 A
  3.        ADC_DMACmd(ADC1, ENABLE);
    % t, Z2 B, s, l& r# m
复制代码
  1. //*************** Enable ADC1 ***************/* M6 Q5 y4 p7 u+ m3 L/ Z+ J! Z
  2. $ h- v% v4 m# t
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. ( K$ A$ h8 [/ O6 ^
  2. //******* Start ADC1 Software Conversion *****/8 D' |; N  u# Y! s9 M

  3. / v1 @& o' G% A; M$ q( A
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码
: k  ?6 V& r$ x$ a; P9 l
* e4 o0 p0 K& H$ ]6 }6 h1 w
5、  中端配置:, w% y: U5 {0 @1 r

1 @8 q1 {1 h) l以下为串口中断配置:
  ~" N. e, a8 c" ^: |6 Y/ c! q7 k( x6 [& `
  1. void NVIC_Configuration(void)2 m: y+ M1 A  ?$ k
  2. / g. B2 i( N( v& n5 U$ M3 ?
  3. {
    * o2 \; m7 y; W% z" w0 V% [- b
  4. ! S4 n* j% r6 L. x! e: Q
  5.    NVIC_InitTypeDef NVIC_InitStructure;
    $ @& n: i! R5 M) p6 k5 c$ S: l
  6. 5 F5 l) q$ ^( p8 \5 c* D! D3 s# u5 h

  7.   b! \. p) g% [, b+ [

  8. ' v! N6 f9 R5 m$ Q5 y" h' D
  9.   /* Configure the NVIC Preemption Priority Bits */ 0 v- k! t' t$ z# a
  10.   a$ ]: x6 c! N, X; v7 d
  11.   /* Configure one bit for preemption priority */
    - t; x+ v- y! B1 H: a
  12. 1 e' E3 Y- G+ P; u
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   / f# r( Y6 `( Y5 a
  14. ; N  Y: u, V2 m( G7 j( r
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              . V) `1 F2 M% N8 H/ x. y
  16. & N9 d" K' w+ n  S$ S

  17. : D; i0 U2 L+ W& Z4 K( p

  18. 8 h+ M: Q. s$ N7 o7 e6 c0 @
  19.   /* Enable the USART1 Interrupt */
    * M& u: |- n$ [; }8 `/ G/ n
  20. # n  [% C& k. X* Q3 M
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断0 \) ~4 ^4 _- O1 S0 z- e% N

  22. ; [. i! G% t, Y, }0 i
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0
    0 Y9 k6 j% y7 u3 B" I

  24.   L- p5 d) B8 m& ^9 V& `# o" X, E
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0% o6 \. H( @+ ?2 O5 ]; M& S( T# i

  26. : |) Y' {4 F! x; D# ^5 x
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能4 z. ]- ]+ n. H0 M# Q

  28. ; l" i9 ]' A/ Q, s
  29.   NVIC_Init(&NVIC_InitStructure);" z( e! d9 D5 `6 x5 d" d
  30. * K8 X/ S7 F, x5 Y9 _- b
  31. }
    ( N- V0 ]# G% k
  32.   a7 s( g5 g; f5 Y; b6 G
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断0 _* V+ P' U; e' X
  34. 0 {& n. ]/ C& M+ b4 `' q
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断8 P: S! E. M: m2 f7 @# N( h2 \
  36. 9 k) n- R! z9 u& K* W4 V# i
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
    . N5 r7 F. A/ U: D+ ~3 v. @
复制代码

: f0 ~- e: R2 G" S' }1 J6、  使能外设功能:
' K: Z5 ^/ {% L* ^% p4 M
) H/ V# S4 J/ [/ e2 ]串口使能:
  ?! [6 f8 U# h- I; ]. |: |& k) T+ c6 `; W& S
  1. USART_Cmd(USARTx, ENABLE);+ t, C* P0 Y1 R9 m# e

  2. + p3 Y5 U& E  I
  3. ADC使能:
    7 p/ W$ K+ H- s$ ^
  4. ' T  S& G; i0 `* N7 k' S) Y
  5. ADC_Cmd(ADC1, ENABLE);
    % k% q( }+ c- g3 ~9 J1 o
复制代码

# m# U* K, n+ a& K" S! ~! }# Y$ H. A9 A( H7 q7 E. O- M
收藏 评论0 发布时间:2021-12-4 17:03

举报

0个回答

所属标签

相似技术帖

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