ARM微控制器的#define

时间:2017-06-14 06:58:23

标签: c arm

字符串是什么

#define RCC                 ((RCC_TypeDef *) RCC_BASE)

意思?

据我所知,这是指针的定义,RCC_BASE代表uint_32 0x400021000,符合以下几行

#define RCC_BASE              (AHB1PERIPH_BASE + 0x00001000)
#define AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)
#define PERIPH_BASE           ((uint32_t)0x40000000)    

但为什么定义有两种类型:RCC_TypeDef *和uint_32?

2 个答案:

答案 0 :(得分:3)

#define RCC                 ((RCC_TypeDef *) RCC_BASE)

表示类型为RCC_TypeDef *指向的宏,用于在MCU地址空间中寻址RCC_BASE

RCC_BASE是RCC寄存器在MCU地址空间中的地址。

地址本身就是数字,因此前面有(uint32_t)

这种类型的宏允许您使用带指针访问的寄存器

//Read RCC register APB1ENR
uint32_t apb1enr_Reg = RCC->APB1ENR;

答案 1 :(得分:0)

该行:

#define RCC                 ((RCC_TypeDef *) RCC_BASE)

只是显式地将RCC_BASE指向的地址强制转换为指向typedef在其他地方定义的RCC_TYPEDEF的指针。

例如,如果RCC_TYPEDEF定义为long,那么RCC将被定义为:

#define RCC                 ((long *) RCC_BASE)