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

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

[复制链接]
STMCU小助手 发布时间:2021-11-21 22:00
1、GPIO介绍
) K% K# v+ D, cSTM32F0x1/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)1 h$ c7 _, a7 g" w& U
4 z5 A: Z, ?; S, u
2、GPIO主要特性
6 O( B5 D- t" Z1 E输出状态: 带有上拉或下拉的推挽输出或开漏输出
4 M% x, V9 Y4 @* M& U- }, |从输出数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据, ~+ p* p& A- F
可选的每个 I/O 口的速度
3 e+ n8 e" t% j输入状态: 浮空、 上拉 / 下拉、 模拟输入
" w: r+ n# {1 n% `7 V6 ]6 Z9 I从输入数据寄存器 (GPIOx_IDR) 或外设输入数据 ( 复用功能输出 )8 ]% d" F% K, x. n0 s% h, U( ~' j
位置位 / 复位寄存器 (GPIOx_BSRR) 为对 GPIOx_ODR 寄存器提供位访问能力7 ]1 |/ ^% y4 k+ \' e
GPIO端口锁定机制(GPIOx_LCKR) 配置
: D" V; E% W* p4 U. m模拟功能  T1 ?! Y8 \# o0 m
可选的复用功能
- F, I& D% h6 @' E& Q+ U1 z每两个时钟周期快速切换I/O值的能力$ G$ y1 K- n: X$ T( e  F
允许GPIO口和外设引脚的高灵活性复用
7 y. ^  S1 [) E- h; L
( M0 ^. F$ d$ R; I1 _/ d: J
3、GPIO 功能描述, J$ Y2 f* [) f, N# p; m* E9 I
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配
$ q/ H- p: y" ]1 a4 ~$ _4 T- x置成多种模式:
9 d: z6 ^- O: K0 v2 q/ G! V
/ d% x0 A( f$ d+ R) o- J浮空输入
' R+ c; U0 d; v+ R6 P3 o' @上拉输入) L; d0 `# b: j* f+ q
下拉输入
0 ?; J* a/ `8 i+ t2 c; P模拟输入
* @3 Y; V$ A% q7 V& ^: m. T  x; @具有上拉或下拉能力的开漏输出+ P% ~1 a/ q9 k  I5 v8 K5 O
具有上拉或下拉能力的推挽输出1 ~/ H; ]2 W  r. O
复用功能且具有上拉或下拉能力的推挽输出
- Z3 w7 @0 Y: j) |  r7 q复用功能且具有上拉或下拉能力的开漏输出- f, A+ M7 V! |/ ~
每个 I/O 端口位可以自由编程, 然而 I/0 端口寄存器可按 32 位字, 半字或字节访问。 GPIOx_
% U& n* p( S& Q; Q) D" C" B, ]BSRR 寄存器允许对任何 GPIO 寄存器进行位读 / 改写访问。 这种情况下, 在读和更改访问之# H0 q& b* x, S
间产生 IRQ 时也不会发生危险。/ c: U0 A$ Y3 K6 ]1 ^) @. Q

7 h( ?8 ]2 P) c: u* ~标准I/O端口位的基本结构
, o# [! n) u# x4 X/ A1 _) W! v, U% {# U2 i
20200624112800430.png

' D) z/ K# \, f7 l, _3 V6 S& k& v' t5 H- \( W9 U
5V 容忍I/O端口位的基本结构. N( h$ ^( j' K/ s- u: p

8 z4 l9 H* g9 P& v$ B$ A( l8 z
20200624112816556.png
9 Q( _5 {$ L0 @+ }. }
' j3 c6 K' [! ^6 R
4、GPIO端口配置说明$ }1 C; y8 _6 N" d% V
① GPIO模式
$ g8 c0 o9 `8 B& v7 a+ cGPIO_Mode_IN          输入模式 ( 复位状态 )
1 N+ l  L& H1 q/ J' AGPIO_Mode_OUT      通用输出模式4 ]0 `' Z2 u& i. P8 g' C1 k
GPIO_Mode_AF         复用功能模式
7 D' l; c$ E* x; k- A: `- OGPIO_Mode_AN         模拟模式
7 s$ V0 m' h4 v7 p9 Y3 c$ ?$ v4 |, L0 b- J% i2 _7 o0 J
输出模式类型:
3 g- r& i+ M) D$ g8 p! UGPIO_OType_PP        推免输出6 o, E4 v8 g" U5 }/ ^  R
GPIO_OType_OD        开漏输出
, p" G. o( E+ E; f1 z$ a$ W: @" i$ o3 a: M# R
② 是否带上/下拉) g1 h) |/ m# y; W2 o4 Q% c. ?
GPIO_NOPULL               不带上/下拉
# r# `2 w' ]2 B# jGPIO_PULLUP               带上拉. @, U; @# \7 h4 c8 A
GPIO_PULLDOWN         带下拉
3 e( m! ~3 I, u4 y, ~. A
" q5 k/ t* Y" f/ Q2 f③ 输出速度
8 P) F7 M- u5 e3 H; ^GPIO_Speed_2MHz            2 MHz
/ m8 E! {( t6 d3 D# BGPIO_Speed_10MHz         10 MHz
& \' r6 K0 d; A: SGPIO_Speed_50MHz         50 MHz
2 p9 c, g# t2 h5 D* R$ g* }' R/ X) v0 {4 ]" y
5、GPIO工作模式配置" n/ |: b+ D/ T" m8 \8 b9 ?
5.1【标准库】的配置方式
) k. i2 Q! Z! Z2 Q8 j  j; V步骤:$ u& x3 S% y- l4 B- A
1、配置对应端口的RCC时钟
3 G3 P! l: s+ {$ J% Y, R+ A5 H# ~6 B" Z; x, c, E
  1. /************************************************, A8 |. }! S1 b& r1 v' d
  2. 函数名称 : RCC_Configuration
    $ K, I# c9 B; D) F9 g4 G
  3. 功    能 : 时钟配置
    1 Z/ L5 t3 l+ _. U5 s4 S/ b. ?
  4. 参    数 : 无
    ' m2 f$ T+ I3 U! N) G5 ^( u, m
  5. 返 回 值 : 无
    ( N& E5 E# D- p6 x1 m( L9 m
  6. 作    者 : JayYang
    : ~$ Y5 l+ D. O
  7. *************************************************/
    " O& {( C1 U# u' k* y, ]
  8. void RCC_Configuration(void)# G  ^. ~2 P! t/ Y
  9. {) V: E0 j: z6 V
  10.   /* 使能AHB时钟 */' X' d0 Q! e0 Y$ j
  11.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
    4 c0 B) e6 c% S- L- O) I0 G
  12.                         RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);7 C$ j7 }4 W' U$ u3 M/ ~' p+ e
  13. }
复制代码

) X9 \( I0 s5 \% \) U( |0 s2、配置GPIO工作模式% H- s) A; w7 J! `0 P

' Z7 E9 l" w2 X. B! E) |! e
  1. /************************************************
    ! z( b7 `8 u. n6 n6 W/ p7 k9 {
  2. 函数名称 : GPIO_Configuration  Q; S& t  w3 V9 }
  3. 功    能 : 基本输入输出引脚配置
    9 V& ?: @, c  x; G1 n4 V' R" K
  4. 参    数 : 无
    3 d3 t5 z4 p: y7 m0 S) B# B/ x& d
  5. 返 回 值 : 无+ [- W% @. @4 T
  6. 作    者 : JayYang
    : N: {, {) ]2 \, \
  7. *************************************************/
    2 ^6 k! [, D1 t' l, r+ R4 M
  8. void GPIO_Configuration(void)
    / Z6 J+ s" ]3 g$ \
  9. {
    9 f0 H( O8 N% `# ]
  10.     GPIO_InitTypeDef GPIO_InitStructure;                  // 定义GPIO初始化结构体
    8 [" ^0 D1 a  {2 s

  11. # m& f9 ?' y/ R, t, N# h; i+ H
  12.     //GPIO配置为 推免输出模式
    7 q" {: N, U5 `& t( [7 L
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0
    + c, E; S# ^4 d8 _' P
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式( Q, |: f% u3 ^
  15.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出( W  Q- q: K# X& z% G" S
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz; z# I; V  ^" Z  p% b
  17.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN' r% N% D% _- D" T, B4 ~- b* X) j
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的0脚为高速推免输出模式
    / x* U8 J' g/ R" |2 {- Z

  19. ! K( Q7 u( ^: H, Y# W
  20.     //GPIO配置为 开漏输出模式! N0 }4 |1 T# e% b" q2 p
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             // 配置使用的GPIO管脚号:1
    ; E, E) O; a& r( P3 D. I5 ^  ]
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式; g9 M% z  K3 z$ P2 s
  23.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;        // 设置端口输出类型为:开漏输出
    ( B- Z* ^0 q, p; ~2 B8 l# f
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    ! m$ Z/ s/ P: w" D$ w( Y
  25.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    : g2 A* @2 t7 D1 `2 C+ }) X5 k4 }; Y
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的1脚为开漏输出模式
    , O  {$ ^2 @: E7 K# v" a% A

  27. ' g; `" Y* I7 P( p; X
  28.     //GPIO配置为 上拉输入模式
    / p3 j. q/ N- ]" a4 |
  29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            // 配置使用的GPIO管脚号:12
    2 `2 h* n5 a/ z6 [! d
  30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式; U) \+ S1 C0 ^8 p7 l# f
  31.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;          // 配置 I/O 口的上拉或下拉:上拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_DOWN
    ) L( z- v" H' `4 G/ G! \3 ^# n
  32.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的12脚为上拉输入模式4 ~2 J& \$ N& M7 q, x$ e

  33. 1 j/ S$ M/ ~2 p6 P
  34.     //GPIO配置为 下拉输入模式/ S7 O( L" r, K: ~0 C" s
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            // 配置使用的GPIO管脚号:13, i1 V& g5 `6 T3 X# ?7 u
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式2 ~' S! \7 U. c, R. v7 K) j
  37.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        // 配置 I/O 口的上拉或下拉:下拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_UP
    4 Z2 j  e+ K- E8 e. H3 o
  38.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的13脚为下拉输入模式
    3 O  X, K: `9 z
  39. 3 p; Z& P  }4 [/ U
  40.     //GPIO配置为 模拟输入输出模式* p; D5 t, w( q4 c6 h$ Z
  41.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0+ Y' e0 {/ \; Z  ]% T8 Q, Y& \
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;          // 设置GPIO的模式为输入模式1 b3 ~0 x+ C: r9 @& k3 @" p
  43.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    ! a) }1 E1 }! f# f8 `# c  U
  44.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的0脚为模拟输入模式
    1 h& P& g" o4 C" R+ G. o# I' Y

  45. " m" @: _! {: |5 }4 B
  46.     //GPIO配置为 复用输出模式. V3 w( H: q) V0 Y3 |( ^
  47.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             // 配置使用的GPIO管脚号:9
    1 J7 _) j  N/ V2 r+ ^2 h& G
  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;          // 设置GPIO的模式为复用模式6 |. S" H5 `. p! b/ a5 y  M
  49.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出4 ?8 V2 s. d* a# j
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    5 N3 P1 o( e# ~: @- H" c
  51.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;     // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN ( P7 J$ ^: C) T% I- g3 D7 I
  52.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的9脚为复用推免输出模式; M' n! x. ]8 O
  53.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  // 配置GPIOA的9号引脚复用为 TIM1_CH2 定时器1的通道2输出引脚$ ]0 f7 I0 J1 [1 U2 l. H

  54. / l  H/ E! A9 ~$ f
  55. }
复制代码
( a4 b. a" u# b4 d7 u9 [5 |
0 ]4 A. e. X: H2 a0 ~
5.2【HAL库】的配置方式
1 f; ~' {/ `: _3 q
步骤:4 Z8 d9 z" d* e, m
1、通过STM32CubeMX软件配置RCC时钟
& I+ o) _! |' v. E. [4 S3 N
. z& Y. y* J4 j- ^
20200624152114980.png
: A! N; {4 G) ?9 L7 {, m
. L4 m! v. F* m& ^. S' t% I4 l9 ?
选择【Clock Configutration】选项卡进行时钟的设置,如图下图:0 E' E/ ~# E9 w3 i1 t- w9 g
20200624152258136.png

0 R! r4 l. O! f+ d6 b6 {
+ N7 |- D! N5 p4 E8 M3 S8 Q2、选择需要配置的GPIO引脚的输入输出模式,这边的配置只是一个大方面的配置,比如是要配置为输入还是输出
- q6 ?' a' X0 q: o# A* z1 {& e2 I6 c9 [
20200624153132751.png
  v8 a) Q) t" x- ^% _

- ], `$ N# X$ d& `3 b下面进行每个管脚的具体参数配置
9 U1 E& W1 v4 \" f
- f( R5 H2 p- S  N! W$ L' I
2020062415342131.png

# V5 @! m' C5 L2 j& y' L& j
8 V1 w1 ?( F6 o5 M点击 上图中的 GPIO 后会在左侧显示所有使用到的GPIO管脚,进入如下界面,点击每一个管脚可以进行详细配置:2 O7 v% p( v! N( c

4 B- K- D' g9 \  r
20200624153642205.png

2 |9 S4 ]+ i; ?- D4 \5 i
5 g+ X* I$ k+ g) ]2 B
20200624154553694.png

% A9 b: h* i. O0 r) W8 g7 ?1 q( |) P, F  Z: m0 L0 s2 E( g
在【gpio.c】文件下,查看生成的GPIO工作模式配置代码,此处配置的是推免输出、开漏输出、上下拉输入和模拟输入的引脚1 e4 r, j/ [' A0 P, C7 n

/ T9 k2 l4 O% b4 Y
  1. void MX_GPIO_Init(void)
    ( d8 ^8 Y/ M3 V, h* Y6 @8 \0 t
  2. {' c2 v  R7 n4 j" r9 S  l8 R
  3. 5 r# O# G8 _/ l- `7 @1 a
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    * Z' P) @% O+ V; D3 p9 u$ U
  5. $ u) }0 @5 }3 E, q! t" |2 ~
  6.   /* GPIO Ports Clock Enable */
    4 ~0 T& `* P" T! D* A6 {
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();
    2 B$ ^+ P0 s: W" n7 l
  8.   __HAL_RCC_GPIOF_CLK_ENABLE();
    & B$ w/ w& G' ^$ X8 ^4 Q
  9.   __HAL_RCC_GPIOA_CLK_ENABLE();* }8 V' F: ^! L
  10. 7 v3 G# S6 L+ C* h9 x2 M4 W
  11.   /*Configure GPIO pin Output Level */1 F& A: R# R" j+ `6 c
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_SET);+ A0 o+ J' A3 A" Y! e  }
  13. * L% [7 @, o  U
  14.   /*Configure GPIO pin : PC13 */
    $ f# u; {2 w2 m; Y- c. k
  15.   GPIO_InitStruct.Pin = GPIO_PIN_13;/ D; S5 E/ U* w5 n
  16.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;. h: s7 p# [& J3 O% A
  17.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    5 c' K$ j9 h( y' K
  18.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);9 T4 V$ {+ o) Y5 \
  19. " w+ w/ }. u7 {( y6 y
  20.   /*Configure GPIO pin : PC0 */
    ! @" E4 x% `0 d+ c* o4 l
  21.   GPIO_InitStruct.Pin = GPIO_PIN_0;* }9 n5 ?6 T" `' @  s0 r
  22.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;1 o0 I" n- S( B: I7 w5 }
  23.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    ( r( a0 j) e1 V3 f
  24.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    # j: ?( ?: s( c9 t- f. ^# _

  25. . H9 I5 Z3 `  l( _0 {! N
  26.   /*Configure GPIO pin : PA0 */4 K5 C( |9 q2 j5 d
  27.   GPIO_InitStruct.Pin = GPIO_PIN_0;2 Z3 Q* D* y# G& v- N+ }
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;/ F2 S, m* }& _+ e+ Z4 W
  29.   GPIO_InitStruct.Pull = GPIO_NOPULL;" u: m' G6 _( D
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    / p; W) d; K# q+ E: W
  31.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    2 Y' M. w) f$ A/ ?) g8 g
  32. 9 c* O/ m, Z. F. A4 Q# m% a
  33.   /*Configure GPIO pin : PA1 */
    / f& I6 e( |* x4 v9 a2 t: J, v
  34.   GPIO_InitStruct.Pin = GPIO_PIN_1;  N8 u4 r+ d+ d7 k: G$ X
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;  l# M+ N; [  r: j/ }
  36.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    9 Y$ c, n. @" f0 P/ l! @  F; _: L4 [
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
      H4 X, `! }% w
  38.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    2 _& d! {. P  H9 m+ O  X# G
  39. 0 X; {- e8 w5 t% j& U' R4 t
  40.   /*Configure GPIO pin : PC12 */
    , c& p0 Y' U6 X4 N# M8 N8 u
  41.   GPIO_InitStruct.Pin = GPIO_PIN_12;
    9 u4 b, \. O( f8 W$ C! |* W
  42.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    ) h0 @. b$ F7 v5 i6 r
  43.   GPIO_InitStruct.Pull = GPIO_PULLUP;$ p' \; S# Z: {+ @3 j2 _
  44.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    , H0 a- J* R' Q7 ~* J% u9 v5 O

  45. ( \3 Q6 n4 B( w' a% n) Y# r3 r# }
  46. }
复制代码
. Q" [; R9 w$ g! p" K" F
至于复用功能的引脚,比如此例中将 PA9 复用为 TIM1_CH2 定时器1的通道2,则需要在tim.c文件中查看代码,一般都在相应外设的初始化源文件中$ N* i  H/ i$ Z( }* e
5 o* L- T  f; \1 c  N
  1. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
    9 c( p( E, }; r  |
  2. {5 I( h- R0 ?( C2 Y
  3. 2 u6 i6 f& ]: H3 r% P
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    % R* g+ Z/ h7 k% l* J8 j
  5.   if(timHandle->Instance==TIM1)
    / f9 h0 }8 E+ W0 c+ n. d
  6.   {
    0 t; _6 U" v% D; [; T3 B
  7.   /* USER CODE BEGIN TIM1_MspPostInit 0 */
    % K4 G+ ?# I2 K$ {; J2 y6 s$ F

  8. 2 l' u( V6 q* `$ u( U" l
  9.   /* USER CODE END TIM1_MspPostInit 0 *// ~# ~* g- c2 a4 O) I9 j, r

  10. 4 Z) |( }# A/ ?4 K, _9 ]2 J# m
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();3 o% Z. c/ S) ?3 `3 W
  12.     /**TIM1 GPIO Configuration    # F* [9 q5 l7 o( B# c) I
  13.     PA9     ------> TIM1_CH2 8 h/ i( C* }, A: T1 _
  14.     */
    * m' a$ X+ F' g6 q! u6 k
  15.     GPIO_InitStruct.Pin = GPIO_PIN_9;                        //使用9号引脚
    # ~0 X, y2 J3 V) h, _" P
  16.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;                //配置为复用推免输出模式; F, ]" U: A' V" m5 N# T. z4 F
  17.     GPIO_InitStruct.Pull = GPIO_NOPULL;                        //没有上下拉
    9 N& U% E7 v- T: x
  18.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;        //高速输出( ^  Z6 c- J" M( ^  c
  19.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;        //复用为定时器1的通道2: p; m; B; R+ j' Y6 x
  20.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);8 C! K5 M: p5 O5 n# f

  21. 2 k+ U' A: |5 F, C/ F+ o; E- p
  22.   /* USER CODE BEGIN TIM1_MspPostInit 1 */
    + ?8 F1 r  K9 J

  23. 9 t" O) R* f* S
  24.   /* USER CODE END TIM1_MspPostInit 1 */* Y# N# \, f  j: A1 m# ]2 i8 u
  25.   }
    5 S& H, \. `: `4 E4 O+ x& p
  26. 4 A7 B% }0 U! \+ [
  27. }
复制代码
8 v8 w4 D9 W8 C" f
至此,关于STM32F0系列的GPIO的配置以学习记录完成,如有不对的地方,希望各位看官指出,谢谢大家!
( p, T0 D) s9 `1 h) w, T. Z6 e: a5 j* F, v9 p( S

7 m% z9 m4 v) r$ m5 X6 b1 L& Z3 Y  Y5 z4 h3 m; Y4 S7 \- ]( S
; X+ s; p- C  Q4 D
收藏 评论0 发布时间:2021-11-21 22:00

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版