本帖最后由 Peixu 于 2025-5-30 16:47 编辑
APM32F402 系列作为 APM32F103 系列的升级版本,在性能和功能上有显著提升。将基于 F10x 的项目移植到 F40x 时,需要对内核相关配置进行必要修改。以下从硬件架构差异、软件修改要点、性能优化原理三个方面进行详细说明。
一、硬件架构差异分析1. 内核升级带来的变化- 处理器内核:从 ARM Cortex-M3 升级到 Cortex-M4F
- CM3 内核最高主频 96MHz,CM4 可达 120MHz
- CM4 集成单精度 FPU 单元,支持 DSP 指令集
- 存储系统:
- F4 系列闪存访问速度提升,支持更高频率
- 新增 I-cache 和 D-cache 高速缓存
- 外设增强:新增 USB OTG、CAN 高级定时器等
二、软件修改要点解析1. 内核头文件替换- core_cm3.h 与 core_cm4.h 差异:
- CM4 头文件新增 FPU相关定义
- 中断向量表结构调整
- 系统控制块 (SCB) 定义扩展
1、在 stm32F10xb.h 文件中将#include "core_cm3.h"更改为#include "core_cm4.h"
2、将 stm32F10xb.h 文件中添加__CM4_REV 的宏定义,添加__FPU_PRESENT 的宏定义,
__MPU_PRESENT 赋值改成 1.
#define __CM4_REV 0x0001
#define __MPU_PRESENT 1 /*!< Other STM32 devices does not provide an MPU */
#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
#define __FPU_PRESENT 1
3、时钟初始化中添加 FPU 的使能判断
FPU 默认处于禁用状态,需通过 CPACR 寄存器使能:
* FPU settings */
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10 * 2)|(3UL << 11 * 2)); //!< set CP10 and CP11 Full Access
#endif
4、开启 I-cache 指令缓冲存储器和 D-cache 数据缓冲存储器,能提⾼指令运⾏速度。- 缓存工作原理:
- I-cache:存储最近执行的指令
- D-cache:存储最近访问的数据
- 命中率对性能影响显著
在时钟初始化时加上,FLASH->ACR |= 0X300;
仿真测试:
通过以上修改和验证,可充分发挥 APM32F402 系列的性能优势,实现从 F1 到 F4 的平滑升级。
在实际项目中,建议先在最小系统上进行基础功能验证,再逐步添加复杂功能模块。
|