马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 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 0000 - 0x4001 7FFF | | | | | | | |
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爱好者一起探讨 ————欣驰 为您奉献 qq 2452679951
|