stm32—时钟、定时器和看门狗
1. 时钟
什么是时钟呢?
一个可以产生周期性信号的设备
什么是周期性信号?
1 ----- ----- -----0 ----- ----- -----
所以时钟信号就是周期性变化的信号
关于时钟我们有两个比较重要的概念需要理解:
T:时钟周期,最小重复的信号单元的时间长度,基本单位为s(秒)F:时钟频率,1s内有多少个重复的信号单元(1s振动多少次),单位Hz
===> T * F == 1s
例子:
F = 200Hz 意味着 1s 振动 200次
---> 每次振动的时间是 1 / 200 s == 5ms
2. 为什么需要时钟
时钟最主要的作用是用来同步信号用的
什么是同步呢?
就比如我们的左腿和右腿实际上就需要进行同步,两腿需要协同工作,左腿迈一步然后右腿迈一步,依次重复,人就能正常前行。对应在我们的机器上也是一样的,机器的运行是由很多器件协同工作完成的,当一个器件完成分给它的工作时,理应通知别的器件它完成了,轮到你干活了,等你干完我再继续干。类似于左腿迈完步子了,要等右腿迈完左腿再迈。比如:在A和B进行数据的收发时,A发完数据后应该等待B去接收,等B接收完了之后A再继续发,这种就是同步通信
而我们的M4中大部分时序逻辑电路需要同步,那设备之间怎么实现同步?
这就需要用到我们的时钟信号了
设备是怎么根据时钟信号怎么实现同步的呢?来看电路以及时序图:
如上电路图中假设A端和B端的时序变化如下:
理论上A&B端的电平变化应该如上图所示,输出端(A&B)的电平变换应该要与B端的一致,但是实际上却是下面这样:
为什么会有这样的现象呢?主要是因为A和B输入到&门时,输出需要经过一段的反应时间,虽然这个时间比较短。那么在B端电平变化后,不能立马去读取输出端的电平,应该要等待一段时间后再去读取,那么应该要等待多长时间?此时间段实际上是可以获取到的,我们只需要对电路进行如下改动:
电路修改后, C端的电平的变化如下:
很明显,C端的高电平时期就是&门处理数据的时间(记为de_t),这段时间是不正常的,正常情况下C端应该一直是低电平(当&门处理数据没有延时的时候),我们将C端时序中凸起的地方就称之为“毛刺”。“毛刺”时期是不正常的,我们应该要略过它,略过的意思是指当B的信号发生改变时我们不应该立马去读输出值,而是应该等待一段时间,等电路(如:&门)将数据处理完毕后,再去读取输出值此时才是准确的怎么略过?此时就需要用到我们的时钟信号了
当我们在电路中加上REG后,在REG内部的触发器(假设触发器上升沿触发)的作用下,D端的电平变化如图:
通过上面的时序图可以得知,D此时输出的是一条干净的,没有“毛刺”的信号,那么通过上面这种现象我们可以总结出电路中处理“毛刺”的解决方案:
- 输入信号只能在Clock低跳变(下降沿)时改变,在Clock为高电平时保持不变
- T > 2 * de_t (周期必须大于2倍时延)
3. 时钟信号是怎么产生的呢?
在自然界中有一些物体天生就会产生摆动(振动) ---> 石英晶体
如果想利用石英晶体规则地、周期性的产生方波信号,需要一些电路来保证:
晶振电路:频率一般会比较小,如:12M、8M...
但是石英晶振难以满足现代计算机的高频需要,如:CPU它的频率会很高
那么我们就有“分频 / 倍频”电路:
分频:把输入频率变小
倍频:把输入频率变大
比如:在M4中接触的比较多的有PLL:锁相环电路
4. STM32F4xx时钟树(时钟系统)
查看<STM32F4xx中文参考手册.pdf>第六章(复位和时钟控制)第二节(时钟)第107页可以得到M4的时钟树(见图<时钟树.png>)
时钟树中有几个关键名词:LSI: Low Speed Internal 内部低速时钟 (32 kHz RC振荡器)
LSE: Low Speed External 外部低速时钟 (32.768KHz)
HSI: High Speed Internal 内部高速时钟 (16 MHz RC振荡器)
HSE: High Speed External 外部高速时钟 (8MHz)
内部时钟: 由内部集成的RC震荡电路产生
外部时钟: 由晶振产生通过GEC-M4原理图可知:
HSE_VALUE = 8M(外部高速时钟8M,取决于所接晶振大小)
从HSE出发沿着线路往右边走,会来到SW选择器,选择器一共有三路输入,分别为HSE/HSI/PLLCLK(锁相环时钟),选择这三者之一作为系统时钟来使用,我们的系统时钟最高可以达到168Mhz。很明显HSE/HSI提供不了168Mhz的频率,那么则由锁相环提供
而锁相环的输入是由HSI和HSE二选一之后进行M分频后得到的。在我们M4中我们选择的是HSE,也就是8M进行M分频后输入锁相环
即 SYSCLK = PLLCLK <--- 168M
= (HSE / M) * N / P
= (8Mhz / M ) * N / P
所以PLLCLK是由M和N以及P决定,实际上这三者的值可以在代码中指定:
M ---> 代码中用PLL_M表示 ---> 8分频(根据HSE而来,目的将HSE分频为1M)
N ---> 代码中用PLL_N表示 ---> 336倍频(336M)
P ---> 代码中用PLL_P表示 ---> 2分频
选择器选择HSE/HSI/PLLCLK三者之一作为SYSCLK系统时钟后,接着就可以来到AHB总线,可以通过多个预分频器配置AHB频率、高速APB(APB2)和低速APB(APB1)频率
AHB BUS = PLLCLK / (AHB Prescaler) // AHB Prescaler AHB总线的预分频
APBx BUS = AHB BUS CLK / (APBx Prescaler) // APBx Prescaler APBx总线的预分频
AHB总线时钟最大值为168M;
低速APB(APB1)最大值为42M,高速APB(APB2)最大值为84M
来到APBx总线上后,我们的定时器就挂载在APBx总线上,那我们的定时器的时钟频率是多少呢?
通过时钟树我们可以得知定时器的时钟频率分为两种:
- if (APBx presc == 1) 的意思是如果APB预分频值为1,那么定时器时钟频率等于APB的时钟频率;
- else 的意思就是如果APB预分频器值不为1,那么定时器时钟频率等于两倍的APB的时钟频率
如果APB1 CLK = 42M = AHB BUS CLK / (APB1 Prescaler)
APB1 Prescaler = 168 / 42 = 4
则位于APB1总线上的定时器时钟频率为 42M*2 = 84M
如果APB2 CLK = 84M = AHB BUS CLK / (APB2 Prescaler)
APB2 Prescaler = 168 / 84 = 2
则位于APB2总线上的定时器时钟频率为 84M*2 = 168M
5. 修改固件库时钟相关代码
因为ST公司提供固件库的时候,不知道其他公司设计的板子会采用多少频率的HSE晶振,因此只提供了最大值配置
GECM4采用的是8M HSE,所以需要修改
1)修改 HSE_VALUE 为 8M
stm32f4xx.h --> 144行
2)修改 PLL 相关
PLL_M 8 (371行)
PLL_N 336 (不需要改)
PLL_P 2 (不需要改)
system_stm32f4xx.c
上述修改需根据硬件电路的设计而来!!!
6. 定时器
timer:定时器就是用来定时的器件
在STM32上,一般来说,定时器由三部分组成:
时基单元、输入捕获单元、输出比较单元
1. 时基单元:Time Bese Unit
定时器的基本单元,所有定时器都具备的单元
时基单元 = 计数器 + 重载计数值寄存器 + 定时器预分频器 组成
时基单元工作原理:
将计数器设置为一个值按照一定的时钟频率递减到0,或按照一定的时钟频率从0递增到某个值,当计数器溢出后,可以产生一个溢出事件/中断以此来达到定时的功能
组成时基单元的三个器件的作用:
1)定时器预分频器(TIMx_PSC)
用来将定时器的总线时钟进行分频,提供一个合适的频率,给计数器去计数。分频系数介于1到65536之间,是一个16位的寄存器
2)重载计数值寄存器(TIMx_ARR)
用来设定计数值,设为N值。如果自动重装载数值为0,则计数器停止
3)计数器(TIMx_CNT)
按照预分频器得到的频率,从0递增到N,或者从N递减到0,并且可以在溢出后,产生定时器中断/事件
溢出的含义为:
如果为递增计数,当计数值达到N时产生溢出
如果为递减计数,当计数值达到0时产生溢出
比如:如果为递增计数,从0开始在一定的时钟频率下开始加1,一直加,加到N时,此时完成计数,就会溢出,产生定时器中断/事件
那么我们如何知道计数器溢出产生中断时,到底花费了多少时间呢?
我们知道计数器每做一次运算(+1运算)是需要花费时间的,那么我们只需要将计数器每+1所花费的时间求出来t,那么产生中断的时间应该就为:
(N+1) * t // N+1指做了N+1次运算
// 从0递增到N或者从N递减到0是N次运算
// 此时通过重装载从N回到0或从0回到N又是一次运算
// 相当于秒钟计数从0加到59秒再加1又回到0
计数器每+1花费的时间到底是多少?首先我们要搞清楚定时器中断产生的流程:
(依据于<STM32F4xx中文参考手册>第17章<基本定时器>中图188<基本定时器框图>):
通过如上流程图可知计数器每+1所花费的时间是跟输入计数器的时钟频率有关系的
举个例子:
假设TIMEx是位于APB1总线上,那么Fin = 84M hz
为了方便计算一般情况下TIMEx_PSC设置为83
则计数器时钟频率为Fcnt = Fin / (TIMEx_PSC + 1) = 84M / 84 = 1M
此时计数器的时钟周期Tcnt = 1 / Fcnt = 1 / 1M = 1us
此时即意味着计数器每过1us加1
所以产生定时器中断的时间为Vt = (N + 1)* Tcnt = (N + 1)us
2. 输入捕获单元
可以对一个或多个输入信号进行处理
有些定时器不具备输入捕获单元
具体可以捕捉多少个输入信号需要看你的定时器有几个通道Channel
有什么用呢?
比如: 可以计算输入信号的频率
输入信号经过"输入捕获阶段"(数字滤波,多路复用,预分频,去噪等等),到信号检测,当检测到需要的信号状态(上升沿变化/下降沿变化)变化时,就会把定时器时基单元中的TIMx_CNT计数器值,锁定到"输入捕获寄存器"中
这样就可以根据预先设定的定时器参数(时钟频率,N值等等),就可以计算出从开始捕获到锁定这个信号所花费的时间了t
那么进而我们就可以求出输入信号的频率 = 1/t
3. 输出比较单元
可以输出一个或多个信号
有些定时器没有输出比较单元
具体可以输出多少个信号,就需要看你的定时器有几个通道Channel
输出比较:
定时器可以向对应的GPIO引脚(复用功能)输出一个电平状态
并且可以根据"输出比较寄存器(TIMx_CCR)"中的值,来翻转输出的电平状态
比如:
TIMx_CCR > TIMx_CNT 向GPIO引脚输出一个低电平
TIMx_CCR <= TIMx_CNT 向GPIO引脚输出一个高电平
典型应用: 输出PWM波
注意:
输入捕获和输出比较共用一个寄存器
因此同一个定时器的输入捕获和输出比较功能不能同时使用
7. STM32F4xx定时器概述
相关文章:
stm32—时钟、定时器和看门狗
1. 时钟 什么是时钟呢? 一个可以产生周期性信号的设备 什么是周期性信号? 1 ----- ----- ----- 0 ----- ----- ----- 所以时钟信号就是周期性变化的信号 关于时钟我们有两个比较重要…...
Windows平台RTSP|RTMP播放器如何实时调节音量
我们在做Windows平台RTSP、RTMP播放器的时候,有这样的技术需求,特别是多路监控的时候,并不是每一路audio都需要播放出来的,所以,这时候,需要有针对音量调节的设计: /** smart_player_sdk.cs* C…...
Leetcode JAVA刷刷站(10)正则表达式匹配
一、题目概述 二、思路方向 在Java中,实现一个支持.和*的正则表达式匹配器,可以通过递归或动态规划(DP)的方法来完成。这里,我将使用动态规划的方法来解决这个问题,因为它更容易理解和实现。 动态规划的思…...
合并图片为pdf
1.先使用IDM在网页下载: 2.按文件类型分组,在按名称大小排序,之后使用Acrobat合并文件成一个pdf即可...
【Linux Install】Ubuntu20, Windows10 双系统安装
1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的,从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus:从Rufus官网下载 Rufus 工具。 插入U 盘:将U盘插…...
Keepalived + LVS实现高可用
1、简介 LVS和Keepalived是Linux操作系统下实现高可用的负载均衡解决方案的重要工具。通过协同工作,它们能够实现一种高性能、高可用的负载均衡服务,使得用户能够透明地访问到集群中的服务。同时,它们还提供了强大的监控和故障切换功能&#…...
Gin框架接入Prometheus,grafana辅助pprof检测内存泄露
prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…...
上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略
上海凯泉泵业(集团)有限公司是一家大型综合性泵业公司,专注于设计、生产、销售泵、给水设备及其控制设备。作为中国泵行业的领军企业,凯泉集团拥有7家企业和5个工业园区,总资产达到25亿元,生产性建筑面积35…...
Linux:基础IO
目录 1. stdin & stdout & stderr 2. 系统文件I/O 1. 接口介绍 open write read close lseek 2. open函数返回值 3. 文件描述符fd 0 & 1 & 2 文件描述符的分配规则 重回定向 dup2 简易Shell的模拟实现 4. FILE 5. 再谈对文件的理解 1. stdin …...
奥运奖牌窥视
1 前言 2024巴黎奥运会已经闭幕了,中国队创纪录地获得了海外举办的奥运会的最佳成绩,我们来个管中窥豹,看看中国队从哪些项目中取得了奖牌。 2 奖牌组成 游泳真是大项,小项数量众多,比如个人自由泳就有100m、200m、4…...
RUST实现远程操作电脑手机
简介: Rust Desk 是一个开源的远程桌面软件,能够完全替代向日葵和ToDesk的功能,包括电脑控制电脑、电脑控制手机、手机控制电脑等。它是完全免费的。 下载: 需要下载 Rust Desk 的服务端和客户端安装包。 安装: 服务…...
spring01-spring容器启动过程分析
【README】 本文总结自《spring揭秘》,作者王福强,非常棒的一本书,墙裂推荐; spring容器根据配置元素组装可用系统分2个阶段,包括spring容器启动, springbean实例化阶段; 本文详细分析spring容…...
RAG与LLM原理及实践(12)--- Milvus RRFRanker的使用场景及源码分析
目录 背景 rrfRanker 简介与实例 核心逻辑 实例 蕴含思想 rrfRanker VS weightedRanker rrfRanker weightedRanker 场景使用区别 RRFRanker 使用场景 weightedRanker 使用场景 代码 代码实现 运行结果 修改代码 再次运行结果 源码 源码实现 解释 Ranker 可…...
Nginx与Tomcat的区别
Nginx与Tomcat的区别 —— 经验笔记 引言 在现代Web开发中,选择合适的服务器软件对于构建高性能、可靠的应用程序至关重要。Nginx 和 Tomcat 是两种常见的服务器软件,尽管它们都可以被归类为Web服务器,但它们的设计目标和应用场景有着本质的…...
LeetCode 3151.特殊数组 I
【LetMeFly】3151.特殊数组 I 力扣题目链接:https://leetcode.cn/problems/special-array-i/ 如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。 Aging 有一个整数数组 nums。如果 nums 是一个 特殊数组 ÿ…...
【产品那些事】The OX Active ASPM Platform
文章目录 前言关于OX Security产品理念 流程体验Complete Visibility:将安全无缝嵌入到SDLC中PBOMOSC&R coverageContextualized Prioritization:快速解决最关键的风险Accelerated Response:简化安全流程See Beyond the Code:…...
欢迪迈手机商城设计与开发
TOC springboot137欢迪迈手机商城设计与开发 绪论** 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化࿰…...
Endnote与word关联 解决方案: COM加载项-----》CWYW插件安装
1、首先说一下本次情况,office的版本是2019,后安装的Endnote 9。旧版word也可按此方法尝试。 2、先找到关键的EndNote Cwyw.dll文件。应在此目录下:C:\Program Files (x86)\EndNote X7\Product-Support\CWYW。 3、如没有EndNote Cwyw.dll文…...
用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用
下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接: 1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演…...
Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?
关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …...
SSLVPN对比IPSECVPN安全设备的起源、发展、以及目前行业使用场景
前言 SSL VPN(Secure Sockets Layer Virtual Private Network)是一种利用SSL/TLS(Transport Layer Security,传输层安全)协议来创建安全连接的技术,它允许远程用户通过公共网络(通常是互联网&am…...
Hadoop大数据集群搭建
一、虚拟机配置网络 1、配置文件 进入“/etc/sysconfig/network-scripts”目录,查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络 systemctl restart network 3、测试网络 Ping www.baidu.com 4、设置虚拟机主机名称 5、绑定主机名和…...
【技术前沿】MetaGPT入门安装部署——用多个大语言模型解决任务!一键安装,只需填写OpenAI API
项目简介 MetaGPT 是一个多智能体框架,旨在构建全球首家 “AI 软件公司”。该项目通过为 GPT 分配不同的角色,模拟产品经理、架构师、工程师等职业,协同完成复杂的软件开发任务。MetaGPT 将一个简单的需求转化为完整的软件开发流程ÿ…...
#compsoer基本使用01#
Composer 是 PHP 的依赖管理工具,它允许开发人员管理和安装项目所需的依赖包。 1:查看Compsoer的全局配置命令 composer config -g --list --verbose 这个可以查看composer的镜像地址。例如 [repositories.packagist.org] type (string) : composer [repositor…...
基于c++的yolov5推理之前处理详解及代码(一)
目录 一、前言: 二、关于环境安装: 三、首先记录下自己的几个问题 问题:c部署和python部署的区别? 四、正文开始 4.1 图像预处理讲解 1、BGR---->RBG 2、等比例放缩图片(涉及到短边的填充) 3、归一化…...
Oracle(55)什么是并行查询(Parallel Query)?
并行查询(Parallel Query)是数据库管理系统中的一种查询优化技术,它允许数据库引擎同时使用多个处理器或线程来执行查询操作。通过将查询任务分解为多个子任务,并在多个处理器上同时执行这些子任务,可以显著提高查询的…...
关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析
本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析,希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…...
Java - API
API全称"Application Programming Interface",指应用程序编程接口 API(JDK17.0)链接如下 : Overview (Java SE 17 & JDK 17) (oracle.com)https://docs.oracle.com/en/java/javase/17/docs/api/中文版: Java17中…...
力扣 3152. 特殊数字Ⅱ
题目描述 queries二维数组是nums数组待判断的索引区间(左闭右闭)。需要判断每个索引区间中的nums相邻元素奇偶性是否不同,如果都不同则该索引区间的搜索结果为True,否则为False。 暴力推演:也是我最开始的思路 遍历q…...
识别和缓解软件安全威胁的最佳工具
软件安全威胁会给企业带来重大损失,从经济损失到声誉受损。 企业必须主动识别和缓解这些威胁,防止它们造成危害。 幸运的是,有许多工具可以帮助企业识别和缓解软件安全威胁。 在本博客中,我们将探讨识别和缓解软件安全威胁的顶…...
徐州金网网站建设/企业网站推广建议
目录 一、GNS 3的简介 二、GNS 3的版本说明 三、GNS 3的安装过程 四、GNS 3 VM的导入 五、GNS3 VM的初始配置 六、GNS 3VM的主界面介绍 七、添加路由器设备与连线 八、设备的开启与本地连接 九、IDLE设备 十、添加设备的模块 十一、关联Secure CRT 十二、与物理机通…...
网站静态与动态/seo点击软件手机
前言前面五篇文章,介绍了模型搭建、数据准备及pytorch中常用的计算方法等,有了上述基础后就可以训练和测试模型了,下面这篇文章会简单介绍下在pytorch框架下如何测试深度学习模型,以及一些常用代码。模型测试同样,以一…...
天空台108网站找手工活带回家做/百度软件中心下载
入门HelloWorld新建项目Configure your new project部分选中 Include C Support 复选框Next正常填写所有其他字段并完成向导接下来几个部分在向导的Customize C Support 部分,您可以使用谢列选项自定义项目:C Standard : 使用下拉列表选择使用的C标准。选…...
网站建设制作鸿运通/软文网
首先讲讲界面布局中的几位置设置参数区别,从下面一个简单的图形来做年对比,A代表我们布局页面中一个ViewGroup,比如是LinearLayout,B代码一个View,比如是Button.android:layout_gravity:此控件相对父控件的相对位置(B相对于A的位置)android:g…...
运营一个网站的费用/网站申请
题库来源:安全生产模拟考试一点通公众号小程序 美容师(初级)模拟试题考前必练!安全生产模拟考试一点通每个月更新美容师(初级)模拟考试题库题目及答案!多做几遍,其实通过美容师&…...
做B2C独立网站的话需要做海外仓吗/十大免费软文推广平台
电脑用久了,C盘难免会积累很多无用的文件,致使C盘飘红。老毛桃相信遇到这问题的用户数不胜数,但他们几乎浑身解数也是拿它没办法的。针对这个问题,我们有什么办法呢?那么今天“如何科学清理C盘防止飘红?”就…...