最近有人在STMCU社区网站咨询如下问题:

由于实验需要,要用到STM32F407的两个DMA并用定时器触发,在使用过程中发现DMA1无法把GPIO的IDR上的数据传输到内存,调试过程中出现DMA1的数据流传输错误标志,但是使用DMA2没有问题。然后我看了下参考手册上两个DMA的控制系统实现图,DMA1的外设端口有一个桥接器把APB1和AHB1连起来,不知道这个桥连器作用是什么?是把APB1和AHB1连起来互相访问吗? 另外测试把GPIO的IDR改成APB1下的tim5的ARR,DMA1正常工作。请问这是怎么回事?

咨询者提到STM32F4系列中的两个DMA,即DMA1与DMA2,AHB到APB桥接器;再就是两个外设,GPIO和TIM5 。为了弄清这个问题,我们有必要先看看STM32F407的总线与存储框架图。 如下图所示:


              STM32F4系统存储及总线框图

整个系统架构由多层32位AHB总线矩阵及主从总线构成,并建立起各个主从模块间的互联访问。

图中方框内纵横交错的矩阵线就是总线矩阵,犹如纵横交错的公路,让各类交通工具在里面同时运行而互不干扰。只有在图中红色箭头所指的地方,可能出现主控总线访问撞车的时刻,此时总线矩阵会按照一定规矩进行仲裁,即谁先谁后而不会发生交通事故。

总线矩阵跟图中上方的8条主控总线和右方的7条从控总线保持互联。

八条主控总线: [主控总线简单点说就是可以用来主动访问别的外设的通路]

—Cortex?-M4F 内核 I 总线、D 总线和 S 总线

—DMA1 存储器总线

—DMA2 存储器总线

—DMA2 外设总线

— 以太网 DMA 总线

—USB OTG HS DMA 总线

● 七条被控总线:

— 内部 Flash ICode 总线

— 内部 Flash DCode 总线

— 主要内部 SRAM1 (112 KB)

— 辅助内部 SRAM2 (16 KB)

— 辅助内部 SRAM3 (64 KB)(仅适用于STM32F42xxx 和 STM32F43xxx 器件)

—AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)

—AHB2 外设 —FSMC

借助于总线矩阵,可以实现主控总线到被控总线的访问,可以实现多个高速外设并发访问和高效运行。[需要注意的是,对于STM32F4系列,图中64K CCM并不经过总线矩阵,只能被CPU访问。自然DMA是不能访问它的。]

好,我们接着看看STM32F407 的两个通用DMA,即DMA1和DMA2。

这两个DMA都具有双AHB总线访问端口,一端用于存储器访问,另一端用于外设访问。同时它们各自都有一个AHB从编程接口,这个不难理解,对它配置编程控制总得有个接口。

DMA总线访问框图

我们结合这幅DMA总线访问框图和上面的系统存储总线框架图可以明显看出,2个DMA的外设访问端口的总线连接有点不一样。

DMA2的外设访问端口既与总线矩阵相连,又与AHB-APB桥2相连,可以进一步访问APB2外设。而DMA1却没有与总线矩阵相连,只是跟AHB-APB桥1相连,可以进一步访问APB1外设。[红色方框代表总线矩阵]

现在的问题说DMA1访问不了GPIO,但如果换成TIM5就可以。我们可以去芯片数据手册的Device overview部分查看相关总线和外设分布图。我截取STM32F40xblock diagram的部分如下:

我们可以看出GPIO外设跟AHB1相连;TIM5跟APB1相连。而我们从DMA访问框图看得清楚,DMA1的外设端口根本没连接AHB1,自然没法访问相应外设,比如GPIO,而DMA2 可以,因为它可以经过总线矩阵后去访问AHB1的外设。

那DMA1为什么能访问TIM5呢,因DMA1的AHB外设端口总线经过AHB/APB1桥后就可以访问APB1各类外设,比方TIM5等。

至于咨询者问到的两个桥接器的作用,没啥过多需要解释的。桥嘛,连接第一;然后两边时钟的同步和时钟分频,满足不同外设的时钟需求。

ST MCU的参考手册里强调了只有DMA2能实现MEMORY到MEMORY的传输,DMA1是实现不了的,原理类似。因为要实现M to M 的传输,必须两个端口都能实现对MEMORY的访问,DMA1的AHB外设端口无法访问到内部MEMORY。

咨询者的问题,基本上靠看上面几幅图可以得到答案。这些图很重要,很多信息用图描述也很直观明了。各技术手册里的插图往往大有乾坤,不要视而不见。上面提到的都是基于STM32F4系列的总线架构,你也可以去看看STM32其它系列的系统总线框图,相信你一定会另有发现和收获。

stm32f4xx系统总线架构的更多相关文章

  1. linux驱动程序之电源管理之新版linux系统设备架构中关于电源管理方式的变更

    新版linux系统设备架构中关于电源管理方式的变更 based on linux-2.6.32 一.设备模型各数据结构中电源管理的部分 linux的设备模型通过诸多结构体来联合描述,如struct d ...

  2. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  3. 标准Web系统的架构分层

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

  4. Android系统四层架构分享

    Android系统四层架构 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 如果把Android系统看 ...

  5. 基于Flume的美团日志收集系统(一)架构和设计

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  6. IA32系统级架构总览(一) 实模式和保护模式

    应用程序的编写大部分的时候是不必关心系统级架构的,最多学习一下平台所给的API即可,也就是我们通常说的黑箱子.但是在学习操作系统的时候,系统级架构是要关心的. 系统级架构很难学习,其中一个很大的原因是 ...

  7. 【安卓面试题】简述一下Android系统的架构?

    安卓系统的架构分为四层:应用程序层,应用框架层,系统框架层和内核层. 应用程序层:开发者编写的供用户使用的应用 应用框架层:开发者构建应用程序可能用到的API, 例如ActivityManager 系 ...

  8. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

  9. 标准Web系统的架构分层[转]

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

随机推荐

  1. 20155319《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    20155319<Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 (一)使用Code菜单 在IDEA中使用工具(Code->Reformate Code) ...

  2. 20155322 《Java程序设计》课堂实践项目MyOD

    20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...

  3. 20155323 2016-2017-2 《Java程序设计》第3周学习总结

    20155323 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 对象:对象具有状态和行为,对象是类的实例. 类:一个类可以被定义为描述行为的模板. ...

  4. Zabbix学习之路(五)之MySQL监控

    1.linux-node2节点安装数据库 [root@linux-node2 ~]# yum install -y mariadb-server [root@linux-node2 ~]# syste ...

  5. Shell if 判断语句参数

    [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ ...

  6. C#Framework4.0支持异步async/await语法

    由于用户使用的是XP系统,但是程序里异步都是通过async/await代码来实现的,然而async/await需要Framework4.5版本才可以,而XP系统最高只能支持到Framework4.0, ...

  7. oss上传文件0字节

    最近使用oss上传文件,不同项目中使用的版本也不同,之前的都能正常上传,最近因需要添加ObjectMetaData属性,扩展了一个方法,发现上传的文件始终是0字节的,最终跟源码发现conntentLe ...

  8. 英特尔® 实感™ 摄像头 (F200) 应用如何实现最佳用户体验

    英特尔开发人员专区原文 由于视频不能直接嵌入, 请点击视频标题观看.谢谢. 英特尔® 实感™ 技术支持我们重新定义如何与计算设备交互,包括允许用户通过手势自然交互. 为了帮助大家了解使用英特尔® 实感 ...

  9. Java实现网上商城

    // 第一个JavaWeb项目 //练手项目没有使用框架 github下载 https://github.com/dejavudwh/Online-Shopping 项目截图 1.基本实现了购物网站该 ...

  10. JavaScript学习笔记(二)——函数和数组

    第二章 函数简介 1 第一个函数示例 <script language="JavaScript" type="text/JavaScript"> f ...