mk_欣驰 发表于 2014-9-8 21:48:18

【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










jianhong_wu 发表于 2014-9-9 06:00:58

很好,感谢分享。
页: [1]
查看完整版本: 【mk_欣驰】STM32学习笔记—地址映射以及位绑定