OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3775|回复: 5

关于寄存器映射的知识想请教大家

[复制链接]

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2021-12-27
在线时间
17 小时
发表于 2022-4-9 17:27:46 | 显示全部楼层 |阅读模式
1金钱
各位朋友,我在看F4的中文参考手册2.33 位段 部分的时候,关于下面这个映射
“Cortex™-M4F 存储器映射包括两个位段区域。这些区域将存储器别名区域中的每个字映射到存储器位段区域中的相应位。在别名区域写入字时,相当于对位段区域的目标位执行读-修
改-写操作。
在 STM32F4xx 器件中,外设寄存器和 SRAM 均映射到一个位段区域,这样可实现单个位段的读写操作。这些操作仅适用于 Cortex™-M4F 访问,对于其它总线主接口(如 DMA)无效。
可通过一个映射公式说明别名区域中的每个字与位段区域中各个位之间的对应关系。映射公式为:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)

其中:
— bit_word_addr 代表别名区域中将映射到目标位的字的地址
— bit_band_base 代表别名区域的起始地址
— byte_offset 代表目标位所在位段区域中的字节编号
— bit_number 代表目标位的位位置 (0-7)”


下例说明如何将 SRAM 地址 0x20000300 处字节的位 2 映射到别名区域:
0x22006008 = 0x22000000 + (0x300*32) + (2*4)



他给出的这个示例应该怎么理解啊?谢谢大家!


最佳答案

查看完整内容[请看2#楼]

首先位段这个操作其实就是为了给32单片机保留下51的位操作而已.在32位的单片机中,基本上都是32位或者16位或者8位一起操作的. 总结起来,用处不大. 至于你说的不相等问题,你在按计算器时把数的类型看清楚啊 0x22006008 = 0x22000000 + (0x300*32) + (2*4) 0x300(十六进制)*32(十进制)=0x6000(十六进制) 2*4=8,全部十进制 全部变成十六进制应该是这样的:0x22006008 = 0x22000000 + (0x300*0x20) + (0x2*0x4)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3345
金钱
3345
注册时间
2013-5-28
在线时间
468 小时
发表于 2022-4-9 17:27:47 | 显示全部楼层
首先位段这个操作其实就是为了给32单片机保留下51的位操作而已.在32位的单片机中,基本上都是32位或者16位或者8位一起操作的.
总结起来,用处不大.
至于你说的不相等问题,你在按计算器时把数的类型看清楚啊
0x22006008 = 0x22000000 + (0x300*32) + (2*4)
0x300(十六进制)*32(十进制)=0x6000(十六进制)
2*4=8,全部十进制
全部变成十六进制应该是这样的:0x22006008 = 0x22000000 + (0x300*0x20) + (0x2*0x4)
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2022-4-10 22:51:46 | 显示全部楼层
详细的可以百度学习下,但是不建议折腾, 用处不大。
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4734
金钱
4734
注册时间
2015-1-10
在线时间
591 小时
发表于 2022-4-11 13:44:39 | 显示全部楼层
基地址+偏移量+偏移量 = 实际地址,操作外设寄存器的时候常用,操作RAM的话一般需要固定数据位置的时候才用
回复

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2021-12-27
在线时间
17 小时
 楼主| 发表于 2022-4-12 10:52:39 | 显示全部楼层
阿侑kevin 发表于 2022-4-11 13:44
基地址+偏移量+偏移量 = 实际地址,操作外设寄存器的时候常用,操作RAM的话一般需要固定数据位置的时候才用

那您能帮我看看,上面的例子是怎么计算出来的吗?我加和的结果 左右也不相等啊,
回复

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2021-12-27
在线时间
17 小时
 楼主| 发表于 2022-4-13 09:12:57 | 显示全部楼层
聚东风 发表于 2022-4-12 11:18
首先位段这个操作其实就是为了给32单片机保留下51的位操作而已.在32位的单片机中,基本上都是32位或者16位或 ...

感谢感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表