a value of type “uint16_t“ cannot be used to initialize an entity of type “GPIO_TypeDef *“

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值