Stm32中宏定义是什么意思呢

问题描述:

Stm32中宏定义是什么意思呢
#ifndef DEBUG
#ifdef _TIM2
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)
#endif /*_TIM2 */
typedef struct
{
vu16 CR1;
u16 RESERVED0;
vu16 CR2;
u16 RESERVED1;
vu16 SMCR;
u16 RESERVED2;
vu16 DIER;
u16 RESERVED3;
vu16 SR;
u16 RESERVED4;
vu16 EGR;
u16 RESERVED5;
vu16 CCMR1;
u16 RESERVED6;
vu16 CCMR2;
u16 RESERVED7;
vu16 CCER;
u16 RESERVED8;
vu16 CNT;
u16 RESERVED9;
vu16 PSC;
u16 RESERVED10;
vu16 ARR;
u16 RESERVED11;
vu16 RCR;
u16 RESERVED12;
vu16 CCR1;
u16 RESERVED13;
vu16 CCR2;
u16 RESERVED14;
vu16 CCR3;
u16 RESERVED15;
vu16 CCR4;
u16 RESERVED16;
vu16 BDTR;
u16 RESERVED17;
vu16 DCR;
u16 RESERVED18;
vu16 DMAR;
u16 RESERVED19;
} TIM_TypeDef;
1个回答 分类:综合 2014-12-06

问题解答:

我来补答
TIM2_BASE 是地址
TIM_TypeDef 是结构体
((TIM_TypeDef *) TIM2_BASE) 把一个地址强制转换为结构体类型.
再问: 意思是说把这个地址强制变成,这个结构体指针变量的地址 ,是吗这样做有什么意义呢,有什么好处呢 那些地方编程也需要这样做
再答: 对的。这样做对寄存器读写可以直接读写结构体。方便写代码和阅读。 比如: TIM2->CR1 编译器会展开成为((TIM_TypeDef *) TIM2_BASE)->CR1 TIM2->CR1 就是对 TIM2_BASE+CR1偏移量 的地址操作。 这个位置对应TIM2的CR1寄存器。 要给TIM2的CR1寄存器赋值 TIM2->CR1 = XXXX;就可以了。 至于哪些地方都用到这个方法,这个是c语言里的结构体指针操作,看编程需要了。
再问: ((WDT_TypeDef *) WDT_BASE) ,这个语句中,(WDT_TypeDef *)是什么意思了
再答: WDT_TypeDef 是一个结构体类型。(WDT_TypeDef *)就是转换为结构体类型指针啊。 比较常见的例子 :(char *) 将一个地址或者整数转换为char型地址。
 
 
展开全文阅读
剩余:2000