打印
[STM32F1]

STM32f1内存映射问题

[复制链接]
1064|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stormwind123|  楼主 | 2024-8-16 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32F10x参考手册中,0X4000 0000地址开始是用作APH1的寄存器,而在Cortex M3编程手册中0X4000 0000-0X400F FFFF的1M空间用作位带区,这两者之间怎么去理解?

使用特权

评论回复
沙发
工程师犹饿死| | 2024-8-28 19:01 | 只看该作者
其地址空间的划分和访问方式可能会造成一些混淆。

使用特权

评论回复
板凳
别乱了阵脚| | 2024-10-4 09:42 | 只看该作者
在STM32F10x系列微控制器中,0x4000 0000地址开始的区域确实用于APB1总线上的外设寄存器,而Cortex-M3架构中,0x4000 0000到0x400F FFFF的1MB空间被定义为位带区(Bit-Band Region)

使用特权

评论回复
地板
江河千里| | 2024-10-4 14:00 | 只看该作者
位带区是Cortex-M3架构中的一个特性,用于实现对内存中某个位的原子操作。位带区包括两个部分:位带区(Bit-Band Region):0x4000 00000x400F FFFF1MB空间。位带别名区(Bit-Band Alias Region):0x4200 00000x43FF FFFF32MB空间

使用特权

评论回复
5
暖了夏天蓝了海| | 2024-10-4 15:00 | 只看该作者
位带区的目的是通过位带别名区来实现对位带区中某个位的直接操作。例如,如果你想操作0x4000 0000地址处的某个位,可以通过位带别名区中的相应地址来实现。

使用特权

评论回复
6
远山寻你| | 2024-10-4 16:00 | 只看该作者
STM32F10x系列微控制器中,0x4000 0000地址开始的区域用于APB1总线上的外设寄存器。这些寄存器用于控制和配置APB1总线上的外设,如定时器、USARTSPI等。

使用特权

评论回复
7
淡漠安然| | 2024-10-4 18:00 | 只看该作者
位带区:用于实现对内存中某个位的原子操作。APB1寄存器:用于控制和配置APB1总线上的外设。

使用特权

评论回复
8
光辉梦境| | 2024-10-4 19:00 | 只看该作者
在实际编程中,你可以通过以下方式理解这两者之间的关系:如果你想使用位带区来操作某个外设寄存器的某个位,可以通过位带别名区来实现

使用特权

评论回复
9
一秒落纱| | 2024-10-4 20:00 | 只看该作者
4.2 APB1寄存器的使用。如果你想直接操作APB1总线上的外设寄存器,可以直接访问0x4000 0000开始的地址空间。例如,如果你想配置某个外设的寄存器,可以直接读写相应的地址

使用特权

评论回复
10
夜阑风雨| | 2024-10-4 21:00 | 只看该作者
STM32F10x系列微控制器中,0x4000 0000地址开始的区域既用于位带区,也用于APB1总线上的外设寄存器。

使用特权

评论回复
11
三生万物| | 2024-10-4 22:00 | 只看该作者
其实,位带区用于实现对内存中某个位的原子操作,而APB1寄存器用于控制和配置APB1总线上的外设。通过位带别名区,你可以实现对位带区中某个位的直接操作。

使用特权

评论回复
12
phoenixwhite| | 2024-10-11 21:45 | 只看该作者
Cortex-M3内核的编程手册中提到0x4000 0000到0x400F FFFF的1M空间可以用作位带区(Bit-Banding Region)

使用特权

评论回复
13
cemaj| | 2024-10-12 07:43 | 只看该作者
APB1寄存器映射:这是STM32F10x微控制器特有的外设寄存器映射,它定义了如何通过特定的地址访问外设的寄存器。
位带区:这是Cortex-M3处理器架构的一部分,它定义了一个特殊的内存区域,用于高效地进行位操作。

使用特权

评论回复
14
Stahan| | 2024-10-13 20:04 | 只看该作者
位带区是不是把一个字节当作一位用啊

使用特权

评论回复
15
febgxu| | 2024-10-14 11:57 | 只看该作者
假设你要设置GPIOA的第0位(PA0),可以使用以下代码:


#define GPIOA_BASE 0x4001 0800
#define BIT_BAND_ADDR(base, bit) ((0x4000 0000 + (base << 5) + (bit << 2)))

// 设置PA0
*(volatile uint32_t *)BIT_BAND_ADDR(GPIOA_BASE, 0) = 1;

// 清除PA0
*(volatile uint32_t *)BIT_BAND_ADDR(GPIOA_BASE, 0) = 0;

使用特权

评论回复
16
loutin| | 2024-10-14 15:38 | 只看该作者
APB1外设寄存器和位带区虽然共享相同的地址范围,但它们是内存映射的不同部分,用于不同的目的。
当访问APB1外设寄存器时,实际上是在操作外设的控制和数据寄存器。
当访问位带区时,实际上是在操作位带映射的内存区域。

使用特权

评论回复
17
abotomson| | 2024-10-14 21:26 | 只看该作者
STM32F10x系列的外设寄存器被映射到从0x4000 0000开始的地址空间中。每个外设都有自己的地址范围,例如GPIO、USART、ADC等,它们的控制寄存器、状态寄存器等都位于这个地址空间内。

使用特权

评论回复
18
adolphcocker| | 2024-10-15 14:19 | 只看该作者
STM32F10x参考手册中的APB2总线寄存器和Cortex M3编程手册中的位带区实际上是同一个物理地址空间的不同表述方式。

使用特权

评论回复
19
pmp| | 2024-10-16 10:10 | 只看该作者
位带区是一种特殊的内存区域,它可以将某些内存地址映射到另一个地址空间,以便更容易地进行位操作。

使用特权

评论回复
20
maqianqu| | 2024-10-16 12:29 | 只看该作者
位带区是Cortex-M3处理器的一个特殊功能,它允许对内存中的特定位进行原子操作,而不需要读取或修改整个字或字节。这在处理位标志或位掩码时非常有用,因为它可以减少对共享资源的锁定需求,从而提高效率。

使用特权

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

本版积分规则

431

主题

2236

帖子

3

粉丝