[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;这样吧。
请问给位高手能否给小弟指点一下迷津?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
然后就可以放心的用USART1里面的各个寄存器了。
---------------------------------
那假如我要操纵的地址是 0x00000001; 能不能写成这样
#define name *((u32*)(0x00000001))
name =1;
这个name的指针是什么类型的? U32么
---------------------------------
你这样,name就是个u32,存储在0x00000001地址
一周热门 更多>