C语言,关于STM32库函数指针定义问题. #define USART1 ((USART_TypeDef *) USART1_BASE) 是怎么回事?

2019-07-21 03:56发布

[mw_shl_code=c,true]#define USART1 ((USART_TypeDef *) USART1_BASE) #define USART1_BASE (APB2PERIPH_BASE + 0x1000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) #define PERIPH_BASE ((uint32_t)0x40000000) typedef struct { __IO uint16_t SR; /*!< USART Status register, Address offset: 0x00 */ uint16_t RESERVED0; /*!< Reserved, 0x02 */ __IO uint16_t DR; /*!< USART Data register, Address offset: 0x04 */ uint16_t RESERVED1; /*!< Reserved, 0x06 */ __IO uint16_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ uint16_t RESERVED2; /*!< Reserved, 0x0A */ __IO uint16_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ uint16_t RESERVED3; /*!< Reserved, 0x0E */ __IO uint16_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ uint16_t RESERVED4; /*!< Reserved, 0x12 */ __IO uint16_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ uint16_t RESERVED5; /*!< Reserved, 0x16 */ __IO uint16_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ uint16_t RESERVED6; /*!< Reserved, 0x1A */ } USART_TypeDef; [/mw_shl_code] 这段代码是库文件的一个 USART1 的定义,我能看明白  USART1 是一个 USART_TypeDef *类型的指针,但是不明白整个定义是什么意思。
USART_TypeDef *) ( 0x40000000 + 0x00010000 + 0x1000 )是定义一个USART_TypeDef *指针,但是后面跟着一个地址是干嘛的?
结构体指针定义可以直接跟地址?地址应该是一个常量,定义不是应该跟一个变量吗?比如 int a ;     不能是int 5;这样吧。

请问给位高手能否给小弟指点一下迷津?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。