本帖最后由 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;
一周热门 更多>