STM32学习笔记——寄存器映射

    技术2025-05-19  42

    STM32学习笔记——寄存器映射

    存储器映射GPIOB端口寄存器描述——使PB0输出0/1宏定义方式结构体封装

    存储器映射

    总线基地址 总线名称总线基地址APB10x4000 0000APB20x4001 0000AHB0x4000 8000 GPIO基地址

    GPIO端口挂在总线APB2上

    端口名称端口基地址GPIOA0x4001 0800GPIOB0x4001 0C00GPIOC0x4001 1000GPIOD0x4001 1400GPIOE0x4001 1800GPIOF0x4001 1C00GPIOG0x4001 2000

    每个端口的基地址相差0x400

    GPIOx端口的寄存器列表

    以GPIOB端口为例

    寄存器名称寄存器基地址偏移地址GPIOB_CRL0x4001 0C000x00GPIOB_CRH0x4001 0C000x04GPIOB_IDR0x4001 0C000x08GPIOB_ODR0x4001 0C000x0CGPIOB_BSRR0x4001 0C000x10GPIOB_BRR0x4001 0C000x14GPIOB_LCKR0x4001 0C000x18

    每个寄存器地址相差0x04

    GPIOB端口寄存器描述——使PB0输出0/1

    宏定义方式

    #define PERIPH_BASE ((unsigned int)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) #define GPIO_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIO_ODR *(unisgned int*)(GPIO_BASE + 0x0C) //PB0输出低电平 GPIO_ODR &= ~(1<<0); //PB0输出高电平 GPIO_ODR |= (1<<0)

    (GPIO_BASE + 0x0C)对应GPIO_ODR寄存器地址 (unsigned int*) 将(GPIO_BASE + 0x0C)强制转化为指针 (*)指针操作,指向GPIO_ODR地址

    结构体封装

    typedef unsigned int uint32_t; /*无符号32位变量*/ typedef unsigned short int uint16_t; /*无符号16位变量*/ /*GPIO寄存器列表*/ typedef struct{ uint32_t CRL; /*地址偏移0x00*/ uint32_t CRH; /*地址偏移0x04*/ uint32_t IDR; /*地址偏移0x08*/ uint32_t ODR; /*地址偏移0x0C*/ uint32_t BSRR; /*地址偏移0x10*/ uint32_t BRR; /*地址偏移0x14*/ uint32_t LCKR; /*地址偏移0x18*/ }GPIO_TypeDef; GPIO_TypeDef* GPIOx; GPIOx = GPIO_BASE; GPIO->ODR = 0xFFFFE;
    Processed: 0.011, SQL: 9