STM32入门指南:了解寄存器(野火指南者——STM32F103VET6)

stm32第一节:认识寄存器

初识STM32

        STM32芯片架构

                Cortex-M3内核(arm)——(I,S,D)——总线矩阵——外设,Flash,SRAM

                外设——GPIO,USART,12C,SPI……

        Flash及SRAM储存

                Flash——常量

                SRAM——变量

        DMA作用

                DMA解决了数据传输需要经过CPU的问题。使用DMA可以使CPU闲置下来,从而实现                    更高的效率。

寄存器

        储存器分类及其地址(blockx(x=0~7))

                32位操作系统,共为2^32=4GB空间,平均分给8个储存器Block0~7。

                Block 0        Code                                         0x0000 0000 ~ 0x1FFF FFFF(512MB)
                Block 1        SRAM                                       0x2000 0000 ~ 0x3FFF FFFF(512MB)
                Block 2        片上外设                                   0x4000 0000 ~ 0x5FFF FFFF(512MB)
                Block 3        FSMC的bank1 ~ bank2            0x6000 0000 ~ 0x7FFF FFFF(512MB)
                Block 4        FSMC的bank3 ~ bank4            0x8000 0000 ~ 0x9FFF FFFF(512MB)
                Block 5        FSMC寄存器                             0xA000 0000 ~ 0xCFFF FFFF(512MB)
                Block 6        没有使用                                   0xD000 0000 ~ 0xDFFF FFFF(512MB)
                Block 7        Cortex-M3 内部外设                 0xE000 0000 ~ 0xFFFF FFFF(512MB)

        什么是储存器映射

                给储存器分配地址的过程称为储存器映射,再次分配地址叫做重映射。

        什么是寄存器

               给有特定功能的内存单元取一个别名,取其别名为寄存器。

        什么是寄存器映射

                给有特定功能的,已经分配好地址的内存单元取别名的过程就叫寄存器映射。

                eg1:让GPIO端口的16个引脚输出高电平,如何实现?

                        通过绝对地址访问内存单元

                        1        // GPIOB 端口全部输出高电平

                        2        *(unsigned int*)(0x4001 0c0c)=0xFFFF;

                        系统无法识别0x4001 0c0c。要将其转为int类型的指针变量,然后再将指针变量再                          次转化为指针地址。那么,通过51单片机的学习,我们知道,可以使用宏定义对该                          指令进行改进:

                        1        #define        GPIOB_ODR        *(unsigned int*)(0x4001 0c0c)

                        2        GPIOB_ODR =0xFFFF;

STM32寄存器映射

        基线总地址

                APB1        0x4000 0000  相对偏移  0x0

                APB2        0x4001 0000  相对偏移  0x0001 0000

                AHB          0x4001 8000  相对偏移  0x0001 8000

        eg2:GPIO基地址

                外设基地址  0x4000 0000。GPIOx,随着x的增加,就多占用8个字节的空间内存。

                GPIOA        0x4001 0800

                GPIOB        0x4001 0c00

                ……                ……

                GPIOG        0x4001 2000

C语言对寄存器的封装 

        总线和外设基地址宏定义:
        # define    PERIPH_BASE    ((unsigned int) 0x4000 0000)    
        # define    APB1_BASE        PERIPH_BASE    
        #define     APB2_BASE        (PERIPH_BASE+0x0001 0000)    
        #define     AHB_BASE          (PERIPH_BASE+0x0002 0000)

        
        +外设偏移地址       
        +寄存器偏移地址

        PB0输出高低电平:
        GPIOB-ODR&=~(1<<0);        低电平

        GPIOB-ODR |=(1<<0);             高电平

总结

        本节课主要是认识寄存器。包括认识STM32的芯片架构以及各部分之间的作用,包括储存器分类及其地址,储存器的映射及重映射,寄存器的映射,基线总地址,外设基地址及其宏定义以及如何输出高低电平,下节课认识使用结构体封装寄存器列表,还有使用寄存器编写程序。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32入门指南:了解寄存器(野火指南者——STM32F103VET6)

发表评论