-
STM32 —— Clock Tree
时钟源
- HSI:(High Speed Internal)内部的 RC 震荡电路产生时钟信号。
- HSE:(High Speed External) 外部晶振产生时钟信号。
采用外部晶振信号原因在于:
- 晶振信号准确度更高
- 部分外设只能在晶振信号下工作
- LSE:(Low Speed External)外部晶振
- LSI:(Low Speed Internal)内部 RC
以上图为例:
- 低速时钟信号提供给
RTC
(Real Time Clock)和IWDG
- 高速时钟信号,经过时钟选择器(System Clock Mux),输出给
SYSCLK
。SYSCLK
分频(AHB Prescaler
)作为AHB
时钟信号。AHB
信号经过分频作为APB1
与APB2
时钟信号。
CubeMX 设置
RCC
时钟源有两种提供方式:
Crystal
和BYPASS
。Crystal
就是石英晶振,两条线接入OSC_IN
和OSC_OUT
。而BYPASS
(官方文档也称为External Source
),则是只提供OSC_IN
和OSC_OUT
引脚悬空。RCC
下面的Master Clock Output
则是可以让RCC_MCO
输出时钟信号,给其它外设使用。如果用一块 STM32 给另一块板子提供时钟信号,那么从设备就应该选择
BYPASS
。SYS
下面有
Timebase Source
,选择作为系统时钟的时钟源。系统时钟中断产生周期由一下语句确定HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));
SystemCoreClock
变量由SystemCoreClockUpdate()
函数维护。每当 SysTick 提供时钟改变时,此变量也会相应改变。手动修改时注意。定时器
定时器是 MCU 中自主运行(
free-running
)的计数器。其时钟源可以来自以下三个方面:- 内部时钟,也就是 Timer 所在的总线。
- 外部时钟源。
- 其余定时器作为时钟源。
定时器分类
更高级的定时器继承了低级定时器的所有功能。
Basic Timers
Basic Timers are 16-bit timers used as time base generator, and they do not have output/input pins. Basic timers can also be used as “master” for other timers.
基本定时器从 0 计数到
Period
值,计数频率由挂载的是时钟总线决定,并可由Prescalar
分频。当溢出时会产生Update Event(UEV)
中断,并自动从初值(0)开始计数。基础定时器的主要结构由三个寄存器构成—— Counter Register (TIMx_CNT,当前计数值) / Prescaler Register (TIMx_PSC,预分频) / Auto-Reload Register (TIMx_ARR,溢出比较值)。当定时器使能后,每一个寄存器都可由软件读写。
STM32 时钟 定时器基础
于 2021-08-06 10:35:00 首次发布