STM32: 总线矩阵

总线矩阵请添加图片描述

上图为stm32f4的总线矩阵,其中主控总线有8条,被控总线有7条,主设备和从设备通过各自的总线两两相交连接,图中两条总线相交且为圆圈的地方,表示这两条总线对应的主设备可以访问从设备,如I总线(指令总线),只有跟 M0、M2和M6这三根被控总线交叉的时候才有圆圈,就表示I总线只能跟这三根被控总线通信,这样就可以知道stm32f4的启动有三种分别是FLASH、内部SRAM、外部存储FSMC。
  总线矩阵用于主控总线之间的访问仲裁管理,仲裁采用循环调度算法。有了总线矩阵,就可以让主设备和从设备进行并行访问,提升了访问效率,同时也降低了功耗。需要注意的是,虽然总线矩阵使得多个主设备可以并行访问不同的从设备,但在一个定义的时间段内,只有一个主设备拥有总线矩阵的控制权,如果有多个主设备同时出现总线请求时就得进行仲裁。所以有了总线仲裁器,就能保证每个时刻只有一个主设备通过总线矩阵对从设备进行访问。
  注意并非所有主设备访问从设备都得经过总线矩阵,如上图中,有些主设备和从设备间有直通通道。

存储器映射请添加图片描述

存储器本身不具有地址信息,给存储器分配地址的过程就称为存储器映射,尽管预定义的存储器映射的地址是固定的,但也具有很高的灵活性,允许芯片设计人员使用不同的内存和外设来设计他们的产品,以实现更好的产品差异化。给某个地址再分配一个地址的过程叫存储器重映射,但是Cortex M4芯片没有MMU所以并不支持。如上所示,就是stm32f4xx的部分通过存储器映射的寄存器地址,详见《STM32F4xx中文参考手册》的P52~P54页。

请添加图片描述

上图为预定义的存储器映射图,来自 Cortex M3与M4权威指南中的第六章第三节。在4GB的可寻址内存空间中,一些部分被分配给内部外设,如NVIC和调试组件。这些内部外设的地址是固定的。此外,内存空间在结构上被划分为若干内存区域,对应上图:
  Code:只读段,用于保存默认的向量表;
  SRAM:连接SRAM,主要是片内SRAM,但没有确切的内存类型限制。SRAM区域的前1MB是位可寻址的,如果可选位带特性包括在内。还可以从该区域执行程序代码;
  Peripherals:主要用于片内外设。由芯片公司进行定义的一些寄存器地址,如GPIO寄存器地址、USART和I2C的寄存器地址等等;
  RAM:变量存储区,如果开发板从片内的Flash启动,就需要指定RAM,不过一般只要选好了器件型号,keil5就自动选好了;
  Devices:主要是用于给片外的设备分配地址;
  System:内核定义的一些寄存器,包含了:NVIC,MPU, SysTick,SCB,FPU,FPB,DWT等。

GPIO的位带操作请添加图片描述

在预定义的存储器映射图有两个位带区,分别对应了两个位带别名,其实也就是将位带区每个的比特位一个一个按顺序取出来,将其映射成32位4字节的寄存器,这样位带别名的大小应该是位带区的32倍,事实也是这样。

查看stm32f4xx的芯片手册可以发现GPIO的寄存器地址属于Peripherals的位带区,所以可以进行位带操作,使用位带操作可以大大提高程序的运行速率和提升安全性,操作IO口的性能将达到极致,而不必要去调用GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit等GPIO操作的库函数,调用函数要进行入栈出栈等操作,会占用时间。

请添加图片描述

上图为位带区转换为位带别名区的宏定义代码,以GPIOE端口的第n根引脚为例,进行了输出高低电平的操作,只要预先初始化好了GPIOE端口第n根引脚,就可以使用这个宏定义,让第n根引脚输出高低电平,如:

PEout(13) = 0//让GPIOE的第13根引脚输出低电平
PEout(13) = 1//让GPIOE的第13根引脚输出高电平

总结
  1.总线矩阵很重要,不可忽略;
  2.了解了存储器映射便能大概知道内核的结构;
  3.位带操作可以提高速率和提升安全性,能使用就尽量使用,I/O初始化就不必要,因为这样的话代码会很多,直接使用库函数初始化就可以。

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ST公司在今年4月份的峰会上,发布了最新的32位单片机STM32H7,瞬间在业内产生一股追捧热风。大家对这款ST最高性能的单片机充满期待。终于,近期ST推出了基于STM32H743的nuclo开发板。 STM32H7到底有哪些让人惊艳的功能呢? 采用Cortex-M7内核,并实现了最高性能,无论是从嵌入式闪存还是外部存储器来执行代码:400MHz处理器频率下性能可达到2010 Core,ark/856 DMIPS 双时钟架构使得外设速度独立于CPU速度,系统时钟变化不影响外设工作 面向内核、外设和存储器互连的AXI总线和多AHB总线矩阵 高速主直接存储器访问(MDMA)控制器、两个用于优化外设管理的具有FIFO和请求路由器能力的双端口DMA以及一个额外的DMA 更多外设,例如四个支持SPDIF输出的串行音频接口(SAI)、三个全双工I²S接口、一个支持四路输入的SPDIF输入接口、两个具有专用供电的USB OTG模块和双模QSPI接口、两个FD-CAN控制器、一个高精度定时器、一个TFT-LCD控制器、一个JPEG编解码器、两个SDIO接口以及很多其它模拟外设,比如三个快速14位ADC、两个比较器和两个运算放大器 高能效:多功耗域架构允许在不同的功耗域设置不同的低功耗模式,以优化功耗效率。除了在运行或停止模式期间可为内核提供不同电压的主稳压器外,设备还内置有为内嵌PHY供电的USB稳压器以及一个备份稳压器。在运行模式(外设关闭),功耗典型值为278 µ/MHz @VDD = 3.3 V和25 °C。低功耗待机模式的功耗为7 µA。 更多STM32H743的主要外设资源和电特性参数可以参考附件的数据手册。 STM32H743 nucleo开发板如同其他STM32系列一样,将主控MCU STM32H743的外设GPIO口做了引出处理。开发板上集成了USB ST-LINK功能,可以方便的进行编程调试。STM32H743 nucleo开发板通过LAN8742A引出了Ethernet PHY接口。 STM32H743 nucleo开发板原理图结构组成 STM32H743 nucleo开发板为6层板,依次为:Top Layer、GND、Signal、PWR、GNA、Bottom Layer,尺寸为:70mm*133.3mm。 电路附件包含了STM32H743数据手册、STM32H743原理图PCB源文件,以及实现了低层驱动,USB, TCP/IP,文件系统,RTOS, Graphic,及运行在ST开发板上的例程代码。 更多STM32H743信息、交流讨论可以移步至STM32中文社区查看。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值