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

【经验分享】STM32H7学习继续(STM32H7系列5)第十七章比较实用,以后写程序的时候会用到

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API
8 s& G: i- _3 q* Q% G2 R& d! H我这里简单的总结一下GPIO的APi函数:
# C1 A0 ]1 ?" {0 q/ w3 a7 D1 MHAL_GPIO_Init:此函数用于初始化GPIO+ R/ ~- m5 u' r/ \! p( x: k
先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化+ R, K8 R; A: i+ S& G$ G
HAL_GPIO_DeInit:此函数用于复位IO到初始化状态  o/ J' ?1 ~( ?( i  ~+ L
HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。
7 \1 D4 J+ g* yHAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。
$ N$ R5 z+ w9 f2 A) C9 IHAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。" \. g- d3 x/ x2 h4 r2 v2 B' K1 l# T
HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。! \. A8 D& o1 m+ i* ]
注意事项:
, y( j- d/ S; W4 _此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。
' S8 Y" G6 I8 Z# [  e一旦锁住后,就不能再修改,只有复位后才可以重新配置。
$ j6 T, }7 _8 a- X! z, u0 Z8 E. S* A1 s4 n, G+ `" s& Y: D& u
如何使用HAL库的GPIO驱动
! g; S/ X( Y( @) l$ A使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):
0 ^+ h8 k  N. R. `. a1 B9 d
' [* A4 R0 f2 L( A% a第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。# M5 \0 N8 |1 d. K# r

# E* t. N/ U' h1 |: o* v; D' w第2步:通过函数HAL_GPIO_Init()配置GPIO。
# P6 M# _* ^5 C7 y) }( G) z) W, _) ?( c) z1 S
(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。
; @1 p! Q1 o# ^  g6 k
( Y8 ?: d5 ]8 S  m(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。- t. ]4 I6 f( f: a
: z: K+ |& Z2 t
(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。; w! m' C1 r% j2 Z" R# j

' Z3 a  Y" Q" B+ ^* k0 ^(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
0 f* D8 t0 e9 W% Y% l* K# n
1 q. r9 P; f2 h(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。# `, |+ Z1 l5 p! K
/ @  }$ N2 Y! ^" O3 L
(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。
' y! n9 n4 m( x: h9 ?% J/ Z+ z, N4 s- N; M. I4 F9 x
第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。) x; N; Z. f8 P, F2 |
$ F: @: Z- h- J
第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。
  P& i% ?9 q9 p6 N) V5 Z+ ~8 [6 e% @% [% c' P: ~, @
第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。1 F' D4 @0 W2 S& r
' x  k, M3 i, k+ ~7 W
另外注意下面三个问题:
, X* y6 @/ E6 h+ n1 R
, U, X: n" j2 k+ m# D系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。$ V4 F; _9 ~; ?0 j
关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。
8 K" H7 l+ H: W6 d# A2 e) C关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。" j8 |, K" n* H+ c% _3 E
; x$ M! f3 D7 O1 {

/ Y: p: n5 s" a! t5 H$ F7 ~5 ^& E0 I附上简单的 跑马灯程序做例子
/ f% C2 ~  j8 \9 T
20200109102255425.png
6 A, @9 v& d9 D9 V- C
9 d! W6 r3 k* t

( o  v9 L, `) |7 b# R' O0 J. }2 w" w# A) ]4 E# D
8 ?% ^" q, c5 `
赞 收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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