stm32f10x中GPIOA理解(一)

stm32中GPIOA对于arm芯片来说,它属于芯片内外部的外设,对于单片机来说,它是按时间脉冲来执行的。那么GPIOA挂在RCC_APB2Periph时钟上面的。在这里我们先理解GPIOA 在地址,STM32的外设起始基地址为0x40000000,而APB2总线设备起始地址相对于外设基地址的偏移量为0x10000,GPIOA设备相对于APB2总线设备起始地址偏移量为0x0800。因此,GPIOA地址为:

GPIOA_BASE = 0x40000000 + 0x10000 + 0x0800 我们看到程序在“stm32f10x_map.h”文件中找到:#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
和:#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
还有:#define PERIPH_BASE ((u32)0x40000000) 

而GPIOA则在“stm32f10x_map.h”文件中找到定义:

#ifdef _GPIOA
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#endif

说到这里我们就知道GPIOA所理解的地址,那么GPIOA外设有多少寄存器呢?从stm32f10x.h文中看到

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;

一共有7个,分别是CRL,CRH,IDR,ODR,BSRR,BRR,LCKR.

那么#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)  宏有什么作用呢?就把GPIOA的地址分给结构体的首地址。从而指定GPIOA的寄存器地址。以便来操作。这跟单片机51操作寄存器一样。下一笔篇介绍固件库怎么操作GPIOA的寄存器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值