方式1:
查手册找到相关寄存器的地址,自行编写代码,定义指针指向该地址,并根据需要进行寄存器读写。
举例:
//方式1举例:自定义GPIOB_ODR寄存器
#define GPIOB_ODR (*(volatile unsigned int *)0x40010C0C)//定义寄存器GPIOB_ODR,
GPIOB_ODR &= ~(1uL<<5);//PB5输出低电平,
GPIOB_ODR |= (1uL<<5);//PB5输出高电平。
方式2:
利用厂商写好的宏定义,根据手册中寄存器的命名读写相关寄存器。
具体说明:
由 K e i l M D K 自 动 产 生 的s t m 3 2 f 1 0 x . h 文 件 中 以 宏 定 义 方 式 定 义 了STM32F103ZET6微控制器的各种片内外设的寄存器结构体指针,可以直接使用。
stm32f10x.h定义的GPIO基地址
stm32f10x_gpio.h定义的GPIO结构类型
#define __IO volatile
/* 定义 */
typedef struct
{ __IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
/* 使用 */
GPIO_TypeDef GPIOx;
GPIOx.CRL = 0;
GPIO_TypeDef * GPIOx;
GPIOx->CRL = 0;