Clion开发STM32之HAL库GPIO宏定义封装

Clion开发STM32之HAL库GPIO宏定义封装最新地址

对GPIO操作进行一个宏定义封装

头文件

#ifndef STM32F103VET6_PROJECT_BSP_GPIO_H
#define STM32F103VET6_PROJECT_BSP_GPIO_H

#include "sys_core.h"

#define GPIO_INIT(port, pin, mode, pull, speed) \
            do{\
                GPIO_InitTypeDef GPIO_InitStruct;\
                GPIOx_Clk_Enable(port);\
                GPIO_InitStruct.Pin = pin;\
                GPIO_InitStruct.Mode = mode;\
                GPIO_InitStruct.Pull = pull;\
                GPIO_InitStruct.Speed = speed;\
                HAL_GPIO_Init(port, &GPIO_InitStruct); \
            }while(0)
#define PA_INIT(pin, mode, pull, speed) GPIO_INIT(GPIOA,pin, mode, pull, speed)
#define PB_INIT(pin, mode, pull, speed) GPIO_INIT(GPIOB,pin, mode, pull, speed)
#define PC_INIT(pin, mode, pull, speed) GPIO_INIT(GPIOC,pin, mode, pull, speed)
#define PD_INIT(pin, mode, pull, speed) GPIO_INIT(GPIOD,pin, mode, pull, speed)
#define PE_INIT(pin, mode, pull, speed) GPIO_INIT(GPIOE,pin, mode, pull, speed)
#define P_OUT(port, pin, level) HAL_GPIO_WritePin(port, pin, level)
#define P_Toggle(port, pin) HAL_GPIO_TogglePin(port,pin)
#define PA_OUT(pin, level) P_OUT(GPIOA,pin,level)
#define PA_Toggle(pin) P_Toggle(GPIOA,pin)
#define PB_OUT(pin, level) P_OUT(GPIOB,pin,level)
#define PB_Toggle(pin) P_Toggle(GPIOB,pin)
#define PC_OUT(pin, level) P_OUT(GPIOC,pin,level)
#define PC_Toggle(pin) P_Toggle(GPIOC,pin)
#define PD_OUT(pin, level) P_OUT(GPIOD,pin,level)
#define PD_Toggle(pin) P_Toggle(GPIOD,pin)
#define PE_OUT(pin, level) P_OUT(GPIOE,pin,level)
#define PE_Toggle(pin) P_Toggle(GPIOE,pin)

typedef struct {
    GPIO_TypeDef *GPIOx;
    GPIO_InitTypeDef Conf;
} GPIO_Conf_t;

void GPIOx_Clk_Enable(GPIO_TypeDef *port);

void GPIOx_Init(GPIO_Conf_t *Gpio_Cnf, uint16_t size);

void GPIOx_DeInit(GPIO_Conf_t *Gpio_Cnf, uint16_t size);

#endif //STM32F103VET6_PROJECT_BSP_GPIO_H

源文件

#include "bsp_gpio.h"

void GPIOx_Clk_Enable(GPIO_TypeDef *port) {
    if (port == GPIOA) {
        __HAL_RCC_GPIOA_CLK_ENABLE();
    } else if (port == GPIOB) {
        __HAL_RCC_GPIOB_CLK_ENABLE();
    } else if (port == GPIOC) {
        __HAL_RCC_GPIOC_CLK_ENABLE();
    } else if (port == GPIOD) {
        __HAL_RCC_GPIOD_CLK_ENABLE();
    } else if (port == GPIOE) {
        __HAL_RCC_GPIOE_CLK_ENABLE();
    } else if (port == GPIOF) {
        __HAL_RCC_GPIOF_CLK_ENABLE();
    } else if (port == GPIOG) {
        __HAL_RCC_GPIOG_CLK_ENABLE();
    }
}

void GPIOx_Init(GPIO_Conf_t *Gpio_Cnf, uint16_t size) {
    for (int i = 0; i < size; ++i) {
        GPIO_INIT(Gpio_Cnf[i].GPIOx, Gpio_Cnf[i].Conf.Pin, Gpio_Cnf[i].Conf.Mode, Gpio_Cnf[i].Conf.Pull,
                  Gpio_Cnf[i].Conf.Speed);
    }
}

void GPIOx_DeInit(GPIO_Conf_t *Gpio_Cnf, uint16_t size) {
    for (int i = 0; i < size; ++i) {
        HAL_GPIO_DeInit(Gpio_Cnf[i].GPIOx, Gpio_Cnf[i].Conf.Pin);
    }

}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

詩不诉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值