转载声明:本文部分内容转自http://www.eeworld.com.cn/mcu/article_2017110635638.html

芯片架构简图

芯片(这里指内核,或者叫 CPU)和外设之间通过各种总线连接,其中驱动单元有 4个,被动单元也有 4 个。为了方便理解,我们都可以把驱动单元理解成是CPU 部分,被动单元都理解成外设。

系统框图

1、ICode总线:ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。

2、驱动单元:

(1)DCode 总线:DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

(2)系统总线:系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

(3)DMA总线:DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

3、被动单元:

(1)内部的闪存存储器:内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。内核通过 ICode 总线来取里面的指令。

(2)内部的SRAM:内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过 DCode总线来访问它。

(3)FSMC:FSMC 的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,是 STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH 和 NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的 S:static,不能是动态的内存,比如 SDRAM就不能扩展。

(4)AHB到APB的桥:从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习 STM32的重点,就是要学会编程这些外设去驱动外部的各种设备。

存储器映射:

1存储器功能分类

Block0:Block0 主要用于设计片内的 FLASH,我们使用的 STM32F103ZET6(霸道)和STM32F103VET6(指南者)的 FLASH 都是 512KB,属于大容量。要在芯片内部集成更大的 FLASH 或者 SRAM 都意味着芯片成本的增加,往往片内集成的 FLASH 都不会太大,ST 能在追求性价比的同时做到 512KB,实乃良心之举。

Block1:Block1 用 于 设 计 片 内 的 SRAM 。 我 们 使 用 的 STM32F103ZET6 ( 霸 道 ) 和STM32F103VET6(指南者)的 SRAM 都是 64KB。

Block2:Block2用于设计片内的外设,根据外设的总线速度不同,Block 被分成了 APB和 AHB两部分,其中 APB 又被分为 APB1和 APB2。

什么是寄存器:

给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

什么叫存储器映射:

给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。

使用结构体指针访问寄存器:

Cortex - M3 一些基础知识相关推荐

  1. i2cdetect检测不到i2c设备_I2C基础知识入门

    废话 I2C其实肝的我挺难受的,通讯协议这种规范往往可以抠出很多的细节,看了波叔的文章<万变不离其宗之I2C总线要点总结>,很详细.我打赌我还不会I2C,因为涉及到很多技术细节,在实际项目 ...

  2. C++ opencv的一些基础知识

    一.基础知识 1.cv::mat type返回数字对应的类型 C1, C2, C3, C4 指的是通道(Channel)数,比如3通道的float 32: cv::Mat M5 = cv::Mat:: ...

  3. OpenCV基础知识

    下载安装 参考链接 VS2017配置opencv教程(超详细!!!)_Chosen One-CSDN博客_opencv 注意: 1. 后面的课程环境配置可能需要自己稍微改改,上面的配置教程可能学习到V ...

  4. 【STM32】基础知识 第十课 CubeMx

    [STM32]基础知识 第十课 CubeMx STM32 CubeMX 简介 安装 JAVA CubeMX 安装 新建 STM32 CubeMX 工程步骤 新建工程 时钟模块配置 GPIO 配置 生成 ...

  5. MATLAB学习笔记之matlab基础知识

    MATLAB基础知识 MATLAB系统环境 MATLAB操作界面组成 MATLAB主窗口 命令行窗口 当前文件夹窗口 工作区窗口 MATLAB的搜索路径 MATLAB数值数据 数值数据类型的分类 整型 ...

  6. HLSL 的基础知识

    基础知识很重要,一定要抓牢! 一.数据类型: HLSL中的数据类型主要有:标准类型.向量.矩阵.和复杂数据类型几大类. 标准数据类型: 标准的数据类型有:bool ,int,half ,float,d ...

  7. 【学习笔记】网络安全基础知识总结

    网络安全基础知识总结 前言 一.网络安全概述 1.1 引言 1.2 密码学的发展 1.3 密码学基础 1.4 对称密码 1.4.1 数据加密标准DES 二.数论知识 2.1 数论基础 2.2 有限域 ...

  8. RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)

    RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)) 前言 一.如何认识芯片? 1. 1 怎么找芯片资料? 1. 2 芯片资料怎么看? 二.我认识的芯片 1.Alien(美国意联科技公司( ...

  9. 递归皮层网络RCN识别文本CAPTCHAS的Science论文基础知识和译文 (公号回复“递归皮层网络”可下载PDF典藏版资料)

    递归皮层网络RCN识别文本CAPTCHAS的Science论文基础知识和译文 (公号回复"递归皮层网络"可下载PDF典藏版资料) 原创: 秦陇纪 数据简化DataSimp 今天 数 ...

最新文章

  1. Missing number
  2. 异步调用可以转化为同步调用吗?
  3. python编程爱因斯坦的问题_教你如何用编程解决爱因斯坦的数学问题
  4. Keras + Windows +Anaconda2-4.2.0 深度学习框架快速搭建
  5. OpenCASCADE:MFC示例
  6. [NOTE] 关于DNSLog平台的使用
  7. php 实现的字典序排列算法,字典序的一个生成算法
  8. git使用的基本流程_git命令的基本使用
  9. 昂首阔步:让开发人员喜欢使用您的REST API
  10. 《Pytorch - 神经风格转换》
  11. Hadoop YARN学习之核心概念(2)
  12. ACM各题型OJ题目总结
  13. mysql的max_allowed_packet配置
  14. ubuntu 16换源方法
  15. PCL点云使用贪婪三角化进行曲面重构
  16. 浅议极大似然估计(MLE)背后的思想原理
  17. 如何通过浏览器访问本地电脑文件
  18. Android 11.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
  19. java之字符串转换
  20. pyqt5打包成exe可执行文件

热门文章

  1. 高斯滤波详解 python实现高斯滤波
  2. [python] 字典:按key排序或按value排序
  3. 吴恩达神经网络和深度学习-学习笔记-7-正则化regularization方法
  4. jquery系列教程4-事件操作全解
  5. Java实现简单的计算器
  6. 闰年流程图——18网三杨捷
  7. loader与plugin,module与chunk,compiler与compilation
  8. apache通过AD验证
  9. WDK10+VS2015 驱动环境搭建
  10. (转)大公司里怎样开发和部署前端代码?