本帖最后由 zyz0926 于 2025-11-29 14:42 编辑
#申请原创# #技术资源#
APM32F425 是珠海极海半导体推出的工业级高性能拓展型 MCU,采用 Arm® Cortex@-M4F 内核,工作主频高达 240MHz,支持 FPU 和 DSP 指令,是上一代产品APM32F407的pintopin升级版本,在内存资源以及计算效率上进行了有效的优化。
本报告以通用伺服方案的软件工程为例,通过实际对比APM32F425 工程以及STM32F407工程,来指导用户如何使用APM32的SDK库函数搭建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
3. 导入SDK文件 建立工程需要的文件,需要从SDK里直接导入工程文件夹,需要的文件大概分为几类: 1.启动文件和系统文件 system_apm32f4xx.c system_apm32f4xx.h startup_apm32f427xx.s 2.芯片底层头文件 类如apm32f4xx.h,apm32f425xx.h等 还包括core_cm4.h等内核相关的底层寄存器定义和核心功能访问头文件。 还包括cmsis_armcc.h等编译器的专用头文件,核心作用是为 CMSIS 核心功能提供编译器相关的底层支持 3.芯片外设功能等头文件以及源文件 类如apm32f4xx_adc.c,apm32f4xx_adc.h 等。该部分文件,实际使用时,可按需导入,根据实际产品的功能定义来进行选择。但是建议提前将全部文件做成一个平台式的指导文件夹,任何产品需要开始移植时,直接将该指导文件导入工程,做到一键支持开发,节省大量实际开发时间。
4. 工程文件添加以及路径添加 将部分需要使用的底层文件导入工程,方便后续程序的快速寻找以及调用,也方便问题排查,函数寻找等等。 file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps2.jpg
同时,将需要调用的底层文件,在options for target界面内增加调用路径。 file:///C:/Users/apex/AppData/Local/Temp/ksohtml456/wps3.jpg
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
|