前言
使用stm32cubMX生成项目时候,在软件中配置TIM2定时器为PWM输出引脚,一共四路可以驱动四个电机,但是我的舵机一直没有转动,没有看到代码有什么问题,后面核查发现,没有使能锁相环PLL,但是工程出来的始终频率一直是72M,不使能PLL的话应该是使用默认的8M的时钟频率,定时器2的分频器设置应该是8000-1(8M晶振的分频系数),这里不知道是STM32CUBMX本身问题还是我设置问题,后面通过软件使能时钟后,要软件仿真查看下系统实际时钟频率是多少。所以后面写了这篇文档详细理解下STM32的时钟相关。
下面图1是不使用PLL倍频,使用8M系统时钟的舵机配置的分频系数,分频到1khz,20ms
下面图2是使用PLL倍频到72M系统时钟的舵机配置,分频到1khz,20ms
STM32F103 时钟系统分类与使用
下图找了一个网络上的stm32核心板子,描述两个外部晶振的位置。
1. 时钟系统概述
STM32F103 采用多级时钟树结构,支持多种时钟源以适应不同的功耗和性能需求。正确理解和使用时钟系统对于确保系统稳定运行至关重要。下图是典型的时钟树的图,我们做下区分学习,先关注四大始终源头。
2. 时钟来源分类
STM32F103 的时钟来源主要包括以下几类:
2.1 外部时钟(HSE - High Speed External)
- HSE 晶振模式(晶体振荡器):通常使用 4MHz - 16MHz 的外部晶振作为主时钟源。一般外部都是使用晶振,外部时钟模式比较少,基本可以忽略。
- HSE 外部时钟模式(外部时钟输入):可直接输入一个时钟信号。
- HSE 主要用于高精度应用,如 USB、CAN、以太网等。
2.2 内部时钟
- HSI(High Speed Internal):8MHz RC 振荡器,精度较低,适用于低功耗应用。
- LSI(Low Speed Internal):约 40kHz 低速 RC 振荡器,常用于独立看门狗(IWDG)和低功耗模式。
2.3 低速外部时钟(LSE - Low Speed External)
- 通常为 32.768kHz 石英晶振,主要用于 RTC(实时时钟)保持计时。
3. 时钟树结构
STM32F103 的时钟系统由多个时钟源组成,经过分频、倍频和切换后,提供给不同的外设。
3.1 主要时钟路径
- 系统时钟(SYSCLK):主时钟,可选择 HSI、HSE 或 PLL 输出。
- AHB 时钟(HCLK):用于 Cortex-M3 内核、存储器、DMA、APB 总线。
- APB1 时钟(PCLK1):低速外设时钟,如 TIM2-7、USART2-5。