本帖最后由 Alden 于 2025-4-27 15:35 编辑
#申请原创# #技术资源#
APM32F402是极海最新的M4内核32位MCU,从数据手册的外设规格和用户手册的时钟和外设寄存器来看,APM32F402是覆盖兼容APM32F103xB系列的。
也可以说,APM32F402就是APM32F103更换内核M4内核的升级版本。根据之前测试的coremark跑分的数据来看,主要是性能和浮点运算能力有了很大提升:APM32F402的coremark测试 - 极海MCU官方技术支持论坛
ARM Cortex-M3与Cortex-M4内核均属于ARM Cortex-M系列微控制器,专为嵌入式实时控制设计,具备低功耗、高代码密度和高效中断响应能力。以下是两者的核心异同及兼容性分析: 相同点- 架构基础
两者均采用哈佛总线架构(指令与数据总线分离),支持Thumb-2指令集,兼容16位和32位混合编码,确保高代码效率。 - 中断机制
均集成嵌套向量中断控制器(NVIC),支持低延迟中断响应和优先级动态调整,满足实时控制需求。 - 内存管理
支持非对齐数据传输(硬件自动拆分为对齐操作),并可选配存储器保护单元(MPU)以增强系统安全性。
核心差异- 运算能力
Cortex-M4在M3基础上扩展了DSP指令集(如SIMD单指令多数据操作)和可选单精度浮点单元(FPU),显著提升数字信号处理及浮点运算效率。 - 性能优化
M4通过指令流水线优化和硬件除法器加速,在复杂算法场景(如滤波、FFT)中性能较M3提升30%-50%。 - 应用定位
M3适用于基础实时控制(如工业传感器、电机驱动),而M4更偏向需高计算密度的场景(如音频处理、智能传感融合)。
兼容性Cortex-M4在设计上向下兼容M3的指令集和编程模型: - 软件兼容:针对M3编写的代码可直接在M4上运行,但若涉及M4新增的DSP或FPU指令,则无法反向兼容M3。
- 硬件扩展:M4新增外设(如FPU)需通过特定寄存器配置启用,未使用时内核行为与M3一致。
综上,Cortex-M4可视为M3的功能增强版,两者在基础架构上高度一致,但M4通过扩展指令集和运算单元覆盖更广泛的高性能应用场景。
通过ARM相关参考资料来看,M4基本是可以兼容M3的,接下来就对比下外设的差异,尝试将APM32F103的代码直接在APM32F402上运行。 APM32F402和APM32F103的存储器映射对比 APM32F402和APM32F103的中断向量对比
通过外设的对比来看除了USB、I2C2有差异以外,APM32F402是可以兼容APM32F103的其他外设的,并且还增加了USB OTG、TMR8、CAN2、UART4、TMR5。 APM32F402的CAN1与USB的寄存器和中断向量表做了分离,所以解决了CAN与USB不能共用的问题,CAN保持与103的兼容,USB升级成USB OTG也就无法直接兼容103了,需要注意。 并且对比时钟配置和外设寄存器来看,APM32F402都是兼容的,所以,理论上APM32F402可以直接兼容运行APM32F103的代码,也就是可以直接跑STM32F103的代码。 接下来开始尝试。 测试例程选择APM32F10x_SDK_V1.8\Examples\ADC\ADC_DMA 该例程涉及时钟、ADC、串口、DMA,能够初步判断兼容性情况。 实现是安装APM32F402的PACK包,能够在极海官网上下载,或者是KEIL上在线下载。 然后接上烧录器,看能否识别到芯片ID 检查Flash分散加载文件是否正确。 需要注意APM32F103的SDK中没有FPU的配置,所以工程上的这个Floating Point Hardware需要选择Not Used,要不然会编译出错。 Use MicroLIB需要勾选使能上。 完成工程配置后就能烧录仿真运行了,可以看代码正常运行下去了。 同时看串口的输出和测试ADC采样的值。 都是非常正常的在运行,说明APM32F402可以直接兼容使用103的代码。 同样的方式,测试了几个野火STM32F103的例程,都是可以正常运行的,大家也可以自己尝试下。 下面展示的是:[野火]《STM32库开发实战指南》\F103_指南者\标准库_配套代码\30-ADC—电压采集\4-ADC—双ADC(同步规则) |