寄存器名称和地址的映射分析

首先要清楚的一点,所有操作,最终目的都是操作寄存器

一,对比51单片机STM32对寄存器的操作

1)51单片机:

     sfr P0=0x80;      //关键字sfr 声明地址和名称的映射
     P0=0x00;          //将0x00赋值给P0口的8位(51单片机一组IO为8位)
 
 
  • 1
  • 2

2)STM32:

     GPIOA->ODR=0x00000000     //为GPIOA的ODR寄存器地址赋值0x00000000
 
 
  • 1

二,以GPIOA为例说明STM32寄存器和名称的映射:

GPIOA下的某个寄存器,挂载在GPIOA下,地址为GPIOA基地址+偏移量 
GPIOA挂载在APB2总线,地址为APB2总线基地址+GPIOA偏移量 
ABP2挂载加外设基地址,地址为外设基地址+ABP2偏移量

源码中可以找到:

        //外部总线基地址
        #define PERIPH_BASE     ((uint32_t)0x40000000)          

        //APB2基地址=外部总线基地址+偏移量
        #define APB2PERIPH_BASE     (PERIPH_BASE + 0x10000)     

        //GPIOA基地址=APB2基地址+偏移量
        #define GPIOA_BASE     (APB2PERIPH_BASE + 0x0800)          

        //GPIOA将地址顺序分配给7个32位寄存器(结构体分配)
        #define GPIOA     ((GPIO_TypeDef*)GPIOA_BASE)     

        //将寄存器地址映射到7个32位寄存器,分别控制
        typedef struct                                        
        {
             __IO unit32_t CRL;
             __IO unit32_t CRH;
             __IO unit32_t ODR;
             __IO unit32_t IDR;
             __IO unit32_t BSRR;
             __IO unit32_t BRR;
             __IO unit32_t LCKR;
        }GPIO_TypeDef;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在STM32手册中:GPIO寄存器地址映像如下:

  这里写图片描述

如此,实现STM32寄存器名称和地址之间的映射关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值