stm32的总线AMBA、AHB、APB

2018-06-07 20:29:48来源: eefocus 关键字:stm32  总线  AMBA  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则主要分布给我外设。 


下面这张图,更容易看出AHB和APB的作用: AHB链接的是系统总线、RAM等等 APB链接的是常用的外设:GPIO、UART等等 




STM32上的总线结构


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



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


  1. /** @defgroup APB2_peripheral  

  2.   * @{ 

  3.   */  

  4.   

  5. #define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)  

  6. #define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)  

  7. #define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)  

  8. #define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)  

  9. #define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)  

  10. #define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)  

  11. #define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)  

  12. #define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)  

  13. #define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)  

  14. #define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)  

  15. #define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)  

  16. #define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)  

  17. #define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)  

  18. #define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)  

  19. #define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)  

  20. #define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)  

  21. #define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)  

  22. #define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)  

  23. #define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)  

  24. #define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)  

  25. #define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)  

  26.   

  27. #define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))  

  28. /** 

  29.   * @} 

  30.   */   

  31.   

  32. /** @defgroup APB1_peripheral  

  33.   * @{ 

  34.   */  

  35.   

  36. #define RCC_APB1Periph_TIM2              ((uint32_t)0x00000001)  

  37. #define RCC_APB1Periph_TIM3              ((uint32_t)0x00000002)  

  38. #define RCC_APB1Periph_TIM4              ((uint32_t)0x00000004)  

  39. #define RCC_APB1Periph_TIM5              ((uint32_t)0x00000008)  

  40. #define RCC_APB1Periph_TIM6              ((uint32_t)0x00000010)  

  41. #define RCC_APB1Periph_TIM7              ((uint32_t)0x00000020)  

  42. #define RCC_APB1Periph_TIM12             ((uint32_t)0x00000040)  

  43. #define RCC_APB1Periph_TIM13             ((uint32_t)0x00000080)  

  44. #define RCC_APB1Periph_TIM14             ((uint32_t)0x00000100)  

  45. #define RCC_APB1Periph_WWDG              ((uint32_t)0x00000800)  

  46. #define RCC_APB1Periph_SPI2              ((uint32_t)0x00004000)  

  47. #define RCC_APB1Periph_SPI3              ((uint32_t)0x00008000)  

  48. #define RCC_APB1Periph_USART2            ((uint32_t)0x00020000)  

  49. #define RCC_APB1Periph_USART3            ((uint32_t)0x00040000)  

  50. #define RCC_APB1Periph_UART4             ((uint32_t)0x00080000)  

  51. #define RCC_APB1Periph_UART5             ((uint32_t)0x00100000)  

  52. #define RCC_APB1Periph_I2C1              ((uint32_t)0x00200000)  

  53. #define RCC_APB1Periph_I2C2              ((uint32_t)0x00400000)  

  54. #define RCC_APB1Periph_USB               ((uint32_t)0x00800000)  

  55. #define RCC_APB1Periph_CAN1              ((uint32_t)0x02000000)  

  56. #define RCC_APB1Periph_CAN2              ((uint32_t)0x04000000)  

  57. #define RCC_APB1Periph_BKP               ((uint32_t)0x08000000)  

  58. #define RCC_APB1Periph_PWR               ((uint32_t)0x10000000)  

  59. #define RCC_APB1Periph_DAC               ((uint32_t)0x20000000)  

  60. #define RCC_APB1Periph_CEC               ((uint32_t)0x40000000)  

  61.    

  62. #define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x81013600) == 0x00) && ((PERIPH) != 0x00))  

  63.   

  64. /** 

  65.   * @} 

  66.   */  




APB的速率见下面说明: 

APB1限制在了36MHz,APB2也可以达到全速72MHz 




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








[1] [2]

关键字:stm32  总线  AMBA  AHB  APB

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018060739637.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F的几种串行通信总线总结
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

网友正在学习IC视频

推荐阅读
全部
stm32
总线
AMBA
AHB
APB

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved