STMCU小助手
发布时间:2021-12-19 15:00
|
17. STM32H7之GPIO的HAL库API 我这里简单的总结一下GPIO的APi函数:2 ?7 Q2 Z, V% D% x1 R HAL_GPIO_Init:此函数用于初始化GPIO 先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化$ h4 G5 p @4 X" v) {( v HAL_GPIO_DeInit:此函数用于复位IO到初始化状态 HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。 HAL_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; ^ 一旦锁住后,就不能再修改,只有复位后才可以重新配置。 如何使用HAL库的GPIO驱动 使用方法由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 第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 (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速度等级。 ! S: h; y* T: |% v (4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。 (5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。 % ]4 B' [7 c; ~- `. l, ~; P& E (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。 1 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。 + Y* L- b* c- E1 U: @ 第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。 另外注意下面三个问题:6 ]& n' W2 y' o! g) ?3 m4 h 系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。 关闭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。 3 a6 ^* U+ |; P [. W: S5 G Q) ~9 w 附上简单的 跑马灯程序做例子$ ^0 M5 B- O' f4 ]& l
; O6 }) m, R v0 C; s |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版