单片机(STM32-时钟系统)

发布于:2025-07-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、时钟系统基础

1. STM32时钟系统概述

STM32的时钟系统是一个复杂而精密的架构,负责为整个微控制器提供各种频率的时钟信号。理解时钟系统对于STM32的开发和优化至关重要。

2. 时钟系统的组成

(振荡器,唤醒定时器,倍频器,分频器)

振荡器(Oscillator):时钟源,包括外部晶体和内部RC。产生信号的源头。

锁相环(PLL,倍频器):对时钟信号进行倍频。

分频器(Prescaler/Divider):对时钟信号进行分频。

时钟切换与控制逻辑:选择和分配时钟源,控制外设时钟开关。

外设时钟分配:为各外设分配合适的时钟。

(可选)时钟输出(MCO):将时钟信号输出到外部。

3. 振荡器分类

在STM32时钟系统中,分别指的是晶体振荡器和RC振荡器,它们是常见的时钟源类型。

3.1 晶体振荡器(Crystal Oscillator)

原理:

利用石英晶体的压电效应,产生非常稳定和精确的振荡信号。

优点:

频率精度高(ppm级别)

温度稳定性好

适合对时钟精度要求高的应用(如USB、RTC、通信等)

缺点:

启动时间较长(通常几毫秒)

成本较高

需要外部元件(晶体和负载电容)

在STM32中的应用:

HSE(High Speed External):高速外部晶体(如8MHz、12MHz等),常用于主系统时钟

LSE(Low Speed External):低速外部晶体(32.768kHz),常用于实时时钟(RTC)

3.2 RC振荡器(Resistor-Capacitor Oscillator)

原理:

利用电阻和电容充放电特性产生振荡信号,通常为片上集成的RC电路。

优点:

成本低

启动快

不需要外部元件

缺点:

频率精度较低(受工艺、温度、电压影响大)

稳定性较差

不适合对时钟精度要求高的场合

在STM32中的应用:

HSI(High Speed Internal):高速内部RC振荡器(如8MHz、16MHz等),适合一般应用

LSI(Low Speed Internal):低速内部RC振荡器(如40kHz),常用于独立看门狗、低功耗定时等

3.3 区别:

特性 晶体振荡器(Crystal) RC振荡器(RC)
精度
稳定性
成本
启动速度
外部元件 需要 不需要
典型用途 RTC、主时钟、USB等 看门狗、一般应用

 3.4 STM32时钟源分类

HSI(High Speed Internal):高速内部RC振荡器(如8MHz、16MHz等),适合一般应用HSE(High Speed External):高速外部晶体(如8MHz、12MHz等),常用于主系统时钟

LSI(Low Speed Internal):低速内部RC振荡器(如32kHz),常用于独立看门狗、低功LSE(Low Speed External):低速外部晶体(32.768kHz),常用于实时时钟(RTC)

红色是一般常用的频率,也是现在用的。

3.5 时钟树

时钟树(Clock Tree)是指单片机内部所有时钟信号的来源、分配和流向的结构图。

它形象地展示了各种时钟源(如外部晶体、内部RC、PLL等)如何通过分频、倍频、切换等方式,最终分配到各个总线和外设。

三、滴答定时器

滴答定时器是CPU内部的,定时器是CPU外部的。

1. 概念

  • SysTick是Cortex-M系列内核(如STM32F1/F4等)内置的一个24位递减计数定时器。
  • 主要用于操作系统节拍(tick),也常用于周期性中断、延时等功能。
  • 和NVIC配合使用(可以产生异常信号(等价与中断,在CPU内部产生的叫做异常,在CPU外部产生的叫做中断))

2. 工作原理

设置LOAD寄存器,决定定时周期。

启动SysTick,计数器开始递减。

计数到0时,自动重装载,并可产生中断。

在中断服务函数中处理定时任务。

注意:一定要知道,HZ单位是什么意思,这是震动的频率,1HZ就是一秒震动一次,就是电平变化一次,1KHZ就是一秒震动1000次。

3. 滴答定时器分析

补充:

自动重装载寄存器(ARR):设定计数器的最大值,计数到达后清零重计。

预分频器(PSC):对时钟进行分频,调节计数速度。

找到我们的滴答时钟:确认输入频率是4MHZ,所以重载寄存器的默认就是4000-1,所以滴答定时器默认一毫秒触发一次异常(中断),因为设置的uwTick提供一个1ms的时间基准

系统滴答定时器默认一毫米触发一次异常中断)

uwTick作用就是提供一个1ms 时间基准

HAL_Delay函数原型,只要进入延时函数,就会进行最少一毫秒的延时(当Delay=0,wait也会自增一次,这就是为什么在确定ARR和PSC都要减一,因为默认都会进行一次1ms的延时)

四、RCC

1. RCC

  • RCC(Reset and Clock Control)是STM32单片机内部的一个外设模块,用于管理和控制整个芯片的时钟和复位功能。
  • 它是一个功能单元,就像GPIO、USART、ADC等外设一样。

2. RCC寄存器

  • RCC寄存器是RCC模块内部的一组控制和状态寄存器。
  • 这些寄存器用于配置和控制RCC模块的各种功能,比如时钟源选择、分频、外设时钟开关、复位等。
  • 你通过读写RCC寄存器,来实现对时钟和复位的管理。

3. 二者的关系

  • RCC是一个外设模块(功能单元)。
  • RCC寄存器是RCC模块的“操作面板”,是你和RCC模块“对话”的接口。
  • 你通过操作RCC寄存器,来实现对RCC模块的各种功能控制。

五、TIM定时器

1. 概念

TIM是Timer(定时器)的缩写。STM32中有多种定时器,统称为TIM定时器。

它们可以用于定时、计数、PWM输出、输入捕获、输出比较、编码器接口等多种功能。

2. STM32U5的定时器分类

类型 典型型号 通道数 主要功能
基本定时器 TIM6, TIM7 主要应用用于驱动DAC
通用定时器 TIM15, TIM16,TIM17等 2 定时计数,PWM输出,输入捕获,输出比较
通用定时器 TIM2, TIM3,TIM4,TIM5等 4 定时计数,PWM输出,输入捕获,输出比较
高级定时器 TIM1, TIM8 4 带死区控制和紧急刹车,可用于PWM电机控制

3. TIM定时器框图

TIM定时器的基本结构

计数器(CNT):记录当前计数值。

自动重装载寄存器(ARR):设定计数器的最大值,计数到达后清零重计。

预分频器(PSC):对时钟进行分频,调节计数速度。

捕获/比较寄存器(CCR):用于输入捕获或输出比较。

控制寄存器(CR1/CR2):配置定时器的工作模式。

补充:预分频器,计数器和自动重载寄存器是基本三部分

4.定时器的定时周期计算公式:

T定时=(PSC+1)×(ARR+1)/FTIMT​

  • PSC:预分频器值
  • ARR:自动重装载值
  • F_TIM:定时器时钟频率

注意:(1)T定时就是定的中断时间

(2)PSC和ARR必须都不大于65535

5.定时器实验

目标:实现LED3随着定时器闪烁,时间0.3秒一次

 (1)配置RCC

控制定时器

(2)配置TIM17定时器

查看FTIMT​

先查看TIM17在哪个总线上(在SPB2上)

找到FTIMT = 4MHZ

PSC和ARR自己计算,得出定时时间(不唯一,只要不超出范围)

(3)配置NVIC

用来触发中断,计时器到时间就会触发中断

(4)编写程序实现

定时器中断回调函数:

__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

开启定时器函数:

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
1. 重写回调函数:

2. 开启定时器:

六、PWM

1. 概念:

PWM是一种通过改变脉冲信号的高电平宽度(占空比),来控制平均输出电压或能量的方法。

  • 周期:一组高低电平的总时间
  • 占空比:高电平时间/周期时间 × 100%

2. PWM的主要用途

  • 电机调速(如直流电机、舵机)
  • LED亮度调节
  • 加热器功率控制
  • 音频信号合成
  • 数字-模拟信号转换(DAC)

3. STM32中如何产生PWM?

STM32的TIM定时器(尤其是通用定时器和高级定时器)可以很方便地输出PWM信号。

3.1 输入捕获:

输入捕获是一种利用定时器记录外部信号特定时刻(如上升沿、下降沿)到达时,定时器计数值的功能。

输入捕获测量PWM的原理

1. 定时器计数器以已知频率递增。

2. 输入捕获通道连接到PWM信号输入引脚。

3. 配置定时器在上升沿和下降沿时分别捕获计数值。

4. 通过两次上升沿之间的计数差,得到周期。

5. 通过上升沿和下一个下降沿之间的计数差,得到高电平宽度。

计算公式:
  • 频率 = 定时器时钟 / 周期计数
  • 占空比 = 高电平宽度 / 周期计数 × 100%

3.2 输出比较:

此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应动作,比如电平的翻转。通常用于生成PWM波形。

3.3 输出过程:

当0-t1这段时间,计数器寄存器的CNT的值是小于CCR,输出高电平。

当t1-t2这段时间,计数器寄存器的CNT的值是大于CCR且小于ARR的,输出低电平。

当CNT的值达到ARR里的值时,产生溢出事件,自动清零再次从0开始向上计数。

补充:关键寄存器

  • ARR:决定PWM周期
  • CCR:决定高电平时间(占空比)
  • PSC:预分频器,调节定时器计数速度

3.5 PWM输出的基本配置流程

目标:实现风扇百分之五十功率转动。

(1)使能定时器和GPIO时钟(通过RCC)

和上面设置RCC一样

(2)配置GPIO为复用推挽输出(风扇)

(3)配置定时器TM3
PWM模式

同时设置ARR、PSC、CCR

(4)使能定时器和通道输出

开启PWM时钟函数:

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

回调函数还是:(但是用不到)

__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

我们可以看到对TIM3初始化的函数里有分屏等配置

七、练习

实现按键控制风扇转动速度。

(1)设置按键引脚类型

(2)添加按键能触发中断

(3)设置按键中断类型(下降沿)

(4)回调函数内添加事件发送时,提高定时器TIM3的CCR(决定高电平时间)从而增大风扇的功率。

八、总结

1. 时钟系统是STM32微控制器的核心基础,决定了各个模块的运行速度和精度。理解时钟源的分类(晶体、RC)、时钟树结构及其分配方式,有助于合理配置系统和外设的时钟,提高系统性能和稳定性。

2. RCC(复位与时钟控制)模块是时钟系统的管理中枢。通过RCC寄存器,可以灵活地选择时钟源、配置分频、使能或关闭外设时钟,实现对功耗和性能的优化管理。

3. 滴答定时器(SysTick)是Cortex-M内核自带的定时器,常用于系统节拍和延时。它以系统主时钟为基准,提供了高精度的1ms时间基准,便于实现延时和定时任务。

4. TIM定时器是STM32中功能丰富的外设,支持定时、计数、PWM输出、输入捕获、输出比较等多种模式。通过合理配置PSC、ARR等参数,可以实现精确的定时和多样的控制功能。

5. PWM(脉宽调制)是定时器的重要应用之一,广泛用于电机调速、LED亮度调节等场合。掌握PWM的原理、占空比和周期的设置方法,有助于实现对外部设备的精细控制。

6. 输入捕获功能可以用来测量外部PWM信号的频率和占空比,扩展了定时器的应用范围。


网站公告

今日签到

点亮在社区的每一天
去签到