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

【经验分享】【STM32F0系列学习】之—通用输入输出端口(GPIO)

[复制链接]
STMCU小助手 发布时间:2021-11-21 22:00
1、GPIO介绍
$ I6 E& P1 I, z  `STM32F0x1/STM32F0x2/STM32F0x8系列每个通用I/O口都有4个32位配置寄存器(GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR 和 GPIOx_PUPDR),2个32位数据寄存器(GPIOx_IDR and GPIOx_ODR)和 1 个32位置位 / 复位寄存器 (GPIOx_BSRR)。GPIOA 和GPIOB 还含有 1 个 32 位锁定寄存器 (GPIOx_LCKR) 和 2 个 32 位替代功能寄存器 (GPIOx_AFRH and GPIOx_AFRL)' U0 d2 E4 T1 _- x! ?; }
$ d9 L/ J; w' Y& X0 a  I; L
2、GPIO主要特性. z; y0 Y) N: \# c% f# B0 L% Y
输出状态: 带有上拉或下拉的推挽输出或开漏输出
4 e! `3 m3 e% ~' f. }从输出数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据
+ ?# w0 P% H: s; ^3 |可选的每个 I/O 口的速度
6 u( P/ K% G" W输入状态: 浮空、 上拉 / 下拉、 模拟输入
2 j2 |1 ^" @# m0 o: T从输入数据寄存器 (GPIOx_IDR) 或外设输入数据 ( 复用功能输出 )
% N& p0 ?7 H5 E+ ], B位置位 / 复位寄存器 (GPIOx_BSRR) 为对 GPIOx_ODR 寄存器提供位访问能力
. W5 M7 N! l. {1 J8 ]GPIO端口锁定机制(GPIOx_LCKR) 配置0 M0 ^6 Z' Y" P- I$ y1 F
模拟功能+ F" H0 S9 ~: E! N: h
可选的复用功能3 ]- z# ~8 e7 F* u& m6 X2 }! N
每两个时钟周期快速切换I/O值的能力
# `6 C. w! M% B' l, {1 y' t0 e允许GPIO口和外设引脚的高灵活性复用  c& p* \" o2 [6 J0 R
# P, ~& O- m. c: Y( b
3、GPIO 功能描述* S  W# P4 R& A: ~4 u! Q. U
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配; N3 z$ s0 k0 T7 c4 W$ o
置成多种模式:
1 t; M+ M! b, E. J' d3 m" _- [
浮空输入
9 c6 C: ~! P/ B) u7 N上拉输入
  J2 [8 X  g! m/ }: ], k( ^下拉输入
8 N: D& N6 K/ g5 p模拟输入
# k2 F; T  d2 ?% N具有上拉或下拉能力的开漏输出  ?+ g0 v, D$ U- L* d+ D" T
具有上拉或下拉能力的推挽输出* u- c3 ?8 o  S, e- [4 Q, k9 r
复用功能且具有上拉或下拉能力的推挽输出5 d. P+ k' b+ {: N6 w3 y
复用功能且具有上拉或下拉能力的开漏输出
9 a# M' g6 D5 i  T, Y8 G每个 I/O 端口位可以自由编程, 然而 I/0 端口寄存器可按 32 位字, 半字或字节访问。 GPIOx_
- O4 r: M3 F, X8 bBSRR 寄存器允许对任何 GPIO 寄存器进行位读 / 改写访问。 这种情况下, 在读和更改访问之/ v0 V( d' K' \2 D5 z# }
间产生 IRQ 时也不会发生危险。
- q0 w3 V9 Q& m3 K$ Q4 m9 U; j4 k8 ?; X
标准I/O端口位的基本结构- W  T/ G4 |5 R& l: F1 @5 R

' V8 ~& }0 V6 l9 Z; c' D
20200624112800430.png
* c5 q* I9 x" D. H: [

' j: K6 ]( d& E1 e0 W  q5V 容忍I/O端口位的基本结构
  |# s) e; d' L/ G$ Y$ F2 L8 _  S* S( C3 T! t' L7 A
20200624112816556.png
7 [6 p* q$ r+ B$ [- X+ I
4 W: d% E7 }, x2 W6 T2 Y& A
4、GPIO端口配置说明2 ~2 B7 y6 j& E( h! t$ ?. |
① GPIO模式
, s  G" C8 I+ q2 k# u6 H  F8 |GPIO_Mode_IN          输入模式 ( 复位状态 )
7 R1 T1 Q8 B" {GPIO_Mode_OUT      通用输出模式
- n) \; b8 O0 A  f; zGPIO_Mode_AF         复用功能模式
, w" A' K+ O% o' A" W/ xGPIO_Mode_AN         模拟模式( r3 \  U: h: q3 j+ P* G* B/ W/ P5 a5 m- X
) d$ W; E3 C+ p- h
输出模式类型:& T; n# O# u# }+ N* [9 `% O# g
GPIO_OType_PP        推免输出" e! P% s9 e- ^/ M$ Q4 m
GPIO_OType_OD        开漏输出
5 A2 @- \* P" R/ h! F" F5 |
! C) V+ _$ j) `② 是否带上/下拉9 h( h# E1 |. ]. }3 E
GPIO_NOPULL               不带上/下拉" Q, I$ O) O! e1 T0 c, }  u& z
GPIO_PULLUP               带上拉4 ^2 Z9 s% b* N+ `! ~3 z
GPIO_PULLDOWN         带下拉
& }/ N: F5 N: J0 x7 C" C8 v$ l* s: i* ?6 q0 u8 x% `
③ 输出速度# k( r- R" ?* Q, r# M7 r* }# V
GPIO_Speed_2MHz            2 MHz' `0 F  x, O, B- Q
GPIO_Speed_10MHz         10 MHz
. I3 l  m1 {1 Z; r, }GPIO_Speed_50MHz         50 MHz0 N- h7 Z* [9 b

3 c2 I* T3 H8 X' a& R: R. {/ w5、GPIO工作模式配置5 B, z- ]/ w$ o$ I# e
5.1【标准库】的配置方式3 @5 B$ U( r  R3 ?/ e' Z
步骤:2 i4 M1 M4 @$ m- ~
1、配置对应端口的RCC时钟1 L. r( R0 t8 x6 O, [; H" j) V5 @
4 v5 a0 c/ {6 ?5 y1 X
  1. /************************************************
    1 B" K& X4 w& X% x0 I0 L
  2. 函数名称 : RCC_Configuration2 M, q" y& s) D! L, V, |
  3. 功    能 : 时钟配置
    * ~& L* {/ Z3 D! e2 v% D3 B
  4. 参    数 : 无% n* X) f) I; ?, g2 e
  5. 返 回 值 : 无
    - }) N: d( [3 Q' }! i! {1 p
  6. 作    者 : JayYang/ W2 o4 \9 Z4 }2 v
  7. *************************************************/
    ) D9 [$ F- y5 _  j1 w
  8. void RCC_Configuration(void)4 N- w% U+ v/ }; q# k  f
  9. {/ c3 m: A$ W. E! W
  10.   /* 使能AHB时钟 */; h5 W! i* R( C/ I+ n+ p* L3 |
  11.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
    ; X: C, r( D( Z5 x- x& @
  12.                         RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);
    & P' H3 t$ N5 L. I1 h
  13. }
复制代码
4 i. }; X+ [- h1 e0 B
2、配置GPIO工作模式
; X0 _9 K: @. a- q% I

4 s* E/ Z! J4 T4 u+ u7 Y( S
  1. /************************************************
    + c! w3 i& ?2 j. y/ J9 Q$ d0 p3 k
  2. 函数名称 : GPIO_Configuration9 x, N2 o+ e* U& W
  3. 功    能 : 基本输入输出引脚配置
    5 h  `; j/ o5 r) [0 v4 O% A( V
  4. 参    数 : 无
    1 |2 X5 T9 J9 \! g9 W
  5. 返 回 值 : 无$ d; t0 R+ M7 ]9 t
  6. 作    者 : JayYang
    & a/ S  C. h( T6 {" j
  7. *************************************************/4 q+ ]$ R3 h' ]/ \
  8. void GPIO_Configuration(void)3 o7 R  d! @  {9 X. s, Z3 O
  9. {2 a9 ?5 h. i8 Q5 _8 S; w% C
  10.     GPIO_InitTypeDef GPIO_InitStructure;                  // 定义GPIO初始化结构体5 m5 J( `, y6 |* R
  11. % f  G, R3 a/ \9 E- M+ t
  12.     //GPIO配置为 推免输出模式
    : K' c% W3 @, ?( x! u! l
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0
    $ ^, M3 o% e) {5 C3 u0 C1 P3 @
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式
    5 b8 b5 c1 U1 l; ]
  15.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出7 B% n/ w' k7 ?5 }7 W8 G. L
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz3 e. L+ m6 Y1 ]; y& `. n: A
  17.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    * P% i' g" s4 o) ~0 K2 O; L; Q! b
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的0脚为高速推免输出模式
    # o# [6 p7 K% B' ^
  19. / H8 Z# |2 i. W- p
  20.     //GPIO配置为 开漏输出模式
    : Q, ]  w( ]5 [4 M$ U* Y
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             // 配置使用的GPIO管脚号:15 C# ?" [# |7 p- `& j; [: ^
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式+ J( N1 x, [) Q  N; ]8 B1 |
  23.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;        // 设置端口输出类型为:开漏输出$ X) d4 I* C+ E" M+ h
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz% D5 |* N# `0 @! c
  25.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    / }" ^& Z: t3 o
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的1脚为开漏输出模式4 S& c, ?8 x$ h( s
  27. : B, t: \# C- T' `, m, W
  28.     //GPIO配置为 上拉输入模式
    . Z2 l6 L1 `8 v5 U" Y- J
  29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            // 配置使用的GPIO管脚号:12
    . W/ Q- e/ v0 O* v' I% w% O
  30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式6 v) k/ Y, ^( i1 q9 V
  31.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;          // 配置 I/O 口的上拉或下拉:上拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_DOWN
    8 \' B; `0 U- Y" R/ C
  32.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的12脚为上拉输入模式* t0 a. x8 d5 h2 r/ ]

  33. 2 W0 S7 @2 r: X: H% ?
  34.     //GPIO配置为 下拉输入模式2 _7 Y3 c. C; q9 S- \
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            // 配置使用的GPIO管脚号:136 J) }5 C( L) C5 d
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式
    6 Q8 a  J  ?3 V: J+ G: H; q
  37.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        // 配置 I/O 口的上拉或下拉:下拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_UP+ F& v6 o5 o3 n& Q) `
  38.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的13脚为下拉输入模式* J7 ?3 d  x8 j/ J& g" l" o
  39. : _+ {' c; e' b& G  H
  40.     //GPIO配置为 模拟输入输出模式8 G% ~$ _* T; F7 g( J! e6 X7 r% n
  41.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:08 |& l; b2 T* Z1 z' K; P2 {/ \8 {  }
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;          // 设置GPIO的模式为输入模式- I; p8 e& H8 x& W
  43.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN, q6 t8 t0 F, u2 j4 x; H* P8 h- @
  44.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的0脚为模拟输入模式! y' l6 C( j  w- f" h. j9 E

  45. * W) v: Y+ y9 M, T
  46.     //GPIO配置为 复用输出模式6 o1 \. e$ u# v( D
  47.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             // 配置使用的GPIO管脚号:9
    7 ]# J/ @0 |! k. q$ r
  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;          // 设置GPIO的模式为复用模式  @; r/ t+ D( {
  49.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出
    " G' y8 D& f0 C4 N" v
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz: }# f+ @2 p8 V. W; F
  51.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;     // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN 9 g( y. O& R, g# Y5 e% ^! g1 C
  52.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的9脚为复用推免输出模式
    1 U9 Y7 E) V6 X" I- x
  53.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  // 配置GPIOA的9号引脚复用为 TIM1_CH2 定时器1的通道2输出引脚' h/ N6 I! V4 d; Q9 Z; f$ ]

  54. ! {1 b0 d/ g6 `
  55. }
复制代码

( P+ }; \- Q5 H9 @5 Q- O" P/ N& T3 _
5.2【HAL库】的配置方式
* h1 y) l/ v0 W
步骤:) N5 G3 M; @" w, P7 |( Y
1、通过STM32CubeMX软件配置RCC时钟
9 X) n+ _# x9 ?5 [% x
8 C/ t; j4 f+ k; z# a* z8 {0 S
20200624152114980.png

# K3 ?& [- X( B$ L" Y+ L3 x8 E1 e: @
选择【Clock Configutration】选项卡进行时钟的设置,如图下图:# h; @; z' F. E' W( |5 ]. q
20200624152258136.png

2 c0 l) g# P# u% J* I4 |
" K  w8 B3 r" t# e6 t2、选择需要配置的GPIO引脚的输入输出模式,这边的配置只是一个大方面的配置,比如是要配置为输入还是输出/ x: ^% m1 a8 E6 F1 c
& a! U0 J% {7 }7 F6 G
20200624153132751.png

  d' g( A( Q0 u8 o6 y+ Q7 v6 K/ O* s/ H* P2 U+ B5 I- F7 h
下面进行每个管脚的具体参数配置
" k, w1 A% ~* |3 y0 ]" \# o  b! g" N& l4 d
2020062415342131.png

( c- f6 b2 i6 z3 Y: I
7 G! z  |) E5 w. q) y# Y点击 上图中的 GPIO 后会在左侧显示所有使用到的GPIO管脚,进入如下界面,点击每一个管脚可以进行详细配置:, Y* a8 n. y. F6 e! I: u$ P( ?
' y) Z- Y! w* H3 y$ N  D& C
20200624153642205.png
7 U8 Z7 z$ N" i8 l

0 E4 ^: F& n# Q6 Z
20200624154553694.png
% M5 M" O- A% z0 s1 w% |
; x/ k4 M. V& E0 p" b6 h
在【gpio.c】文件下,查看生成的GPIO工作模式配置代码,此处配置的是推免输出、开漏输出、上下拉输入和模拟输入的引脚
# d. H5 U! M6 b" Z: g& m$ s2 \5 B
  1. void MX_GPIO_Init(void). {1 a# S2 I! a/ D) A- o
  2. {! w1 R3 ?0 b. ?1 l

  3. ' p: p# K. s4 {4 ?5 e, W7 b9 W* ]
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    ; _" A6 B# P. c1 u0 K6 ?. S
  5. 6 s1 O% k/ s) X( d+ v
  6.   /* GPIO Ports Clock Enable */0 `  H/ K' U) O! V4 f! y0 M
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();+ j4 W2 K* m5 b: O' s
  8.   __HAL_RCC_GPIOF_CLK_ENABLE();0 _9 Y& C. z5 t4 Y) Y& B- z
  9.   __HAL_RCC_GPIOA_CLK_ENABLE();- c1 L/ c* S3 O$ j
  10. - y$ F- c+ d* d
  11.   /*Configure GPIO pin Output Level */- y/ A/ |' P% A% ^6 G0 U0 S. L0 {
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_SET);
    $ Z, d5 ?4 V! y+ {2 y0 @/ M

  13. . i; h" Z7 q1 f, \
  14.   /*Configure GPIO pin : PC13 */
    9 v% F- Y0 o9 H) G
  15.   GPIO_InitStruct.Pin = GPIO_PIN_13;
      V- S* c0 N1 B; k
  16.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;+ A6 c) h3 v3 l2 ]2 ?- x, M0 _
  17.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;: W. g6 f4 u! Y4 w
  18.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);$ b4 m; K7 l( i4 I$ {1 \9 a
  19. ; ]' ]; u% P$ v1 m( o; }0 m
  20.   /*Configure GPIO pin : PC0 */  B) L  K2 P5 R. O
  21.   GPIO_InitStruct.Pin = GPIO_PIN_0;# f! W5 X. j* s8 {# L
  22.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;" f, ^3 T0 g3 U  Q) B* [; P
  23.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    % l3 a) ~% v  [9 z; n: T: `
  24.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    % m$ J. ^+ y" N2 ^. I# U( j

  25. 6 K; N1 t% q7 G# j
  26.   /*Configure GPIO pin : PA0 */5 M; [  m$ o' d3 @; P
  27.   GPIO_InitStruct.Pin = GPIO_PIN_0;! c- P6 Y3 H+ Y/ F: E9 p% d
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;( w4 M/ O  s' l. S4 m/ V
  29.   GPIO_InitStruct.Pull = GPIO_NOPULL;- z' p& L. }) p+ W* A
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;' ]9 v. L2 m" k! I0 J# p
  31.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    , R- q( U& U5 v$ q

  32. " O  A  T. ?, a( x$ a
  33.   /*Configure GPIO pin : PA1 */; j* _1 F# z% `4 N) \
  34.   GPIO_InitStruct.Pin = GPIO_PIN_1;! v( R, L( q" |+ V+ M; V) [: O
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
      x4 F* \8 X* y
  36.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    * d1 z' B+ z3 e, a/ C1 _+ n
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    " b; S% B6 p3 z, q
  38.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);$ w+ h( C3 X! Y( O# {

  39. 2 h1 ~; E8 S, A2 r
  40.   /*Configure GPIO pin : PC12 */
    $ v/ @5 b. P, ^
  41.   GPIO_InitStruct.Pin = GPIO_PIN_12;
    8 n( t' a% ?: q0 G7 x7 S
  42.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    + z' J' ?; u: h7 y9 z  G
  43.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    8 l: p; a: U4 b+ v
  44.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    # P8 n+ K" V' I" a: P
  45. ; Z* a: Y) |5 y- h2 V5 U
  46. }
复制代码
, [7 u2 o. f! S
至于复用功能的引脚,比如此例中将 PA9 复用为 TIM1_CH2 定时器1的通道2,则需要在tim.c文件中查看代码,一般都在相应外设的初始化源文件中
$ z  N4 ?/ n; A! I1 U, O1 `- h2 K9 S1 E8 _# N* F3 |( m1 \
  1. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
    " b: w0 h2 ?- L% A7 f" _
  2. {. l- p' e5 U; i% f7 _: V3 e

  3. + V" o5 @; [, q
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    4 J  g4 j& I: y# v  o
  5.   if(timHandle->Instance==TIM1)+ p1 A) m" G' A( h. V
  6.   {
    ; d8 O& f3 ]. ]/ H/ Y, M! B
  7.   /* USER CODE BEGIN TIM1_MspPostInit 0 */
    ' D5 i2 Z9 R% L4 P  z7 z
  8. 8 l; @2 H0 Q/ z0 s
  9.   /* USER CODE END TIM1_MspPostInit 0 */
    $ a/ O9 r7 l$ T! F% L7 P

  10. ( E  B6 @, H6 f- O4 x* b& D
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();
    ! Y8 |1 _0 ^  e. ]2 O* y, ?
  12.     /**TIM1 GPIO Configuration   
    : E& w' m# R) T/ ^8 [5 x
  13.     PA9     ------> TIM1_CH2
    : o" s8 ~; P( ]- y2 N- e) o  `
  14.     */) ]& s/ C% B# R. s' L
  15.     GPIO_InitStruct.Pin = GPIO_PIN_9;                        //使用9号引脚
    " F9 N; r6 q7 L) h# j3 x+ A& c& J* O8 n- z! q
  16.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;                //配置为复用推免输出模式
    8 G9 }' P+ A) V$ k- t
  17.     GPIO_InitStruct.Pull = GPIO_NOPULL;                        //没有上下拉- v% C" m( c4 K) W( Q. T
  18.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;        //高速输出4 t) d& f9 v; N$ N
  19.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;        //复用为定时器1的通道29 e# ^/ X; ~9 a, m& J: I7 G
  20.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);) Q* e; y# _/ S( i4 G, t! e
  21. # D# X+ u9 O  ^# P: z
  22.   /* USER CODE BEGIN TIM1_MspPostInit 1 */
    , v! \- ?/ K! ?2 ]3 d

  23. % k* y* o2 b7 Q& ~3 m
  24.   /* USER CODE END TIM1_MspPostInit 1 */) G+ F5 _, [5 Q! `% ^) l* M
  25.   }
    4 {( W% i7 f# E: S( T# Z

  26. $ v! L0 y+ s8 H, P; D. C6 ]
  27. }
复制代码

, T% T4 V8 Z& |至此,关于STM32F0系列的GPIO的配置以学习记录完成,如有不对的地方,希望各位看官指出,谢谢大家!
, T2 M( k' h" O; t& M! E- A9 S5 c7 }. T2 g( i0 N- \
/ _! m! s/ u" L; s
0 J! X/ a/ u& b1 R

2 m( e4 [$ N/ A: R
收藏 评论0 发布时间:2021-11-21 22:00

举报

0个回答

所属标签

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