🟦 u5-02 内核与 TrustZone:Cortex-M33 与双世界
🟦 STM32U575 数据手册初学者精讲 · 第 2 / 10 章
🗨️ Cortex-M33 不是 M3 的简单升级:它增加了 FPU、DSP 扩展、MPU,还引入了 TrustZone「安全世界」与「非安全世界」的双世界架构。
这一章在干嘛? 先搞清楚 U575 的心脏长什么样,再理解 TrustZone 对你的代码、外设、调试会产生什么影响。
Cortex-M33:M3 的超低功耗接班人
STM32U575 使用 Arm Cortex-M33,主频最高 160 MHz。和经典 M3 相比,M33 的主要升级:
| 特性 | M3(如 F103) | M33(U575) | 对初学者的影响 |
| 浮点 | 无 | 单精度 FPU | 可以直接算 float,不用软件库模拟 |
| DSP | 多数无 | 内置 DSP 指令 | FIR/FFT 等运算更快 |
| MPU | 可选 | 标配 | 可以限制不同任务访问的内存区域 |
| TrustZone | 无 | 标配 | 代码/数据/外设可分安全/非安全 |
一句话:M33 ≈ M4 的 DSP/FPU + M3 的低功耗血统 + 安全扩展。
M33 仍然属于 Cortex-M 家族,所以你在 F103 上写的 NVIC、SysTick、中断优先级那套知识,基本都能平移过来。
TrustZone:把一颗芯片劈成两半
TrustZone 是 ARM 的安全扩展。它把 CPU 的运行状态分成两个世界:
| 世界 | 英文 | 能访问什么 | 常见用途 |
| 安全世界 | Secure | 所有资源(包括非安全资源) | 密钥管理、安全启动、敏感算法 |
| 非安全世界 | Non-secure | 只能访问非安全资源 | 普通 RTOS、应用代码、驱动 |
这带来几个实际影响:
- 内存映射:Flash、SRAM 可以被配置为「仅安全可访问」「仅非安全可访问」「均可访问」。
- 外设:每个外设都可以标记为 securable,由安全世界决定是否允许非安全世界访问。
- 中断:NVIC 也有安全/非安全两套中断向量表。
- 调试:安全世界代码默认无法被普通调试器看到,调试时需要输入密码或解除 RDP。
如果项目不需要安全启动/加密,你可以暂时把 TrustZone 关掉(TZEN=0),把它当成普通 M33 来用。但别忽略:很多例程默认 TZEN=1,会让内存和外设访问报 BusFault。
FPU 与 DSP:算得快的底气
- FPU 是单精度浮点单元。没有 FPU 时,一次
a * b 可能要几十条整数指令;有 FPU 时一条指令搞定。 - DSP 指令 包括 SIMD、饱和运算、乘累加等。做 FFT、FIR 滤波、电机控制算法时效率很高。
做惯 F103 的同学注意:在 U575 上可以直接用 float 写算法,但电源敏感场景仍建议定点/查表,因为浮点运算功耗更高。
MPU:内存保护单元是干什么的
MPU 可以把 SRAM 分成若干区域,给每个区域设置「可读/可写/可执行」属性。常见用法:
- 防止任务 A 越界写入任务 B 的栈。
- 把某些 RAM 区域标记为「不可执行」,防止栈溢出攻击。
- 配合 TrustZone 做更细粒度的权限控制。
对初学者来说,MPU 不是必选项;但当你跑 RTOS、或做安全认证时,它会非常有用。
🧠 小测验M33 相比 M3 多了哪些关键能力?
FPU、DSP、TrustZone、MPU。
TrustZone 把芯片分成哪两个世界?
Secure(安全世界)和 Non-secure(非安全世界)。
如果不需要安全功能,最省心的做法是什么?
TZEN=0 关闭 TrustZone,按普通 M33 使用。