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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API
2 ]8 W" F  a4 K6 r2 U& H) g我这里简单的总结一下GPIO的APi函数:2 ?7 Q2 Z, V% D% x1 R
HAL_GPIO_Init:此函数用于初始化GPIO
3 j3 J- o' x& G6 w, }先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化$ h4 G5 p  @4 X" v) {( v
HAL_GPIO_DeInit:此函数用于复位IO到初始化状态
/ k+ r8 J+ e+ ?HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。
" M& @* ?9 e! [; Y, \) {/ e' d# yHAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。/ P1 }/ _. P, C( N( n
HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。8 D) u9 r. I. v8 `6 C
HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。" d6 M' v" h8 \& p
注意事项:! \% q7 m. ?) ^8 `( _2 ]
此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。! ~+ l. T  Y9 p; ^
一旦锁住后,就不能再修改,只有复位后才可以重新配置。
7 f5 z7 Y$ o' D' ]5 e
3 V2 q* C/ y# ~- |" e$ x如何使用HAL库的GPIO驱动
4 ~. Z+ f9 m1 ~: X使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):3 F7 y8 r5 ?( F) Y
# E6 t% v7 v9 [4 e1 F) E2 H
第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。/ @7 h  O& _- X

4 w( T9 }% j. I第2步:通过函数HAL_GPIO_Init()配置GPIO。8 r1 s0 D# F+ W1 N$ ^3 X
" ^! w( q# ?% d5 e
(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。6 l. c/ F+ G( \$ J6 Z

% c( G, b$ e4 B) B(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。" `/ j. F( D! V5 G
) `' V: ]3 l. B/ J$ p. \8 E7 Q) w" w% H
(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。
- a! G5 x% u& C! C: B1 i! S: h; y* T: |% v
(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
, ?) M1 ]9 C$ L# ]' w: x
$ ~8 p, f1 k* P! |* ](5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。
* Z+ c% m% t0 z' _* A% ]4 B' [7 c; ~- `. l, ~; P& E
(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。
0 v' U2 C3 y  G' S0 F1 x, z* w! x+ U+ c: H7 p
第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。# X9 F& e, L9 A6 Q2 ^! ~+ D! J
, f9 W9 f  t) x2 ~
第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。
# b1 f/ Z  i( {- B. X: m' r! w+ Y* L- b* c- E1 U: @
第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。
' L1 A3 v: t0 I6 i% L
4 U8 O4 S0 \3 p另外注意下面三个问题:6 ]& n' W2 y' o! g) ?3 m4 h

; ]/ [# U7 [: P' H7 m( J$ D系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。
3 k/ u+ [, s( U/ P- z关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。: X7 F0 r! e1 i* k" k$ s7 x: _
关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。
/ s9 W6 x- w1 r3 a6 ^* U+ |; P  [. W: S5 G  Q) ~9 w

" T  @8 G, u/ b2 p  Q* H附上简单的 跑马灯程序做例子$ ^0 M5 B- O' f4 ]& l
20200109102255425.png
% M/ ?/ N$ J! v) C: u5 M7 F& I
; O6 }) m, R  v0 C; s

+ m. K5 {8 S$ Z# F
7 w4 j; r4 h( O# N
; X6 w' \( A. ^. F% S- e3 N
赞 收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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