ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-01 12:58:37  阅读:273  来源: 互联网

标签:__ TypeDef 通俗易懂 理解 IO GPIO uint32 GPIOA 结构


以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

标签:__,TypeDef,通俗易懂,理解,IO,GPIO,uint32,GPIOA,结构
来源: https://blog.csdn.net/u014439531/article/details/123200778

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有