定义结构体变量指针
固件库编程雏形
以STM32中点亮LED灯为例
//外设总线基地址
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB1_PERIPH_BASE (PERIPH_BASE)
#define APB2_PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHB_PERIPH_BASE (PERIPH_BASE + 0x20000)
//外设基地址
#define RCC_BASE (AHB_PERIPH_BASE + 0x1000)
#define GPIOB_BASE (APB2_PERIPH_BASE + 0x0C00)
#define GPIOE_BASE (APB2_PERIPH_BASE + 0x1800)
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
重点
//定义结构体
typedef struct
{
uint32_t CRL;
uint32_t CRH;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t BRR;
}GPIO_TypeDef;
//强制类型转换
#define GPIOB ( (GPIO_TypeDef*)GPIOB_BASE ) //强制转换成结 构类型指针
将GPIO_BASE基地址转换成GPIO_TypeDef结构体指针
这样的话指针可以指向结构体的任一成员。
例如:
GPIOB->CRL
GPIOB->ODR
注:GPIOB已经定义宏了