美文网首页
STM32存储器映射

STM32存储器映射

作者: Eugene_iOS | 来源:发表于2023-09-29 16:22 被阅读0次

嵌入式学习 - ARM体系结构
嵌入式学习 - STM32存储器映射
嵌入式学习 - STM32F4启动分析

STM32, 从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器

STM32产品命名规范

STM32的应用

STM32的应用于可穿戴、物联网、无人机、工业控制、医疗电子、汽车电子、电力系统、石油系统、燃气系统 ...等等领域。


STM32产品介绍

STM32F4体系架构

STM32F407采用的是Cortex-M4内核,内核即CPU,由ARM公司设计。ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale, 负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设SoC。如GPIO、USART(串口)、I2C、SP等都叫做片上外设。

STM32F4存储器映射

32位系统下,每个进程的寻址范围是4G,即0x00 00 00 00 ~ 0xff ff ff ff
SoC上被控单元的FLASH, RAM和各类片上外设,这些功能部件的内存空间,共同排列在一个4GB的地址空间内,每个外设都有自己独有地址。我们在编程的时候,可以通过他们的地址找到这些外设,然后来操作他们;

存储器本身没有地址,给存储器分配地址的过程叫存储器映射;如果给存储器再分配一个地址就叫存储器重映射存储器映射就是为物理内存按一定编码规则分配地址的行为。

在下图Memory Map中的 8 个Block 里面,有 3 个块非常重要,也是我们最关心的三个块。 Block0用来设计成内部 FLASHBlock1用来设计成内部 RAMBlock2用来设计成片上的外设

STM32F4寄存器映射

寄存器映射基础上,给有特定功能的内存单元(外设)取别名的过程就叫寄存器映射

STM32F4为例,在存储器片上外设区域(存储器功能分类中Block2),内部以4字节为一个单元,每个单元对应不同的功能,且有对应的起始地址

操作硬件本质上就是操作寄存器。我们操作这些有特定功能的内存单元就可以控制外设工作;即找到特定功能单元的起始地址,通过C语言指针操作外设内存单元,从而实现对外设的控制

为了更便捷直接的访问每个内存单元的起始地址,我们根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射

STM32F4寄存器的访问

以访问GPIOA寄存器组、读写ORD寄存器为例,可在下图中文参考文档STM32F4xx 寄存器边界地址(续)了解到GPIOA 端口置位/复位功能的起始地址为:0x4002 0000

STM32F4xx中文参考手册.存储器映射
GPIOA各寄存器的偏移地址

MODER; //Address offset:0x00
OTYPER; //Address offset:0x04
OSPEEDR; //Address offset:0x08
PUPDR; //Address offset:0xOC
IDR; //Address offset:0x10
ODR; //Address offset:0x14
BSRR; //Address offset:0x18
LCKR; //Address offset:0x1C
:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能(STM32F4xx中文参考手册-GPIO)

读、写ORD寄存器
//对地址进行宏定义
#define GPIOA_BASE (unsigned int 0x40020000)
#define GPIOA_ODR  (GPIOA_BASE +0x14)
//读操作
val = *(unsigned int *)GPIOA_ODR;
//写操作
*(unsigned int *)GPIOA_ODR = val;

//改进
#define GPIOA_ODR (*(unsigned int *)GPIOA_BASE + 0x14 )
val = GPIOA_ODR; //读
GPIO_ ODR=val; //写
/* 用结构体封装寄存器
根据每一类外设对应的寄存器组地址都是连续增长的特点,引入C语言中的结构体语法对寄存器进行封装。
我们访问GPIOA的控制寄存器组时,直接使用宏定义好GPIO_TypeDef类型的指针,指针指向GPIOA端口的首地址,这样我们直接用宏GPIOA访问该外设的任意一个寄存器。
注:“stm32f407xx.h”已经封装了所有的外设访问

// -- 寄存器的访问 --
GPIOA->MODER = 0x20;
GPIOA->OSPEEDR = 0x16; 
*/
typedef struct {
uint32_t        MODER;      /*Address offset: 0x00 */
uint32_t        OTYPER;     /*Address offset: 0x04 */
uint32_t        OSPEEDR;    /*Address offset: 0x08 */
uint32_t        PUPDR;      /*Address offset: 0x0C */
uint32_t        IDR;        /*Address offset: 0x10 */
uint32_t        ODR;        /*Address offset: 0x14 */
uint32_t        BSRR;       /*Address offset: 0x18 */
uint32_t        LCKR;       /*Address offset: 0x1C */
} GPIO_TypeDef;

#define     GPIOA_BASE        ( (unsigned int ) 0x40020000 )
#define     GPIOA    ((GPIO_TypeDef *) GPIOA_BASE)

写在最后:

STM32开发环境搭建、存储器映射、启动流程分析
STM32寄存器映射
STM32 F4 存储结构
玩转STM32(13)存储空间的开始地址

STM32F4x7-Datasheet.pdf
STM32F4xx中文参考手册.pdf
STM32F407IGT核心板原理图.pdf

相关文章

  • 嵌入式:STM32

    STM32 启动流程是怎样的? 根据启动模式,从不同的存储器加载程序运行。STM32的启动代码在startup_s...

  • SDRAM使用总结

    最近stm32学到使用SDRAM了,板载SDRAM为IS42S16400J。 SDRAM为一种可以运行存储在存储器...

  • STM32学习:存储器与寄存器

    一、寄存器及寄存器映射 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器...

  • 一.NIO背景知识

    一.虚拟内存 MMU:它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为...

  • STM32F103学习笔记(3)——读写内部Flash

    一、简介 在STM32芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下...

  • STM32CubeMX学习笔记(51)——读写内部Flash

    一、简介 在STM32芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下...

  • STM32F103C8/BT6最小系统原理图、PCB

    STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量...

  • 基础知识

    存储器 Cortex‐M3 32位处理器,可寻址空间大小为 4GB,被划分为若干区域。 STM32的位段、位带别名...

  • STM32-SPI的理解

    STM32在芯片内部已经集成了SPI接口,用户只需配置SPI并复用映射到相应的IO口就行。 一、SPI的特点: ...

  • STM32简介

    STM32简介 STM32简介STM32是什么?STM32与ARM的关系STM32F407Z76介绍STM32能做...

网友评论

      本文标题:STM32存储器映射

      本文链接:https://www.haomeiwen.com/subject/mjprbdtx.html