第5章 什么是寄存器

本文深入讲解了STM32中的寄存器概念,以及芯片的内部结构,包括内核、片上外设、存储器映射和寄存器映射。通过学习,了解到寄存器是控制STM32外设工作的关键,并探讨了如何使用C语言封装寄存器地址,便于理解和操作。此外,文章还介绍了如何通过位操作修改寄存器的特定位,实现对STM32功能的精细控制。
摘要由CSDN通过智能技术生成

本章参考资料:《STM32F76xxx参考手册》、《STM32F76xxx数据手册》、学习本章时,配合《STM32F76xxx参考手册》“存储器和总线架构”、“嵌入式FLASH接口”及“通用I/O(GPIO)”章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。

5.1  什么是寄存器

我们经常说寄存器,那么什么是寄存器?这是我们本章需要讲解的内容,在学习的过程中,大家带着这个疑问好好思考下,到最后看看大家能否用一句话给寄存器下一个定义。

5.2  STM32长啥样

我们开发板中使用的芯片是176pinSTM32F767IGT6,具体见 51。这个就是我们接下来要学习的STM32,它讲带领我们进入嵌入式的殿堂。

芯片正面是丝印,ARM应该是表示该芯片使用的是ARM的内核,STM32F767IGT6是芯片型号,后面的字应该是跟生产批次相关,最下面的是STLOGO

芯片四周是引脚,左下角的小圆点表示1脚,然后从1脚起按照逆时针的顺序排列(所有芯片的引脚顺序都是逆时针排列的)。开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作,通过做实验的方式来学习STM32芯片的各个资源。开发板是一种评估板,板载资源非常丰富,引脚复用比较多,力求在一个板子上验证芯片的全部功能。 

                             

5-1 STM32F767IGT6 实物图 


5-2 STM32F767IGT6正面引脚图 

5.3  芯片里面有什么

我们看到的STM32芯片已经是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU与主板、内存、显卡、硬盘的关系。

STM32F767采用的是Cortex-M7内核,内核即CPU,由ARM公司设计。ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)STTIFreescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIOUSART(串口)、I2CSPI等都叫做片上外设。具体见 5-3。

 

5-3 STM32芯片架构简图

芯片主系统架构基于两个子系统,一个是AXI转多层AHB桥,多层AHB总线矩阵。

AXI转多层AHB桥,从AXI4协议转成AHB-Lite协议,其中包含3AXI32-bit AHB桥通过32-bitAHB总线矩阵连接到外部存储器FMC接口、外部存储器Quad SPI接口、内部SRAM(SRAM1 and SRAM2)。还包含一个AXI64-bit AHB桥通过64-bit总线矩阵连接到内部FLASH

多层AHB总线矩阵,其中32-bit多层AHB总线矩阵互联11个主设备和8个从设备,64-bit多层AHB总线矩阵则是CPU通过AXIAHB桥通过这个64-bit多层AHB总线矩阵连接到内部FlashDMA主设备通过32-bit AHB总线矩阵通过这个64-bit多层AHB总线矩阵连接到内部Flash。具体见 54。主控总线通过一个总线矩阵来连接被控总线,总线矩阵用于主控总线之间的访问仲裁管理,仲裁采用循环调度算法。总线之间交叉的时候如果有个圆圈则表示可以通信,没有圆圈则表示不可以通信。

 

5-4 STM32F76xxx STM32F77xxx 器件的总线接口

5.4  存储器映射

54中,连接被控总线的是FLASHRAM和片上外设,这些功能部件共同排列在一个4GB的地址空间内。我们在编程的时候,操作的也正是这些功能部件。

5.4.1  存储器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见 55。如果给存储器再分配一个地址就叫存储器重映射。

 


5-5 存储器映射

1. 存储器区域功能划分

在这4GB的地址空间中,ARM已经粗线条的平均分成了8个块,每块512MB,每个块也都规定了用途,具体分类见表格 5-1。每个块的大小都有512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。

表格 5-1 存储器功能分类

序号

用途

地址范围

Block 0

SRAM

0x0000 0000 ~ 0x1FFF FFFF(512MB)

Block 1

SRAM

0x2000 0000 ~ 0x3FFF FFFF(512MB)

Block 2

片上外设

0x4000 0000 ~ 0x5FFF FFFF(512MB)

Block 3

FMCbank1 ~ bank2

0x6000 0000 ~ 0x7FFF FFFF(512MB)

Block 4

FMCbank3 ~ bank4

0x8000 0000 ~ 0x9FFF FFFF(512MB)

Block 5

FMC

0xA000 0000 ~ 0xCFFF FFFF(512MB)

Block 6

FMC

0xD000 0000 ~ 0xDFFF FFFF(512MB)

Block 7

Cortex-M4内部外设

0xE000 0000 ~ 0xFFFF FFFF(512MB)

在这8Block里面,有3个块非常重要,也是我们最关心的三个块。Boock0用来设计成内部FLASHBlock1用来设计成内部RAMBlock2用来设计成片上的外设,下面我们简单的介绍下这三个Block里面的具体区域的功能划分。

存储器Block0内部区域功能划分

Block0主要用于设计片内的FLASHF429系列片内部FLASH最大是2MB,我们使用的STM32F767IGT6FLASH1MB。要在芯片内部集成更大的FLASH或者SRAM都意味着芯片成本的增加,往往片内集成的FLASH都不会太大,ST能在追求性价比的同时做到1MB以上,实乃良心之举。Block内部区域的功能划分具体见表格 5-2。

表格 5-2 存储器Block0 内部区域功能划分

用途说明

地址范围

Block0

预留

0x1FFF 0020 ~ 0x1FFF FFFF

16个字节用于锁定对应的OTP数据块。

0x1FFF 0000 ~ 0x1FFF 001F

预留

0x0820 0000 ~ 0x1FFE FFFF

FLASH:我们的程序就放在这里。

0x0800 0000 ~ 0x081F FFFF

预留

0x0030 0000 ~ 0x07FF FFFF

FLASH存储基于ITCM总线接口,不支持写操作,即只读。 

0x0020 0000 ~ 0x003F FFFF

预留

0x0011 0000 ~ 0x001F FFFF

系统存储器:里面存的是ST出厂时烧写好的ISP自举程序,用户无法改动。串口下载的时候需要用到这部分程序。

0x0010 0000 ~ 0x0010 EDBF

预留

0x0000 4000 ~ 0x000F FFFF

ITCM RAM,只能被CPU访问,不用经过总线矩阵,属于高速的RAM

0x0000 0000 ~ 0x0000 3FFF

储存器Block1内部区域功能划分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值