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

物联网之STM32开发二(GPIO口操作)

[复制链接]
STMCU-管管 发布时间:2020-9-27 11:19
STM32—GPIO操作(基于STM32F051开发板)

1_meitu_1.jpg


6 I. z( l4 x( S$ W8 X; h内容概述:+ j& p( p% ~6 e( u

GPIO的基本概念及寄存器介绍

照亮电子世界的那盏灯——LED寄存器版

照亮电子世界的那盏灯——LED库函数版

初识人机交互——按键


; a6 w4 M" \$ Y& l5 `


  U9 ?, F$ t6 ~" v3 }: D% o5 `6 |

GPIO的基本概念及寄存器介绍:' M: ~6 C' {7 c9 g. ~7 h2 R3 r

内容概述:

GPIO接口简介

GPIO功能复用

GPIO寄存器介绍

GPIO接口简介:

通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。

  ^( T9 @" s# R  G" x) _* ~/ ]

' c  [) P9 Y/ k7 K! y; A: N6 x

2_meitu_2.jpg


7 v6 F* {4 U# J2 ^! ]( e
: x- y+ S3 y7 i: t

3_meitu_3.jpg


6 [8 N6 u% @, M! v3 V& k5 _
% a7 _# k& j/ W6 f

4_meitu_4.jpg


" X' y* d: o* L0 C+ y5 ?
1 c& h1 k1 I% J/ T; w

GPIO寄存器介绍:

; j" m3 S, J4 {* l/ Q( m

STM32F051-GPIO常用寄存器:(下文会具体介绍)

    4个32位配置寄存器

        GPIOx_MODER(端口模式寄存器),  GPIOx_OTYPER(端口输出类型寄存器),  GPIOx_OSPEEDR(输出速度寄存器),    GPIOx_PUPDR(上拉 / 下拉寄存器)

    2个32位数据寄存器

        GPIOx_IDR(输入数据寄存器) 、GPIOx_ODR(输出数据寄存器)

    1 个32 位置位 / 复位寄存器

        GPIOx_BSRR(置位 / 复位寄存器)

    2 个 32 位复用功能配置寄存器

        GPIOx_AFRH (复用功能高位寄存器)、GPIOx_AFRL(复用功能低位寄存器)


! ?6 s/ `, U" R- Y# u

注:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能

GPIO寄存器MODER(端口模式寄存器):

1 L" n# O. N8 A

5_meitu_5.jpg


' m; V5 I6 I2 C0 w
, W! P9 H+ p4 y/ K- ~1 E: a7 n9 `3 R

                                              6_meitu_6.jpg


7 k  N4 L! M7 o7 ^! j- N! K+ ?) |5 z4 |# S% Z9 o+ K

GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..D,F)   

偏移地址: 0x00   

复位值:  

●  0x2800 0000 端口 A  

●  0x0000 0000 其他口

GPIO寄存器OTYPER(端口输出类型寄存器):

" a9 J: [0 \& u3 ~- A) i' ^

& o: F/ Q4 |/ Q  X/ c( m


7 G; x. }" ?& f! B$ E& D

7_meitu_7.jpg


/ ^2 x/ E3 I7 N! R! B" i

                                  8_meitu_8.jpg


3 b* [3 ^! R% X; U
- R1 U1 x! T# \7 Q- J' Y. Y5 u

GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)  


, r. S# G: b5 [' B* ^4 x1 V8 Y5 ?

偏移地址: 0x04  

复位值: 0x0000 0000

GPIO工作原理框图:

$ R: l# r; [+ c. J# S3 G/ h4 I


9 B! p) V9 w8 F! v( L/ v

9_meitu_9.jpg


+ v/ f" O: G  U" j/ C" ]$ d. c
+ k2 O3 u. z+ q1 e7 z3 h

GPIO寄存器OSPEEDR(输出速度寄存器):


8 c0 E1 e! [. U+ P) h


+ p) m6 ^1 Q7 q; N9 ?


0 K' Q- B2 m) g" }


9 q( p9 w# Y4 S, E

10_meitu_10.jpg


! g5 X. ?4 T/ e/ s9 Q2 r% o, A2 O: P$ Q$ t
1 O& t8 i' `) H- o

                                                 11_meitu_11.jpg

$ F$ L; J6 x4 @) w" R
& s" u5 H) g. H4 t0 e6 D: T

GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)      

偏移地址: 0x08      

复位值: 0x0000 0000

GPIO寄存器PUPDR(上拉 / 下拉寄存器):


6 h" W' f4 a" L; b8 _9 ^

12_meitu_12.jpg


0 e; b/ f$ [/ {
  D  R2 J- i' D0 g8 U6 g

                                                   13_meitu_13.jpg

( w6 G! ?! I5 h/ O8 P4 B) F# d
9 \. L9 D) o9 J, c. j7 [

GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)      

偏移地址: 0x0C      

复位值:   

● 0x2400 0000 端口 A   

● 0x0000 0000 其它端口


8 b1 o% m. ?( u" f+ ], g

GPIO寄存器IDR(输入数据寄存器):


7 @6 q' t. d" V# Q

14_meitu_14.jpg

9 Q+ L8 h; p$ h: p: O/ e

                                     15_meitu_15.jpg

; _' r. J$ M5 T# Y# m' o" s- S) j

$ v& G' P$ f* r" v- [

GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)      

偏移地址: 0x10      复位值: 0x0000 XXXX (X 表明不定 )

GPIO寄存器ODR(输出数据寄存器):


- J8 |- ~9 N, G! S, G7 }9 V& n$ M/ J

16_meitu_16.jpg

( x3 Y8 l; d1 u" O# t, G

8 r. W5 B2 ^' F" p4 r8 Y

                                       17_meitu_17.jpg

! F9 z2 ~. V; o+ `& r

GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)      

偏移地址: 0x14      复位值: 0x0000 0000

GPIO寄存器BSRR(置位 / 复位寄存器):

3 x0 P+ }4 ^8 T# A9 d


& [% b, [+ L5 Q. `

18_meitu_18.jpg


/ c% I* Z% t0 U0 m

                                              19_meitu_19.jpg


/ X* B! E2 X" Z5 D2 B# b3 Q* \1 M0 @6 ]8 K- p4 N

GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)      

偏移地址: 0x18      复位值: 0x0000 0000

GPIO寄存器AFRL(复用功能低位寄存器):

% K; A" m4 B9 W! w9 [

20_meitu_20.jpg


3 \2 U6 o0 D9 n9 Z. Y8 k
7 \2 ]% n- u$ P* u! |: v

                                        21_meitu_21.jpg

& i1 Z2 _9 r% b3 x. C; V  h

GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A..B)      

偏移地址: 0x20       复位值: 0x0000 0000

, Q4 a+ Z  g3 r& N' w7 ?8 F8 M3 O8 K

GPIO寄存器AFRH(复用功能高位寄存器):


; [! u4 M0 l6 f4 h3 P

22_meitu_22.jpg

' Q) u% t# g9 x# B7 N; `2 S' J6 C
9 B- I4 j: Z5 k$ o2 m8 o; E( t

                                  23_meitu_23.jpg

. f0 {$ e8 `/ S1 F0 a

GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A..B)      

偏移地址: 0x24       复位值: 0x0000 0000

$ Y7 u" k4 Z% S/ b& i9 B: w

照亮电子世界的那盏灯——LED寄存器版" L" {7 I) F- o

& F: z4 {) G' L

内容概要:

硬件原理图分析

编程步骤分析

编程实例操作

硬件原理图分析:


2 l2 ]& P3 Y/ f* C

24_meitu_24.jpg


3 V' y. v  D3 Z  Z3 q* ~  B

使能GPIO的时钟:

2 o  B, I+ @. n* I/ r

25_meitu_25.jpg


8 `5 `( F9 U0 c: T

26_meitu_26.jpg


- C- l( W8 m$ _
3 Y) a- {; n, T7 Y  m% @% a% r3 L

AHB 外部时钟使能寄存器 (RCC_AHBENR)   

偏移地址 : 0x14   

复位值 : 0x0000 0014   

访问:无等待周期,字,半字和字节访问

编程步骤分析:

- D# q% y+ C  E9 |, x

  1. 开启GPIOB的时钟
    3 {0 ~1 `! V" {5 R1 n3 M
  2. RCC->AHBENR  |=  1<<18;            1 M& k7 ?- e& o! f3 i

  3. ( |# z- M9 a- g5 P# V6 D
  4. 配置PB0 PB1 PB2接口   / f% G7 U% ~6 S4 k1 R2 R2 m
  5. GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4);    //设置PB0, PB1, PB2为通用输出模式
    % \5 {9 u3 R1 K5 \
  6. GPIOB->OTYPER = 0x0;    //设置PB0, PB1, PB2为通用推挽输出" H2 `' |. G8 m8 [$ N
  7. GPIOB->OSPEEDR = 0x0;   //设置输出速度为低速& K* R" p* R4 T+ M3 q0 d. o) W
  8. / @. f. ^' M; b
  9. 控制LED0 W; d+ ^5 `. q! T5 C& N1 ~$ |/ h
  10. GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED& Y: p( V4 W/ R7 `
  11. GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);    //置位PB0, PB1, PB2 既熄灭LED
复制代码
, o7 f: i' l( U  H; H# j
$ P& C! a9 P7 A# Y# |- c
照亮电子世界的那盏灯——LED库函数版* I# D& I) a3 [' E4 V2 b: v
0 S  k! a. x6 ]

内容概要:

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析:


1 P4 N# B! _( y4 @; ^9 ^1 Q

27_meitu_27.jpg

( Y% Z; W1 s) ?* e4 W

CubeMX的配置:


# k1 B2 _2 o9 T  F/ ]$ j* s4 G

  L1 E$ M$ J. f3 O6 V

28_meitu_28.jpg


; [" K7 o1 F, u0 r  n" i7 e& t, w3 Z* ?7 a% ~

29_meitu_29.jpg


$ y8 n- Y9 ~. U& N

初始化关键代码分析:

2 }' Z+ S8 D$ m2 O2 @/ S

  1. 开启GPIOB的时钟
    # L3 S+ p, R6 L5 q5 k% L
  2. RCC->AHBENR  |=  1<<18;            
    7 |! s& t& I8 q: |# r$ k
  3. 6 K$ G2 ~9 P- b3 h& j
  4. 配置PB0 PB1 PB2接口   
    9 R+ \3 Z: o0 w6 b- q6 [! [- E
  5. GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4);    //设置PB0, PB1, PB2为通用输出模式- t3 g- X5 T# U* I; h
  6. GPIOB->OTYPER = 0x0;    //设置PB0, PB1, PB2为通用推挽输出
    1 S/ G' J8 h$ e) O2 h& g/ X  _
  7. GPIOB->OSPEEDR = 0x0;   //设置输出速度为低速; [  v+ E' L# |2 r3 ?

  8. 4 X9 o/ H6 W9 s( }
  9. 控制LED
    ) c# y6 D$ F, `6 E
  10. GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED
    , u% r! W% p  ?+ G
  11. GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);    //置位PB0, PB1, PB2 既熄灭LED
复制代码

' W( j1 n' U& I

控制LED关键代码分析:

8 y/ s9 O" Z  |) ^5 U* ]2 z

  1. - w* H$ R. a: W# o" h
  2. 复位PB0, PB1, PB2 既点亮LED
    4 ?8 p) o) [* B+ c+ P+ \  L
  3. HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);
    ) @+ l7 e. b+ p
  4. ' z  p7 S9 |! b+ m% k
  5. 置位PB0, PB1, PB2 既熄灭LED
    * p7 P) Q6 r" o  O4 k
  6. HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);
复制代码
+ m6 B: o" R) |$ s" ^! A- n, S1 m
初识人机交互——按键5 K$ S$ T" j3 M: f3 z2 e
" \  G% [" E0 _8 ?

内容概要:

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析:

30_meitu_30.jpg

" Q' \2 s' a) K" h) D0 B

CubeMX的配置:

31_meitu_31.jpg

$ `( e* Q% e8 q: C: O& u

32_meitu_32.jpg


: [$ R0 I# J" p1 l

STM32F0硬件:

33_meitu_33.jpg

编程实例操作:按下按键灯的状态会进行翻转

4 F" z# ]; J" D7 [* \4 b+ R7 ]


  1. ( u" y) v- o# W, v$ Q; w' _2 D
  2. ​while (1)
    , s! q' G+ E9 B5 j
  3.   {
    , ?+ r/ E, q" F- D* d
  4.                 while(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //判断按键是否按下2 U8 r$ p1 Y2 t( k9 c9 h* }
  5.                 HAL_Delay(20);  //延时消抖/ @  f" Z5 W. _; ^! ]3 T/ j
  6.                 while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //再次判断按键是否还是按下状态
    / D# H0 }7 B' ^4 }+ \% b8 e
  7.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); //使灯翻转(亮灭)
    ! t, y0 \5 |6 Q6 o) C
  8.                 while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //判断按键是否抬起
    3 u0 u: I( N4 v- U7 h
  9.                 HAL_Delay(20);   //延时消抖
    3 l5 b+ g9 Z" R; i/ A; Y
  10.   }
复制代码

- J/ M8 Q6 C( u1 C" ?' {
6 g$ n5 V* r  @: P# z1 o" `/ P
' V& Q3 }0 o6 y% W6 _  W

$ ~- ]7 [  u- B; H- n2 \/ g4 t% @4 s- y1 v$ e2 L( o
收藏 评论1 发布时间:2020-9-27 11:19

举报

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