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

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

[复制链接]
STMCU小助手 发布时间:2021-11-21 22:00
1、GPIO介绍
( ~; ?% h  w# h1 B, @& ?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)8 `0 B, \0 w; Z1 k
6 y8 t# Y" E- ]' ^
2、GPIO主要特性( x8 \8 e4 ]8 d' m& ], F9 r2 M
输出状态: 带有上拉或下拉的推挽输出或开漏输出$ e) ^& n2 b1 I, U. [  ?) E* I- w
从输出数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据7 j2 z! {3 @8 l% Q- U
可选的每个 I/O 口的速度5 u% K/ f2 Y! ^+ R. |( ~
输入状态: 浮空、 上拉 / 下拉、 模拟输入* _. L1 X/ B0 l
从输入数据寄存器 (GPIOx_IDR) 或外设输入数据 ( 复用功能输出 )7 g( m6 ^  Q' |
位置位 / 复位寄存器 (GPIOx_BSRR) 为对 GPIOx_ODR 寄存器提供位访问能力7 C/ ^+ a5 Y4 q' q* W/ z6 K
GPIO端口锁定机制(GPIOx_LCKR) 配置
. a) P) W, q, n模拟功能( W) @- x2 O: d$ w. X8 q- X
可选的复用功能  i' l& O* X& T4 c( H
每两个时钟周期快速切换I/O值的能力
5 }5 d) J! g. d; u允许GPIO口和外设引脚的高灵活性复用3 P$ N; D& }0 N( V6 M

; e$ K6 {  _8 m+ [) D/ r* j8 c
3、GPIO 功能描述- i4 U% |1 p* s3 [; E
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配
& ~  }$ M$ r. t6 _$ }置成多种模式:8 S/ {$ ]! S9 S- N4 L6 M

, e# M5 v0 S0 H  H浮空输入, I& b. |- ?# a
上拉输入% _- K* F% R2 g. P" N  f$ Q
下拉输入6 C& m9 E7 Y; o
模拟输入
8 ]9 z7 c5 E  j- l9 C% x具有上拉或下拉能力的开漏输出
2 a  j5 [/ j9 [$ ?8 N( i具有上拉或下拉能力的推挽输出
- K  d! Z" y" s; o复用功能且具有上拉或下拉能力的推挽输出
- L0 r4 _" \: q1 d复用功能且具有上拉或下拉能力的开漏输出
3 o4 y* L( l& X& Q" v' k8 ]每个 I/O 端口位可以自由编程, 然而 I/0 端口寄存器可按 32 位字, 半字或字节访问。 GPIOx_, G: [  a- }8 O  X% |3 J4 _
BSRR 寄存器允许对任何 GPIO 寄存器进行位读 / 改写访问。 这种情况下, 在读和更改访问之
% Y$ F4 p! V+ l间产生 IRQ 时也不会发生危险。9 X+ r5 B6 l) h- l0 n
: P2 a2 q4 Z* }+ M  T
标准I/O端口位的基本结构
  w3 G9 d4 Z6 v' i; E0 h/ X9 Y8 z- p: D* o
20200624112800430.png

# o/ j- c9 j" `: P* F
6 C8 ?& K( r/ {# `# p  g* J5V 容忍I/O端口位的基本结构# \+ f, C6 p1 B8 A: _+ s
% p7 l: c3 n* [4 t! r0 N) a
20200624112816556.png

2 n" d! `; ], ^5 c+ X) u
- v" m' u9 n& \$ e7 K4 r4、GPIO端口配置说明8 j+ c* R9 u9 k4 S$ {6 k
① GPIO模式7 W) H4 E4 ~6 w0 V/ D/ d" C- n1 ~
GPIO_Mode_IN          输入模式 ( 复位状态 )6 _# k; H5 w. R$ Q" S
GPIO_Mode_OUT      通用输出模式
3 {& |* E/ Q8 }' CGPIO_Mode_AF         复用功能模式
, A" N& l2 r: G" BGPIO_Mode_AN         模拟模式+ T1 `! q( E% _. p& J! E" {6 D
2 ?6 s+ T2 S! \  ?3 w5 U, o
输出模式类型:% W5 R" C- b, g2 N4 z* |
GPIO_OType_PP        推免输出
/ A& u$ w. Q& N* N/ U0 QGPIO_OType_OD        开漏输出
+ q1 @6 \' w. s
! _8 J+ @3 D& H% Z/ U② 是否带上/下拉' l, I9 `6 V; r  ]3 u8 c' o7 z
GPIO_NOPULL               不带上/下拉
$ C4 c8 ~5 G( A6 fGPIO_PULLUP               带上拉
; R$ x" X6 c9 D' J% Y( cGPIO_PULLDOWN         带下拉
& J4 g( G5 W, ?2 B/ W
: D" l8 X1 L3 R) n# U$ p9 x; @③ 输出速度
) }; Y9 Z- z& Y7 ?0 i/ t4 _7 j7 EGPIO_Speed_2MHz            2 MHz6 L$ M. d! j. v& d- {  ]
GPIO_Speed_10MHz         10 MHz. m( n0 A3 s! f6 n3 T; I6 A% O
GPIO_Speed_50MHz         50 MHz
) o. p6 B7 s7 N2 H! W2 N% D
8 {* w; ?; u. X) M5、GPIO工作模式配置
7 E" I5 U; F! ]5.1【标准库】的配置方式
. m, ~- `  w+ [; U9 c' ]步骤:5 [" R8 T2 H3 M. {9 i/ P" ~  p+ s: B
1、配置对应端口的RCC时钟; d% Q  a# O% W) C& g' ?! @$ h6 Z; G7 x
, i8 H' }% ~0 H0 j3 \" n& k/ ~
  1. /************************************************% F. u+ B4 o! m" c0 \. o
  2. 函数名称 : RCC_Configuration2 e$ W. Z# i; P8 D* @+ k
  3. 功    能 : 时钟配置6 |% ?% M2 |4 }. s0 s/ P. `# x$ X& d
  4. 参    数 : 无
    ! n' d. t9 m# O( E1 m) c# J8 a
  5. 返 回 值 : 无; h. P  ~6 S8 S1 V( w. \
  6. 作    者 : JayYang$ E7 u5 ]' b; K5 w2 I7 w2 Q6 k6 o3 Q4 ~
  7. *************************************************/
    " @9 X( P5 Y: }0 c& G
  8. void RCC_Configuration(void)+ B* B9 h4 R: K9 S0 R  @
  9. {
    8 B/ a, Y( l& {2 x( S3 K. {
  10.   /* 使能AHB时钟 */0 r* S$ ^) C8 t0 W5 P
  11.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
    " O4 {7 a( x, u& w# L, D! C/ ^! F, H
  12.                         RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);5 H, _9 D, R+ x- Z  W& z
  13. }
复制代码

+ r: v9 k0 ^4 \, J5 {2、配置GPIO工作模式  s- }$ z: Q5 L+ p- b' O7 c

, z' X/ y5 y9 x$ y3 H% U: N7 y
  1. /************************************************% ~. g1 m1 M1 {% }
  2. 函数名称 : GPIO_Configuration
    4 C9 x6 J# [  K- @
  3. 功    能 : 基本输入输出引脚配置
    # h% d( t/ A/ V; N
  4. 参    数 : 无
    0 k6 ]0 |' K( i5 y( Z
  5. 返 回 值 : 无
    : E, M, |0 |, W8 T6 j  W) z
  6. 作    者 : JayYang2 B# J$ J& d8 e7 k
  7. *************************************************/3 S4 v) B0 j: @, B" n! n, P
  8. void GPIO_Configuration(void)
    " F% p3 y  W( E/ Z
  9. {. M; [$ q; W4 @8 y! T
  10.     GPIO_InitTypeDef GPIO_InitStructure;                  // 定义GPIO初始化结构体
    3 \9 J: |% N" _+ Z* _. ^! L

  11. 4 T" A. L. c7 n" ?: Y
  12.     //GPIO配置为 推免输出模式$ [6 a3 u$ Y- L9 q
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0- c7 @! |) S% Y7 ?% I
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式2 w" B. e! C6 Y
  15.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出+ ], b4 S0 ^8 L! z6 W
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    , x' \2 s, Z; B. O
  17.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN' d# E+ ?+ ^2 x- k
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的0脚为高速推免输出模式+ E+ w" [3 d/ Y2 t( F

  19. 2 t+ Q% s' E- C2 [
  20.     //GPIO配置为 开漏输出模式; e9 a8 |. ]' K: o5 m6 f
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             // 配置使用的GPIO管脚号:1+ v$ J  S4 s# z& P2 V3 F
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;         // 设置GPIO的模式为输出模式/ {/ p4 f/ M: @5 ?7 z6 l  Q
  23.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;        // 设置端口输出类型为:开漏输出
    2 ]) t8 f9 U0 Y7 ?0 \# o
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    4 s2 f1 \, C" N; X
  25.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN- ], }+ A3 l" C
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的1脚为开漏输出模式9 X7 \4 @& N9 I, S4 e* U

  27. 8 z4 ]3 O+ V0 T" \- u5 [
  28.     //GPIO配置为 上拉输入模式
    9 h/ c, ]" G# V: B8 \% P2 v
  29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            // 配置使用的GPIO管脚号:12  ]  @0 I& q! {2 K1 V
  30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式
    " v* |5 y; y' V; ]
  31.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;          // 配置 I/O 口的上拉或下拉:上拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_DOWN
    " l8 L3 r6 T9 Q' S0 d/ n
  32.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的12脚为上拉输入模式
    * R$ F. J0 H7 F( \
  33. 2 w3 u  d: c! n) p  Y
  34.     //GPIO配置为 下拉输入模式2 u# `; O- ~: I% O
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            // 配置使用的GPIO管脚号:13
    " k6 r! u9 I( B8 k2 G0 i- R
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 设置GPIO的模式为输入模式, l2 ?1 z- S6 I9 ^9 M+ [
  37.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        // 配置 I/O 口的上拉或下拉:下拉,还可选:GPIO_PuPd_NOPULL,GPIO_PuPd_UP. o9 j% e# g  ?
  38.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的13脚为下拉输入模式9 S9 E! l8 D) A! J

  39. 2 X1 c9 P7 A: {% {, b% A
  40.     //GPIO配置为 模拟输入输出模式2 e2 C  ?$ \4 Z  n
  41.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 配置使用的GPIO管脚号:0; w( w/ ]+ a8 u( A. A/ n
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;          // 设置GPIO的模式为输入模式
    8 ~$ Q0 e1 _4 s1 e% o* t& n
  43.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN9 k7 `3 h& t' S1 t' w! ^7 x
  44.     GPIO_Init(GPIOC, &GPIO_InitStructure);                // 初始化GPIOC的0脚为模拟输入模式
    ! ^! d% t5 y- q7 D7 f* S

  45. 1 o, \, C( X/ R
  46.     //GPIO配置为 复用输出模式
    7 @0 F* {3 M3 B$ I
  47.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             // 配置使用的GPIO管脚号:9
    7 z) m/ {3 {& U
  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;          // 设置GPIO的模式为复用模式0 r4 ^8 Q  p( V2 [8 q
  49.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        // 设置端口输出类型为:推免输出1 L7 l+ G/ }" t& \" r
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 配置 I/O 口的速度为:50MHz,还可选:GPIO_Speed_2MHz,GPIO_Speed_10MHz
    4 q0 C, E2 @& N
  51.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;     // 配置 I/O 口的上拉或下拉:无上下拉(浮空),还可选:GPIO_PuPd_UP,GPIO_PuPd_DOWN ' @5 h, s3 z7 B/ L
  52.     GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA的9脚为复用推免输出模式
    ( `# L/ z! h5 B
  53.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  // 配置GPIOA的9号引脚复用为 TIM1_CH2 定时器1的通道2输出引脚6 X% C0 U! T0 o. n

  54. 8 W, u0 x3 M8 q- j0 v, r% V. {
  55. }
复制代码

9 B( l7 i; I. ^# E2 X* {+ x
) U. Y4 P2 Y5 O5.2【HAL库】的配置方式

7 W: k/ t2 ?5 ^步骤:0 B# A3 Q5 D( f+ Y) y' Y) d, J" [
1、通过STM32CubeMX软件配置RCC时钟+ r) X* l' K3 c
# R6 x# f) T9 W; C2 i- D
20200624152114980.png
7 x8 ?$ m9 e9 J8 `; {1 B
- E7 s* g4 h8 M& @/ }& B
选择【Clock Configutration】选项卡进行时钟的设置,如图下图:
% I  l7 q2 Z% F
20200624152258136.png

2 ^: P  }. Z* b! W% s
/ h" u- D6 C. B6 a4 K4 q, v2、选择需要配置的GPIO引脚的输入输出模式,这边的配置只是一个大方面的配置,比如是要配置为输入还是输出
' x6 W( ]$ W3 r$ Z! U) Q* }8 I' y, C' x# k- y8 s5 x
20200624153132751.png
5 p* ^% Y1 r. C7 z6 U' }0 @- ]
6 G" q/ n2 |* V5 y3 t  F7 N4 e6 l
下面进行每个管脚的具体参数配置
" |3 @4 {/ j$ {& d% ^2 H% X/ R- U# y8 k: b0 V# w
2020062415342131.png
! R1 E7 S" Q/ |( x

4 K2 z6 h- s! ?. [" p: G! m$ q点击 上图中的 GPIO 后会在左侧显示所有使用到的GPIO管脚,进入如下界面,点击每一个管脚可以进行详细配置:' ?4 U' g0 q4 v* F% T. e

9 s! e& e& D1 o& `
20200624153642205.png
2 q9 H) h# {8 ~3 P9 }6 i
7 G2 n0 P: \  u4 y( c* Y* [* [
20200624154553694.png

7 g9 y0 T) d$ N8 |6 a" t8 j. I  ]3 I% D" S9 y" y% @# l
在【gpio.c】文件下,查看生成的GPIO工作模式配置代码,此处配置的是推免输出、开漏输出、上下拉输入和模拟输入的引脚) ^) ?/ X9 j8 O$ s; [
/ Y* B+ @2 i7 R! K
  1. void MX_GPIO_Init(void)
    4 y7 w2 K& l/ a( t" R, B5 N+ s- c0 A
  2. {
    # x3 M( y  H' w( n( v

  3. ) I. M5 _6 \% E& N$ [
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};
    - y$ J7 O& h9 v7 Z% f

  5. 6 @0 l/ O: M) ^0 }% C
  6.   /* GPIO Ports Clock Enable */
      x; e6 ~! D/ S, L4 u( k! K
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();9 A, Z* V' L& ~8 R* y4 Q. t( l
  8.   __HAL_RCC_GPIOF_CLK_ENABLE();
    8 i  S1 n, \& t6 C
  9.   __HAL_RCC_GPIOA_CLK_ENABLE();2 t" V6 E6 a( S0 R) P, I# W

  10. / P' s$ n1 f; z
  11.   /*Configure GPIO pin Output Level */" N6 H6 C" n0 H# M5 I
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_SET);
    1 a. G* F* ?# J% W, X( p

  13. ; E  u- e8 [' g, z: h( a
  14.   /*Configure GPIO pin : PC13 */
    " l9 O3 t% a9 G: F
  15.   GPIO_InitStruct.Pin = GPIO_PIN_13;* O6 o6 ~: g# t3 l3 J4 P' V
  16.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    9 t3 V5 K& r1 @9 Z& \- Y: @- ?
  17.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    4 h6 {4 s- v4 e4 q
  18.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    # f! Y- U; i6 _( d. g

  19. 9 I8 V3 Q! C& s& e' Q
  20.   /*Configure GPIO pin : PC0 */& ?2 U; U& u1 C6 p& C) T# j4 N
  21.   GPIO_InitStruct.Pin = GPIO_PIN_0;7 Y+ Z1 J5 W3 ~+ a2 _% ?3 ]3 r
  22.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;% n: Q1 l( b- [# P
  23.   GPIO_InitStruct.Pull = GPIO_NOPULL;1 L0 j* ?$ D9 `8 v  y+ _" k
  24.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
      m& s5 i6 }# e( \
  25. ( y- _4 ?) J( v4 H9 L$ O
  26.   /*Configure GPIO pin : PA0 */
    1 O2 G6 W4 f' g. ?
  27.   GPIO_InitStruct.Pin = GPIO_PIN_0;
    ; f2 D  g3 a5 c
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;7 f. O! q9 u- v3 t5 n
  29.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    $ m4 W' K. O" U( \( j4 a8 O
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  R& p2 L' j8 @$ k! d* |
  31.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    3 a5 C# h2 w) H# n5 `+ t
  32. . U( f& i& X; ]5 T+ V% d3 m
  33.   /*Configure GPIO pin : PA1 */, d! h" A2 S0 N0 w3 I
  34.   GPIO_InitStruct.Pin = GPIO_PIN_1;
    / v  a- n1 i0 {& k+ Y1 Y
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
    3 r, o; g. I2 ~3 {; E  o+ b+ r
  36.   GPIO_InitStruct.Pull = GPIO_NOPULL;/ _& y0 i% \  @
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;) m" B  N, u5 z7 b  w/ g
  38.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    1 D# H" M' a* U3 [0 C
  39. ( M7 D0 s3 E8 |  [2 [
  40.   /*Configure GPIO pin : PC12 */: J# f( ?: j  E7 J9 X# x( C( ?$ t1 t
  41.   GPIO_InitStruct.Pin = GPIO_PIN_12;/ b9 m5 Y' Z3 ?: `" x
  42.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    ; z' H2 m. p! {! ]8 y1 B
  43.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    : E% `2 `  q, a+ U$ `5 P( z3 B
  44.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    1 [5 I  B2 ^, m3 \  Z: z) p
  45. . j0 s4 R1 P, ~' [& m
  46. }
复制代码
5 `: H- I- o9 z$ w+ s, m) m
至于复用功能的引脚,比如此例中将 PA9 复用为 TIM1_CH2 定时器1的通道2,则需要在tim.c文件中查看代码,一般都在相应外设的初始化源文件中
3 u- n( ^0 K' K! I1 \/ X4 _! i
/ ^% S$ D" ?) c9 ^
  1. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)3 w5 @4 V) u- @" u) {7 S$ A
  2. {
    * J- N. W/ N% L
  3. 0 l6 T) g% W/ j4 T) N5 [
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};  A# p0 x' B  K
  5.   if(timHandle->Instance==TIM1)
    % \$ Z9 v, r. u
  6.   {
    1 L, u5 q- ?3 z, n/ Y2 Z. l% F
  7.   /* USER CODE BEGIN TIM1_MspPostInit 0 */
    , L0 U9 Y1 ], p, L# a/ \
  8. ) Y  M1 z; O9 y! q" v1 X
  9.   /* USER CODE END TIM1_MspPostInit 0 */
    : s0 c  G: G6 B! g0 B: r

  10. ) B7 V+ o1 a  E: s
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();
    & m: [( X5 h1 J4 V" g6 X) ~
  12.     /**TIM1 GPIO Configuration    1 R9 x6 K- E3 S8 X9 Q# q" r
  13.     PA9     ------> TIM1_CH2 ) |% z( {" n" I( {' h/ E
  14.     */
    5 E% |' O' D2 j+ h7 V
  15.     GPIO_InitStruct.Pin = GPIO_PIN_9;                        //使用9号引脚$ |4 z7 r5 c1 E6 c
  16.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;                //配置为复用推免输出模式1 d+ C& n4 T, r& `+ e. c4 z
  17.     GPIO_InitStruct.Pull = GPIO_NOPULL;                        //没有上下拉
    " s7 n* s& s9 @/ m( ?
  18.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;        //高速输出& F' {$ B+ D6 t& k/ `1 ^# m
  19.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;        //复用为定时器1的通道28 @9 f- F2 O' A& s
  20.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    % d( A8 ~+ {1 y
  21. : r6 {0 m3 N* T% L7 M
  22.   /* USER CODE BEGIN TIM1_MspPostInit 1 */
    ( X( `0 h) h, V; `2 f) F. @5 u

  23. . m& ^+ [9 A* L
  24.   /* USER CODE END TIM1_MspPostInit 1 */
    ' I, _$ p$ n& i* m6 Z
  25.   }& y8 g- R4 L. Q5 U3 ~7 a+ L

  26. 9 d8 C1 m% ]+ U1 k
  27. }
复制代码

5 S! Z2 U  _* n" o6 u' B& [至此,关于STM32F0系列的GPIO的配置以学习记录完成,如有不对的地方,希望各位看官指出,谢谢大家!
% }9 s% r& \& l4 z  L
+ k; U% a1 k2 c$ C" S# k& p% v5 r, S( m( i6 k9 T7 f, N! ]
- E& R2 i. e. ]

( g7 r, B& e6 I4 l/ ?
收藏 评论0 发布时间:2021-11-21 22:00

举报

0个回答

所属标签

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