【mk_欣驰】STM32学习笔记—地址映射以及位绑定
本帖最后由 mk_欣驰 于 2014-9-8 22:17 编辑1、片上外设地址 0x40000000~0x5FFFFFFF(512MB)
2、外设基地址 (PERIPH_BASE)
PERIPH_BASE=0x4000 0000
3、总线基地址 (APB2PERIPH_BASE)
总线基地址 = 外设基地址+偏移地址
AHB:AHBPERIPH_BASE = PERIPH_BAS+ 偏移地址 =0x4000 0000+0x1 800= 0x40018000 APB2:APB2PERIPH_BASE= PERIPH_BAS+ 偏移地址 = 0x4000 0000+0x1 0000 = 0x4001 0000
APB1: APB1PERIPH_BASE = PERIPH_BAS+ 偏移地址
=0x4000 0000+0x0 0000 = 0x4000 0000
地址范围 总线 总线基地址总线基地址相对外设基地址
(0x4000 000)的偏移
0x4001 8000-0x5003 FFFF AHB0x40018000 0x1 8000
0x4001 0000 - 0x4001 7FFFAPB2 0x4001 0000 0x1 0000
0x4000 0000 - 0x4000FFFFAPB1 0x4000 0000 0x0 0000
4、寄存器组基地址
寄存器组基地址 = 总线外设的基地址 + 相总线基地址的偏移量
GPIOA端口的寄存器组的基地址: GPIOA_BASE = APB2PERIPH_BASE + 0x0800
=0x4001 0000+0x0800=0x4001 0800
GPIOB端口的寄存器组的基地址:GPIOB_BASE = APB2PERIPH_BASE + 0x0C00
=0x4001 0000+0x0800=0x4001 0C00
GPIOC端口的寄存器组的基地址: GPIOC_BASE = APB2PERIPH_BASE + 0x1000
=0x4001 0000+0x0800=0x4001 1000
.............
5、端口配置寄存器地址
端口配置寄存器地址=寄存器组基地址+偏移地址
(1)端口输入数据寄存器(GPIOx_IDR) (x=A..E)
IDR偏移地址:
IDR0~7偏移地址=0X08
IDR8~15偏移地址=0X09
IDR16~23偏移地址=0X0A
IDR24~31偏移地址=0X0B
GPIOA端口输入数据寄存器: GPIOA_IDR = GPIOA_BASE + 0x08/0x09/0x0A/0x0B
=0x4001 0800+0x08/0x09/0x0A/0x0B
=0x4001 0808/9/A/B
GPIOB端口输入数据寄存器: GPIOB_IDR = GPIOB_BASE + 0x08/0x09/0x0A/0x0B
=0x4001 0C00+0x08/0x09/0x0A/0x0B
=0x4001 0C08/9/A/B
GPIOC端口输入数据寄存器: GPIOC_IDR = GPIOC_BASE + 0x08/0x09/0x0A/0x0B
=0x4001 1000+0x08/0x09/0x0A/0x0B
=0x4001 1008/9/A/B
.............
(2)端口输出数据寄存器(GPIOx_ODR) (x=A..E)
ODR偏移地址:
ODR0~7偏移地址=0X0C
ODR8~15偏移地址=0X0D
ODR16~23偏移地址=0X0E
ODR24~31偏移地址=0X0F
GPIOA端口输出数据寄存器: GPIOA_ODR = GPIOA_BASE + 0x0C/0x0D/0x0E/0x0F
=0x4001 0800+0x0C/0x0D/0x0E/0x0F
=0x4001 080C/D/E/F
GPIOB端口输出数据寄存器: GPIOB_ODR = GPIOB_BASE + 0x0C/0x0D/0x0E/0x0F
=0x4001 0C00+0x0C/0x0D/0x0E/0x0F
=0x4001 0C0C/D/E/F
GPIOC端口输出数据寄存器: GPIOC_ODR = GPIOC_BASE + 0x0C/0x0D/0x0E/0x0F
=0x4001 1000+0x0C/0x0D/0x0E/0x0F
=0x4001 100C/D/E/F
.............
另附两张表:
新人发帖,难免出错,敬请指教
欢迎各位STM32爱好者一起探讨 ————欣驰 为您奉献 qq2452679951
很好,感谢分享。
页:
[1]