APM32F425是珠海极海半导体推出的工业级高性能拓展型微控制器,最高主频可达240MHz。为保证芯片稳定、可靠运行,必须在软件层面完成正确的时钟配置。本文将围绕APM32F425时钟树架构、标准配置流程及官方SDK代码实现,完整阐述时钟配置方法。
一、APM32F425时钟树核心组成
APM32F425时钟系统分为内部时钟和外部时钟两大类,通过锁相环倍频、总线分频处理后,为芯片内核及各类外设提供稳定时钟信号,其核心组成如下:
1.内部时钟源(无需外部硬件)
内部时钟基于RC振荡器产生,无需外接晶振,具备快速启动特性,适用于调试或无外部晶振的应用场景:
内部高速时钟(HSI):频率为16MHz,时钟精度一般,可作为系统备用时钟源;
内部低速时钟(LSI):频率为40kHz,主要用于独立看门狗(IWDG)、实时时钟(RTC)等低功耗功能模块。
2.外部时钟源(需外接晶振,高精度)
外部时钟需搭配硬件晶振实现,时钟精度高,是工业级正式产品的首选方案:
外部高速时钟(HSE):支持4~26MHz晶振(常用8MHz、12MHz、25MHz),包含两种工作模式:晶振模式(HSE Oscillator,外接无源晶振+负载电容,稳定性最优,为推荐方案)、旁路模式(HSE Bypass,外接有源时钟信号,无需负载电容);
外部低速时钟(LSE):32.768kHz专用晶振,专为RTC实时时钟提供精准计时基准。
3.核心时钟生成与分配模块
锁相环(PLL):系统时钟倍频核心单元,可将HSI或HSE时钟进行倍频处理,是生成系统时钟(SYSCLK)的核心部件;
系统时钟(SYSCLK):APM32F425最高支持240MHz,受芯片硬件限制,严禁超频运行,否则会导致芯片工作异常;
外设总线分频器:包含AHB分频器、APB1分频器、APB2分频器,将系统时钟分频后为不同外设提供时钟:
AHB总线时钟(HCLK):最高频率240MHz,为CPU、内存、DMA等核心外设提供时钟;
APB1总线时钟(PCLK1):最高频率60MHz,驱动UART2/3/4/5、I2C、SPI2/3等低速外设,分频系数不得小于4;
APB2总线时钟(PCLK2):最高频率120MHz,驱动UART1、SPI1、ADC、TIM1等高速外设,分频系数不得小于2。
二、标准时钟配置步骤
APM32F425时钟配置需遵循硬件时序要求,分三步完成,确保时钟信号稳定后再投入使用:
步骤1:使能目标时钟源并等待时钟稳定
根据应用需求选择时钟源(工业产品优先选用高精度HSE,调试场景可选用HSI),通过寄存器置位使能对应时钟源;循环检测时钟稳定标志位,待标志位置1、硬件时钟输出稳定后,再进行后续配置,避免使用未稳定时钟引发系统异常。
步骤2:配置PLL参数并使能锁相环
选定PLL输入时钟源(PLL_SRC:HSI或HSE);配置PLL倍频系数(PLL_MUL)、预分频系数(PLLP、PLLQ等),保证PLL输出时钟不超过240MHz;使能PLL模块,等待PLL锁定标志位生效,确认锁相环工作稳定。
步骤3:配置系统总线分频器
配置AHB分频器(AHB_PRE),常规设置为不分频,即HCLK=SYSCLK=240MHz;配置APB1分频器(APB1_PRE),保证PCLK1≤60MHz,常用分频系数为4,即PCLK1=HCLK/4=60MHz;配置APB2分频器(APB2_PRE),保证PCLK2≤120MHz,常用分频系数为2,即PCLK2=HCLK/2=120MHz。
三、实际代码实现与配置说明
APM32F425官方SDK的时钟配置逻辑与常规架构不同,相关代码封装在system_apm32f4xx.c系统文件中,在main函数执行前自动运行。基于官方SDK开发时,无需重新编写时钟配置函数,仅需根据硬件需求修改宏定义参数。
1.时钟配置核心函数
static void SystemClockConfig(void)
{
__IO uint32_t i;
// 使能外部高速时钟HSE
RCM->CTRL_B.HSEEN = BIT_SET;
// 等待HSE时钟稳定
for (i = 0; i < HSE_STARTUP_TIMEOUT; i++)
{
if (RCM->CTRL_B.HSERDY)
{
break;
}
}
// HSE稳定后执行后续配置
if (RCM->CTRL_B.HSERDY)
{
// 配置电源调节器为1级电压输出模式
RCM->APB1CLKEN_B.PMUEN = BIT_SET;
PMU->CTRL_B.VOSSEL = REG_VOLTAGE_SCALE;
// AHB分频配置:HCLK = SYSCLK / 1
RCM->CFG_B.AHBPSC = 0x0000;
// APB2分频配置:PCLK2 = HCLK / 2
RCM->CFG_B.APB2PSC = APB2_PSC;
// APB1分频配置:PCLK1 = HCLK / 4
RCM->CFG_B.APB1PSC = APB1_PSC;
// 配置主PLL参数
RCM->PLL1CFG = PLL_B | (PLL_A << 6) | (((PLL_C >> 1) -1) << 16) |(PLL_D << 24);
RCM->PLL1CFG_B.PLLCLKS = 0x01;
// 使能主PLL
RCM->CTRL_B.PLL1EN = BIT_SET;
// 等待PLL锁定稳定
while (RCM->CTRL_B.PLL1RDY == 0)
{
}
// 配置Flash预取指、指令缓存、数据缓存及等待周期
FMC->ACCTRL = FLASH_WAIT_PERIOD | BIT8 | BIT9 | BIT10;
// 选择主PLL作为系统时钟源
RCM->CFG_B.SCLKSEL = RESET;
RCM->CFG_B.SCLKSEL = 0x02;
// 等待系统时钟源切换完成
while ((RCM->CFG_B.SCLKSELSTS) != 0x02)
{
}
}
else
{
// HSE启动失败,系统时钟配置异常
}
// 更新系统核心时钟频率
SystemCoreClockUpdate();
}2.关键宏定义配置
在system_apm32f4xx.c文件中,针对APM32F425/APM32F427系列芯片的PLL参数宏定义如下,用户可根据实际硬件需求修改:
#if defined(APM32F425xx) || defined(APM32F427xx)
/* PLL_VCO = (HSE_VALUE 或 HSI_VALUE / PLL_B) * PLL_A */
#define PLL_B 10U
/* USB OTG FS、SDIO和RNG时钟 = PLL_VCO / PLL_D */
#define PLL_D 10U
#define PLL_A 240U
/* SYSCLK = PLL_VCO / PLL_C */
#define PLL_C 2U
#endif3.重要注意事项
工程配置中必须添加APM32F425xx或APM32F427xx宏定义,否则上述时钟配置代码无法生效,最终导致芯片时钟配置错误、系统运行异常。
Copyrights© Shenzhen Linkchip Co.,LTD All Rights Reserved.