STM32F407单片机 时钟配置pllm, plln, pllp, pllq用法 以前使用STM32都是使用CubeMX直接填数配置简单方便但是没有看过具体原理。现在使用标准库来手动配置系统时钟。看下标准库中PLL时钟配置函数/** * brief 配置主PLL锁相环的时钟源、倍频与分频系数 * note 仅当主PLL处于关闭状态时才能调用此函数。 * * param RCC_PLLSource选择PLL模块的输入时钟源 * 可选取值如下 * arg RCC_PLLSource_HSI选择内部高速RC振荡器HSI作为PLL输入时钟 * arg RCC_PLLSource_HSE选择外部高速晶振HSE作为PLL输入时钟 * note 该时钟源RCC_PLLSource同时供给主PLL与PLLI2S使用。 * * param PLLMPLL内部VCO振荡器的输入分频系数 * 参数取值范围0 ~ 63 * note 必须合理设置PLLM保证VCO输入时钟频率处于 1 ~ 2 MHz。 * 推荐输入频率选择2MHz用来降低PLL时钟抖动。 * * param PLLNPLL内部VCO振荡器的倍频系数 * 参数取值范围50 ~ 432 * note 必须合理设置PLLN保证VCO输出时钟频率处于 100 ~ 432 MHz。 * * param PLLP系统主时钟(SYSCLK)的输出分频系数 * 参数只能选取2、4、6、8 * note 配置PLLP时务必保证最终系统时钟频率不超过168MHz。 * * param PLLQOTG FS、SDIO、RNG模块的时钟分频系数 * 参数取值范围4 ~ 15 * note 如果项目使用USB OTG FS必须正确配置PLLQ输出严格48MHz供给USB。 * SDIO与RNG外设要求输入时钟≤48MHz才能正常工作。 * * retval 无 */ void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ) { /* 参数合法性检查 */ assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); assert_param(IS_RCC_PLLM_VALUE(PLLM)); assert_param(IS_RCC_PLLN_VALUE(PLLN)); assert_param(IS_RCC_PLLP_VALUE(PLLP)); assert_param(IS_RCC_PLLQ_VALUE(PLLQ)); // 将各个分频、倍频参数按照寄存器位定义组合写入PLL配置寄存器 RCC-PLLCFGR PLLM | (PLLN 6) | (((PLLP 1) -1) 16) | (RCC_PLLSource) | (PLLQ 24); }通过注释其实也就知道函数输入参数怎么设置。总结一下1.RCC_PLLSource【PLL 时钟源】可选两种RCC_PLLSource_HSI选择内部 16MHz 高速 RC 振荡器作为 PLL 输入RCC_PLLSource_HSE选择外部高速晶振作为 PLL 输入作用决定 PLL 从哪里获取原始基准时钟信号。2.pllm→ PLL_M 【预分频器】PLL 输入分频器原始时钟经过 PLL_M 分频得到 VCO 输入频率。 公式f_VCO_IN f_时钟源 / PLL_M3.plln→ PLL_N 【倍频器】VCO 倍频系数1MHz 的基准信号送入 VCO 电压控制振荡器进行倍频 公式f_VCO_OUT f_VCO_IN × PLL_N⚠️ 硬性限制100MHz ≤ f_VCO_OUT ≤ 432MHz举例N336 → 1M × 336 336MHz4.pllp→ PLL_P 【SYSCLK 分频器】VCO 输出经过 P 分频后得到系统时钟 SYSCLK内核、AHB 总线主频公式SYSCLK f_VCO_OUT / PLL_P⚠️ PLL_P只能取值2、4、6、8F407 最大 SYSCLK 168MHz不能超过。5.pllq→ PLL_Q 【USB/SDIO 专用分频器】VCO 输出另外一路独立分频专门供给 USB OTG、SDIO。 公式f_USB f_VCO_OUT / PLL_QUSB 硬件要求严格 48MHz 不用 USB 时Q 随便填合法数值即可不影响单片机正常运行。举例配置系统时钟频率为168M:时钟源 HSI (16MHz)M16N336P2Q7HSI 16MHz↓【PLL_M 预分频】16M /16 1MHz (VCO输入)↓【PLL_N 倍频】1M × 336 336MHz (VCO输出)├→【PLL_P分频】 336M/2 168MHz → SYSCLK系统主频└→【PLL_Q分频】 336M/7 48MHz → USB时钟1、为什么不直接倍频到目标频率非要 M→N→P 多级PLL 内部 VCO 有严格工作区间100~432M必须先升到高频 VCO再分频输出这是锁相环 PLL 硬件结构决定。2、PLL 硬件 和 SYSCLKPLL锁相环负责升频的模拟硬件模块SYSCLKPLL 最终输出、供给内核运行的主时钟单片机所有外设时钟CAN、TIM、USART、GPIO全部由 SYSCLK 经过 AHB/APB 再次分频得到。