打印
[APM32F4]

APM32F402 用cubemx开发浮点运算(FPU)功能开启移植

[复制链接]
133|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peixu|  楼主 | 2025-5-30 15:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 的平滑升级。
在实际项目中,建议先在最小系统上进行基础功能验证,再逐步添加复杂功能模块。




使用特权

评论回复
沙发
涡流远见者| | 2025-5-31 08:55 | 只看该作者
楼主 您的 测试代码在哪里?在哪里?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

57

帖子

0

粉丝