在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备
这些都是通过一个多级的AHB总线构架相互连接的,如下图所示:
在互联型产品中,主系统由以下部分构成:
● 五个驱动单元:
─ Cortex-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
─ 以太网DMA
● 三个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备
这些都是通过一个多级的AHB总线构架相互连接的,如下图所示:
ICode总线
该总线将Cortex-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。
DCode总线
该总线将Cortex-M3内核的DCode总线与闪存存储器的数据接口相连接,常量加载和调试访问。
系统总线
此总线连接Cortex-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。
DMA总线
此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCode和DMA到SRAM、闪存和外设的访问。
总线矩阵
总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型产品中,总线矩阵包含5个驱动部件(CPU的DCode、系统总线、以太网DMA、 DMA1总线和DMA2总线)和3个从部件(闪存存储器接口(FLITF)、 SRAM和AHB2APB桥)。
在其它产品中总线矩阵包含4个驱动部件(CPU的DCode、系统总线、 DMA1总线和DMA2总线)和4个被动部件(闪存存储器接口FLITF、 SRAM、 FSMC和AHB2APB桥)。
AHB外设通过总线矩阵与系统总线相连,允许DMA访问。
AHB/APB桥(APB)
两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz, APB2操作于全速,最高72MHz。在每一次复位以后,所有除SRAM和FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟。当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位或者32位的数据扩展以配合32位的向量。
关键字:STM32 系统架构 系统总线
引用地址:
STM32系统架构
推荐阅读最新更新时间:2024-11-11 13:39
STM32软件层实现原理
一、前言 以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会有stm32f10x.h或者stm32f10x_gpio.h,这些文件严格来时属于硬件层的,如果软件层出现这些文件会显得很乱。 使用过Linux的童鞋们肯定知道linux系统无法直接操作硬件层,打开linux或者rt_thread代码会发现代码中都会有device的源文件,没错,这就是驱动层。 二、实现原理 原理就是将硬件操作的接口全都放到驱动链表上,在驱动层实现device的open、read、write等操作。当然这样做也有弊端,就是驱动find的时候需要遍历一遍驱动链表,这样会增加代码运行时间。 三、代
[单片机]
stm32局部变量过大,导致栈溢出
在做一个以stm32为主控的项目时发现自己程序中一个机构体里面的数据总是一运行就被改变,刚开始以为是自己不小心在哪个地方用了extern扩展了变量的作用域,重新赋了值, 自己忘记了,后来查找了好久都没有其他地方使用这个结构体变量,于是开始单步调试,结果进入一个函数的时候(里面定义了一个200个数据float型的数组),发现只要定了一个这个数组,这时前文提到的那个结构的值就发生改变,通过在keil软件中的Memory窗口查看结构体的变量可以清楚看到结构体的地址里面的数据在这个时候发生改变, 然后修改,这个局部变量数组的大小,把它改小之后,就没有发生问题。因为局部变量是储存在栈中的,于是猜想,这种问题应该是stm32的栈的内存的溢出造
[单片机]
STM32学习笔记(5):通用定时器PWM输出
1. TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文 Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 1.1 PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的( 110 为模式1, 111 为模式2
[单片机]
STM32 芯片 IWDG 关闭 停用 方法
百度搜索真心是开发者的敌人,开发工作很多时候也是浪费青春和生命的工作,你费大把时间,解决的无非是写鸡毛蒜皮无关痛痒的问题,百度上还找不到这样的小问题的答案。 stm32 芯片 IWDG 怎么停用 我再一个项目上开启了IWDG,后来意外的把代码刷到了另一个产品上,产品就打开了IWDG 因为我需要进行调试,所以得先关掉,但是IWDG 断电都保存,就这小问题费了2 3 个小时, 百度给出的结论是,不能关闭,只能复位/重启??????(所以什么叫重启,怎么样重启?) 上google一搜索,发现 使用这个 可以在调试模式下关闭 IWDG,实际也是把WDG_SW设置为了1 __HAL_DBGMCU_FREEZE_IWD
[单片机]
STM32 LCD12864 串行通信模式
lcd12864简介 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 注: 我们所用的LCD屏的命名,基本都是按照其分辨率来进行命名的
[单片机]
关于stm32 APB总线上的"接口时钟使能"与"外设时钟使能"
今天看 例说stm32 上的RTC时钟,发现他没有使能APB1的上BKP时钟,就能读出BKP寄存器里的内容.很是不解,又看了一遍发现APB总线上的时钟使能分为两种,一种是时接口时钟一种是外设时钟. 又仔细观查了一下时钟树发现在APB外设时钟使能寄存器上表现为接口时钟的都已经有了自己的时钟,再经实验证明所有这种不需要在APB上使能就有自已时钟的外设(即在APBxENR的某一位上代表的是这个外设的接口时钟的外设)在不需要使能接口时钟的情况下就能读出这种外设的寄存器的内容!
[单片机]
stm32printf函数调用
一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义 fputc 函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等 while (!(USART1- SR & USART_FLAG_TXE)); return (ch); } 这样在使用printf时就会调用自定义的fputc函数,来发送字符。 3、在工程属性的 “Targe
[单片机]
STM32 IIC通信之PAJ7620U2手势识别模块驱动程序源码详解
大家好。本人小白一个,最近在自学stm32,想用手势识别模块做一点好玩的,正好借此巩固IIC 通信的内容。 很多人刚刚接触IIC、SPI、CAN等通信方式时都会有一堆的问题:为什么要学它?学它可以做什么?我该怎么去学习它呢?我就在这里和大家分享一下自己学习时的所思所感吧,若有表述不对之处,还请各位大佬指出,我好立刻改正。 话不多说,先上硬货。 一、回答上面的问题: 1、什么是IIC通信呢?简单,两条线通信同步串行总线。(在此不做更多说明) 2、为什么要学习这些看起来“根本没多大用处”的通信协议呢?大哥,你总不能永远靠串口吃饭吧 ,况且真正到了实际项目中,通信的方式要根据环境选择,你总不能想当然的自己决定吧,学好这些通信方式,你
[单片机]