单片机 > 单片机程序设计 > 详情

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

发布时间:2024-07-25 发布时间:
|

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


1)51单片机:


     sfr P0=0x80;      //关键字sfr 声明地址和名称的映射

     P0=0x00;          //将0x00赋值给P0口的8位(51单片机一组IO为8位)


2)STM32:


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


二,以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;



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

这里写图片描述

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32学习笔记4:外部中断