STM32F4xx GPIO基础(HAL库)

GPIO初始化

HAL库初始化

/* 初始化HAL库,进行任何操作之前必须初始化HAL库 */
HAL_Init();

RCC时钟使能

/* GPIOx时钟使能(注意,开头是两个"_",即"__") */
__HAL_RCC_GPIOx_CLK_ENABLE();

/* GPIOX时钟失能(注意,开头是两个"_",即"__") */
__HAL_RCC_GPIOx_CLK_DISABLE();

Pin初始化

GPIO_InitTypeDef

typedef struct {
    /* GPIO引脚,取值为:
       GPIO_PIN_0 ~ GPIO_PIN_15 (配置单个引脚);
       GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 (同时配置部分引脚);
       GPIO_PIN_ALL (同时配置所有引脚). */
    uint32_t Pin;
    
    /* GPIO模式,取值为: 
       GPIO_MODE_INPUT (Floating 浮空输入);
       GPIO_MODE_OUTPUT_PP (Push-Pull 推挽输出);
       GPIO_MODE_OUTPUT_OD (Open Drain 开漏输出);
       GPIO_MODE_AF_PP (复用推挽输出);
       GPIO_MODE_AF_OD (复用开漏输出);
       GPIO_MODE_ANALOG (ADC 模拟输入);
       GPIO_MODE_IT_RISING (外部中断,上升沿触发);
       GPIO_MODE_IT_FALLING (外部中断,下降沿触发);
       GPIO_MODE_IT_RISING_FALLING (外部中断,上升沿 或 下降沿触发);
       GPIO_MODE_EVT_RISING (外部事件,上升沿触发);
       GPIO_MODE_EVT_FALLING (外部事件,下降沿触发);
       GPIO_MODE_EVT_RISING_FALLING (外部事件,上升沿 或 下降沿触发). */ 
    uint32_t Mode;
    
    /* GPIO拉电阻模式,无拉/上拉/下拉。取值为:
       GPIO_NOPULL (无拉电阻); 
       GPIO_PULLUP (上拉模式);
       GPIO_PULLDOWN (下拉模式). */
    uint32_t Pull;
    
    /* GPIO最大电平翻转频率,取值为:
       GPIO_SPEED_FREQ_LOW (低翻转频率,2MHz);
       GPIO_SPEED_FREQ_MEDIUM (中翻转频率,12.5MHz ~ 50MHz);
       GPIO_SPEED_FREQ_HIGH (高翻转频率,25MHz ~ 100MHz);
       GPIO_SPEED_FREQ_VERY_HIGH (极高翻转频率,50MHz ~ 200MHz). */
    uint32_t Speed;
    
    /* 配置GPIO的具体复用功能,例:
       GPIO_Init.Alternate = GPIO_AF7_USART1;
       GPIO复用为 USART1. */
    uint32_t Alternate;
} GPIO_InitTypeDef;    

HAL_GPIO_Init()

/* 使用 GPIO_Init结构体初始化GPIOx. */
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx,GPIO_InitTypeDef *GPIO_Init);

/* 将所选的 GPIOx 的 GPIO_Pin 所有参数重设为缺省值。 */
void  HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

GPIO初始化示例

/* 初始化结构体成员 */
GPIO_InitTypeDef GPIO_Init = {0};

GPIO_Init.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init.Pull = GPIO_PULLUP;
GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOC,&GPIO_Init);

或:

/* 注意:初始化结构体成员的值必须与成员对应,且不可缺项 */
GPIO_InitTypeDef GPIO_Init = {
    GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2,
    GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP,
    GPIO_Init.Pull = GPIO_PULLUP,
    GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH,
    0
};

HAL_GPIO_Init(GPIOC,&GPIO_Init);

GPIO基本电平设置

常用设置

/* 读取指定 GPIOx 的 GPIO_Pin 的电平状态(高/低).
   返回:
   (GPIO_PinState)GPIO_PIN_RESET (低电平);
   (GPIO_PinState)GPIO_PIN_SET (高电平).
   注意:GPIO引脚模式为 读或写 都可使用此函数读取电平状态 */
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

/* 设置指定 GPIOx 的 GPIO_Pin 的电平状态(高/低).
   参数PinState:
   (GPIO_PinState)GPIO_PIN_RESET (低电平);
   (GPIO_PinState)GPIO_PIN_SET (高电平). 
   注意:
   此函数仅在GPIO 写 模式下使用 */
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState);

/* 切换(Toggle)指定 GPIOx 的 GPIO_Pin 的电平状态 */
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

示例

main.c

#include "stm32f4xx.h"

#define LED_Port GPIOC
#define LED_Pin GPIO_PIN_0
#define true 1
#define false 0

// 函数声明
void LED_Init(void);
void LED_Twinkle(int delay_ms);

int main() {
    // 初始化HAL库
    HAL_Init();
    LED_Init();
    while(true) {
        LED_Twinkle(500);
    }
}
void LED_Init() {
    // 初始化指定GPIO的RCC时钟
    __HAL_RCC_GPIOC_CLK_ENABLE();
    
    GPIO_InitTypeDef LED_InitStructure = {0};
    LED_InitStructure.Pin = LED_Pin;
    // Open Drain 开漏输出模式
    LED_InitStructure.Mode = GPIO_MODE_OUTPUT_OD;
    // 无拉电阻
    LED_InitStructure.Pull = GPIO_NOPULL;
    LED_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
    
    HAL_GPIO_Init(LED_Port,&LED_InitStructure);
    // GPIO初始为高电平
    HAL_GPIO_WritePin(LED_Port,LED_Pin,GPIO_PIN_SET);
}

void LED_Twinkle(int delay_ms) {
    HAL_GPIO_TogglePin(LED_Port,LED_Pin);
    // HAL库中的毫秒级延时函数
    HAL_Delay(delay_ms);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32F4xx HAL是针对STM32F4系列微控制器的一套软件,是ST公司提供的一种高级抽象层级(HAL)软件。该致力于简化STM32F4系列微控制器的驱动和操作,使开发人员可以更加轻松地使用STM32微控制器。 STM32F4xx HAL提供了丰富的功能和接口,包括GPIO(通用输入输出),UART(通用异步收发器),SPI(串行外设接口),I2C(I²C总线接口),定时器,ADC(模数转换器)等。通过这些功能和接口,开发人员可以实现各种应用,如串行通信、数据采集、外设控制等。 HAL详解主要包括以下几个方面: 1. 初始化和配置:HAL提供了一系列函数来初始化和配置微控制器的各个模块。开发人员只需设置相应的参数并调用相应的函数即可完成初始化和配置工作。 2. 中断处理:HAL提供了用于中断处理的函数,并且简化了中断的使用。开发人员可以使用HAL提供的函数注册中断处理函数,并可以方便地配置中断触发条件和优先级。 3. 外设驱动:HAL提供了各种外设的驱动函数,使开发人员可以方便地配置和操作外设。开发人员只需简单地调用相应的函数即可实现对外设的控制。 4. 时钟管理:HAL提供了函数用于设置各个模块的时钟。开发人员可根据需求调整时钟频率和分频系数,从而优化系统性能。 5. 低功耗模式:HAL支持低功耗模式,可以帮助开发人员优化系统功耗。通过调用相应的函数,开发人员可以将系统进入低功耗模式,并在必要时唤醒系统。 总之,STM32F4xx HAL是一套强大而灵活的软件,它简化了STM32F4系列微控制器的驱动和操作。通过HAL,开发人员可以更加轻松地进行嵌入式系统开发,提高开发效率并降低开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值