STM32 Basic Knowledge

2023-02-09
6分钟阅读时长

嵌入式系统组成

嵌入式系统由硬件和软件组成。

硬件

硬件是嵌入式系统的运行基础,提供了嵌入式软件运行的物理平台、通信接口。

硬件主要包括处理器、存储器、IO 设备和通信接口。

  1. 处理器包括:

    1. 微控制器 MCU
    2. 微处理器 MPU
    3. 数字信号处理器 DSP
    4. 片上系统
  2. 存储器包括:

    1. 易失性存储器
    2. 非易失性存储器
  3. 片上 IO 外设包括:

    1. 数字键盘
    2. MOS 管
    3. LED
    4. LCD
    5. 传感器
    6. 开关与按键
    7. 摄像头
  4. 嵌入式 IO 通信接口包括:

    1. UART
    2. SPI
    3. IIC
    4. USB
    5. CAN
    6. I2S
    7. Ethernet
    8. ZigBee

软件

软件是嵌入式系统的控制核心,软件用于控制系统运行、实现系统功能。

软件包括:

  1. 引导程序
  2. 设备驱动程序
  3. 嵌入式操作系统(可选)
  4. 应用软件

嵌入式系统特点

  1. 实时性高
  2. 可靠性高
  3. 生命周期长
  4. 快速开发
  5. 交叉编译
  6. 面向特定应用场景
  7. 可裁剪

嵌入式开发过程

交叉编译

宿主机 是用于开发嵌入式系统的开发环境,使用它提供的嵌入式开发环境为开发提供过程支持。

目标机 是所开发的嵌入式系统的运行环境,为嵌入式软件提供工作和运行条件。

交叉编译 指的是由宿主机编译可执行文件,交由目标机执行的过程。

连接方式

连接方式分为两种,一是通过物理线路连接,二是通过逻辑连接。

  1. 物理线路连接包括串口(Serial Port)、以太网口(Ethernet)、在线调试器(SWD/JTAG)等;
  2. 逻辑连接即按照某种通信协议建立起来的通信连接,如 ZigBee,Bluetooth 等。

开发环境

常用的嵌入式系统的集成开发环境有:

  1. ARM ADS
  2. KEIL MDK 使用的编译器是 armcc
  3. IAR EWARM
  4. STM32CubeIDE 使用的编译器是 arm-none-eabi-gcc

对于嵌入式程序的调试,通常可以使用:

  1. 软件仿真器(软件模拟硬件)
  2. ROM 监控器(运行宿主机的调试代理与运行目标机的监控程序通信)
  3. 在线仿真器(替代目标机上的 CPU)
  4. 片上调试(内置于目标开发板中的 CPU 中的调试模块硬件实现)

目标文件

链接器 把所有目标文件和相关的库函数组合成可重定址的目标程序文件。 该文件由下列段组成:

  1. txt
  2. data 段 初始化的全局变量
  3. bss 段 未初始化的全局变量

定址器 是根据预设的描述各段在存储器中地址信息的脚本文件,对可重定址的目标程序文件的每个段指定物理内存地址,并输出包含二进制内存映像的可执行文件。

启动文件 由汇编编写,是系统上电复位后第一执行的程序。

ARM 处理器

ARM 含义

  1. ARM 指代 Advanced RISC Machine Limited 公司或其公司的产品;
  2. ARM 指代 RISC MPU/MCU 的体系结构; 如同 x86 架构是一种 CISC 体系结构一样, ARM 架构是一种 RISC 体系结构。另外还有 MIPS 架构、 PowerPC 架构等等,它们也属于 RISC 体系结构。

体系结构主要包含 RISC 和 CISC 两种:

  1. RISC 是精简指令集,指令数量少,设计相对简单,能耗较低,更多的应用在各种移动终端;
  2. CISC 指的是复杂指令集,指令数量多、设计复杂、能耗高,例如 intel 的处理器使用这种指令集;

ARM 处理器

  1. ARM 处理器是英国 Acorn 有限公司设计的低功耗成本的第一款 RISC 微处理器,全称为 Advanced RISC Machine;
  2. ARM 处理器本身是 32 位设计,但也配备 16 位指令集,一般来讲比等价 32 位代码节省达 35%,却能保留 32 位系统的所有优势;
  3. ARM 经常混淆的名词是内核版本号和片上系统称号,内核版本号和 Soc 号都是由 ARM 公司确定的,而芯片的型号主要由生产的厂商确定,并且一个内核版本号可能会对应多个 Soc 号。

常见的内核的版本号与对应的片上系统版本号如下表所示:

内核版本号 SoC 版本号
ARMv4 ARM7
ARMv4 ARM9
ARMv5 ARM9+xScale
ARMv6 ARM11
ARMv7 Cortex-M/Cortex-A/Cortex-R

其中:

  1. SoC 版本号仅 ARM7 使用冯诺依曼结构,ARM9/10/11 均使用的是哈佛结构;
  2. 表中的 Cortex 系列释义如下:

    1. Cortex-M 即 M-Profile,针对微控制器单片机方面的场合,其中的 M 表示 micontroller,微处理器,此系列主要用于做单片机,主要代表有 STM32;
    2. Cortex-A 即 A-Profile,其中的 A 表示 appliacation,应用级处理器,面向尖端的基于虚拟内存的操作系统和用户应用,此系列主要用于平板电脑,手机等,具有低功耗的特点;
    3. Cortex-R 即 R-Profile,针对实时系统,其中的 R 表示 realtime,此系列主要用于航天等实时性要求较高的领域;

ST 微控制器

ST/STM/STM32 含义

  1. ST 指的是 ST 意法半导体公司
  2. STM 指的是 ST Microcontroller,即 ST 微控制器
  3. 32 指的是 32 位 STM32 指的是基于 ARM 架构的 32 位微控制器
  4. STM32F767IGT6 中:

    1. F 表示基础类型,L表示低功耗,H表示高性能,MP 使用 MPU
    2. 767 指的是芯片产品系列名称
    3. I 指的是 176 引脚
    4. G 指的是闪存 Flash 容量为 1MB
    5. T 指的是封装类型为 QFP
    6. 6 指的是温度范围为工业级,-40-85℃。

MPU/MMU

  1. MPU(Memory Protection Unit)

    1. 它是内存保护单元,用于保护内存;
    2. 它在大多数计算机的低功耗处理器中实现,更新计算机处理器的指令提取和数据访问等事务;
    3. 它用来防止进程访问受保护的内存,有助于防止错误出现。
  2. MMU(Memory Management Unit)

    1. 它是内存管理单元,用于处理和管理内存;
    2. MMU 会在程序调用时陷入内核态并保存现场资源和进行额外处理;
    3. 运行诸如 Linux、WinCE 等多用户多进程操作系统,都需要 MMU,才能为每个用户进程分配独立的地址空间;
    4. 运行类似于 ucOS、ucLinux 的精简实时 RTOS 则不需要 MMU。
  3. 区别对比:

    1. MMU 具备而 MPU 不具备的特性包括:缓存控制,总线仲裁,bank 切换。这些特性是更复杂的计算机所需要的,以便信息处理流程更顺畅无误。
    2. 通过使用 MMU,你能优化你的计算机性能,因为它可以让微处理器不用关心上述特性,由独立的 MMU 单元来全权负责。

MPU/MCU

  1. MCU(Mirco Controller Unit)是微控制器;

    1. 典型的 MCU 通常使用片内 flash 存储器来存储和执行程序代码。以这种方式存储程序意味着 MCU 有非常快的启动时间,上电能够快速执行代码;
    2. 片内存储还有个优势是可以加密程序。使用片内存储方式唯一不足就是总存储空间受 MCU 本身所限;
    3. 目前市场上绝大多数 flash 型 MCU 最大空间为 2M 字节,从各种应用上看,这证明存储空间是一个限制因素。
  2. MPU (Micro Processor Unit)是微处理器;

    1. MPU 没有存储空间的限制,MPU 使用外部存储器提供程序和数据空间;程序一般放在非易失性存储器如 NAND 或者串行 Flash 内;启动时,程序载入到外部 DRAM 中,然后开始执行;
    2. 上述内容表明 MPU 没有 MCU 启动运行来的快,但 MPU 可扩展的外部 DRAM 和 NVM 容量能达到数百 Mbytes,甚至达到 Gbytes;
    3. 供电方面,一般 MCU 仅仅需要单电压供电,而 MPU 需要几路不同的电压分别给 IO,内核,DDR 等供电,开发者往往需要在电路板上设计附加的电源转换芯片。
  3. MPU 和 MCU 本质上是因为应用定位不同,为满足不同的应用场景而按不同方式优化出来的两类器件:

    1. MPU 注重通过较为强大的运算/处理能力,执行复杂多样的大型程序,通常需要外挂大容量的存储器。
    2. 而 MCU 通常运行较为单一的任务,执行对于硬件设备的管理/控制功能。通常不需要很强的运算/处理能力,因此也不需要有大容量的存储器来支撑运行大程序。通常以单片集成的方式在单个芯片内部集成小容量的存储器实现系统的“单片化”。
下一页 STM32 Cube