C语言——struct结构体作用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GPIOA寄存器定义GPIOA基地址0x40000000
偏移寄存器
0x00GPIOA_MODER
0x04GPIOA_OTYPER
0x08GPIOA_OSPEEDER 0x0C GPIOA_PUPDR
0x10GIPOA_IDR
0x14GIPOA_ODR
0x18GPIOA_BSSR
0x1C GPIOA_LCKR
0x20GPIOA_AFRL
0x24GPIOA_AFRH
0x28GPIOA_BRR
0x2C GPIOA_ASCR C语⾔——struct结构体作⽤
1.封装函数参数:⽤结构体变量做为函数的参数,可以为函数传⼊多个参数;
2.定义通信协议体:将通信协议的固定格式⽤结构体定义,收到数据后直接套⽤(将收到的数据读到协议结构体定定的变量中),实现对协议解析;
3.将MCU相关的寄存器组织在⼀起:把结构体和寄存器的地址对应起来,可以通过操作结构体来达到操作MCU寄存器的⽬的;
3.1.例:MCU⽚上外设GPIOA的寄存器在数据⼿册中的定义如下:
3.2.GPIOA寄存器对应的结构体为(在stm32xxxxxx.h中定义):
typedef struct
{
__IO uint32_t MODER; //Cortex-M为32位MCU,每个寄存器为32bit,刚好对应uint32_t类型 ,结构体成员都为4字节对齐,每个成员的偏移量与上表中的偏移量同好相等
__IO uint32_t OTYPER;
__IO uint32_t OSPEEDR;
__IO uint32_t PUPDR;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t LCKR;
__IO uint32_t AFR[2];
__IO uint32_t BRR;
__IO uint32_t ASCR;
} GPIO_TypeDef;
3.3.宏定义将GPIOA的结构体与寄存器地址对应起来:GPIOA 的寄存器的地址=GPIOA 基地址+寄存器相对 GPIOA 基地址的偏移值
#define PERIPH_BASE (0x40000000UL) //datasheet中外设基址址
#define AHB2PERIPH_BASE (PERIPH_BASE + 0x08000000UL) //挂在AHB2上的外设基地址
#define GPIOA_BASE (AHB2PERIPH_BASE + 0x0000) //GPIOA的基地址GPIOA_BASE= 0x40000000+0x08000000+0x0000=0x48000000
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) //寄存器地址与寄存器结构体建⽴联系,GPIOA 为⼀个结构体GPIO_TypeDef 类型的指针,就可以⽤结构体指针访问结构体成员的⽅法,访问结体成员如:GPIOA->MODER,就可以访。

相关文档
最新文档