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

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

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:" {  P! L- x" u  x
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。
/ L3 V2 c5 [. n/ w( f2 K3 S
$ C* \7 n2 e* V1、  时钟设置:包括引脚时钟和外设时钟:
7 ~9 V4 v$ {, f
$ c' w% c/ L- HRCC_XXXPeriphClockCmd();
( G6 `+ m: n9 W+ \5 ~7 r6 h
; O6 {1 ?: A" c' E3 ]2 @: F- }2、  引脚连接:即把引脚和外设功能进行连接;
/ E4 k+ u- @4 F; d$ p; z9 ^1 ?8 f5 b- v! p6 y
GPIO_PinAFConfig();
- l2 v0 p  O$ g2 z! E0 G# Y9 u& x2 b  }9 P2 W3 Q/ q
如下功能需要引脚与外设连接。. P2 C2 G; Z- O" G( l. K: p
% c" h: |# x3 D$ T) D) e' M
  *     @arg GPIO_AF_RTC_50Hz
1 e7 K1 v# q, O- s0 q3 t/ }, Q. {* f( M, f* z5 o3 V+ V
  *     @arg GPIO_AF_MCO0 A& O0 n1 T! b6 d* [( {

' W, p5 B% V4 P6 B; y% |* p8 `  d  *     @arg GPIO_AF_TAMPER  h5 c4 f# ^6 w
. T2 Y" v( O& r4 @0 w4 ]
  *     @arg GPIO_AF_SWJ
2 P' x. Q/ _9 s) Q. d+ L  c8 ~2 C- p0 {/ x6 T
  *     @arg GPIO_AF_TRACE3 Q  u% p; G, r1 b5 [+ Q9 z
7 A, s- M% d# I8 S: A# o
  *     @arg GPIO_AF_TIM1
& Q6 n+ a8 R- {3 p
  ~9 _0 M4 d" J  *     @arg GPIO_AF_TIM2) _7 b; A* r4 C
. s) M; ^; j. B! A/ k3 ]; t& p
  *     @arg GPIO_AF_TIM3; z3 @! Y! _, G# w, \

1 \  K  T, ?4 h( C  s* V  *     @arg GPIO_AF_TIM4. s: I9 r& Q3 C
! K: x( d& q! {2 L5 h, b
  *     @arg GPIO_AF_TIM5
( F1 w+ ]9 f+ f) ^9 A) k' V  t5 K. p0 W; R
  *     @arg GPIO_AF_TIM8% N1 _/ q- m2 b) B# }
% S  d6 R8 ~& ~6 |
  *     @arg GPIO_AF_TIM9- {, {* ]9 ^* l, T3 q: Q
9 |% ?8 a- {9 |7 i6 h% `
  *     @arg GPIO_AF_TIM10
, O/ l# Z$ I4 Q/ A/ H$ l6 z
* a4 M5 N) ^6 y0 A* I: U8 t  *     @arg GPIO_AF_TIM11
3 E& d! a0 k" C8 g; w' K) ~2 B4 f/ u
  *     @arg GPIO_AF_I2C1
$ r9 P/ t: m5 n/ Q- `9 ?+ n
% X/ W; @% H" l" z3 z  *     @arg GPIO_AF_I2C2
1 t4 c( O, I4 _9 u( b6 a& X" x: K7 i0 V# f
  *     @arg GPIO_AF_I2C3
$ x; K6 R4 y! G
* W9 }  f4 f7 O% {( B  *     @arg GPIO_AF_SPI1
* p; z" x5 H% F) b: a4 T# L% j( B. k9 h1 v6 j7 \
  *     @arg GPIO_AF_SPI2
  n  ~, ~8 G) Z( @! u* y. }1 C3 w5 J* O9 c8 T& m3 D) N9 ^5 g1 M
  *     @arg GPIO_AF_SPI3" h* N/ P  g1 w
. w& S/ x0 O; {2 _' p) n  O
  *     @arg GPIO_AF_USART1# L4 g- d+ d- g8 b# Z- R7 O

3 f0 c. [0 }9 W# N6 O/ M  *     @arg GPIO_AF_USART2: P; E1 p3 C, ~! e* W
/ b  e) h, u, ^( [! ?% E
  *     @arg GPIO_AF_USART3- y7 L( m8 P, B; d- ]( t
$ R" T/ ^! V$ I( f1 t& r4 ?; l; W1 N
  *     @arg GPIO_AF_UART4; A4 D4 u- f' d3 f+ L

" N" k$ d$ F$ _* p4 W  *     @arg GPIO_AF_UART54 ?+ R' l! }( |+ N4 V% a- Z9 i1 R3 n& I

8 O1 W. f+ B! W, _! l  *     @arg GPIO_AF_USART6
( A1 V% P* f4 J8 S' C+ X8 G! \
6 ?" y) a, ]. U: m7 H  *     @arg GPIO_AF_CAN1/ E6 a2 E; b4 Q. {# q9 E+ d) A

0 u+ i2 j( N  I  *     @arg GPIO_AF_CAN2) v2 z6 g: {; f, w% `
/ L, }: N, H. b& _
  *     @arg GPIO_AF_TIM12& m3 o% w3 }- r1 k9 D
4 N6 @. X4 U: A7 l  k; s
  *     @arg GPIO_AF_TIM13
5 s6 X% Q/ F$ z& O) W
  U2 Z. ]( p* d3 F; o1 u  *     @arg GPIO_AF_TIM14
2 J1 \* x) D! ~, V; G
8 Y% K' ^: u6 z( B  *     @arg GPIO_AF_OTG1_FS& J7 o- A5 g/ R- g
  F) _. R( S$ O0 N5 N
  *     @arg GPIO_AF_OTG2_HS3 g4 W- v6 F" k* Q6 }1 v
  G6 T: j" }1 W* y6 o
  *     @arg GPIO_AF_ETH
& t: M$ K* \2 Q; r: z7 f" B3 {7 D3 \$ S
  *     @arg GPIO_AF_FSMC% Y8 i* B1 m3 o; ~
1 u4 `" L& Q/ R  ~% ]: p
  *     @arg GPIO_AF_OTG2_FS9 P8 c9 G% y$ a3 h2 G

9 z( Z, C  H6 h& `! d  *     @arg GPIO_AF_SDIO
2 G' w; i4 n3 Z# o3 Z# h! q! S
  *     @arg GPIO_AF_DCMI
, h) P2 Y& ?! \" j: m& A9 S
, w) E1 x$ ^8 G* h+ {  *     @arg GPIO_AF_EVENTOUT
; s  ~% O3 y' o2 X& }
, G$ E, Z& F$ x: H) \4 k& ]& R  G4 n3、  初始化GPIO配置:2 x, u* q2 n3 o8 ^
% F: j% s6 t+ z! V% l; H# L9 |
GPIO_Init();% p, T* S5 s4 p- \9 }: G

9 I  s8 |% |. K) H/ E$ q4、  外设初始化:
$ l( N5 F+ E+ ~' N9 }- w% w0 r. G
6 y! W7 `4 V4 O7 j; @如UART初始化如下:
2 S' m$ ~# s% b/ I# X6 r
1 e0 t* K6 X/ @
  1. USART_InitStructure.USART_BaudRate = 115200;( T7 ?  g7 l8 r

  2. ! q8 l  [: y- s- N6 R
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    , m& `3 z) R" ^$ M( _! G
  4. " t5 v( w* C8 Z& V. E
  5. USART_InitStructure.USART_StopBits = USART_StopBits_1;
    * e7 h% c" {2 J$ Q+ k
  6. : m% {7 C: [  h0 ^! U
  7. USART_InitStructure.USART_Parity = USART_Parity_No;4 T" k% s/ G# k( z

  8. / }! E4 ~/ {# I, d1 m+ C
  9. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    * m* w: l9 ~! ^8 I$ d3 d

  10. , K( z1 K# `# k# F  K+ B$ }% h2 F
  11. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;" g7 O+ y* G, f2 X: J
  12. 4 b9 N4 E! G: @# a  G1 Y: m, [
  13. USART_Init(USARTx, &USART_InitStructure);
复制代码

% D+ W/ B% h% c& Y0 G
7 d/ V4 y0 {1 {- D. t7 ^ADC初始化如下:(多路模式)' t! }6 q# J& K/ z
  U; X: ]% g/ a6 I7 a
  1. // DMA1_Stream0 channel0 configuration **************************************/
    ! d: k/ o8 z6 u1 t
  2. . @- L& ?6 a5 {* m3 k" A' ]+ i
  3.   DMA_DeInit(DMA2_Stream0);
    7 W4 ?* P5 d1 K9 y- `
  4. ' @0 N9 |/ T8 e% C* }
  5.   DMA_InitStructure.DMA_Channel = DMA_Channel_0; . I6 R0 w, _7 r) \1 g/ T
  6. . B2 Z* ]$ u9 _* U( _2 Z. ~8 L
  7.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址
    6 \/ X- _. V! Z- M
  8. ' S0 H" q5 `4 @4 o2 T
  9.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址
    ; `' h- j' m5 ?/ O" t6 ^
  10. * ~- h. b. O, N/ B. a
  11.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存! C0 q# i( e) x0 |

  12. 0 M! m$ r. }2 y1 C; F
  13.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定
    & q2 ?2 A  ]; x. e1 }( h- ~6 X

  14. ' m1 p- s% A, X6 \5 L* g  j
  15.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变+ H1 X* q4 C3 R
  16. " K! G3 Z! r" C" W
  17.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)
    # C1 a& ^# J6 s6 ~5 T6 l. o

  18. ) q6 ~: S' V" c+ f9 t5 B
  19.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字
    ; k$ S6 O, P( b5 ^: W
  20. % S6 I7 b; h9 K
  21.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字
    9 a9 u+ J# i& j' `$ B3 Z/ Y3 V
  22. # t% a; i+ i6 Z- Y3 e7 a; v2 E8 [% P
  23.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式. ^9 m% T+ F0 p  C

  24. : Z2 [( ?! \' C  ^
  25.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高% p" E* }0 c+ i. V- B, H. {1 z

  26. ( v; h% R+ E4 X1 n
  27.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;
    + a* C' n+ c, j" S/ E  Y& ^4 Z
  28. 2 \, G  J6 W# N  N% q, n
  29.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
      r6 i/ b5 f2 g
  30. ; O) O, y' N' ?: g1 u. y* T
  31.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    5 v0 h* |7 t4 |7 B6 ~
  32. ' P/ t4 i& |9 G" X
  33.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/: }  k, {' v. C* n
  2. ; _- x' w% p% R' O
  3.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/ 0 I2 {8 ?3 w- v, q* s# B$ J

  2. # Z0 I" z; S3 J4 K, F) @4 D8 D
  3.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/1 D) I( |4 e' j( Y& Y1 j2 O
  2. 7 O# D( O* a# n- X- p. z' v
  3.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式
    6 W# c, r( W7 N$ n$ d+ f
  4. . L; @: Q; ]5 z9 N
  5.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频
    + Q- N/ ^* J; Q* X# W! y2 A
  6. 7 U% s6 G# j. z! S+ @# a# @
  7.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    # G* s$ H9 z9 T/ D9 O6 I& _

  8. ' a7 f# @$ S2 z7 o1 T& u% B
  9.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期* o3 A4 m$ v, \

  10. , k. ?8 i, L9 U( O
  11.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/- m* [8 [! @+ g1 n
  2. 4 [3 e" {$ a) H7 E% R! R
  3.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度
    ( `; x, u5 w( @$ a) F

  4. . v+ ?8 a" T+ R8 z  u$ A% }+ L
  5.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路
    $ u8 Z0 B, j( {# Z

  6.   j' g4 \" q3 R
  7.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式* P. |# {. b" F; H

  8. 9 a! V  e1 f0 o0 ~, J% i
  9.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发
    7 h. U3 o5 N1 @0 M

  10. ; @( e: h/ ]2 ^; w. M. M& c/ y
  11.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐; B5 Q9 g0 H- W% ^$ F( k

  12. ' p9 r7 F$ R* E" a! D# \3 m
  13.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数
    , F* j8 D! g' R& `
  14. ) T2 T$ @$ r- m( W/ m7 d
  15.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/9 q6 R5 o7 f8 x9 I9 d: D/ X
  2. 2 i( Y" v! K2 `
  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
    1 }3 y1 W0 b2 s" Q7 i/ F, G
  4. 4 `+ |6 n0 ]3 F- `9 p, k% R  T
  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);
    4 z  Q/ P" Q0 d+ c- O
  6. : j, }' X2 H  D9 F+ `! f
  7.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);
    # ]2 J, D* l& Z# W
  8. : D$ s- i* P- H6 n3 v" E
  9.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/
      @: n6 A3 K0 S
  2. 0 G) B& @" |9 j7 t
  3.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/
    . B( Q, d7 M3 @: _( R- p- Q2 S

  2. 6 ]: e  l5 d. P# S( `
  3.        ADC_DMACmd(ADC1, ENABLE);
    4 y$ ?; Y7 @7 W* X4 E7 E
复制代码
  1. //*************** Enable ADC1 ***************/" Y, c1 r& V' X' C4 ]8 M
  2. 5 h9 k/ v: f, @& |' P  r! L2 p
  3.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. 4 E) B7 G2 h3 v0 O
  2. //******* Start ADC1 Software Conversion *****/
    ' P& Y/ B& ?8 a1 h. W
  3. 9 Y* `3 |, @4 s
  4.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码

) b- x2 e# y$ i! X/ m; T. s: L( E* m& j, Z
5、  中端配置:$ I% `6 H) k& C8 {+ z1 t
) }! H% c; ~3 @8 K3 c# E
以下为串口中断配置:
% V, T: P8 Y1 \4 `  F7 v# D/ S, v' W0 m. f: a( M- B
  1. void NVIC_Configuration(void)$ N! N+ x4 T# ]" \- w; H

  2. 6 k1 p/ q# _+ r2 h, V, z. Q
  3. {
    " o3 G1 ~7 U' }0 H' E, \( M
  4. * S3 p4 W8 C) u- m$ t4 b3 l
  5.    NVIC_InitTypeDef NVIC_InitStructure;+ p, T7 Z: Y# l; M

  6. & G. O; k0 j6 B* [4 I
  7. - r# ^9 z# f- Y3 x
  8. 0 W; e$ e: w3 H1 ^5 u
  9.   /* Configure the NVIC Preemption Priority Bits */
    - ]0 G, c! ^* g9 _
  10. 3 Y* u7 x1 t; a
  11.   /* Configure one bit for preemption priority */; F; o' S8 q& g* G' \7 y& J

  12. : \& l! t- v* H. U: w; |
  13.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
    4 Z/ M! P8 q( X# i
  14. 6 d8 Z. f: f7 R4 H% J( c
  15.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              
    4 j0 C9 E3 H' {1 W1 j9 n; ?* c* h
  16. " O/ n- A9 H$ c5 }

  17. 3 h. ]; Z% |+ `: ?+ x/ ^' }
  18. $ z7 Z+ N* g* q) M6 Q: T9 M
  19.   /* Enable the USART1 Interrupt */
    1 H2 |( G, ~. O, W! Z, a: X
  20. + t$ e/ w# R0 L
  21.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断
    + q  Q$ }, V: B

  22.   ^0 l' Q3 ?/ `, {! i3 J0 R6 c, t8 ~! L
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0
    / l3 ]! |: W7 K0 B8 H1 }" ]/ w' l
  24. . ~$ m# i; v" N
  25.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0( r( Y9 m# ~0 N( o8 t
  26. 3 E! K) d; k) {& ~" E
  27.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能
    0 ~+ a+ D6 P* g0 i( l0 {
  28. 9 \  N: p# y0 r4 a
  29.   NVIC_Init(&NVIC_InitStructure);
    : r: _( N8 \2 {
  30. " h/ e$ n3 W, z0 I. r( T4 R; ~
  31. }
    4 W2 K. I1 m6 i7 u" k+ |( ~

  32. & T% b# P3 @/ D- s# ]" Q
  33. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断& e" h; Y8 X: J; i( }1 [9 C

  34. 4 z0 ]- c( L. f: U4 B' Y  z
  35. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断+ A4 l& S" ~( p& |
  36. $ |5 m4 T) h% Y2 V3 v
  37. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
    9 F' j! C8 p! E: x
复制代码

4 {0 a' `& I4 g6、  使能外设功能:( K! A. n& S- U. w* @3 i
9 H' C( W8 Z1 g2 D$ G+ F
串口使能:4 g2 L+ N2 n1 Z
, C5 x8 {/ r' a' ~) @- t4 H/ r
  1. USART_Cmd(USARTx, ENABLE);
    2 d4 W7 o8 U6 H" K
  2. * B- H5 E& R3 |7 a& l/ F: a+ b
  3. ADC使能:
    0 \; i  M! d5 D* @* s  J) ]
  4. 3 v" T1 o) `  T
  5. ADC_Cmd(ADC1, ENABLE);$ I6 r2 B/ t* \" I# _, }3 o
复制代码
9 |1 ?% V9 |, Z% c% g  u# S5 @  f
2 }. n5 ]7 c) u2 I
收藏 评论0 发布时间:2021-12-4 17:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版