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;这样吧。

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



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-21 05:21
就是指将这个地址,强制转换为USART_TypeDef *指针类型,名字为USART1。
然后就可以放心的用USART1里面的各个寄存器了。
jiutianshenjian
2楼-- · 2019-07-21 10:54
 精彩回答 2  元偷偷看……
a751217081
3楼-- · 2019-07-21 15:38
回复【2楼】正点原子:
---------------------------------
那假如我要操纵的地址是 0x00000001;  能不能写成这样
#define  name    *((u32*)(0x00000001))
   name =1;
这个name的指针是什么类型的?  U32么
正点原子
4楼-- · 2019-07-21 20:04
回复【4楼】a751217081:
---------------------------------
你这样,name就是个u32,存储在0x00000001地址

一周热门 更多>