a value of type "uint16_t" cannot be used to initialize an entity of type "GPIO_TypeDef *"
意思是uint16_t类型的值不能用于初始化GPIO_TypeDef*类型的实体
通过报错内容可以知道是类型定义错误的原因
以下是我导致报错的原文
#define RELAY1_GPIO_PORT GPIOB
#define RELAY1_GPIO_CLK RCC_APB2Periph_GPIOB
#define RELAY1_GPIO_PIN GPIO_Pin_12
#define RELAY2_GPIO_PORT GPIOB
#define RELAY2_GPIO_CLK RCC_APB2Periph_GPIOB
#define RELAY2_GPIO_PIN GPIO_Pin_13
#define RELAY3_GPIO_PORT GPIOB
#define RELAY3_GPIO_CLK RCC_APB2Periph_GPIOB
#define RELAY3_GPIO_PIN GPIO_Pin_14
#define RELAY4_GPIO_PORT GPIOB
#define RELAY4_GPIO_CLK RCC_APB2Periph_GPIOB
#define RELAY4_GPIO_PIN GPIO_Pin_15
static GPIO_TypeDef* RELAY_GPIO_PIN[4] =
{
RELAY1_GPIO_PIN,
RELAY2_GPIO_PIN,
RELAY3_GPIO_PIN,
RELAY4_GPIO_PIN
};
调转到stm32f4xx_gpio.h查看DPIO_PIN引脚的定义发现是uint16_t类型
#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */
#define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */
#define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */
#define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
#define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */
#define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */
#define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */
#define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */
#define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */
#define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */
#define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */
#define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */
#define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */
而GPIO_TypeDef结构体定义的都是uint32_t类型
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
将GPIO_TypeDef* 改成uint16_t问题解决
static uint16_t RELAY_GPIO_PIN[4] =
{
RELAY1_GPIO_PIN,
RELAY2_GPIO_PIN,
RELAY3_GPIO_PIN,
RELAY4_GPIO_PIN
};