day08(单片机)时钟系统+定时器+PWM

目录

时钟系统+定时器+PWM

时钟系统

时钟基本概念

时钟源

晶体振荡器(Crystal Oscillator)

RC振荡器(Resistor-Capacitor Oscillator)

​​​​​​​STM32U5时钟源

HSI(High Speed Internal)

HSE(High Speed External)

LSI(Low Speed Internal)

LSE(Low Speed External)

​​​​​​​时钟树

​​​​​​​STM32CubeMX时钟树配置

Systick定时器

概念

​​​​​​​工作原理

​​​​​​​滴答定时器分析

TIM定时器

基本概念

​​​​​​​STM32U5定时器

​​​​​​​定时器框图

​​​​​​​预分频器

自动重装寄存器

计数器​​​​​​​

定时器实验

cubeMX配置

编程

PWM

定义

​​​​​​​参数

PWM生成原理

风扇调速实验


时钟系统+定时器+PWM

时钟系统

时钟基本概念

void delay(int T)
{
    int a,b;
    for(a=0;a<T;a++)
    for(b=0;b<100;b++);
}

1s = 1000ms =1000000us

假如时钟频率是4M,所以运行一条指令的时间是1/4us,那么100条延时时间就是25us

1) 时钟是嵌入式系统的脉搏,在电子系统中,时钟信号可以被理解为一个周期性的信号,它确定了系统的节奏和时间基准。处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。

因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。

2)时钟系统的组成:振荡器(信号源)、唤醒定时器、倍频器、分频器

振荡器:产生信号的源头

唤醒定时器:使能、关闭功能

倍频器:放大频率

分频器:分频

振荡器(信号源):振荡器是时钟系统的基础,它提供一个稳定的振荡信号作为时钟源。振荡器可以是晶体振荡器、RC振荡器等,它们产生的信号频率决定了时钟系统的基本节拍。

唤醒定时器(Wake-up Timer):唤醒定时器是一种特殊的定时器,用于在设备处于低功耗模式时定期唤醒设备。它通常基于时钟信号计数,并在设定的时间间隔后触发唤醒信号。

倍频器(Clock Multiplier):倍频器用于将时钟信号的频率进行倍增,以产生更高频率的时钟信号。倍频器通常通过锁相环(PLL)来实现,可以根据需要调整输出时钟频率。

分频器(Clock Divider):分频器用于将时钟信号的频率进行分频,以产生较低频率的时钟信号。分频器通常通过调整分频比来控制输出时钟频率。

分频器:外设需要不同的频率,为了降低功耗,可以进行分频以提供不同频率时钟信号。

为什么要设计 倍频器和分频器?

答:1)为了降低成本(CPU需要更高的时钟频率)

        2)减少功耗(外设需要不同的时钟频率)

​​​​​​​时钟源

常见振荡器的有哪些?

振荡器主要分为晶体、RC、LC

晶体振荡器(Crystal Oscillator)

晶体振荡器使用石英晶体作为振荡元件。石英晶体具有压电效应,当施加电场时,会以固定频率产生机械振动。晶体振荡器利用石英晶体的这种特性,通过电子电路驱动晶体振荡,产生稳定的振荡信号。晶体振荡器的频率稳定性非常高。

无源:

没有信号源,靠外部给 蜂鸣器

有源:

有信号源,外部不需要给 蜂鸣器

优点:晶体振荡器信号稳定、质量好,连接方式简单。

缺点:价格高,需要较长的启动时间(起振时间)

晶体振荡器分类:

无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来。(谐振器)

有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件,因此体积较大。有源晶振不需要CPU的内部振荡器,信号稳定,质量较好,而且连接方式比较简单。(振荡器)

  1. RC振荡器(Resistor-Capacitor Oscillator)
  2. RC振荡器使用电阻和电容器构成一个简单的振荡回路。当电容器充放电达到某个阈值时,会产生周期性的振荡信号。RC振荡器通常成本低、结构简单,但其频率稳定性较差,受到温度、供电电压等环境因素影响较大。

(在芯片内部)

优点:实现的成本比较低,仅由电阻电容构成。

缺点:精度存在问题,振荡频率会存在误差。

RC振荡器

晶体振荡器

构成

电阻电容

石英晶体

优点

成本低

稳定、精度高

缺点

震荡频率会有误差、受温湿度影响

价格高、需接起振电容

​​​​​​​STM32U5时钟源

参考手册(481页)

I2S是专门给一个引脚提供的,这里不做解释。

HSI(High Speed Internal)

HSI : 高速内部时钟,由RC振荡器产生16Mhz的时钟频率。

HSE(High Speed External)

HSE :高速外部时钟,由外部石英晶体/陶瓷谐振器产生4-50Mhz的时钟信号,咱们外接12Mhz晶振。

LSI(Low Speed Internal)

LSI :低速内部时钟,由低速RC振荡电路产生32Khz的时钟频率。

LSE(Low Speed External)

LSE:低速外部时钟,由低速晶振产生32.768Khz的时钟频率。

1MHZ=10^3KHZ=10^6HZ

​​​​​​​时钟树

参考手册(483页)

​​​​​​​STM32CubeMX时钟树配置

打开STM32外部时钟的方法

Systick定时器

概念

SysTick又称滴答定时器。是一个定时设备,位于Cortex-M33内核中,和NVIC配合使用(可以产生异常信号),产生SysTick异常可以对输入的时钟进行计数,系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。(1ms)

频率 单位是HZ KHZ MHZ,符号:f 一秒钟震荡的次数

周期 单位是S ms us 符号:T 震荡一次所需的时间

1KHZ 代表1s震荡1000次,震荡一次的时间 1/1000s=1ms

​​​​​​​工作原理

滴答定时器是一个24位递减定时器,也就是最多能计数2^24(0xFFFFFF) 16,777,216。

SysTick设定初值并使能后,每来一个时钟信号,计数值就减1。

计数减到0时,触发异常,SysTick计数器自动重装,初值并继续减一,循环不断。

寄存器

输入是1MHZ的话,定时1ms该怎么定?

算出1MHZ的周期,即计一个数所需要的时间,算出为1us,那计时1ms,需要计数1000次,那么就需要我们给重载数值寄存器写1000-1

开始计时时,重载数值寄存器会给定时计数器赋值,将1000-1赋值给计数器,从此每来一个时钟周期计数器-1,当减到0的时候,计数1000个,触发中断,重载数值寄存器重新将1000-1再赋值给计数器,以此往复实现每隔1ms触发一次异常(中断)

所以,所谓的定时器,就是对时钟信号进行计数,当达到相应的计数值的时候,就会触发中断并重新开始计数。

定时器就是计数器

输入时钟频率为4MHZ,计1ms该计多少个数,如何配置寄存器?

输入频率4MHZ ---> 1us计数4 1ms-->4000个数

重载数值寄存器 :4000-1

输入时钟频率为32KHZ,计200ms该计多少个数,如何配置寄存器?

32KHZ--->1ms震荡32次 --->200ms--->32*200=6400

重载数值寄存器 :6400-1

​​​​​​​滴答定时器分析

输入频率:4MHZ

可知重载寄存器的初始默认值为4000-1

得出结论:系统滴答定时器默认每隔1ms触发一次异常(中断)

既然是中断,那肯定会进自己的处理函数

得出结论,系统默认每隔1ms让1个叫uwTick的变量自加1

TIM定时器

SysTick(嘀嗒定时器)是在内核里(ARM公司设计) 、定时器(ST、芯片厂商)

基本概念

定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。定时器可以作为基本的定时器/计数器,

用于生成周期性的定时中断或作为计数器来计数外部事件的脉冲数。例如1秒钟进入定时器中断干一件事,定时器可以配置为产生脉冲宽度调制(PWM)信号,用于控制电机速度、LED亮度调节,风扇风速调节,等应用。

​​​​​​​STM32U5定时器

定时器是存在于STM32U5单片机中的一个外设,总共有11个定时器,分别是2个高级定时器(TIM1,TIM8)7个通用定时器(TIM2,TIM3,TIM4,TIM5,TIM15,TIM16,TIM17)和2个基本定时器(TIM6,TIM7)

定时器的基本结构是通用的,很多模块电路都能用到,所以STM32定时上扩展了非常多的功能,根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

计数器的分辨率:重装载计数器最大可以写多少

计数器类型:向上、向下计数,向上再向下计数

预分频因子:预分频因子是用于配置定时器和计数器模块的一个参数,用于控制时钟信号的分频比。通过设置不同的预分频因子,可以改变定时器和计数器的计数频率,从而实现不同的定时和计数功能。16位的寄存器,可以设置的值范围为0到65535。设置为0时表示不进行分频,设置为1时表示将输入时钟分频为2,以此类推。

​​​​​​​定时器框图

定时器基本三大件

PSC:预分频器

CNT:计数器

ARR:自动重装载寄存器

​​​​​​​预分频器

自动重装寄存器

计数器

TIM定时器定时算法训

32MHZ 计时10ms 需要配置那些寄存器,如何配置?

PSC:31 32分频 计数器计数频率1MHZ

ARR: 10000-1

16MHZ初始频率,计时700ms如何配置?

PSC:16000-1 16000分频 计数器输入频率:1KHZ

ARR:700-1

定时器实验

cubeMX配置

选定时器

根据所选定时器查手册看看在那个总线上

根据总线查相关定时器的输入频率

配置时间

打开中断

打开风扇引脚

编程

重写中断处理函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

主函数启动定时器

PWM

定义

PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调节信号的方法。简单来说,PWM 就是通过改变信号的高电平和低电平的时间比例来控制输出的平均电压或功率

想象一下,我们有一个周期性的信号,其中高电平表示“开”状态,低电平表示“关”状态。PWM 就是在一个固定的时间周期内,通过改变高电平和低电平的持续时间来控制信号的特性。例如,如果我们将高电平持续时间设为较长,低电平持续时间设为较短,那么平均电压或功率就会比较高。相反,如果高电平持续时间设为较短,低电平持续时间设为较长,平均电压或功率就会比较低。

通过不断地调整高电平和低电平的持续时间比例,我们可以得到不同的输出效果。这种方法常用于控制电机的速度、调光灯的亮度、音频设备的音量等。

​​​​​​​参数

周期

高低电平变化所需要的时间,单位:ms

T=1/f T是周期,f是频率。

频率

在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。

例如:如果频率为50Hz ,也就是说一个周期是20ms,那么一秒钟就有50次PWM周期。

1000 ms / 50 = 20 ms

占空比

在一个脉冲周期内,高电平的时间占整个周期时间的比例,单位是% (0%-100%)。

PWM生成原理

PSC预分频器

ARR 自动重装载寄存器

CNT 计数器

CCR 捕获比较寄存器

PWM模式

风扇调速实验

做一个按键控制风扇速度的程序

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //开启PWM输出

TIM3->CCR1=; //开启PWM输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE初阶 — 多线程】内存可见性问题 volatile

1. 内存可见性问题 内存可见性的概念 什么是内存可见性问题呢&#xff1f; 当一个线程对共享变量进行了修改&#xff0c;那么另外的线程都是立即可以看到修改后的最新值。在Java中&#xff0c;可以借助 synchronized、volatile 以及各种Lock 实现可见性。如果我们将变量声…

通用特效Shader

一、通用特效Shader介绍 1.1 什么是通用特效材质 Unity支持SRP Batcher后&#xff0c;使用UberShader的优势非常明显。所谓&#xff0c;UberShader&#xff0c;即一个超级Shader&#xff0c;覆盖一类功能&#xff0c;而不是多个分散的小Shader&#xff0c;比如一个通用特效Sh…

spark-本地模式的配置和简单使用

python环境的安装 在虚拟机中&#xff0c;只能安装一个python的版本&#xff0c;若想要安装别的版本&#xff0c;则需要卸载之前的版本——解决方式&#xff0c;安装Anaconda 通过百度网盘分享的文件&#xff1a;Anaconda3-2021.05-Linux-x86_64.sh 链接&#xff1a;https://…

分享三个python爬虫案例

一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来&#xff0c;Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序&#xff0c;用于抓取豆瓣电影Top250的相关信息&#xff0c;并将其保存为Excel文件。 获取网页数据的函数&#xff0c;包括以…

PyQt5 详细安装与配置教程及使用

文章目录 Part1&#xff1a;安装 PyQt5Part2&#xff1a;配置 PyQt5 的依赖工具 QtDesigner 和 PyUICPart3&#xff1a;使用QtDesigner设计界面Part4&#xff1a;使用PyUIC将设计好的界面转换为.py文件Part5&#xff1a;通过代码显示ui界面 Part1&#xff1a;安装 PyQt5 需要安…

ssm079基于SSM框架云趣科技客户管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;客户管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本客户管理系统就是在这…

C语言 | Leetcode C语言题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; int nextGreaterElement(int n){int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 % 10 < targetDigit; x2…

华为大变革?仓颉编程语言会代替ArkTS吗?

在华为鸿蒙生态系统中&#xff0c;编程语言的选择一直是开发者关注的焦点。近期&#xff0c;华为推出了自研的通用编程语言——仓颉编程语言&#xff0c;这引发了关于仓颉是否会取代ArkTS的讨论。本文将从多个角度分析这两种语言的特点、应用场景及未来趋势&#xff0c;探讨仓颉…

Linux:基本开发工具

一&#xff1a;编辑器vim 1.1vim的基本概念 vim其实有多重模式&#xff0c;这里我们主要了解vim的三种模式&#xff0c;分别是命令模式&#xff08;command mode&#xff09;,插入模式(Insert mode)和底行模式(lst line mode) 正常/普通/命令模式(Normal mode) …

第14张 GROUP BY 分组

一、分组功能介绍 使用group by关键字通过某个字段进行分组&#xff0c;对分完组的数据分别 “SELECT 聚合函数”查询结果。 1.1 语法 SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; 明确&#…

TVM计算图分割--BYOC框架

文章目录 BYOC架构算子标注单算子标注复合算子标注Cost-based PartitionCodegenCodegen for C代码生成流程概览代码生成工程实现实现CodegenC实现CSourceCodegenCodegen for JSON实现JsonCodegenRuntimeJSONRuntime参考随着后端设备数量激增,为达到较高的效果在这些设备上,对…

计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

qt QShortcut详解

1、概述 QShortcut是Qt框架中的一个类&#xff0c;它提供了一种创建键盘快捷键的方式。通过QShortcut&#xff0c;开发者可以将特定的键盘组合&#xff08;如CtrlC、AltF4等&#xff09;与应用程序中的动作&#xff08;如复制、关闭窗口等&#xff09;关联起来。当用户在应用程…

C++OJ_二叉树的层序遍历

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C_OJ 小伞的主页&#xff1a;xiaosan_blog 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff0…

The Rank-then-Encipher Approach

原始观点 Format-Preserving Encryption 4 The Rank-then-Encipher Approach 引用1 Hybrid diffusion-based visual image encryption for secure cloud storage 2.2 Sum-preserving encryption Bellare introduced the concept of format-preserving encryption (FPE)…

DolphinDB 与南方科技大学联合授课啦!

11月1日&#xff0c;南方科技大学商学院和 DolphinDB 联合举办了高校课程讲座。讲座由南方科技大学商学院高级研究学者冯鹏举主持&#xff0c;DolphinDB 创始人兼 CEO 周小华博士、某百亿私募数据平台架构师潜蛟老师进行精彩演讲。 Part 1 : 大数据时代下数据库架构革新与生态…

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下&#xff0c;当安装IDM软件后&#xff0c;该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上&#xff0c;但在某些情况下&#xff0c;需要我们手动安装&#xff0c;以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障&#xff0c;说是测试环境的附件上传功能报了 403 的错误&#xff0c;错误信息&#xff1a;403 Request Entity Too Lager。我尝试复现问题&#xff0c;发现传个几兆的文件都费劲啊&#xff0c;一传一个失败。不用说&#xff0c;项目用到 ng 代理&#x…

HARCT 2025 新增分论坛2:机器人系统智能控制

会议名称&#xff1a;机电液一体化与先进机器人控制技术国际会议 会议简称&#xff1a;HARCT 2025 大会时间&#xff1a;2025年1月3日-6日 大会地点&#xff1a;中国桂林 主办单位&#xff1a;桂林航天工业学院、广西大学、桂林电子科技大学、桂林理工大学 协办单位&#…

网络世界中的侦察兵----ICMP

前言 学习了IP协议后&#xff0c;都知道IP协议本身是不提供可靠性保障的&#xff0c;那么数据包在这么复杂的互联网环境中传输&#xff0c;总会遇到问题&#xff0c;如果遇到问题后&#xff0c;被丢弃、无回应&#xff0c;可能作为工程师的我们来说都不知道发生了什么事&#…