当前位置: 首页 > news >正文

单片机(STM32-时钟系统)

一、时钟系统基础

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, TIM84带死区控制和紧急刹车,可用于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信号的频率和占空比,扩展了定时器的应用范围。

http://www.lryc.cn/news/591155.html

相关文章:

  • AI 智能质检系统在汽车制造企业的应用​
  • select_shape_proto 用起来很省事
  • 错误 0x80370102排查
  • CCLink IE转ModbusTCP网关配置无纸记录器(中篇)
  • 大语言模型系列(1): 3分钟上手,在骁龙AI PC上部署DeepSeek!
  • uniapp云托管前端网页
  • CentOS在线安装docker教程
  • 人工智能概念之八:常见的参数调优方法(交叉验证网格搜索、随机优化、贝叶斯优化、Hyperband优化)
  • npm 和 npx 区别对比
  • Django `transaction.atomic()` 完整使用指南
  • Java行为型模式---命令模式
  • Visual Studio 的常用快捷键
  • 自定义 django 中间件
  • 巧用 Golang 函数特性实现单元测试中的数据库操作 Mock
  • Kafka 控制器(Controller)详解:架构、原理与实战
  • 我的开发日志:随机数小程序
  • Unity VR多人手术模拟恢复2:客户端移动同步问题分析与解决方案
  • Kafka 配置参数详解:ZooKeeper 模式与 KRaft 模式对比
  • mac OS上docker安装zookeeper
  • 第二十三篇文档格式互转大师:Python实现PDF、Word、图片、Markdown的高效转换!你的万能转换器!
  • SpringMVC @ResponseBody注解详解
  • 如何选择合规的上门按摩系统
  • Maven详细解
  • 3D Gaussian Splatting (3DGS) 从入门到精通:安装、训练与常见问题全解析
  • 【Bluedroid】btif_a2dp_sink_init 全流程源码解析
  • 【Leetcode】栈和队列算法题(逆波兰表达式、二叉树层序遍历、最小栈、栈的压入弹出序列)
  • CrewAI与LangGraph:下一代智能体编排平台深度测评
  • onenote千年老bug,字体bug (calibri微软雅黑) 的解决
  • 深度学习损失函数详解 | Binary Cross Entropy(二元交叉熵)原理 + 数学推导 + Python实现
  • 中科米堆CASAIM三维激光扫描仪用于注塑件3d扫描逆向建模