为什么stm32宏定义的结构体成员是16位的?

2019-07-14 19:22发布

本帖最后由 Mrcharacter 于 2017-8-1 23:25 编辑

大家都知道STM32的库里的寄存器是用结构体来对应的,比如
定义USART1_BASE对应USART的外设地址
#define USART1_BASE           (APB2PERIPH_BASE + 0x3800)
然后强制转换为USART_TypeDef*类型
#define USART1              ((USART_TypeDef *) USART1_BASE)
这样这个指针指向的地址就可以作为一个结构体来使用,结构体成员地址对应寄存器地址,修改结构体成员就是修改寄存器。定义在下面,但是我疑惑的是为什么要把结构体成员定义为16位的,这样还要定义一个无意义的RESERVEDx来占位。为什么不直接定义为32位的呢?比如定义为__IO uint32_t SR;__IO uint32_t DR;...亲测强制转换为32位的可以使用。
顺便问一下这些定义的RESERVEDx会不会被优化掉?会不会占程序存储器空间?
typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。