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

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

[复制链接]
STMCU小助手 发布时间:2021-11-21 22:00
1、GPIO介绍
8 f0 j3 j/ X+ ?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)( i7 G; O2 ?1 }" f
& @/ W* y/ N4 r; V* y
2、GPIO主要特性4 m* [2 m7 a3 Y
输出状态: 带有上拉或下拉的推挽输出或开漏输出6 P& S1 d5 h$ ?9 t; J
从输出数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据; F4 p) E% ]$ y* Y" y1 p& t
可选的每个 I/O 口的速度
$ j2 G, d7 a& a: \2 F4 j输入状态: 浮空、 上拉 / 下拉、 模拟输入
" L3 p( p+ |" k从输入数据寄存器 (GPIOx_IDR) 或外设输入数据 ( 复用功能输出 )% Y6 h2 c2 {$ b1 C/ y5 f' ?! w. L
位置位 / 复位寄存器 (GPIOx_BSRR) 为对 GPIOx_ODR 寄存器提供位访问能力, s& ~  [$ b  J
GPIO端口锁定机制(GPIOx_LCKR) 配置) k8 S- \+ Y, k0 f( |5 Y
模拟功能1 s$ R; K1 j( a
可选的复用功能9 s% H; u2 w# m! `3 d! [
每两个时钟周期快速切换I/O值的能力
% q% w0 d' o% C/ ]+ Z: Q允许GPIO口和外设引脚的高灵活性复用+ H9 V1 p3 e% L
6 M8 d. \4 j; N/ P1 E& y
3、GPIO 功能描述
* v9 w  I# H' V( [根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配
4 [3 S4 C2 z' |' L$ @置成多种模式:$ t& D' k* U- k

  y; r: ?( G, o0 d. u浮空输入
& x$ u- M" j0 g+ e上拉输入
9 o& t( J  p2 ]# L下拉输入# u! {; g! C) D* M% `6 J- n! Z
模拟输入
# E9 M& k  @) q3 I8 j具有上拉或下拉能力的开漏输出  ^' N% c- K: A9 [2 B/ f( ~5 z
具有上拉或下拉能力的推挽输出) s: F9 v, H( P% @
复用功能且具有上拉或下拉能力的推挽输出
: |$ R" n9 |/ |4 w3 F, L9 x复用功能且具有上拉或下拉能力的开漏输出
3 \1 z8 y! @! q7 p$ M* s. E每个 I/O 端口位可以自由编程, 然而 I/0 端口寄存器可按 32 位字, 半字或字节访问。 GPIOx_+ d* H5 f5 M1 ~; T) `
BSRR 寄存器允许对任何 GPIO 寄存器进行位读 / 改写访问。 这种情况下, 在读和更改访问之
/ ?( s1 H- y: J0 ]" A6 D6 a间产生 IRQ 时也不会发生危险。
6 X8 O9 P; p; S1 s: ^+ A
! p5 B" w, k6 R标准I/O端口位的基本结构
: w5 G5 F7 Z7 c% i' F0 y& Z( Z! h" M7 F, u* A6 R( n
20200624112800430.png

+ W+ J' W6 F. k2 D3 x$ }+ I- q) ^; d! [$ P0 l0 P
5V 容忍I/O端口位的基本结构
! V" w& i  u# ~4 B5 {5 @
3 P/ C" }6 d  }/ [
20200624112816556.png

5 |( ?/ E5 M3 q8 {! M8 }5 t4 b+ {# @. F
4、GPIO端口配置说明# J$ {; \! `1 T: r  K5 H
① GPIO模式
) d* F/ ~% O0 `' H# l6 r6 ~, xGPIO_Mode_IN          输入模式 ( 复位状态 )" G: O' i% w& i# R( A
GPIO_Mode_OUT      通用输出模式3 m0 W8 v0 i, I# l5 `
GPIO_Mode_AF         复用功能模式
1 Z3 R- u: L0 A% v- r1 b, `( c1 i' M5 UGPIO_Mode_AN         模拟模式  R8 W) s6 U$ d0 Q0 Y4 |% h
2 J8 K# N5 K9 k1 N! j9 i$ K
输出模式类型:
8 m( w* v' d5 F% r% c6 FGPIO_OType_PP        推免输出
4 e' {2 y- p/ }; k$ ?GPIO_OType_OD        开漏输出4 E$ u1 u( j! f
  J: G9 `3 M' u: ~/ k% e) w
② 是否带上/下拉
+ P9 k$ Y  O) nGPIO_NOPULL               不带上/下拉
- m' \  G: b" j5 c2 A$ A  v$ t- FGPIO_PULLUP               带上拉
7 x  h( s6 V) N0 gGPIO_PULLDOWN         带下拉
/ u6 [) P8 m9 h; J# c# u! f3 p( ]  z2 n: D2 y/ Z
③ 输出速度  l& w. `4 j& x6 }
GPIO_Speed_2MHz            2 MHz, G: T0 O# v' Z8 u6 s/ ?* C$ T
GPIO_Speed_10MHz         10 MHz: U9 _3 `. V( R* p, M
GPIO_Speed_50MHz         50 MHz
; v! z, Y" M. i, K! F5 j8 g( {; n3 c+ Y7 X1 M7 }
5、GPIO工作模式配置  v5 s* p, ?- e
5.1【标准库】的配置方式
( A4 Z, h, x! z* F( @, M步骤:
& L# i# Z1 [5 ]2 j1、配置对应端口的RCC时钟, _: a3 q" U: B. U

) U% ^( x' d! U/ Y9 G/ {
  1. /************************************************
    ' l; {% a+ p0 {. E( r- Q1 O3 }
  2. 函数名称 : RCC_Configuration
    5 f8 {6 \) ?9 L* B
  3. 功    能 : 时钟配置- Z2 ]. ]3 P! {" V) }0 D
  4. 参    数 : 无5 }/ ~, _: @, P( f) |
  5. 返 回 值 : 无
    ; ~1 _7 I% y; [) r* S* X( |
  6. 作    者 : JayYang" ]" D0 {  H/ m* a+ f+ @2 a8 `
  7. *************************************************/
    ! ~9 J: B( ?9 y6 Q& B4 q- @
  8. void RCC_Configuration(void)
    3 r% m6 T3 C: t1 A- S' }, V
  9. {! a) e7 L* S3 K  T7 K+ g% f" k
  10.   /* 使能AHB时钟 */
    ( {7 C; j$ @+ Q3 K' P9 A; x3 m
  11.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
    & f  x  a( S, g! b) W& x1 f
  12.                         RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);
    ; z9 Q4 h; m+ ]/ R3 X1 u
  13. }
复制代码
. h, }' A( v7 E* O3 x1 T
2、配置GPIO工作模式, [5 l7 h% W5 G: _, K" f
% }8 `9 s; t  ~9 s. _
  1. /************************************************7 Y  }/ k& S# ]. ?8 B0 _/ i
  2. 函数名称 : GPIO_Configuration* Q. ^7 N8 O  L, x1 @) w
  3. 功    能 : 基本输入输出引脚配置. }3 D8 l* Z: G+ j# H
  4. 参    数 : 无
    . ]2 x1 w( n/ T  J
  5. 返 回 值 : 无8 z* E* i" v! r4 G; V* @8 @6 N
  6. 作    者 : JayYang
    # g( G. D$ J: n5 s
  7. *************************************************/
    % J( {0 J1 }3 [: x- I9 `. b
  8. void GPIO_Configuration(void)# A1 r9 z: d' ~. ^
  9. {
    4 G9 v3 `$ O8 Y' X+ y
  10.     GPIO_InitTypeDef GPIO_InitStructure;                  // 定义GPIO初始化结构体
    $ S: K, l7 l4 F$ p2 k* i

  11. ( g& S# f6 g& h
  12.     //GPIO配置为 推免输出模式
    ' c* B" p0 W$ m  T" }
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0
    " @! c  P. y( j8 o, A
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式
    " a( R, i/ ^6 ?( P7 t+ i9 K
  15.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出
    ; I) t" {. L2 z
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    ' V3 l8 b; U: C) A  q6 t  P2 T
  17.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN7 T+ [, x; q$ n8 f7 I7 g
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的0脚为高速推免输出模式7 D% H. \  o2 n9 g4 c- `: y

  19. 3 u5 S0 F/ h7 D7 n  k
  20.     //GPIO配置为 开漏输出模式2 g- j& D9 k. y: s; [; ~1 u
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             // 配置使用的GPIO管脚号:1! a! F( K; `6 x, M* _: w. ~
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式5 `1 @5 I8 k( [( a6 `' I7 C( i
  23.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;        // 设置端口输出类型为:开漏输出7 Z2 ~3 t2 M6 w! K8 h9 W. Q  q
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz* n9 D( F/ ^/ H" l5 Z1 i- R& P: P$ e
  25.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    0 s7 k8 C: h1 b  ]! f
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的1脚为开漏输出模式
    4 d" L. {9 {6 d# B* J( Z
  27. 2 \4 X  H8 u" R; ]7 B: }& k
  28.     //GPIO配置为 上拉输入模式! C- J' B& L  h: j% Q# `. `
  29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            // 配置使用的GPIO管脚号:12
    7 G9 a) O% K) M9 d/ N
  30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式2 r6 o5 W4 I, T" W
  31.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;          // 配置 I/O 口的上拉或下拉:上拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_DOWN
    1 \1 B! T/ c+ H% k1 T
  32.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的12脚为上拉输入模式" Z+ _3 l0 I$ s; J2 n. [$ s

  33. & r0 ~, J( B9 ?8 o
  34.     //GPIO配置为 下拉输入模式; G( V: J* v) M6 d4 R
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            // 配置使用的GPIO管脚号:13+ q" y4 s5 _* j( j# R
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式6 G3 w8 G' Y" L# L
  37.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        // 配置 I/O 口的上拉或下拉:下拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_UP" L. |: ^0 V4 R. {
  38.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的13脚为下拉输入模式6 @' }6 U8 U' s7 h9 g5 [5 L. T+ ~" k5 P( C
  39. / y3 B0 j$ y% _, Y% Q$ _9 }6 J0 p
  40.     //GPIO配置为 模拟输入输出模式! ?; U* \( ^; M& p5 [
  41.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0
    # ]5 C6 I9 S+ K. `. I: @5 }5 J& G
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;          // 设置GPIO的模式为输入模式1 ?3 f2 @- @4 I
  43.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN( b9 B; ~- e: m. A# W& M3 N, C
  44.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的0脚为模拟输入模式
    8 e, k' U) q5 k8 ^3 y
  45. ) x; Y& n  N- X* S. d9 }
  46.     //GPIO配置为 复用输出模式
    8 R  |9 M6 I. h# f
  47.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             // 配置使用的GPIO管脚号:9
    * b. s1 j4 \; r9 O* x4 a8 w! T5 K
  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;          // 设置GPIO的模式为复用模式9 d- e) a/ s# y5 j' E
  49.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出
    6 {0 Q! ]) A4 S7 [
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
      ^) \4 a6 m9 ^$ B+ A, x( H
  51.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;     // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN
    3 J8 z! J+ N0 j& E
  52.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的9脚为复用推免输出模式
    % @" _/ w. N5 s9 O
  53.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  // 配置GPIOA的9号引脚复用为 TIM1_CH2 定时器1的通道2输出引脚
    ' ~0 ~4 A' O' U$ K9 A* S% M3 L& ~
  54. 0 G' m, n& O% Z# A0 `6 O
  55. }
复制代码

# x( X0 i& E7 O7 Z% n' P
* ^% g4 w8 f# G% i5.2【HAL库】的配置方式
0 Z2 [5 [* ^, ~" ?7 f
步骤:) J8 a' {0 l, Q% Q" }
1、通过STM32CubeMX软件配置RCC时钟
% L  @7 C& p0 Z( k1 X4 C
, {6 g- r+ l" ?3 ]. I! v; ?7 B4 ]
20200624152114980.png
: T' ], @" m# |: j0 {; l1 E/ v4 }

& ]# i+ R/ ?0 x0 T% Y3 ?选择【Clock Configutration】选项卡进行时钟的设置,如图下图:+ Y5 ^& p, y6 g0 f, k( J
20200624152258136.png
$ `  B$ `* k/ G4 X( S9 b& T9 T
6 h8 m: n, _' X8 ^4 E
2、选择需要配置的GPIO引脚的输入输出模式,这边的配置只是一个大方面的配置,比如是要配置为输入还是输出. \" J/ N- `  C( \: T+ A  u5 s$ }
8 z/ Z3 X' [" ]! _
20200624153132751.png

4 v- `: {( G8 ~1 s9 O6 h* C' A) ?! \+ a1 f  y
下面进行每个管脚的具体参数配置
4 A9 ]- f0 N2 @1 \  U
6 L, N/ J, H- j7 {7 x- i: Q
2020062415342131.png

5 P" ]$ D6 u. n4 Z' f% q8 Y  @% j! B( i7 l- C
点击 上图中的 GPIO 后会在左侧显示所有使用到的GPIO管脚,进入如下界面,点击每一个管脚可以进行详细配置:
& u: u8 J8 t! a: n( d4 k* d+ t
( O0 B( }! g4 R  p, Q
20200624153642205.png

% a- |  D( q2 e  P$ p* g/ J/ s/ k) Q- s1 i1 [
20200624154553694.png
- y4 }7 m6 B& H% ?) f
! T8 E0 T: T# ~$ X4 I
在【gpio.c】文件下,查看生成的GPIO工作模式配置代码,此处配置的是推免输出、开漏输出、上下拉输入和模拟输入的引脚
5 A* G6 s+ c( z$ q* F- h1 y
9 D5 [& y( K+ x8 {; ~9 c0 J* D
  1. void MX_GPIO_Init(void)8 G5 `, s$ U- g+ z+ J4 `+ p. {6 M
  2. {; e/ k+ t% O8 L' ?+ D9 |8 {

  3. # k1 D4 P9 c/ J
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};  Y0 v0 g% K% @5 r, q5 v
  5. ! N6 o; I! j0 Y8 M
  6.   /* GPIO Ports Clock Enable */  _- g7 |+ N& l. l
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();
    - T! ~. T4 \+ A7 s$ G% {" w7 J
  8.   __HAL_RCC_GPIOF_CLK_ENABLE();3 Z' ~% X  k+ [$ H; Y, w
  9.   __HAL_RCC_GPIOA_CLK_ENABLE();
    - r6 i: `1 u1 t: e/ B- P1 f
  10. ! O3 }7 c# ^! Z6 _9 N0 M
  11.   /*Configure GPIO pin Output Level */- B# F- K5 _5 V# H1 k# r, B
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_SET);2 l6 L9 I& M( Z( U3 P

  13. 4 d3 s( `! G: `8 L; T
  14.   /*Configure GPIO pin : PC13 */) r) D0 Z5 d) ]5 i: f* v4 @2 ^
  15.   GPIO_InitStruct.Pin = GPIO_PIN_13;7 Z1 C! D; }' H* b
  16.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    ) l6 P5 p* M4 H$ w8 W4 ^
  17.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    5 V8 h: m1 Q! v2 Z2 ^$ r- ^; P4 |
  18.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    * v- d" m9 l6 Q0 g; P7 F

  19. / O& j1 ]3 ?& X+ r3 n1 v1 a
  20.   /*Configure GPIO pin : PC0 */5 Z: J: ?/ Y8 O" b! V
  21.   GPIO_InitStruct.Pin = GPIO_PIN_0;+ `: k5 k4 Q: t) c
  22.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    8 p- ^& f' p8 Y: t& Q; Z$ v' j
  23.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    ( k3 i. o( |- v6 J6 b# }5 ?7 R5 z# C
  24.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);8 n8 g- Z5 ~5 T4 T% R7 ]7 v
  25. 2 [7 A; V, t; [$ t/ A8 k
  26.   /*Configure GPIO pin : PA0 */2 H$ ?3 f  b2 @3 ]+ c5 ?, b: u5 F! K
  27.   GPIO_InitStruct.Pin = GPIO_PIN_0;
    & y- E$ L* h5 F2 I
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    8 g* Q* t  d3 g7 m
  29.   GPIO_InitStruct.Pull = GPIO_NOPULL;8 X# j( u) |* _8 b. @: u, W
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;% j* n$ e" P7 d+ r1 g1 J
  31.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    1 O+ J- N% |/ S  E; c1 X) ^$ u
  32. 1 b0 o6 |3 v$ M0 i# F
  33.   /*Configure GPIO pin : PA1 */8 {8 t. q& @, L) F2 Y2 M( W
  34.   GPIO_InitStruct.Pin = GPIO_PIN_1;  o7 Q! C/ ^4 J1 s8 J
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;# O! M- `- E" u5 H1 n( p
  36.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    5 X2 x$ Y- G3 B
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;4 o' i0 x" `; D4 }% P8 l# z
  38.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);9 K6 m7 V# j% `' l- D. ?
  39. 0 i' L. t- _: C
  40.   /*Configure GPIO pin : PC12 */
    , k, J4 s4 Z/ w) F% ~6 q
  41.   GPIO_InitStruct.Pin = GPIO_PIN_12;: q2 t* @- G% P$ S* D+ u7 ~# S- s3 }
  42.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    9 C2 U8 v4 A3 h
  43.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    4 Y% u9 ?, K9 R
  44.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);8 |4 S6 w0 B/ A- D4 o0 x
  45. + p+ P- t3 Q! a! r' h
  46. }
复制代码
; _; g) V& E  Y+ q. I
至于复用功能的引脚,比如此例中将 PA9 复用为 TIM1_CH2 定时器1的通道2,则需要在tim.c文件中查看代码,一般都在相应外设的初始化源文件中
. M: Z5 R6 n5 |9 W4 m0 R' p( `# t) P( K  C% h
  1. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
    7 O' s& }* P. I( f/ I+ M
  2. {
    9 [* s1 `2 w* U1 L3 D$ @

  3. # z1 k/ G! @4 M; E( f5 p
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    3 ^' h' A4 p1 X' }3 w; b' u. \
  5.   if(timHandle->Instance==TIM1); ]! L) a% I# Z6 ?& J$ |' r
  6.   {
    0 q0 g) c$ ]! o, C: r% c
  7.   /* USER CODE BEGIN TIM1_MspPostInit 0 */, _* p9 R  N) n
  8. $ Q+ z3 H$ M. g; B6 I8 r
  9.   /* USER CODE END TIM1_MspPostInit 0 */
    : n; c/ M' U1 v  j) r
  10. & ^# F  |" }3 w
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();% w. h1 N7 j5 m) u2 U0 L# K- l# B
  12.     /**TIM1 GPIO Configuration    1 V; n* ~% H4 y. G. y% h4 Y  `
  13.     PA9     ------> TIM1_CH2
    4 T9 b6 X1 y6 W% D& q
  14.     */1 r9 v/ v3 s. ?$ U: J  l
  15.     GPIO_InitStruct.Pin = GPIO_PIN_9;                        //使用9号引脚
    % H8 }7 Y+ y1 F6 l! e8 @
  16.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;                //配置为复用推免输出模式! w6 M& Q+ t9 d6 b& A
  17.     GPIO_InitStruct.Pull = GPIO_NOPULL;                        //没有上下拉
    / k. |7 x. e/ v2 c
  18.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;        //高速输出5 s% v% @6 I) Z3 {" |+ ^( n
  19.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;        //复用为定时器1的通道2
    : z0 ~) W# K( h) F) O4 v
  20.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);4 ]6 ~" ]% L5 M
  21. ) j5 g2 R( r. V3 _) }- F, @9 M# ?
  22.   /* USER CODE BEGIN TIM1_MspPostInit 1 */* H+ P& j; ^' l4 S9 C+ |$ s

  23. / B; U/ a0 ]( v  I& E2 a
  24.   /* USER CODE END TIM1_MspPostInit 1 */
    3 q2 f7 U# d  _- U6 }2 P
  25.   }
      L: B* W4 s) k4 M( k4 t

  26. / m% S/ }, h! f- @4 ^
  27. }
复制代码
: E' l% {! g4 i# }$ a/ m! z7 j9 w
至此,关于STM32F0系列的GPIO的配置以学习记录完成,如有不对的地方,希望各位看官指出,谢谢大家!6 Y& f' r2 X- |1 ^: I6 T
) [2 }; G: q: t& V2 p* F

& U$ X+ h$ F) N' ?8 X- I9 B; L& S5 X- {2 a

, X, ^6 \; u6 C& B& n0 c& f) H
赞 收藏 评论0 发布时间:2021-11-21 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版