[APM32F4] APM32F425-从ST的库函数移植到APM的库函数的工程搭建指导

[复制链接]
211|4
zyz0926 发表于 2025-11-29 14:40 | 显示全部楼层 |阅读模式
本帖最后由 zyz0926 于 2025-11-29 14:42 编辑

#申请原创# #技术资源#

APM32F425 是珠海极海半导体推出的工业级高性能拓展型 MCU,采用 Arm® Cortex@-M4F 内核,工作主频高达 240MHz,支持 FPU DSP 指令,是上一代产品APM32F407pintopin升级版本,在内存资源以及计算效率上进行了有效的优化。

本报告以通用伺服方案的软件工程为例,通过实际对比APM32F425 工程以及STM32F407工程,来指导用户如何使用APM32SDK库函数搭建APM32F425工程。

1. 下载最新版本的SDK
官网下载路径:https://www.geehy.com/design/software
APM32F4xx_DAL_SDK,版本号v1.3.0,该版本SDK可以支持APM32F411系列,APM32F465系列,APM32F405/407系列,APM32F417系列,APM32F402系列,APM32F425/427系列等芯片。

2. 建立APM32F425工程
安装pack包,然后选择芯片型号APM32F425
file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps1.jpg 67562692a958521a65.png

3. 导入SDK文件
建立工程需要的文件,需要从SDK里直接导入工程文件夹,需要的文件大概分为几类:
1.启动文件和系统文件
system_apm32f4xx.c
system_apm32f4xx.h
startup_apm32f427xx.s
2.芯片底层头文件
类如apm32f4xx.hapm32f425xx.h
还包括core_cm4.h等内核相关的底层寄存器定义和核心功能访问头文件
还包括cmsis_armcc.h等编译器的专用头文件,核心作用是为 CMSIS 核心功能提供编译器相关的底层支持
3.芯片外设功能等头文件以及源文件
类如apm32f4xx_adc.capm32f4xx_adc.h 等。该部分文件,实际使用时,可按需导入,根据实际产品的功能定义来进行选择。但是建议提前将全部文件做成一个平台式的指导文件夹,任何产品需要开始移植时,直接将该指导文件导入工程,做到一键支持开发,节省大量实际开发时间。

4. 工程文件添加以及路径添加
   将部分需要使用的底层文件导入工程,方便后续程序的快速寻找以及调用,也方便问题排查,函数寻找等等。
file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps2.jpg 1879692a958de3c80.png
   同时,将需要调用的底层文件,在options for target界面内增加调用路径。
file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps3.jpg 18906692a95957376d.png

5. 进行外设底层配置
   这部分是移植的关键,主要是对APM32的库函数的理解,在实际外设配置时,调用对应的函数完成所有外设的配置。
   以其中一个TIM定时器配置正交解码举例,具体说明APM库函数的运用。
   外设的配置主要包括时钟的配置,外设时钟,GPIO时钟;GPIO的配置,上下拉,复用等;外设寄存器的配置,主要是实现外设的基本功能。
   部分功能可能没有对应的函数调用,就需要用户根据自身需求来实际操作寄存器去完成功能的配置。

void MX_TIM2_Init(void)     //ea/eb
{        
TMR_BaseConfig_T TMR_TimeBaseStruct;
  GPIO_Config_T gpioConfig = {0};
  /* Peripheral clock enable */        
        RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR2);        
        RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);
  /**TIM2 GPIO Configuration
  PA0-WKUP   ------> TIM2_CH1
  PA1   ------> TIM2_CH2
  */

gpioConfig.pin = PUL_Pin|DIR_Pin;
  gpioConfig.mode = GPIO_MODE_AF;
  gpioConfig.speed = GPIO_SPEED_100MHz;
  gpioConfig.otype = GPIO_OTYPE_PP;
  gpioConfig.pupd = GPIO_PUPD_NOPULL;
  GPIO_Config(GPIOA, &gpioConfig);

        GPIO_ConfigPinAF(GPIOA,GPIO_PIN_SOURCE_0 ,GPIO_AF_TMR2);
        GPIO_ConfigPinAF(GPIOA,GPIO_PIN_SOURCE_1 ,GPIO_AF_TMR2);

        GPIO_ResetBit(GPIOA,GPIO_PIN_0);
        GPIO_ResetBit(GPIOA,GPIO_PIN_1);


  TMR_SelectOutputTrigger(TMR2, TMR_TRGO_SOURCE_ENABLE);
  TMR_EnableMasterSlaveMode(TMR2);

  TMR_TimeBaseStruct.division = 1;
  TMR_TimeBaseStruct.countMode = TMR_COUNTER_MODE_UP;   //0x30
  TMR_TimeBaseStruct.period = 0xffffffff;
  TMR_TimeBaseStruct.clockDivision = TMR_CLOCK_DIV_1;
        TMR_ConfigTimeBase(TMR2,&TMR_TimeBaseStruct);
  TMR_DisableCCPreload(TMR2);

  TMR_ConfigEncodeInterface(TMR2, TMR_ENCODER_MODE_TI2,TMR_IC_POLARITY_RISING,TMR_IC_POLARITY_FALLING);

  MODIFY_REG(TMR2->CCM1, TIM_CCMR1_IC1PSC, TIM_CCMR1_IC1PSC_0);  //div2
        MODIFY_REG(TMR2->CCM1, TIM_CCMR1_IC2PSC, TIM_CCMR1_IC2PSC_0);  //div2

        MODIFY_REG(TMR2->CCM1, TIM_CCMR1_IC1F, TIM_CCMR1_IC1F_1|TIM_CCMR1_IC1F_3);  //Filter
        MODIFY_REG(TMR2->CCM1, TIM_CCMR1_IC2F, TIM_CCMR1_IC2F_1|TIM_CCMR1_IC2F_3);  //Filter

        MODIFY_REG(TMR2->CCM1, TIM_CCMR1_CC1S, TIM_CCMR1_CC1S_0);
        MODIFY_REG(TMR2->CCM1, TIM_CCMR1_CC2S, TIM_CCMR1_CC2S_0);

}

6. 移植建议
学习使用APM的库函数来完成外设配置时,首先建议用户从SDK的例程里面寻找基础的使用方法,包括函数的调用步骤以及使用的规范等等。
调用路径为:SDK\F4-SDK\APM32F4xx_SDK_v1.3\Examples
比如用户如果要使用定时器配置PWM,就可以参考PWMOutput对应的例程:
SDK\F4-SDK\APM32F4xx_SDK_v1.3\Examples\TMR\TMR_PWMOutput\Project\MDK。
打开工程后,即可看到例程给的配置,用户要实现对应的功能,直接进行参考即可。实际用户的功能可能更为复杂,需要对外设的有更胜层次的理解。
file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps4.jpg 40438692a959f8a6d2.png

 楼主| zyz0926 发表于 2025-11-29 14:42 | 显示全部楼层
真的问题不大 发表于 2025-12-3 09:24 | 显示全部楼层
很详细的移植指南哦
转瞬回声 发表于 2025-12-3 10:14 | 显示全部楼层
我是采取直接搭建。从底层再写一遍。要不,总是不放心
 楼主| zyz0926 发表于 2025-12-3 10:34 | 显示全部楼层
极海的芯片,没有自己的代码生成工具,包括国内其他家也是,这也是一个不足。移植会麻烦一点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0