一、总线的简单介绍:

处理器无疑是计算机中最重要的部件,但并不是唯一的部件。一台计算机也需要随机访问存储器(RAM)来存放机器码指令以便让处理器执行。计算机还必须有一些方法使这些指令进入RAM(输入设备)以及一些方法使程序执行结果得以看见(输出设备)。RAM是易失性的,当断电时,它的内容就会丢失。所以计算机中另一个有用的部件是永久存储设备,当计算机断电的时候,它们可以保存代码和数据。

组成一台完整计算机的所有集成电路必须安装在电路板上。在一些小型机器上,所有的集成电路可以安装在一块板上,但更常见的是,不同的部件分开安装在两块或更多的板上,这些板之间通过总线互相通信。简单地说,总线是提供给计算机中每块电路板的数字信号的集合,这些信号可以分为4类:

• 地址信号。这些信号由微处理器提供,常用来寻址 R A M单元,也可用来寻址连接到计算机上的其他部件。
 • 数据输出信号。也由微处理器提供,用来写入数据到 R A M或其他设备。要仔细推敲输入( i n p u t)和输出( o u t p u t)的含义。数据输出信号是从微处理器输出,变成 R A M和其他设备的数据输入信号。
 • 数据输入信号。是由计算机的其余部分提供,由微处理器读入的信号。数据输入信号通常来自于 R A M的输出,也即表示微处理器读入存储器内容。但是其他部件也提供数据输入信号给处理器。
 • 控制信号。由各种各样的信号组成,通常与计算机的特定处理器的控制信号一致。控制信号可来自于微处理器或从其他部件传送到微处理器。例如,微处理器可用一个控制信号来指示它要写一些数据到某一存储器地址。
  另外,总线给计算机中的各个电路板提供电源。

二、STM32的总线AMBA、AHB、APB

前几天看了看STM32主要的外设和电路设计,今天开始看STM32的程序设计了。

这里我直接使用的是STM32的库V3.5,懒得去看什么寄存器

遇到的第一个问题就是STM32的内部总线AHB和APB,这里查了一些资料,记录一下

AMBA

AMBA(Advanced Microprocessor Bus Architecture)是ARM公司提出的一种开放性的SoC总线标准,现在已经广泛的应用于RISC的内核上了。 
AMBA定义了一种 多总线系统 (multilevel busing system),包括系统总线和等级稍低的外设总线。 
AMBA支持32位、64位、128位的数据总线,和32位的地址总线,同时支持byte和half-word设计。 
它定义了两种总线: AHB(Advanced High-performance Bus)先进的高性能总线,也叫做ASB(Advanced System Bus)。APB(Advanced peripheral Bus)先进的外设总线 
AHB和ASB其实是一个东西,是 高速总线 ,主要负责嵌入式处理器、DMA控制器、Memory等等的接口。 
APB是 低速总线 ,主要负责外设接口 
AHB和APB之间是通过Bridge(桥接器)链接的

Bus Bridges

总所周知,一个系统中的各个模块之间相互通信是通过总线,总线的作用,就是把数据和地址从设备A搬运到设备B上, 
如果说设备A和设备B 具有一致性(原文是under discussion,这里我不知道怎么翻译比较好,暂且翻译为一致性) ,那么设备A和设备B可以直接挂在同一个总线上,并直接解读总线上的数据。 
但是,如果设备A和设备B不具有一致性,那么设备A和设备B就必须挂在两条不同的总线上,这时候我们就需要一个 “翻译” ,把设备A上的总线上的数据和地址 转换成设备B可以解析的格式 ,然后放到设备B的总线上,这个“翻译”就是“Bus Bridge”, 
下面这幅图就形象的说明了Bus Bridge在AHB和APB之间的作用。 

AHB链接的设备的数据传输速度是比APB设备传输的速度快很多的,也就是说,这里的这个Bus Beidge所起的作用就是“缓冲器”,让AHB和APB之间的数据/地址的传输速率归到同一速率上。

Cortex-M3的系统模块

这里可以看到AHB主要是链接在了系统的内核以及存储管理上面的,APB则主要分布给我外设。 
下面这张图,更容易看出AHB和APB的作用: AHB链接的是系统总线、RAM等等 APB链接的是常用的外设:GPIO、UART等等 

STM32上的总线结构

首先看一下F103系列的芯片的总线结构 

需要注意的是,这里有两个APB,它们链接的外设是不一样的,所以在STM32的库文件中会有关于APB1和APB2的定义:

/** @defgroup APB2_peripheral * @{*/#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
/*** @}*/ /** @defgroup APB1_peripheral * @{*/#define RCC_APB1Periph_TIM2              ((uint32_t)0x00000001)
#define RCC_APB1Periph_TIM3              ((uint32_t)0x00000002)
#define RCC_APB1Periph_TIM4              ((uint32_t)0x00000004)
#define RCC_APB1Periph_TIM5              ((uint32_t)0x00000008)
#define RCC_APB1Periph_TIM6              ((uint32_t)0x00000010)
#define RCC_APB1Periph_TIM7              ((uint32_t)0x00000020)
#define RCC_APB1Periph_TIM12             ((uint32_t)0x00000040)
#define RCC_APB1Periph_TIM13             ((uint32_t)0x00000080)
#define RCC_APB1Periph_TIM14             ((uint32_t)0x00000100)
#define RCC_APB1Periph_WWDG              ((uint32_t)0x00000800)
#define RCC_APB1Periph_SPI2              ((uint32_t)0x00004000)
#define RCC_APB1Periph_SPI3              ((uint32_t)0x00008000)
#define RCC_APB1Periph_USART2            ((uint32_t)0x00020000)
#define RCC_APB1Periph_USART3            ((uint32_t)0x00040000)
#define RCC_APB1Periph_UART4             ((uint32_t)0x00080000)
#define RCC_APB1Periph_UART5             ((uint32_t)0x00100000)
#define RCC_APB1Periph_I2C1              ((uint32_t)0x00200000)
#define RCC_APB1Periph_I2C2              ((uint32_t)0x00400000)
#define RCC_APB1Periph_USB               ((uint32_t)0x00800000)
#define RCC_APB1Periph_CAN1              ((uint32_t)0x02000000)
#define RCC_APB1Periph_CAN2              ((uint32_t)0x04000000)
#define RCC_APB1Periph_BKP               ((uint32_t)0x08000000)
#define RCC_APB1Periph_PWR               ((uint32_t)0x10000000)
#define RCC_APB1Periph_DAC               ((uint32_t)0x20000000)
#define RCC_APB1Periph_CEC               ((uint32_t)0x40000000)#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x81013600) == 0x00) && ((PERIPH) != 0x00))/*** @}*/

APB的速率见下面说明: 
APB1限制在了36MHz,APB2也可以达到全速72MHz

下面是F105和F107的总线构架: 

STM32上APB1和APB2的地址映射

文章整理于网络


引用链接:http://www.2cto.com/os/201410/346704.html



STM32的总线AMBA、AHB、APB相关推荐

  1. AMBA总线协议AHB、APB、AXI对比分析

    一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...

  2. 浅析AMBA规范以及AMBA 5 AHB接口和AMBA 3 APB接口

    官方文档: ARM® AMBA® 5 AHB Protocol.pdf AMBA™ 3 APB Protocol.pdf Multi-layer AHB.pdf 一.AMBA简介 1.AMBA (Ad ...

  3. AMBA总线协议AHB、APB

    一.什么是AMBA总线 AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus).ASB (Advanced ...

  4. AMBA总线概述——AHB、APB、AXI

    参考:https://blog.csdn.net/burningCky/article/details/109630018 https://blog.csdn.net/bleauchat/articl ...

  5. AMBA总线协议 之 APB总线协议

    AMBA总线协议概念: AMBA(Advanced Microcontroller Bus Architecture) 总线是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有 ...

  6. AMBA:AXI/AHB/APB学习笔记

    AMBA.AXI.AHB.APB学习笔记 AMBA总线:各模块之间的连接 AHB 特性: 组成部分: AXI APB AMBA总线:各模块之间的连接 advanced microcontroller ...

  7. [AMBA]AHB总线协议简介

    AHB总线协议简介 一.简介 AHB 总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-perfor ...

  8. STM32三条总线(AHB、APB1、APB2)的外设映射情况

    STM32三条总线(AHB.APB1.APB2)的外设映射情况 1.AHB (1)Flash储存器 (2)DMA (3)复位和时钟控制 (4)CRC (5)以太网 (6)SDIO 2.APB1总线(支 ...

  9. AMBA AHB总线协议详细说明(AHB5协议)

    一. AHB总线介绍 AHB总线用于性能要求较高的系统互连,比如内部memory.高带宽的外设.GMAC.eMMC/SD等,其仍然为分时独占式总线,也就是说一个时间点总线只会完成一个传输事件.下图是一 ...

最新文章

  1. Guava Cache缓存的移除与读取
  2. ajax跨域异常,ajax跨域问题
  3. 想在PyTorch里训练BERT,请试试Facebook跨语言模型XLM
  4. ZedGraph在Web中的使用
  5. ES6之路第十二篇:Promise对象
  6. 全球及中国智能食品秤行业发展预测及市场规模预测报告2021年版
  7. Apache ab测试工具使用方法(无参、get传参、post传参)
  8. Spring 基于注解的配置
  9. AUTOSAR从入门到精通100讲(十一)-AUTOSAR NVM基础知识
  10. C语言——确定char、short、int和short变量有符号和无符号时的取值范围
  11. Spring Mvc 数据回显、异常处理、文件上传、json交互、ResTful、拦截器的使用(高级三)
  12. mysql 重建注册_mysql 重建帐号
  13. linux下的密码破解软件
  14. 老农的计算机笔记(四)关于编程语言
  15. 腾讯音乐管理层调整:联席总裁谢国民辞职 谢振宇兼任CTO
  16. 1123581321递归算法java_经典算法设计方法
  17. 【UOJ455】【UER #8】雪灾与外卖
  18. 从Windows用scp往linux里传输文件
  19. 【考研资源】考研资料怎么找?这些资源网站一定要知道!
  20. 亿美软通史东旭:5G消息热潮下的安全冷思考丨5GMASSAGING · 上海站预告

热门文章

  1. Mozilla Firefox 68发布,增强了安全性和扩展功能
  2. 深度学习实现象棋_象棋的深度学习
  3. MIUI开发版内测申请地址
  4. 锁定11月29日,2022亚马逊云科技re:Invent全球大会盛大启幕
  5. USB在WINDOWS下的驱动开发
  6. 改变Keil5所有窗口的背景颜色
  7. 合成器基础(一) - 声音基础知识
  8. 小组项目第三周:后端数据——模拟炒股系统
  9. 寻找凸四边形的四个顶点
  10. 为什么浮点数不精确?