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

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

[复制链接]
STMCU小助手 发布时间:2021-11-21 22:00
1、GPIO介绍* f3 X: n6 Y$ `# Y) Y1 ^
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)
' Z/ t. n# _, |) ~( V0 {, u/ O( C. [3 b1 i
2、GPIO主要特性
$ n- u! b( }6 `0 _6 O! F输出状态: 带有上拉或下拉的推挽输出或开漏输出
7 @4 R3 @5 f- w9 ~, G. V" _1 n" N* b- Q从输出数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据/ E4 B$ ?( @: K3 E/ Q
可选的每个 I/O 口的速度
5 c. U: x) l4 A: W2 I0 l输入状态: 浮空、 上拉 / 下拉、 模拟输入$ Z; v" q, q; X9 K) H
从输入数据寄存器 (GPIOx_IDR) 或外设输入数据 ( 复用功能输出 )# l. S7 ~6 ~! ]0 c- p/ s
位置位 / 复位寄存器 (GPIOx_BSRR) 为对 GPIOx_ODR 寄存器提供位访问能力
( [, z7 \. z* \9 b7 a* d$ IGPIO端口锁定机制(GPIOx_LCKR) 配置
6 x6 S" A- z- ?& d9 m% t! [5 Q2 @模拟功能
3 R5 f$ ]* Z$ b4 p8 e7 `可选的复用功能
1 E; l- O5 r& U+ s  t  I每两个时钟周期快速切换I/O值的能力9 b! _; y3 [) ?6 a/ t
允许GPIO口和外设引脚的高灵活性复用
3 V# r# E$ D5 Y' `
4 Z! I; w6 h7 U* ~$ }
3、GPIO 功能描述3 E* [2 _2 J3 P* d% S/ _
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配
1 b4 n( M" l9 b% B) ^6 l置成多种模式:
! I- H8 d  J3 x$ @9 a
4 D3 ^( {8 h- [+ N# A浮空输入
% n- L& X* e( [/ S% W, r$ F上拉输入
9 X6 V* t7 g+ B( Q下拉输入
, b- J5 H# x, ^- i模拟输入4 K* E  W" m) m: Z3 J5 Y: x# B( a
具有上拉或下拉能力的开漏输出
1 E8 h4 `+ H* K3 z% E8 \  k具有上拉或下拉能力的推挽输出9 r3 H" F, O5 D
复用功能且具有上拉或下拉能力的推挽输出
% |. b3 u$ z' b! c( y复用功能且具有上拉或下拉能力的开漏输出" C/ W+ V( W9 d8 k6 V5 s; K
每个 I/O 端口位可以自由编程, 然而 I/0 端口寄存器可按 32 位字, 半字或字节访问。 GPIOx_0 I+ ]" n8 o( b! D$ e; i) i
BSRR 寄存器允许对任何 GPIO 寄存器进行位读 / 改写访问。 这种情况下, 在读和更改访问之& h5 ]) I6 N( J3 a
间产生 IRQ 时也不会发生危险。
+ x. B6 G/ S; b; t# j
1 H9 w/ |& m, ]: A2 u标准I/O端口位的基本结构9 n$ |1 ~/ O# i' `

7 u* J4 l. P5 D* j0 T8 |; `" z+ f
20200624112800430.png

1 b3 s$ `. w! T2 ?! y. m/ G, w/ o8 H3 S
5V 容忍I/O端口位的基本结构
( \# P4 l" i0 F& Y! i) }& J, K( G4 F7 f3 x6 B
20200624112816556.png
3 Q$ r6 J, l/ b: g( ?

1 @( C& @# u3 B. p; W# l5 X* }4、GPIO端口配置说明
" C! p: J6 J, y; @1 z5 @① GPIO模式+ d  B8 p/ e; V4 K0 l  I
GPIO_Mode_IN          输入模式 ( 复位状态 )) N. E2 C4 p7 V  _" l; p
GPIO_Mode_OUT      通用输出模式- W$ {( ~* k, f1 d/ f% b9 Q5 S
GPIO_Mode_AF         复用功能模式
5 ]0 y; b, B6 {3 \$ g/ l8 X: BGPIO_Mode_AN         模拟模式
' q4 x! N$ `, T5 m, M
. z9 ?/ q7 G8 N3 G! `: P输出模式类型:
/ n7 L& K( u" N( ^GPIO_OType_PP        推免输出7 `6 p  E" z0 ~- I& P# c( [7 R
GPIO_OType_OD        开漏输出
$ j2 \+ i+ h% m! l3 K# i! c% ^% o! h- v! c! S) G
② 是否带上/下拉/ t: J- W0 t0 M  j* p% F5 u9 v
GPIO_NOPULL               不带上/下拉6 M( y3 e* l+ g, I! Y
GPIO_PULLUP               带上拉8 W" l' l$ }* y
GPIO_PULLDOWN         带下拉) i8 h9 w* _* s) A
$ K6 C' t1 J: Y! e& \. g
③ 输出速度
) Y" h, I2 u2 G  [GPIO_Speed_2MHz            2 MHz& P( r' ?; L. W5 f' u$ w; s
GPIO_Speed_10MHz         10 MHz* J# @0 q1 C1 k# Y: Z. d0 M( ?- j
GPIO_Speed_50MHz         50 MHz
% u! E3 k! E3 F. T$ q0 f" H% @* ?& E! g, B
5、GPIO工作模式配置
# r4 e- M, W2 k6 z# {  \5.1【标准库】的配置方式0 p( b. h( e6 S2 v; T' _; ]( M* c- O
步骤:. ~7 z! M. I) C2 t* A
1、配置对应端口的RCC时钟! w8 o% d+ @6 S+ h

, S/ p% |0 y, i0 o3 A
  1. /************************************************; R2 `) ], B5 Y* B
  2. 函数名称 : RCC_Configuration
    ) Q% I6 P7 o8 v7 ^
  3. 功    能 : 时钟配置
    8 A7 Q- I1 P1 l2 S  Q! Y( v3 N  [
  4. 参    数 : 无
    2 @. _3 T5 Y+ V( s& o
  5. 返 回 值 : 无0 _! Y9 J9 V" Z" }- |/ f$ o2 @
  6. 作    者 : JayYang
    8 W0 x4 F5 R9 h) n) o
  7. *************************************************/
    8 G- C8 Z) h1 p) ], b0 C# q
  8. void RCC_Configuration(void)& |) e/ Y) F1 R0 s6 A
  9. {8 D5 K  g( [4 X
  10.   /* 使能AHB时钟 */- r% G$ ~  E' }4 M8 ]8 p, u
  11.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
    3 W; c' }; Y; P; s' T; W9 `5 j
  12.                         RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);, w" M) H+ s, l. X- Q
  13. }
复制代码
  M* ~2 }2 T7 F2 ^- O; ^  L
2、配置GPIO工作模式
) c0 K5 O  x3 Y; r- j/ V2 o4 z

( ?7 b3 Y, F; g. j1 A4 e/ o
  1. /************************************************+ k0 R2 q6 k% x6 |+ y
  2. 函数名称 : GPIO_Configuration
    # I/ m7 \- Z+ a6 j6 b  b3 d
  3. 功    能 : 基本输入输出引脚配置" G. Q7 R* ~$ a! O7 C& x3 c
  4. 参    数 : 无
    , e/ S4 A0 Y9 M
  5. 返 回 值 : 无3 `( g2 v% M# o' ]4 s
  6. 作    者 : JayYang
    & j; }$ q  s! \3 U% t" f3 W
  7. *************************************************/
    : e$ }6 o* I) ?; j0 j7 I9 s
  8. void GPIO_Configuration(void)4 |3 F* f- {$ ?. `4 E2 z
  9. {2 j9 u! k: M& ^3 j# W2 \
  10.     GPIO_InitTypeDef GPIO_InitStructure;                  // 定义GPIO初始化结构体: e5 b* `9 |7 ]# \4 W9 e: r- t
  11. . X+ s/ p+ Z) F4 P+ h- ^
  12.     //GPIO配置为 推免输出模式- a! Q7 a6 ^  b& d* l7 ^! ]) I
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0  o7 b4 I9 s& m5 z! G1 P
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式1 Q! I. S; e: o, K$ n0 W
  15.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出- i* U* x" B0 `5 E9 v
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    8 G4 _2 r5 S, \. ?3 B% o
  17.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    . i) C6 a* Z# m3 \" p" U$ i! K
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的0脚为高速推免输出模式; z, h. Y2 w. D6 |/ x0 c7 l! {' {

  19. $ g  H9 {* G! }- V
  20.     //GPIO配置为 开漏输出模式
    & `& t9 h4 s; o' r+ C7 C7 M, H1 C+ P
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             // 配置使用的GPIO管脚号:1+ M) h8 z5 t, c+ n3 j) T6 X2 ^; Q
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式
    ( u" a+ X' A$ e/ q7 ~1 ~
  23.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;        // 设置端口输出类型为:开漏输出( R+ I. d. g8 Q% y8 ?5 G) ~; v
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz! S5 d& ]8 \* J$ d# E; i2 Q
  25.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN7 p: `0 D6 k- Z2 W" P
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的1脚为开漏输出模式
    7 x8 o  \# O3 q3 y3 [5 q2 a
  27. & q2 N& j/ v1 x5 W6 \# m
  28.     //GPIO配置为 上拉输入模式5 B: G0 y& P5 \& c( c& I
  29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            // 配置使用的GPIO管脚号:12
    ) D5 R# Z2 v: t+ G8 {
  30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式
    5 @" M8 a$ O# |
  31.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;          // 配置 I/O 口的上拉或下拉:上拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_DOWN
    - c. }$ b: [! A) N/ l0 h) h
  32.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的12脚为上拉输入模式
    , d8 M& C6 I  z4 L
  33. 3 ?( z  p* q; M) e4 G
  34.     //GPIO配置为 下拉输入模式9 O% @! w# C6 z9 C- ]/ |) S
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            // 配置使用的GPIO管脚号:13
    6 x" e  Q8 [+ V
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式
    & i. [0 [9 b. s6 r/ w
  37.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        // 配置 I/O 口的上拉或下拉:下拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_UP& b, \# ?/ s$ K: ~! a) o( @
  38.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的13脚为下拉输入模式) Q: E# C1 V3 y1 H& j& n: ?

  39. / |' R0 a0 ^! i* h' P' h
  40.     //GPIO配置为 模拟输入输出模式
    $ N+ ?, i6 T2 B& `
  41.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:00 |0 P9 X+ T4 ^; Q; @/ W9 @5 i
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;          // 设置GPIO的模式为输入模式# Q7 B- M) h4 s3 }9 u6 A+ D* _2 C
  43.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    * I* u9 R+ P% ]; ]; B' O
  44.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的0脚为模拟输入模式
    , J& i5 W* I8 W( }# F: k

  45. 1 j5 S7 d* a0 I$ z
  46.     //GPIO配置为 复用输出模式. d# }2 m3 `) G" }
  47.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             // 配置使用的GPIO管脚号:9
    / L5 G+ |- @2 \9 _5 d
  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;          // 设置GPIO的模式为复用模式& a! M4 Z- V2 y2 U+ J
  49.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出
    0 f+ n# ~4 {2 a- W! ]; q
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    ; }/ U  v, x& c  R' l
  51.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;     // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN   J9 I0 V" v: l9 D0 g6 K) u, e9 a
  52.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的9脚为复用推免输出模式9 p# O. ]( p  y
  53.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  // 配置GPIOA的9号引脚复用为 TIM1_CH2 定时器1的通道2输出引脚! z: O8 @4 r9 O$ G6 C: b6 b

  54. + {6 l4 U+ u8 b4 U' t
  55. }
复制代码

( V. d9 E# r$ ^& ^2 @
9 O- U! v8 d: ^- F6 ^5.2【HAL库】的配置方式
0 x( E. W3 h" @2 r8 A# Q) q
步骤:- ]6 j" J3 G" G9 y
1、通过STM32CubeMX软件配置RCC时钟
/ A3 V7 N, \8 Q5 p% B) Q/ d# Q5 A2 b. h+ R. B3 i. X1 n
20200624152114980.png

6 u9 r) ~( M2 V: p8 z% z$ \5 m( Z& s7 T
' \, g7 X3 W, d" S* ?3 d, }% A3 p0 A( M选择【Clock Configutration】选项卡进行时钟的设置,如图下图:% d+ ]" b0 `; N0 z. j4 r0 F
20200624152258136.png
  r" T) r3 [6 I, l; O
8 `# ?, f& U  r  ?! A* g; a
2、选择需要配置的GPIO引脚的输入输出模式,这边的配置只是一个大方面的配置,比如是要配置为输入还是输出
3 {. v% z0 h, i1 ^0 |) j
$ P2 v$ r: S/ @
20200624153132751.png
- j( G' n6 c3 Y2 |7 d: k

) ^0 m- l6 M: K' Y3 n& g3 a  T下面进行每个管脚的具体参数配置) K. J; r% `: |. }' N9 Q
: M' Y6 i$ b/ m3 }6 O
2020062415342131.png
( D& g+ a* W+ P' D& G- f
0 f7 V$ C7 C+ h6 j3 {" U
点击 上图中的 GPIO 后会在左侧显示所有使用到的GPIO管脚,进入如下界面,点击每一个管脚可以进行详细配置:! @& g8 [; W) r
9 a+ r& x7 D6 a* u- g9 @+ d5 I' x
20200624153642205.png

0 I' H# w7 r6 P* y' j) [6 o3 m! k# S/ o2 b
20200624154553694.png
$ l1 ]& {7 S! h- ?& [1 }3 P
$ O) d; D4 c( h! L8 [2 ]5 t+ b* e
在【gpio.c】文件下,查看生成的GPIO工作模式配置代码,此处配置的是推免输出、开漏输出、上下拉输入和模拟输入的引脚/ h1 I. I, }- C% e4 m0 e
. a7 d; s0 z: @* c& ?9 _, v
  1. void MX_GPIO_Init(void)
    # i3 f  @- U6 ?3 d4 e9 a
  2. {9 s6 x  Z1 ]0 y( P1 w+ Z
  3. $ [7 W% i' Q5 k: j+ y+ y5 U, B
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};4 v: `2 L' @: V' Q

  5. ! m2 P% W) b* }! m  K2 E% o3 ^  I! o0 D
  6.   /* GPIO Ports Clock Enable */9 I# _, [7 N1 V
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();# w9 i" ?; |: `2 a. \
  8.   __HAL_RCC_GPIOF_CLK_ENABLE();' u! D' y' A: M5 I  E
  9.   __HAL_RCC_GPIOA_CLK_ENABLE();
    # F2 `  D. i6 t; u

  10.   I0 C1 j) s( O
  11.   /*Configure GPIO pin Output Level */
    , x) g* i5 f8 H2 d
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_SET);" \9 ]( r& h) r( l: X

  13. 5 Z4 \" H* Y5 ^# ?% o3 s
  14.   /*Configure GPIO pin : PC13 */" E6 u% B( _. H: g( `1 ^
  15.   GPIO_InitStruct.Pin = GPIO_PIN_13;# K) ^  k- a; q
  16.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;+ |: _  u; z+ l! X- b% o. F& W
  17.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;# U" k6 ~+ t: z9 y2 U
  18.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);2 R  M- ]. C0 Z& M3 \

  19. 6 X- `0 X/ P8 O
  20.   /*Configure GPIO pin : PC0 */8 r3 F; V  q8 q6 ]
  21.   GPIO_InitStruct.Pin = GPIO_PIN_0;. [5 L  f) y- ?3 F6 w
  22.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;6 W% I5 }6 z/ w2 f  @2 e
  23.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    $ n, U4 x* I) K
  24.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);0 M: X5 K2 z% M, a

  25. $ f( s$ \! T( }+ K
  26.   /*Configure GPIO pin : PA0 */
    2 C4 r/ u* B0 D$ G: P& e
  27.   GPIO_InitStruct.Pin = GPIO_PIN_0;
    ) q% F' V! x, C  J* P) \
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    * b# W5 z$ u$ R+ v% G5 @
  29.   GPIO_InitStruct.Pull = GPIO_NOPULL;) }2 z8 X8 I0 L
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;5 R5 X2 f% H: P
  31.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    & X( H% e6 o1 ]8 i8 g
  32. 1 {/ J1 @) y7 x/ Q. A, X7 D
  33.   /*Configure GPIO pin : PA1 */: I8 L6 O; y) E: [3 Q' ^- ~. x
  34.   GPIO_InitStruct.Pin = GPIO_PIN_1;
    5 p: s) Y# X0 ?5 h# M6 t
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;5 d" q! t( Y1 B- }' Y4 X
  36.   GPIO_InitStruct.Pull = GPIO_NOPULL;& i8 v& v! F/ _2 f% P, n" M* ]- A
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
      |7 \4 `/ Q7 _9 ^% c
  38.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    8 r2 _/ M/ I( d1 Q. Z* f9 z8 b# _

  39. 6 f5 A2 U) g9 h! _& m
  40.   /*Configure GPIO pin : PC12 */
    + X5 p2 J" o' n! v
  41.   GPIO_InitStruct.Pin = GPIO_PIN_12;, T, @5 v5 t' f$ Y8 E5 A  \
  42.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    % d3 q' ?) A7 X7 \& U" w$ d
  43.   GPIO_InitStruct.Pull = GPIO_PULLUP;1 @7 j% t# R& ]
  44.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    ) E# x- `4 {  g& k! j5 Q
  45. 5 }9 p8 B. r3 Y4 c
  46. }
复制代码
3 J* u( X9 M+ G, s+ ]2 D4 R( o2 C
至于复用功能的引脚,比如此例中将 PA9 复用为 TIM1_CH2 定时器1的通道2,则需要在tim.c文件中查看代码,一般都在相应外设的初始化源文件中
' M1 p/ ?4 T. J: J
$ }# P+ d; W% Y4 e" D1 V* R4 v+ ?8 X
  1. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)# m" m7 E7 b6 l
  2. {
    + o. Y/ P% {; i+ \, N# r2 \% x
  3. ' a' n% i, L* s; e. @
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};0 i; x0 e* ?* c0 n# d
  5.   if(timHandle->Instance==TIM1)
    0 U" d4 `) _3 m  u, s( `/ V
  6.   {3 }6 [) y6 M8 W( H/ y9 N* I" |
  7.   /* USER CODE BEGIN TIM1_MspPostInit 0 */
    , B. M$ a- B+ v+ ?' a; R+ F! p

  8. . Q' n: X" O( W- ^+ V  N! y
  9.   /* USER CODE END TIM1_MspPostInit 0 */
    1 ^5 Z8 _& y, C2 _! g& |
  10. : \- m" v7 ]( k; B) ~
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();( h  w2 p4 n" j$ E3 q" ?1 B1 r% p
  12.     /**TIM1 GPIO Configuration    * G: ?( ~4 P, g+ k# g# F
  13.     PA9     ------> TIM1_CH2 - x0 R& y) Q& Q
  14.     */
    7 f  E& k! X% @0 P( \4 G: ~
  15.     GPIO_InitStruct.Pin = GPIO_PIN_9;                        //使用9号引脚
    / u8 Z" D( K8 [/ r
  16.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;                //配置为复用推免输出模式
    6 @0 i/ @2 W  p$ j
  17.     GPIO_InitStruct.Pull = GPIO_NOPULL;                        //没有上下拉- w4 S7 w! c7 E
  18.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;        //高速输出  m  x) X+ Q, W3 s7 [
  19.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;        //复用为定时器1的通道2
    9 M0 J) w7 Z; A- j/ a* Q
  20.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    5 \5 n' ?' e; _  A
  21. ; B; }9 x  n" Q& G
  22.   /* USER CODE BEGIN TIM1_MspPostInit 1 */3 g, }* C& Q8 j
  23. ; }0 N* _! L$ a, U- ?9 d5 Y
  24.   /* USER CODE END TIM1_MspPostInit 1 */
    ( Q; w( Q$ N" v/ v
  25.   }
    / U3 b7 s1 a1 i

  26. # n( e; U8 b# T4 n+ d6 y' R4 X
  27. }
复制代码
& ], @7 `7 i8 l. S7 x  M& o- |
至此,关于STM32F0系列的GPIO的配置以学习记录完成,如有不对的地方,希望各位看官指出,谢谢大家!
( _, p8 d9 ^) G( {8 G, X  i/ G# d/ j9 H5 {$ s2 ]
: Z. R& Q& p* U4 K- ]
" ^! }! C; A) w+ P' c$ o* Z

! o9 C: n4 \8 \; c& @/ E3 ]2 d
收藏 评论0 发布时间:2021-11-21 22:00

举报

0个回答

所属标签

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