如何在 STM32-Cube IDE 中为已从自动生成的 CubeMX 代码定义的端口创建数组?

问题描述 投票:0回答:1

我想为这些端口创建一个数组,这些端口已在 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 灯应该被激活等等..

arrays c typedef
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.