分享

寄存器映射

 新用户2153sgxX 2023-09-25

相关概念

简单学习了寄存器映射的相关概念,在这里记录一下。

首先寄存器映射的概念是:寄存器是单片机上特色的存储器,给寄存器地址命名的过程就是寄存器映射。

寄存器映射_映射

阅读参考手册的流程

  1. 寄存器的名字
  2. 偏移量及复位值
  3. 寄存器位表
  4. 位功能描述

寄存器映射_寄存器_02

寄存器地址计算

为了方便编写代码及使用,将寄存器地址分为三个部分

  • 总选基地址(BUS_BASE_ADDR):APB1、APB2、AHB

总线基地址及偏移量

总线

基地址

偏移量

APB1

0X4000 0000

0

APB2

0X4001 0000

0X1 0000

AHB

0X4001 8000

0X1 80000

【偏移量:是相对外设基地址(PERIPH_BASE)来说的】

APB1总线的基地址,也叫外设基地址(PERIPH_BASE)

  • 外设基于总线基地址的偏移量(PERIPH_OFFSET)

GPIO外设基地址及偏移量

所需总线

外设

基地址

偏移量

APB2

0X4001 0000

GPIOA

0X4001 0800

0X800

GPIOB

0X4001 0C00

0XC00

GPIOC

0X4001 1000

0X1000

GPIOD

0X4001 1400

0X1400

GPIOE

0X4001 1800

0X1800

GPIOF

0X4001 1C00

0X1C00

GPIOG

0X4001 2000

0X2000

【偏移量是相对于APB2外设及地址(APB2PERIPH_BASE)来说的】

  • 寄存器相对外设基地址的偏移量(REG_OFFSET)

寄存器基地址及偏移量

所属总线

所属外设

寄存器

地址

偏移量

APB2

0X4001 0000

GPIOA

0X4001 0800

GPIOA_CRL

0X4001 0800

0X00

GPIOA_CRH

0X4001 0804

0X04

GPIOA_IDR

0X4001 0808

0X08

GPIOA_ODR

0X4001 080C

0X0C

GPIOA_BSRR

0X4001 0810

0X10

GPIOA_BRR

0X4001 0814

0X14

GPIOA_LCKR

0X4001 0818

0X18

【表中的偏移量是相对于CPIOA外设基地址(GPIOA_BASE)来说的】

寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET

GPIOA_ODR寄存器地址计算过程:

  1. 获取外设挂在哪个总线上面?查:系统结构图
  2. 获取总线基地址,,APB2总线基地址:0X4001 000
  3. 获取外设地址偏移量,GPIOA相对APB2总线偏移量是:0X800
  4. 获取寄存器地址偏移量,ODR相对GPIOA外设基地址的偏移量是:5

寄存器地址= BUS BASE ADDR + PERIPH OFFSET + REG OFFSET

GPIOA_ODR = 0X4001 0000 + 0X800 + 0X0C = 0X40

附录

参考链接:​​https://www.bilibili.com/video/BV13Y4y1878A?spm_id_from=333.851.b_7265636f6d6d656e64.1​

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多