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);
}
}