我想为这些端口创建一个数组,这些端口已在 main.h 中定义:
/* 自动生成的代码 */
#define YELLOW_0_Pin GPIO_PIN_10
#define YELLOW_0_GPIO_Port GPIOB
#define RED_0_Pin GPIO_PIN_8
#define RED_0_GPIO_Port GPIOA
#define YELLOW_1_Pin GPIO_PIN_10
#define YELLOW_1_GPIO_Port GPIOA
#define RED_1_Pin GPIO_PIN_3
#define RED_1_GPIO_Port GPIOB
#define GREEN_0_Pin GPIO_PIN_4
#define GREEN_0_GPIO_Port GPIOB
#define BLUE_0_Pin GPIO_PIN_5
#define BLUE_0_GPIO_Port GPIOB
#define GREEN_1_Pin GPIO_PIN_8
#define GREEN_1_GPIO_Port GPIOB
#define BLUE_1_Pin GPIO_PIN_9
#define BLUE_1_GPIO_Port GPIOB
我想使用这个枚举:
enum LED {RED_0, YELLOW_0, GREEN_0, BLUE_0, RED_1, YELLOW_1, GREEN_1, BLUE_1};
我想定义一个数组来使用它们:
GPIO_TypeDef *gpio_ports[8] = {&RED_0_GPIO_Port, &YELLOW_0_GPIO_Port, GREEN_0_GPIO_Port,
BLUE_0_GPIO_Port, RED_1_GPIO_Port, YELLOW_1_GPIO_Port, GREEN_1_GPIO_Port,
BLUE_1_GPIO_Port};
我正在考虑类似的事情,但我总是遇到多重定义错误(显然..)。
可以用结构体来解决这个问题吗?
最终用途应该是这样的:led_activate(RED0);然后红色 LED 灯应该被激活等等..
GPIOA
、GPIOB
是扩展为转换为指针的整数的定义。它们不存在于内存中,您无法获取它的地址。
#define GPIOA ((GPIO_Typedef *)0x40000500
因为它们是指针,所以你不需要获取它的地址:
GPIO_TypeDef *gpio_ports[8] = {RED_0_GPIO_Port, YELLOW_0_GPIO_Port, GREEN_0_GPIO_Port,
BLUE_0_GPIO_Port, RED_1_GPIO_Port, YELLOW_1_GPIO_Port, GREEN_1_GPIO_Port,
BLUE_1_GPIO_Port};