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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:2 ^$ Z! X* o. l( U. r: B, b
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。
; ~( l% G0 i" _* e  i! t: O$ _- C; S4 E+ @/ T! B& {, ]
1、  时钟设置:包括引脚时钟和外设时钟:
5 x; s  Y1 z7 j4 I( I. \& q
$ h8 |) B: s2 c/ J" T/ a: XRCC_XXXPeriphClockCmd();
8 [1 Z0 ^, M7 [) {3 w3 [" c3 x4 @3 g, n
2、  引脚连接:即把引脚和外设功能进行连接;
7 O2 z# o( M6 b8 Z& L+ |& t* v$ @) T; V5 S" E9 R, H
GPIO_PinAFConfig();6 q) o/ V6 t, K3 |" S! X

+ _, b! J( u! i. L- {# J如下功能需要引脚与外设连接。
/ U6 y) K/ p- O9 Z) [
# L2 t2 t3 i* N) v! }, L  *     @arg GPIO_AF_RTC_50Hz
" t& @/ ^& p, I3 U6 A0 K! c( ?) l; c9 H5 W$ T
  *     @arg GPIO_AF_MCO+ @% [) o( y- n
4 E% i# [9 r* K) ^
  *     @arg GPIO_AF_TAMPER# \! e; n7 |3 x# O, K4 a

" i9 e" T6 [! N- `  *     @arg GPIO_AF_SWJ  ?7 }' _0 z& S2 W' N8 E) {
4 {8 O4 ~8 U) Q, r9 a
  *     @arg GPIO_AF_TRACE2 }/ Y9 L4 J' K" o2 F

7 J& E5 S' a. ?  *     @arg GPIO_AF_TIM1' D' a- B/ D& M) j6 T2 t

% E1 p" Z! v/ k; g# k3 y  *     @arg GPIO_AF_TIM2
0 e7 U  W6 ]; T, I! v; P; W+ d7 F3 j* i6 @/ |
  *     @arg GPIO_AF_TIM34 B- F* z' ]; _4 v7 V) Q
! C2 ~& [9 w/ M8 Y5 I
  *     @arg GPIO_AF_TIM4
: s9 E' ?8 B( k3 d9 `# E
* N! B1 F) B+ x! M2 ]" `  *     @arg GPIO_AF_TIM58 S9 u9 R- d' R7 ]
! ^9 f4 _/ R0 v
  *     @arg GPIO_AF_TIM8
0 |- w4 g% D8 F2 r: ?, C) G/ n
% x) C# G: E/ X, M9 {  *     @arg GPIO_AF_TIM9( j/ L: S/ M6 j$ a& }- k9 i
7 l, |1 P5 S$ F) E% p# S% u' n
  *     @arg GPIO_AF_TIM10
6 Z" S1 r8 j1 L; g2 K$ y1 Q. t6 L$ l) z* T; s
  *     @arg GPIO_AF_TIM11( z1 G' a& C2 v- f. d1 t3 {: O

# e- t) I! p" \' Z5 o1 \  *     @arg GPIO_AF_I2C1$ w' F" d1 U' K3 S# _- v
; b& S  Z8 m  ?' h; _' [
  *     @arg GPIO_AF_I2C2
. J: w% C& g+ W# k) m1 g( C3 C' a! L
  *     @arg GPIO_AF_I2C3
- c8 T& N4 C+ O
) t2 b9 \: W; m: \- `. a  *     @arg GPIO_AF_SPI1
) r* R$ R. M; q0 \, i$ ^+ M: H4 I# l: r; O1 r% Z+ z7 `
  *     @arg GPIO_AF_SPI2
/ d8 e$ A1 b% f- p
; H8 O  T7 |+ L. V  *     @arg GPIO_AF_SPI3
  k5 ]0 M3 w) X# D: p9 d
5 m! D. l6 B5 k6 T1 m  *     @arg GPIO_AF_USART1( a$ E9 z* a8 \0 a
6 |- M+ R6 D9 v; d
  *     @arg GPIO_AF_USART2
1 i' k5 W3 }  }
! [# ]# f- c7 e, }$ y% I; ?2 o  *     @arg GPIO_AF_USART3
' N: i. O9 |( [: m8 Z& @; a
+ V" B. L) ]: h$ F  y% u  *     @arg GPIO_AF_UART48 @% D  q( Z- L5 H& t) j

$ N4 A: s% e! E4 E7 r% C  *     @arg GPIO_AF_UART5
; ~  r7 J7 w, n+ a+ u4 f
2 U8 f; r; @4 y. m$ p  D  *     @arg GPIO_AF_USART6
5 y+ Y/ l& X7 [9 e* f# b3 Y7 Y; N
& T" J( E* F8 I3 ~. t  *     @arg GPIO_AF_CAN18 h. r/ L4 |9 c+ b$ [
. u4 h9 F) L: @; B3 O
  *     @arg GPIO_AF_CAN2+ ^" D+ {6 L* y/ U6 w, |6 `

* x" i: H# P# o4 o  *     @arg GPIO_AF_TIM12
0 {( M7 }! ^* {/ P, `
+ w/ S+ K" v. |5 C2 H7 }  *     @arg GPIO_AF_TIM13- h& ~; ^0 q) f+ b! T* C

+ `1 J1 [9 w- J7 {0 X  _  *     @arg GPIO_AF_TIM14
2 E8 b/ ^6 @4 C
7 k0 k9 x8 a1 n  *     @arg GPIO_AF_OTG1_FS& R4 k  E2 R! S. R# K4 C- ?
9 e1 i0 @# ~& [/ T- o$ _
  *     @arg GPIO_AF_OTG2_HS
% |4 K6 B/ d$ d4 g1 R3 Y* W6 J- S# ~& f
  *     @arg GPIO_AF_ETH4 O) Y$ d3 l: x" X+ |+ e5 Q% U- d
2 k" \' u& o: b8 U3 {( `; b7 _' K+ e
  *     @arg GPIO_AF_FSMC
  m- ^% P! N, O* H0 N" Z, s& ~6 l' u: G' w
  *     @arg GPIO_AF_OTG2_FS  g& g: R: k7 O/ K" S& f

) ]8 X% N: S/ D$ `7 z; p& t* R' ^  *     @arg GPIO_AF_SDIO* k* [  ^4 j0 w& Y( g2 m

1 [. u1 P7 \  H6 Q" h  *     @arg GPIO_AF_DCMI
2 ~; v/ G8 ]( @. @4 m$ c' E' b0 I* ~9 r+ a% n
  *     @arg GPIO_AF_EVENTOUT
& ~3 v1 v# u* l! J2 ]* ^
/ m# g1 R" i5 I" J& K% X6 v& n3、  初始化GPIO配置:" h3 m9 R0 O2 i* U3 R6 T
0 n3 ~% f; R4 c+ O
GPIO_Init();
' K0 c0 {8 N8 }/ }4 X* d1 L
; p$ K+ _) y0 V% f; ~4、  外设初始化:
( s8 P' z1 f; W/ Z. X9 e) M' K7 _3 v/ w( ^
如UART初始化如下:5 I4 s; |8 m& ~2 d2 q/ E% F
6 Y' Z1 l' S$ l6 \7 d  n
  1. USART_InitStructure.USART_BaudRate = 115200;+ b6 L& t- r+ T7 C. }

  2. " i+ K7 |% @; ^+ Y: _% h; v0 g
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    ) n, L4 n, ]' p; {1 l" p  x

  4. + N4 ~  Z0 E+ ~3 g6 c: q
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;# g' T! B3 j4 D( l( J9 t  Y# t

  6. 8 \: s' f0 n! H6 m% H0 y, _
  7. USART_InitStructure.USART_Parity = USART_Parity_No;
    $ y& N, T- G* [% s9 m% |# C+ o
  8. , U% H1 b# [: \6 X& k, \4 N
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    . n, ~: \- H- u. U
  10. 7 z3 f+ D  E) b- u
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    ' H$ e+ R3 p( Q2 ?$ s

  12. . M1 a4 D/ V) [
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码
# K' ]' u+ }% j% u7 |% M
2 C1 w" y$ c' L" `$ J, i" y- X
ADC初始化如下:(多路模式)
# T8 c. \# ?' C7 f. O8 t* \3 z" v3 a
  1. // DMA1_Stream0 channel0 configuration **************************************/
    0 n9 A9 j- K& h3 A! ]2 W( @

  2.   D6 C4 |# _! [2 W  }
  3.   DMA_DeInit(DMA2_Stream0);5 y' B9 y, t0 o# ^) @8 G! J  R
  4. 3 i# A; W" B+ m, K7 {, n$ u' S
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    . m+ j% o2 I' g9 g% N

  6. . u% Y" `# a' h
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址6 l  f7 M4 D- l0 J! l3 F, _/ {* ?

  8. 5 l1 A- k" c3 h+ X: f  t3 H8 L+ E2 v
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址! O. C6 c3 H/ [+ }+ P$ M

  10. # q% f6 X) F, S4 p
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存
    / I+ Y' _& `/ d( z* w6 G& Q, W

  12. . ^3 t' H+ r: o  P
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定9 n& A9 Y$ u; x& f

  14. + H& L1 _/ @1 J) @
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变1 Z0 x& d* M9 [2 z
  16. . Y- }  k/ R$ s* u2 w) Z
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)  V/ D' a1 P4 W' U$ k
  18. " g: Z$ y, u" k2 R6 @
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字
    4 p4 ]. H; m9 V& |/ c# \
  20. ' }9 o! W! ~. [0 R* ~
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字
    . Z2 j6 p# R  j
  22. 8 A  R& M5 x5 G! f2 l" E* d( y' l" \/ `5 {8 q
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式2 ?0 ?+ N) Z0 B) \; @

  24. 2 Y' w6 I8 L" K% v9 W3 Q8 v- I" D0 w
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高
    ; r) G) A1 u/ q, l' o
  26. ) r- o7 P* y( X7 x7 Q
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;
    1 U! v8 W. G- x/ i
  28. $ s& F# c  }) |. l; L$ |
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    % |2 @6 D; B1 l# t

  30. : x* \. P5 c* h5 H! @% C1 R
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    : p( p# k, w: }" p4 B6 ~( S) O. K
  32. 1 y7 o8 R9 ]5 N5 [
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/
    0 g5 T; T% h% I9 @* d5 J# x

  2. - N; J- u& E8 U5 G
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/
    / O! T9 f5 y. V  f* r* j% ^# C/ r! o

  2.   r  `( [3 I: f" k
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/
    ( ?9 O  a) G  @% P% h% k3 U
  2. & z, K- y( s( i5 t
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式
    / m' X  h8 U  p! `

  4. 0 o" T7 w+ \/ m, {8 b* _  e
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频# s7 E9 T+ T- h, J) {  H
  6. ! a. C- b$ m* U; M
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;) j* [! J2 F9 s  w0 P1 s4 I# F8 t8 [

  8. $ k# i- a% \+ v2 z: E
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期
    # d* M8 c7 K9 m, P- f  m1 t

  10. $ s3 R# ]: x: Q  U) T4 N
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/3 z$ |% n1 R* j( M3 V. H

  2. ! L4 X' N1 ~: ^. i( d6 `, ~# b! ~
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度
    , n  v: o6 Z2 t
  4. 8 a, D( _" j& k" {
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    % A9 M1 ]5 L) T1 d6 m; V6 R

  6. 7 K+ t3 K* _; A( {
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式. F6 u3 [( N% Z# \, V( ]
  8. 0 V9 ?( d' ^2 d4 K8 u  L
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发
    " i" W: Z: J* u; N) t* @
  10. : P+ C: g! r6 p1 J. s& w
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐
    ! c6 r- X; b6 S' B
  12. 0 P' {, W! L" j
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数9 D2 e5 B- `! v2 c  N
  14.   q! E0 g. f% E' A, e$ H
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/
    7 W. O, m( R- |

  2. 9 o4 b5 \# }1 K; W
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
    9 M+ q7 C- v" X' ?' S

  4. 0 J! t9 {# B: ~* B% S
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);
    % X: G) }: H8 P' m3 i

  6. - v. Q" {# U( H
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);
    , N( c- t9 b, g- E
  8.   R- T1 r( Q2 n3 t
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/7 e; r+ o) A+ d

  2. 2 }0 n2 W1 j, Z# H! d2 k6 `, ~
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/( Y. {1 u2 q. s# s' H

  2. % N! L! ?' y; K* a5 a
  3.        ADC_DMACmd(ADC1, ENABLE);
    + k- U* }2 T4 D1 N- B
复制代码
  1. //*************** Enable ADC1 ***************/
    8 ~; }+ X* b6 s3 o# j/ U, V

  2. , {& i7 V2 c* B' J0 h8 B
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. 4 t/ Z! [$ G9 A$ c0 x
  2. //******* Start ADC1 Software Conversion *****/3 V" w+ b6 @# a2 I
  3. ' d) H; O, y% X3 z, W) c
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码

4 Y6 a' T+ E. _' j3 ]9 M! p$ X% A6 L) r% B/ I! W
5、  中端配置:
$ y2 ]1 {$ K2 j" ]0 t
0 H: W6 j- J1 r5 c2 X以下为串口中断配置:! E' r  c0 _, D, H9 k: @5 r

3 x: L# |, ]9 U& v
  1. void NVIC_Configuration(void)
    6 P, ~: Q) ]$ _3 H. I1 J

  2. 2 V. i7 F; {' p
  3. {
    & v2 x! T! m0 S% j5 v
  4. # M" k( H; k+ i: M% @
  5.    NVIC_InitTypeDef NVIC_InitStructure;$ s& t$ [$ ?0 L

  6. . z# O5 P8 d. k6 M4 y

  7. 4 y7 ^' U2 Y+ @7 d& c  W
  8. # a! W0 V% |# L0 J) m( {& ]
  9.   /* Configure the NVIC Preemption Priority Bits */ ( M( N2 S4 ~% g: r4 {3 c

  10. 5 A" E* O- u$ [9 }$ s$ H
  11.   /* Configure one bit for preemption priority */
    7 d0 @% M: B+ k! h6 d. e

  12. + n& c  T$ Z/ P7 O2 ^# N
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
    ; f4 ^0 ~. J* l

  14. 1 A  x! S, U( J$ L
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              * h+ H; m) [, O. O

  16. - O) A  F% p- B* Y# p5 E8 V

  17. : h# ?$ D; Q2 N4 O' _* a
  18. " m/ v) \6 Q: J  h2 r
  19.   /* Enable the USART1 Interrupt */* D/ I! H1 n* U' i% e, _9 A
  20. 1 h: v- \0 M1 Q- s2 j, Z
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断3 q2 B$ c" z, f( ^) X

  22.   l9 x3 C+ F( y5 H% e$ X& c( z
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0# @+ i. d6 e# d0 B- Y  O$ i
  24. + Y& L+ T( x( `- y. Y; |% ]% k& U
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0
    : T$ T: X8 j/ K, [; V: S  y& R# A

  26. 6 n- p/ A3 x: T! I
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能
    + S- z4 z/ N* u/ }

  28. , a/ Q) l& o# e6 h4 a/ h; F+ j
  29.   NVIC_Init(&NVIC_InitStructure);7 L  i0 Y6 D/ \% k" w4 l
  30. $ N% f/ n* K9 X  r8 l8 x
  31. }
    ; p  Q0 _  e* ^* u6 Z! t

  32. ; r+ ~# t, Z- J
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断9 {) y# y- ?3 ]9 r& I! t
  34. : O8 t# B  r' h/ k( J
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断# z- X; d. t. T9 r  R# n
  36. 7 u5 r" ]/ U& f3 f* z( F. J
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断* F+ v+ e5 G' f) p6 B3 n
复制代码

7 j) T8 P, j: Z' J3 g0 V0 M6、  使能外设功能:/ D* J% Z  o, r3 Z
( g5 E8 ^4 V8 c9 K5 Z6 n
串口使能:
3 h" J  _8 Q1 A
; v2 U  K" K' R' ^8 M3 C, ?3 M
  1. USART_Cmd(USARTx, ENABLE);
    / K$ |3 n- r8 ~! a; ]- F  R" P

  2. 7 c& L$ }% w' R0 ~% ^4 ^* M
  3. ADC使能:& U8 a: F( S' E1 Z% d( J; [9 Q+ k  F

  4. * W& t% C+ {, `  K3 }; [/ c* Q9 A
  5. ADC_Cmd(ADC1, ENABLE);+ l; i$ }  h! |" w" k, t, U& ]
复制代码
  S* F! n5 \5 h/ D
5 a: O/ ^+ `: h" @+ C! Q
收藏 评论0 发布时间:2021-12-4 17:03

举报

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