M4 内核开发基础知识
STM32MP1 是 ST 推出的首款 Cortex-A7(下文统一简称为 A7)+ Cortex-M4(下文统一简称 M4) 多核异构 MPU
1. 前言
1.1 简介
STM32MP1 是 ST 推出的首款 Cortex-A7(下文统一简称为 A7)+ Cortex-M4(下文统一简称 M4) 多核异构 MPU
A7 可以运行 Linux 系统,借助 Linux 系统庞大而丰富的软件组件处理复杂应用。比如 UI 界面、网络应用等;
M4 内核的优势就是实时性,因此可以在 M4 内核上运行对于实时性要求严格的应用,比如电机控制、无人机飞控等各种控制算法。 M4 也可以运行各种 RTOS 操作系统,比如 FreeRTOS、UCOS 等。
1.2 相关资料
- ST官网:https://www.st.com/content/st_com/zh.html,可设置中文显示


- ST中文社区:https://www.stmcu.org.cn/




2. MP157 M4内核和M4单片机的异同
- 开发工具、方法一致
STM32MP1 的 M4 和 STM32F4 单片机开发工具一直,都可以通过 MDK、IAR 或 STM32CubeIDE 等 IDE 工具开始,可以直接使用 STlink、JLink 等调试工具进行代码调试。
ST 也为 STM32MP1 提供了 HAL 库,因此我们是可以使用 HAL 库进行开发 M4 内核开发的。
- 代码存储不同,导致使用不方便
STM32MP1 的 M4 内核没有内置 Flash,因此不能直接将代码下载到 Flash 里面,在调试的时候需要将代码下载到内部 RAM 中,但是掉电 RAM 中的代码就会丢失。STM32MP1 的做法是用 A7 启动 Linux 内核,然后在 Linux 系统里面加载 M4 的 bin 文件,使用起来比 STM32F4 复杂。
STM32F4 可以直接在 IDE 上将代码下载到内置 Flash 中,使用起来非常方便,因此 STM3MP1 的 M4 内核不能完全替代 STM32F4 单片机。
- 资源分配问题
由于外设复用,导致可用外设资源减少 STM32MP1 内部有 A7+M4 两种不同的内核,但是 STM32MP1 的外设资源是一定的,因此就涉及到 A7 和 M4 争抢外设资源的情况,尤其是当 A7 也运行 Linux 系统时候。
即使你只使用 M4 内核,可以访问的外设资源也是有限的,因为有些资源只能 A7 访问。但是 STM32F4 单片机就不会存在这个问题,这也是 STM32MP1 的 M4 不能替代 STM32F4 单片机的另一个主要原因。
总之,STM32MP1 内部的 M4 有其用武之地,将以前 Cortex-A+Cortex-M 单片机的方案集成到一片 SOC 上,简化硬件成本,但是缺点就是 M4 作为单纯的单片机来用的话使用不方便。因此对于 STM32MP1 的内部 M4 要理性看待、合理使用。
3. A7 和 M4 内核公共资源
STM32MP157 内部有 A7 和 M4 两种不同架构的内核,因此就会存在外设资源分配的问题,有些外设是只能 A7 访问的,有些只能 M4 访问,有些是 A7 和 M4 都能访问。
首先,STM32MP157 有多种运行时上下文,这些运行时上下文对应不同的内核和安全模式。
-
A7 安全模式:TrustZone,和 Linux 内核处于同一等级;
-
A7 非安全模式:A7 正常运行 Linux 系统的时候;
-
M4 模式:就是 M4 核运行的时候;







注:ST 官方 EVK 开发板上 I2C4 连接了一个 PMIC 芯片,因此表 2.4.1.1 中 M4 是无法使用 I2C4 的。如果你所使用的板子上 I2C4 没有连接 PMIC,那么 M4 是可以使用 I2C4 的。建议严格按照表 2.4.1.1 中的外设资源分配来使用 M4 内核,防止出现一些不可解决的错误,尤其是在将以前 STM32F4 单片机中的程序移植到 ST32MP1 的 M4 内核上的时候
4. 开发环境搭建
主要运用工具软件:keil、st-link
安装过程略去,网上资源很多!
记录一下配置

本文可自由转载与修改,但需保留作者署名与出处链接,不得用于商业用途,且衍生作品需以相同方式共享。 转载请注明:MacLodge's Blog · M4 内核开发基础知识