学习到自己构建库函数这里
ypedef unsigned int u32;
typedef unsigned short u16;
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define RCC_BASE (AHBPERIPH_BASE +0x1000)
#define GPIOB_BASE ( APB2PERIPH_BASE +0x0C00)
//#define RCC_APB2ENR *(u32*)(RCC_BASE + 0x18)
/*
#define GPIOB_CRL *(u32*)(GPIOB_BASE + 0x00)
#define GPIOB_CRH *(u32*)(GPIOB_BASE + 0x04)
#define GPIOB_ODR *(u32*)(GPIOB_BASE + 0x0C)
*/
typedef struct
{
u32 CRL;
u32 CRH;
u32 IDR;
u32 ODR;
u32 BSRR;
u32 BRR;
u32 LCKR;
} GPIO_TypeDef;
typedef struct
{
u32 CR;
u32 CFGR;
u32 CIR;
u32 APB2RSTR;
u32 APB1RSTR;
u32 AHBENR;
u32 APB2ENR;
u32 APB1ENR;
u32 BDCR;
u32 CSR;
} RCC_TypeDef;
#define GPIOB ((GPIO_TypeDef*)GPIOB_BASE)
#define RCC ((RCC_TypeDef*)RCC_BASE)
结构体里是如何准确找到寄存器的地址的?一直理解不了。
原本以为是结构体里将地址区间等分的,可是把结构体里部分注释掉,还是可以点亮。 |