STM32的外设寄存器在哪里?它们是在皮质-m 核心还是在外围单元本身?

Posted

技术标签:

【中文标题】STM32的外设寄存器在哪里?它们是在皮质-m 核心还是在外围单元本身?【英文标题】:Where are the peripherals register in STM32? are they in the cortex-m core or in the peripheral unit itself? 【发布时间】:2020-07-12 00:15:52 【问题描述】:

我有两个问题。 memory region of the cortex-m core cpu 1- stm32 微控制器的内存是在 cortex-m 内核内部还是外部?如果它在 cortex-core 内部,为什么它没有显示在 cortex-m core 通用用户指南的框图中?block diagram of the cortex-m core

2-我正在尝试了解 stm32 架构,但我遇到了歧义。 usart block diagram

正如您在图片中看到的,参考手册说 USART 单元有一些寄存器(即数据寄存器)。 但是这些寄存器也存在于 cortex-m 内核的内存区域中(如果第一个问题的答案是“内部”)。它们到底在哪里?每个寄存器有两个寄存器吗?还是它们位于皮质-m 核心或外围本身? 是否与内存映射 i/o 定义有关?

【问题讨论】:

欢迎来到 ***!请尽量避免同时提出两个问题。见how to ask。 【参考方案1】:

请看下图,它显示了 STM32 Cortex-M4 处理器的框图。 我已经突出显示了 CPU 内核(左上角);以及您可以在微控制器内部找到的其他组件。

CPU“核心”,顾名思义,就是“核心”;但微控制器还集成了闪存、RAM 和许多外围设备;内核之外的几乎所有东西(调试线除外)都通过总线矩阵进行访问,对于 ROM、RAM 和集成外设也是如此。

请注意,“微处理器”和“微控制器”之间的主要区别在于后者具有板载专用外围设备。

STM32设备上的外设是由CPU通过内存映射I/O来访问的,看下图:

如您所见,尽管线性地址空间从 0x00000000 到 0xFFFFFFFF,但地址空间被划分为“段”,例如,程序存储器从 0x00000000 开始,SRAM 从 0x20000000 开始,外围设备从 0x40000000 开始。特定的外设寄存器可以通过与基地址的特定偏移量的指针进行读取/写入。

对于此设备,USARTS 映射到 APB1 区域,因此在地址范围 0x40000000-0x4000A000 中。请注意,实际的外设地址可能因设备而异。

【讨论】:

感谢您的回答【参考方案2】:

外设通过总线连接到核心。地址解码器知道哪个地址由特定总线处理。

不仅外围设备通过总线连接。记忆以同样的方式连接起来。总线通过桥相互连接。那些桥梁知道如何指挥交通。

从内核的角度来看,外围寄存器的工作方式与存储单元相同。

间隙呢。通常如果地址解码器不理解地址就会产生异常——硬件错误(在 ARM 术语中称为 HardFault)

细节非常复杂,除非您要设计自己的芯片,否则寄存器级程序员不需要。

【讨论】:

【参考方案3】:

CPU 内核中唯一的存储是寄存器(包括通用和专用寄存器)。其他一切都是外部的,包括 RAM 和 ROM。

外设控制寄存器基本上存在于外设内部。但是,CPU 以与访问 RAM 或 ROM 相同的方式访问它们;这就是内存映射的含义,它向您显示哪些地址指的是 RAM、ROM、外围寄存器和其他东西。 (请注意,大部分内存映射都未使用 - 32 位地址空间能够寻址 4GB 的内存,而且我所知道的微控制器都没有这么大的存储空间。)适当的组件“响应”读取和写入内存总线上的请求取决于地址。

对于基本概述,内存映射 IO 上的 Wikipedia page 相当不错。

请注意,这些都不是 Cortex-M 特有的。几乎所有现代微处理器设计都使用内存映射。另请注意,Cortex-M 的实际总线架构相当复杂,因此您从 Wikipedia 文章中获得的任何理解都将是对真正实现的抽象。

【讨论】:

谢谢你的回答.....但是我还不清楚第一个问题的答案......我不是在谈论CPU内核......我'我在谈论 CPU 本身.....我的问题是 stm32 的 RAM 例如靠近 NVIC 或 MPU 或 sth 吗?如果你能回答,那对我有很大的帮助...... 对不起,这没有意义。 CPU 核心 CPU。你所说的“接近”是什么意思?你是说身体上的吗? 我的意思是物理上的,但你能告诉我这张照片i.stack.imgur.com/trM5M.png 是真实的记忆还是只是寻址模型? 物理上,不知道。谁在乎?他们甚至可能在一个硅版本和下一个版本之间移动它。对任何事情都没有影响。你所说的“真实记忆”是什么意思?内存映射向您显示每个地址在使用时将访问的内容,这很重要... 我只是想知道这段记忆(我给你看的图片)在哪里,我想我明白了;图片只是一个内存映射,它不是物理内存,物理内存是由 ST 实现的。感谢您的宝贵时间....您的回答对我有很大帮助

以上是关于STM32的外设寄存器在哪里?它们是在皮质-m 核心还是在外围单元本身?的主要内容,如果未能解决你的问题,请参考以下文章

STM32中的NRST引脚是干吗的,有啥作用,怎么接外设

STM32外设地址查询

STM32 DMA的使用总结

STM32入门系列-CMSIS标准

STM32学习笔记2.1 第一个外设——GPIO:硬件和寄存器

stm32------系统时钟配置