正点原子战舰v3笔记(2)MDK中寄存器地址名称映射分析

7 篇文章 0 订阅
6 篇文章 0 订阅

MDK中寄存器地址名称映射分析

对MCU而言, 一切得底层配置,都是配置寄存器.
用户想直接把某一个电路给断开那是不可能得,只能是配置寄存器. 它给你提供一个寄存器配置, 让某一个点断开,
调用库函数也是操作相关寄存器, 我们得位操作也是操作相关寄存器.

51中映射方法
sft P0 = 0x80; //P0映射到地址 0x80
P0 = 0x00 //往寄存器地址 0x80赋值 0x00

STM32的操作
GPIOA->ODR = 0x00000000
值0x00000000是怎么赋值给了 GPIOA的ODR寄存器地址的呢 ?
也就是说GPIOA->ODR 这种写法,是怎么与GPIOA的ODR寄存器地址映射起来的 ?

我们可以先看源代码 在stm32f10x.h 里面
在这里插入图片描述
是怎么跟名称映射的 ? 我们要找到GPIOA的基地址, GPIOA下的寄存器就是以这个基地址为开头加上他们的偏移.
GPIOA的基地址是怎么来的呢 ? 是挂载一个总线,例如 挂载在APB2总线之下 , 它是由APB2总线的外设的基地址加上GPIOA 与 APB2基地址的一个偏移值, 这些值都是常量, 那这个APB2的外设的基地址它又是怎么来的呢 ? 它又是根据总外设基地址这样一个比较顶级的基地址, 然后加上 APB2 偏移的值, 就是APB2的地址, APB2的基地址 加上GPIOA偏移的值就说GPIOA的基地址, 然后再找到 GPIOA底下寄存器的地址,
在这里插入图片描述
把它强转为一个结构体是什么概念呢 ?
就是以GPIOA的基地址为首地址, 它把下面的存储区 直接强转成GPIO_TypeDef 这个结构体, 也就是说它的数据组织将会按照 结构体这样的方式来组织, 所以它会按顺序存放.
第一个 CRL 占四个字节, 32个比特位,
第二个 CRH 占四个字节, 32个比特位
第三个 IDR 占四个字节, 32个比特位
第四个 ODR 占四个字节, 32个比特位

MDK 就是通过这样的方法, 把地址跟 寄存器映射起来的,.
像RCC 结构体也是这样的形式 ,等等 其他结构体, 映射方式都是一样的,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值