// stm3210e_eval.h
typedef enum
{
LED0 = 0,
LED1 = 1
} Led_TypeDef;
typedef enum
{
KEY0 = 0,
KEY1 = 1
} Button_TypeDef;
...
#define LEDn 2
#define LED0_PIN GPIO_Pin_8
#define LED0_GPIO_PORT GPIOA
#define LED0_GPIO_CLK RCC_APB2Periph_GPIOA
#define LED1_PIN GPIO_Pin_2
#define LED1_GPIO_PORT GPIOD
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOD
...
#define BUTTONn 2
#define KEY0_PIN GPIO_Pin_1
#define KEY0_GPIO_PORT GPIOC
#define KEY0_GPIO_CLK RCC_APB2Periph_GPIOC
#define KEY1_PIN GPIO_Pin_13
#define KEY1_GPIO_PORT GPIOC
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOC
// stm3210e_eval.c
GPIO_TypeDef* LED_PORT[LEDn] = {LED0_GPIO_PORT, LED1_GPIO_PORT};
const uint16_t LED_PIN[LEDn] = {LED0_PIN, LED1_PIN};
const uint32_t LED_CLK[LEDn] = {LED0_GPIO_CLK, LED1_GPIO_CLK};
GPIO_TypeDef* KEY_PORT[BUTTONn] = {KEY0_GPIO_PORT, KEY1_GPIO_PORT};
const uint16_t KEY_PIN[BUTTONn] = {KEY0_PIN, KEY1_PIN};
const uint32_t KEY_CLK[BUTTONn] = {KEY0_GPIO_CLK, KEY1_GPIO_CLK};
...