字符串是什么
#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?
答案 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)