
前言此处的笔记为个人使用欢迎友善指出错误之处。一、个人理解硬件使用的学习只需认真学好第一块板子后面的学习都是依葫芦画瓢了。所有的硬件的使用都是 GPIO的控制通信所谓的PWM、定时器等等都是为了更好的控制GPIO的输出与输入不去搞芯片底层硬件的学习与基本使用还是以API调用和逻辑思维为主。二、Cortex-M3 处理器核1.Cortex-M3 组成结构ARM Cortex-M3是一款采用ARMv7 体系架构的 32位 RISC 处理器主要由Cortex-M3内核和调试系统两大部分组成其结构框图如图所示。Cortex-M3内核主要由 CM3Core(中央处理器核心)、NVIC(nested vector interrupt controller,嵌套向量中断控制器)、SYSTICK(系统定时器)、MPU(memory protection unit,存储保护单元)和总线矩阵(bus matrix)等组成。1.1 CM3Core (中央处理器CM3Core 是Cortex-M3处理器的中央处理核心就是通常所说的CPUCM3Core 采用哈佛结构拥有独立的指令总线和数据总线(如图 所示)在加载或存储数据的同时能够执行指令取指效率显著提高。CM3Core 主要由ALU(Arithmetic Logic Unit算术逻辑运算单元)、寄存器组(register bank)、指令解码器(decoder)、取指单元(instruction fetch unit)等部分组成。1.2 NVIC (嵌套向量中断控制器)NVIC (嵌套向量中断控制器) 是一个内建在Cortex-M3 处理器的中断控制器。NVIC 与 CPU紧密耦合包含了若干个系统控制寄存器。NVIC采用向量中断机制。在中断发生时它会自动取出对应的服务例程入口地址并且直接调用。并且NVIC还支持中断嵌套高优先级中断可以打断低优先级中断使得在 Cortex-M3 处理器上处理嵌套中断时非常强大。1.3 SYSTICK (系统定时器)SYSTICK (系统定时器) 是一个由 Cortex-M3 内核提供内置于 NVIC 中的24 位倒计时计数器每隔一定的时间间隔可以产生一个中断。在许多操作系统中都必须由一个硬件定时器来产生需要的“滴答”中断作为整个系统的时基来执行任务管理。例如为了允许多个任务在不同的时间片上运行并确保没有一个任务能够独占 CPU需要一个定时器来产生周期性的中断而且最好还要让用户程序不能随意访问这个定时器的寄存器以维持操作系统“心跳”的节律。1.4 MPU存储保护单元MPU 是一个选配的单元有些 Cortex-M3 芯片可能没有配备此组件。如果有它可以把存储器分成一些 Regions 并分别予以保护。例如,它可以让某些区域(region)在用户级下变成只读从而阻止一些用户程序破坏关键数据。1.5. Bus Matrix (总线矩阵)总线矩阵是 Cortex-M3处理器内部总线系统的核心。它是一个 32位的AHB总线互连网络用来将 Cortex-M3 处理器和调试接口连接到不同类型和功能划分的外部总线从而实现数据在不同总线上的并行传输。总线矩阵分别与下列外部总线相连:I-Code 总线用于从代码存储区取指令和向量。D-Code 总线 用于对代码存储区进行数据访问例如,进行查表等操作。系统总线:用于访问内存和外设覆盖的区域包括片上 SRAM、片上外设、片外RAM、片外扩展设备以及系统区的部分空间。高性能总线 (Advanced Hight-performance BusAHB) 用于访问片内高速的外设主要是访问APB总线上的设备。1.6 调试接口Cortex-M3处理器的调试系统采用ARM 最新的 CoreSight 架构。CoreSight调试架构是一个专业设计体系它允许使用标准的方案来访问调试组件收集跟踪信息以及检测调试系统的配置。Cortex-M3处理器的调试系统主要由 SW-DP/SWJ-DP(Serial Wire-Debug Port / Serial Wire JTAG-Debug Port串行线调试端口/串行线JTAG调试端口)、AHB-AF(Advanced High Performance Bus-Access PortAHB 访问端口)这些组件都用于调试通常不会在应用程序中使用它们。1.7 跟踪输出接口Cortex-M3处理器具有指令跟踪(由 ETM 产生)、数据跟踪(由 DWT产生)和调试信息跟踪(由ITM 产生)3 种跟踪源,并支持各种跟踪机制。Cortex-M3处理器的跟踪输出系统主要由 ETM(EmbeddedTrace Macro-cell嵌人式跟踪宏单元)、DWT(Data Watch-point Trigger数据观察点触发器)、ITM(Instrumentation Trace Macro-cell仪器化跟踪宏单元)、TPIU(Trace PortInterface Unit跟踪端口接口单元)、FPB(Flash Patch Breakpoint Flash 重截及断点单元)和 ROM 表等部分组成。这些组件都用于调试跟踪输出通常不会在应用程序中使用它们。2. 寄存器和指令集2.1 寄存器寄存器是计算机处理器内存储数据和程序状态的一种临时存储区域可以看作是处理器的“思考区域”。我们可以将寄存器形象地比作一个办公桌上的一个小抽屉用于存放临时的文件和笔记等。类比到计算机中寄存器就是处理器内部的一个小型存储器用于存储临时数据和程序状态。就像我们在办公桌上工作时经常需要从小抽屉里拿出文件或存放文件一样处理器也需要从寄存器中读取数据或将数据写入寄存器以进行数据处理或程序运行。因此寄存器可以看作是处理器的“大脑”提供支持和帮助计算机执行指令。Cortex-M3 处理器字长为 32 位它的寄存器也是32位的。它的所有 32位存器如图所示R0-R12通用寄存器R0‐R12 都是 32 位通用寄存器用于数据操作。但是注意绝大多数 16 位 Thumb 指令只能访问 R0‐R7而 32 位 Thumb‐2 指令可以访问所有寄存器。低存器 R0~R7 R0~R7 又被称为低寄存器(low register)可以被所有指令访问。需要注意的是复位后它们的初始值是不可预料的。高寄存器 R8~R12 R8~R12 又被称为高存器(high register)只能被32位的指令访问。与低寄存器 R0~R7 类似复位后它们的初始值是不可预料的。Banked R13: 两个堆栈指针Cortex‐M3 拥有两个堆栈指针然而它们是 banked因此任一时刻只能使用其中的一个。主堆栈指针MSP复位后缺省使用的堆栈指针用于操作系统内核以及异常处理例程包括中断服务例程进程堆栈指针PSP由用户的应用程序代码使用。堆栈指针的最低两位永远是 0这意味着堆栈总是 4 字节对齐的。在 ARM 编程领域中凡是打断程序顺序执行的事件都被称为异常(exception)。除了外部中断外当有指令执 行了“非法操作”或者访问被禁的内存区间因各种错误产生的 fault以及不可屏蔽中断发生时都会打断程序的 执行这些情况统称为异常。在不严格的上下文中异常与中断也可以混用。另外程序代码也可以主动请求进入异常状态的常用于系统调用。R14连接寄存器当呼叫一个子程序时由 R14 存储返回地址 不像大多数其它处理器ARM 为了减少访问内存的次数访问内存的操作往往要 3 个以上指令周期带MMU 和 cache 的就更加不确定了把返回地址直接存储在寄存器中。这样足以使很多只有 1 级子程序调用的代码无需访问内存堆栈内存从而提高了子程序调用的效率。如果多于 1 级则需要把前一级的 R14 值压到堆栈里。在 ARM 上编程时应尽量只使用寄存器保存中间结果迫不得以时才访问内存。在 RISC 处理器中为了强调访内操作越过了处理器的界线并且带来了对性能的不利影响给它取了一个专业的术语溅出。R15程序计数寄存器指向当前的程序地址。如果修改它的值就能改变程序的执行流很多高级技巧就在这里面——译注。特殊功能寄存器Cortex‐M3 还在内核水平上搭载了若干特殊功能寄存器包括程序状态字寄存器组PSRs中断屏蔽寄存器组PRIMASK, FAULTMASK, BASEPRI控制寄存器CONTROL2.2 指令集 指令集是一个 CPU所能执行的所有指令的集合。它体现了一个 CPU 的基本功能影响着运行在这个CPU上的软件。指令集可以分为 CISC 和 RISC 两大类。与以前所有的 ARM处理器一样Cortex-M3 是一款 RISC处理器。指令格式 指令格式是用二进制表示指令的结构形式。指令一般由两部分构成操作码字段和操作数字段。操作码字段表示指令的操作功能和特性操作数字段表示参与操作的操作数。ARM Cortex-M3 指令格式如下所示opcode{cond}{s} Rd , Rn {,operand2}其中内的项是必需的{ }分内的项是可选的。opcode: 指令助记符(必需)如 MOV、LDR 等对应于指令操作码用来告诉ARM汇编器这条指令的功能。它的前面必须有至少一个空格符实际编程中通常使用一两个Tab键隔开。condcondition 的缩写表示指令的执行条件(可选如果没有表示无条件执行)常用的指令执行条件如图所示。三、STM32介绍1.STM32F1系列(主流类型) STM32F1系列微控制器基于Cortex-M3内核利用一流的外设和低功耗实现了高性能同时以可接受的价格利用简单的架构和易用的工具实现了高集成度能够满足工业、医疗和消费类市场的各种应用需求。 凭借该产品系列意法半导体在全球基于ARMCortex-M3的微控制器领域处于领先地位。后续内容讲述的就是STM32F1系列中的典型微控制器 STM32F103的开发。 STM32F1 系列微控制器包含以下5个产品线它们的引脚、外设和软件均兼容。 STM32F100超值型24MHz CPU具有电机控制功能。 STM32F101基本型36MHCPU具有高达1MB的Flash。 STM32F102USB 基本型48MHz CPU具备USB FS。 STM32F103增强型72MHz CPU具有高达 1MB 的 Flash、电机控制、USB和 CAN。 STM32F105/107互联型72MHz CPU具有以太网MAC、CAN 和 USB。2.命名规则 意法半导体公司在推出以上一系列基于 Cortex-M 内核的STM32微控制器产品线的同时也制定了它们的命名规则。通过名称用户能直观、迅速地了解某款具体型号的STM32微控制器产品。 综上所述STM32系列微控制器的名称主要由以下部分组成3.STM32F103系列 STM32F103 微控制器采用Cortex-M3 内核CPU 最高速度达 72MHz。该系列产具有 16KB~1MB Flash 多种控制外设USB全速接口和CAN。3.1 STM32F103功能图 STM32F103微控制器是一个基于ARM Cortex-M3内核设计的典型实例具体如图所示。 由图可见STM32F103 的主系统由4个主动单元和4个被动单元构成它们彼此之间通过一个多级的 AHB 总线构架相互连接。其中4 个主动单元包括 Cortex-M3内核、总线指令总线、数据总线、系统总线、通用DMA1 和通用DMA24个被动单元括内部SRAM、内部闪存存储器Flash、FSMC静态内存控制器和连接所有APB设备的AHB到APB桥。3.2存储器映像几个问题的理解1、为什么所有硬件使用的学习第一个都是点灯当你拿到一个硬件第一个实际操作一定是点灯我认为原因主要有两点1、 当你将一个板子进行了点灯成功说明你的系统环境配置成功可以对开发板进行基础编程了2、 基本的高低电平输出会写了不要小看点灯它不仅验证你的环境配置还学会了高低电平的输出整个硬件的学习大部分无外乎就是各种各样的高低电平的输出和输入。2、为什么要学会看操作手册硬件不可能凭空产生也不可能生产出来是拿来看的所以一定会有对应的操作手册。 其中包含核心芯片的介绍固件库的介绍和使用原理图等当学习到一定的程度就不需要去观看视频来学习新的硬件 只需要查看对应的手册即可因为一通百通。