APM32F425与STM32F407程序兼容性验证——以伺服方案ADC问题为例

2026-04-20 18:40:06/ By Admin

  APM32F425是珠海极海半导体推出的工业级高性能扩展型MCU,作为上一代APM32F407的引脚兼容升级版本,在内存资源和计算效率上进行了有效优化。该芯片与APM32F407、STM32F407、GD32F470等可实现程序全兼容,即无需更换硬件、无需修改软件,仅更换芯片并烧录原有代码即可正常运行,极大方便用户进行产品升级。

  本报告以通用伺服方案的软件工程为例,实际验证APM32F425与STM32F407的程序兼容性。源程序为基于STM32F407开发的伺服方案,底层采用ST的LL库。我们将该LL库伺服代码不做任何修改,直接烧录至APM32F425,以评估其实际兼容程度。

  程序运行结果

  程序烧录至APM32F425后,伺服各功能模块(除ADC采样外)均验证正常。但在实际伺服运行时,上电显示ADC采样初始值异常报警,伺服无法运行。

  通过仿真发现,APM32F425的ADC注入结果寄存器无法更新数据,具体如下图所示:

  图1 APM32F425仿真时的ADC采样结果(寄存器异常)

1.jpg

  图2 APM32F425仿真时的ADC采样结果(详细数据)

2.jpg

  作为对比,STM32F407和APM32F407的ADC采样结果完全正确。需要说明的是,本伺服方案的电流采样中,硬件电路将初始电压拉至1.65V,从而利用0~3.3V的电压范围表征正负电流。因此,ADC采样的初始值为2048(12位ADC,满量程4096),对应0电流。

  APM32F425的ADC采样异常表现为以下两点:

  a路电流采样的通道1数据异常;

  b路电流采样的4个通道数据不更新。

  ADC数据不更新问题的排查与定位

  经多方排查,最终定位问题原因为ADC配置部分的代码顺序。

  原有STM32F407/APM32F407的ADC初始化代码如下,运行正常:

MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();

LL_ADC_Enable(ADC1);
LL_ADC_Enable(ADC2);
LL_ADC_Enable(ADC3);

LL_ADC_INJ_StartConversionSWStart(ADC1);
LL_ADC_INJ_StartConversionSWStart(ADC2);
LL_ADC_INJ_StartConversionSWStart(ADC3);

LL_ADC_INJ_StartConversionExtTrig(ADC1, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);
LL_ADC_INJ_StartConversionExtTrig(ADC2, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);
LL_ADC_INJ_StartConversionExtTrig(ADC3, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);

  但在APM32F425上执行上述代码时,出现ADC不更新的异常。通过调整代码顺序——先配置注入通道转换,最后再使能ADC——问题得到解决。修改后的顺序如下:

MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();

LL_ADC_INJ_StartConversionSWStart(ADC1);
LL_ADC_INJ_StartConversionSWStart(ADC2);
LL_ADC_INJ_StartConversionSWStart(ADC3);

LL_ADC_INJ_StartConversionExtTrig(ADC1, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);
LL_ADC_INJ_StartConversionExtTrig(ADC2, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);
LL_ADC_INJ_StartConversionExtTrig(ADC3, LL_ADC_INJ_TRIG_EXT_RISINGFALLING);

LL_ADC_Enable(ADC1);
LL_ADC_Enable(ADC2);
LL_ADC_Enable(ADC3);

  修改后,APM32F425的ADC仿真结果如下:

  图3 APM32F425调整代码顺序后的ADC仿真结果

3.jpg

  此时,ADC数据不更新的问题已解决。但仍可发现:a、b两路电流采样的通道1均存在约10%的偏差(与正常值2048相比),这在伺服应用中同样不可接受。

  ADC通道1采样偏差问题的排查与定位

  进一步排查发现,问题出在ADC采样周期配置上。

  原有STM32F407/APM32F407采用28个采样周期,配置界面如下图所示:

  图4 STM32F407程序的ADC采样配置(28 cycles)

4.jpg

  在APM32F425中使用相同配置时,出现通道1采样偏差。

  将采样周期修改为3个采样周期,配置如下:

  图5 APM32F425修改后的ADC采样配置(3 cycles)

5.jpg

  修改后的ADC采样结果如下:

  图6 APM32F425修改采样周期后的ADC采样结果

6.png

  至此,ADC的所有问题均已解决。仿真采样显示正常,实际伺服运行也恢复正常,电机可正常运行。

  程序兼容性验证总结

  极海APM32F425芯片确实能够实现与STM32F407的程序全兼容,即基于ST底层库的产品代码可直接在APM32F425上运行。但在ADC采样方面,可能存在以下两种差异现象:

  ADC数据不更新(与代码顺序相关)

  通道1采样偏差(与采样周期相关)

  用户在移植过程中如遇到上述问题,可参考本验证报告提供的解决方案进行处理。

icon_up
close_white