发新帖我要提问
123
返回列表
打印
[STM32F1]

STM32f1内存映射问题

[复制链接]
楼主: stormwind123
手机看帖
扫描二维码
随时随地手机跟帖
41
sanfuzi| | 2024-10-25 14:12 | 只看该作者 回帖奖励 |倒序浏览
当访问这个别名地址空间时,Cortex-M3内核会自动将访问转换为对原始地址空间中相应比特位的读写操作。
这使得开发者可以方便地操作内存中的单个比特位,而无需使用繁琐的位掩码和位移操作。

使用特权

评论回复
42
公羊子丹| | 2025-1-25 08:39 | 只看该作者
0x40000000既是外设寄存器的起始地址,也是位带区的基地址,位带操作本质上是对这个区域的特殊访问方式。

使用特权

评论回复
43
周半梅| | 2025-1-25 08:40 | 只看该作者
位带区其实是Cortex-M3的特性,它通过一个映射机制,把外设寄存器的每个位单独映射到另一个地址空间。

使用特权

评论回复
44
帛灿灿| | 2025-1-25 08:42 | 只看该作者
你可以把位带区看成是“快捷方式”,直接操作某个位,而不用去读改写整个寄存器。

使用特权

评论回复
45
童雨竹| | 2025-1-25 08:43 | 只看该作者
0x40000000到0x400FFFFF这1M的外设寄存器区,每一位都通过位带映射到了0x42000000开始的位带别名区。

使用特权

评论回复
46
万图| | 2025-1-25 08:44 | 只看该作者
如果你想直接用位带操作某个寄存器位,可以用位带别名区的地址,这样会方便不少。

使用特权

评论回复
47
Wordsworth| | 2025-1-25 08:46 | 只看该作者
位带机制对效率其实没啥提升,但对代码可读性和位操作简化很有帮助。

使用特权

评论回复
48
Bblythe| | 2025-1-25 08:47 | 只看该作者
位带操作有时候比直接操作寄存器麻烦,因为需要手动计算别名地址,ST的库函数里一般很少用到。

使用特权

评论回复
49
Pulitzer| | 2025-1-25 08:48 | 只看该作者
如果不需要频繁操作单个位,其实直接用寄存器位掩码来读写就足够了,位带更适合特定场景。

使用特权

评论回复
50
Uriah| | 2025-1-25 08:49 | 只看该作者
Cortex-M3的这个位带特性是硬件实现的,STM32只是借用了这个机制,所以参考手册里没详细讲位带的内容。

使用特权

评论回复
51
Clyde011| | 2025-1-25 08:50 | 只看该作者
如果觉得难理解,可以找个位带别名地址的计算公式,再对比看看具体地址怎么映射的,思路会清晰很多。

使用特权

评论回复
52
PreWorld| | 2025-1-26 23:08 | 只看该作者
我们实际上利用了cortex-m3内核提供的这种特殊的内存映射机制,使我们更容易执行位操作。

使用特权

评论回复
53
理想阳| | 2025-1-27 14:51 | 只看该作者
在stm32f10x中,实现了位绑定功能,以优化特定存储区域的位操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则