以通俗易懂方式理解结构体

以stm32官方库为例:定义一个结构体,内部有7个成员
可以理解为:某个学生参与测试,而他有7个属性值可测
而结构体,是一个类型名
类似于int,char

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;

我们可以理解为,

typedef struct//定义一个“属性表”
{
  __IO uint32_t 身高;
  __IO uint32_t 体重;
  __IO uint32_t 性别;
...
} 成员;

因为 由stm32f10x.h有:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

((GPIO_TypeDef *) GPIOA_BASE)表示将GPIOA_BASE强转换为指针类型的结构体, 表示用GPIOA 替代(GPIO_TypeDef *) GPIOA_BASE,那么现在GPIOA就表示 以 GPIOA_BASE为基地址、类型为GPIO_TypeDef结构体的一个指针,所以你程序里可以用GPIOA->CRL,但是GPIOA->CRH的地址值为GPIOA_BASE+4;(偏移量)

其次针对GPIO_InitTypeDef GPIO_InitStructure;这句话什么意思?
声明一个结构体,这个结构体名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,相当于小明作为一个成员去参与测试,然后小明可以选择参与测试身高、体重…

而本身这个结构体是这样的
typedef struct
{
  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
                                      This parameter can be any value of @ref GPIO_pins_define */

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.
                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */

  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.
                                      This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

stm32里面初始化GPIO用的。设置完了GPIO_InitStructure里面的内容后,
GPIO_InitStructure就可以调用其成员,在GPIO_Init (GPIO_TypeDef GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,
比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面声明的那个结构体的基地址
GPIO_TypeDef GPIOx:即GPIOA…G
GPIO_InitTypeDef
GPIO_InitStruct即&GPIO_InitStructure

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风月ac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值