[STM32F1] STM32f1内存映射问题

[复制链接]
3330|52
 楼主| 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空间

暖了夏天蓝了海 发表于 2024-10-4 15:00 | 显示全部楼层
位带区的目的是通过位带别名区来实现对位带区中某个位的直接操作。例如,如果你想操作0x4000 0000地址处的某个位,可以通过位带别名区中的相应地址来实现。

远山寻你 发表于 2024-10-4 16:00 | 显示全部楼层
STM32F10x系列微控制器中,0x4000 0000地址开始的区域用于APB1总线上的外设寄存器。这些寄存器用于控制和配置APB1总线上的外设,如定时器、USARTSPI等。

淡漠安然 发表于 2024-10-4 18:00 | 显示全部楼层
位带区:用于实现对内存中某个位的原子操作。APB1寄存器:用于控制和配置APB1总线上的外设。

光辉梦境 发表于 2024-10-4 19:00 | 显示全部楼层
在实际编程中,你可以通过以下方式理解这两者之间的关系:如果你想使用位带区来操作某个外设寄存器的某个位,可以通过位带别名区来实现

一秒落纱 发表于 2024-10-4 20:00 | 显示全部楼层
4.2 APB1寄存器的使用。如果你想直接操作APB1总线上的外设寄存器,可以直接访问0x4000 0000开始的地址空间。例如,如果你想配置某个外设的寄存器,可以直接读写相应的地址

夜阑风雨 发表于 2024-10-4 21:00 | 显示全部楼层
STM32F10x系列微控制器中,0x4000 0000地址开始的区域既用于位带区,也用于APB1总线上的外设寄存器。

三生万物 发表于 2024-10-4 22:00 | 显示全部楼层
其实,位带区用于实现对内存中某个位的原子操作,而APB1寄存器用于控制和配置APB1总线上的外设。通过位带别名区,你可以实现对位带区中某个位的直接操作。

phoenixwhite 发表于 2024-10-11 21:45 | 显示全部楼层
Cortex-M3内核的编程手册中提到0x4000 0000到0x400F FFFF的1M空间可以用作位带区(Bit-Banding Region)
cemaj 发表于 2024-10-12 07:43 | 显示全部楼层
APB1寄存器映射:这是STM32F10x微控制器特有的外设寄存器映射,它定义了如何通过特定的地址访问外设的寄存器。
位带区:这是Cortex-M3处理器架构的一部分,它定义了一个特殊的内存区域,用于高效地进行位操作。
Stahan 发表于 2024-10-13 20:04 | 显示全部楼层
位带区是不是把一个字节当作一位用啊
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;
loutin 发表于 2024-10-14 15:38 | 显示全部楼层
APB1外设寄存器和位带区虽然共享相同的地址范围,但它们是内存映射的不同部分,用于不同的目的。
当访问APB1外设寄存器时,实际上是在操作外设的控制和数据寄存器。
当访问位带区时,实际上是在操作位带映射的内存区域。
abotomson 发表于 2024-10-14 21:26 | 显示全部楼层
STM32F10x系列的外设寄存器被映射到从0x4000 0000开始的地址空间中。每个外设都有自己的地址范围,例如GPIO、USART、ADC等,它们的控制寄存器、状态寄存器等都位于这个地址空间内。
adolphcocker 发表于 2024-10-15 14:19 | 显示全部楼层
STM32F10x参考手册中的APB2总线寄存器和Cortex M3编程手册中的位带区实际上是同一个物理地址空间的不同表述方式。
pmp 发表于 2024-10-16 10:10 | 显示全部楼层
位带区是一种特殊的内存区域,它可以将某些内存地址映射到另一个地址空间,以便更容易地进行位操作。
maqianqu 发表于 2024-10-16 12:29 | 显示全部楼层
位带区是Cortex-M3处理器的一个特殊功能,它允许对内存中的特定位进行原子操作,而不需要读取或修改整个字或字节。这在处理位标志或位掩码时非常有用,因为它可以减少对共享资源的锁定需求,从而提高效率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

605

主题

3747

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部