1 直接操作寄存器地址
// 打开 GPIOB 端口的时钟
*( unsigned int * )0x40021018 |= ( (1) << 3 );
// 配置IO口为输出
*( unsigned int * )0x40010C00 &= ~( (0x0f) << (4*0) );
*( unsigned int * )0x40010C00 |= ( (1) << (4*0) );
// 控制 ODR 寄存器
*( unsigned int * )0x40010C0C &= ~(1<<0);
2 寄存器映射
// 打开 GPIOB 端口的时钟
RCC_APB2ENR |= ( (1) << 3 );
// 配置IO口为输出
GPIOB_CRL &= ~( (0x0f) << (4*0) );
GPIOB_CRL |= ( (1) << (4*0) );
// 控制 ODR 寄存器
GPIOB_ODR &= ~(1<<0);
//GPIOB_ODR |= (1<<0);
#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 *(unsigned i