打印

FMC总线扩展32路高速IO理解成GPIO的ODR寄存器就很简单了,其实就是一个东西

[复制链接]
264|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
以我们V7为例,FMC扩展IO是对地址0x60001000的32bit数据空间的0和1的操作。

GPIOA的ODR寄存器是对地址  0x40000000 + 0x18020000 +  0x14 空间的操作,但只能操作16个引脚。

使用总线的优势就在这里了,相当于在GPIOA到GPIOK的基础上,又扩展出GPIOL和GPIOM。



#define PERIPH_BASE                  ((uint32_t)0x40000000)
#define D3_AHB1PERIPH_BASE     (PERIPH_BASE + 0x18020000)
#define GPIOA_BASE                   (D3_AHB1PERIPH_BASE + 0x0000)
#define GPIOA                            ((GPIO_TypeDef *) GPIOA_BASE)

/**
  * @brief General Purpose I/O
  */

typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
  __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;

使用特权

评论回复

相关帖子

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

本版积分规则

437

主题

437

帖子

0

粉丝