day6 STM32时钟与定时器

news2024/11/25 7:03:58

STM32时钟系统的概述

概念

时钟系统是由振荡器(信号源)定时唤醒器分频器等组成的电路。

常用的信号有晶体振荡器RC振荡器

意义

时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行状态变换等动作,外设部件在时钟的驱动下完成各种工作,比如串口数据的发送A/D转换、定时器计数等等。因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡器不稳、停振等。

 常见振荡器简介

概念

振荡器是用来产生重复电子讯号的电子元件。其构成的电路叫振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路或装置。

分类

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

RC振荡器采用RC网络作为选频移相网络的振荡器。

LC振荡器是采用LC振荡回路作为移相选频网络的正反馈振荡器。

晶体振荡器的振荡频率收石英晶体控制。

RC振荡器

RC振荡器是由电阻电容构成的振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路或装置。

优点:实现成本比较低,毕竟就是一个电阻电容。

缺点:由于电阻电容的精度问题所以RC振荡器的振荡频率会有误差,同时受温度、湿度影响。

 

LC振荡器

LC振荡器使用一个电感(L)和一个电容(C)组成的电路。

工作原理是通过电感和电容之间的相互作用来产生振荡信号。

当电容充电时,它会储存能量,并通过电感释放能量。

LC振荡器的频率由电感和电容的数值决定。

晶体振荡器

石英晶体振荡器是高精度和高稳定度的振荡器,被广泛应用于彩电、计算机等各类振荡器电路中,以及在通信系统中用于频率发生器、为数据处理设备产生时钟信号和特定系统提供基准信号

优点 :相对来说振荡频率一般都比较稳定,同时精度也较高。

缺点:价格稍微较高,晶体振荡器一般还需要接两个15~33pf起振电容。

STM32F0时钟源介绍

STM32中有四个时钟源:

HSI:高速内部时钟,RC振荡器,频率为8MHz;

HSE:高速外部时钟,可以石英 / 陶瓷振荡器,或者接外部时钟源,频率范围为4MHz~16MHz

LSI:低速内部时钟,RC振荡器,频率为40KHz。独立看门狗时钟源智能是这个,还可以做RTC时钟源

LSE:低速外部时钟,接37.768KHz的石英晶体。主要是RTC的时钟源

STM32时钟树(部分):

SysTick定时器

概念

定时器,能够定时、计数的器件称为定时器

SysTick,称作系统滴答定时器。是一个定时设备,位于Cortex - M0内核中,可以对输入的时钟进行计数,当然,如果时钟信号是周期性地,计数也就是计时。

系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。根据这个中断,系统就可以实现时间片的计算从而切换进程。

工作原理

滴答定时器是一个24位定时器,也就是最多能计数2^24.在使用的时候,我们一般给计数器一个初始的计数值,计数器向下计数,每来一个时钟信号,计数初值就减一,计数值减到0的时候,就会触发一次中断。然后重新计数初值再减一计数,循环不断。

原理图

 SysTick寄存器

 

 SysTick定时器初始化

// Main中已经实现对SysTick定时器的初始化
void SystemClock_Config(void)
	HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
	       SysTick_Config(TicksNumb);

 SysTick中断相关

 HAL_Delay()函数

 //利用SysTick实现精准的延时
__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t    tickstart = 0U;

  tickstart     = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay) ; 
}

HAL_Delay()  的局限   

        HAL库的延时函数有一个局限性,在中断服务函数中使用HAL_Delay会引起混乱,因为它是通过中断方式实现,而 Systick 的中断一般操作系统优先级是最低的,所以在中断中运行 HAL_Delay会导致死锁的现象。

STM32通用定时器介绍

STM32F051xx系列器件包括多达6个通用定时器,1个基本定时器和1个高级定时器

 几种定时器功能比较

通用定时器TIMx功能

  • 定时器定时计数
  • 输入捕获
  • 输出比较
  • PWM输出
  • 使用外部信号控制定时器和定时器互连的电路

高级定时器TIM1功能

  • 通用定时器的功能
  • 带死区控制和紧急刹车,可用于PWM控制电机

基本定时器TIM1功能

  • 主要运用于定时计数以及驱动DAC

定时器计数模式

向上计数模式

计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器移除事件。

向下计数模式

计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

中央对齐模式(向上 / 向下计数)

计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

 定时器计数原理

时钟源:定时器时钟TIMxCLK,即内部时钟CK_INT,经APB预分频器后分频提供

计数器时钟:定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数

计数器CNT:是一个16位/32位的计数器

自动重装载寄存器:这里面装着计数器能计数的最大数值。当计数到这个值得时候,如果使能了中断的话,定时器就产生溢出中断

计时中断时间:1/(TIMxCLK/(PSC+1)) * (ARR+1)

 定时器输入捕获与输出比较

输入捕获:输入捕获可以用来捕获外部事件,比如引脚的电平变化(上升沿,下降沿),并记录下变化的时间,通常可以用来测量外部信号的频率或者电平持续的时间

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迪瑞克斯拉算法

迪锐克斯拉算法 简单来说就是在有向图中&#xff0c;给定一个图中具体的出发点&#xff0c;从这个点出发能够到达的所有的点&#xff0c;每个点的最短距离是多少。到不了的点&#xff0c;距离则是正无穷。有向&#xff0c;无负权重&#xff0c;可以有环。 所以说&#xff0c;迪…

Linux 终端命令之文件浏览(4) head, tail

Linux 文件浏览命令 cat, more, less, head, tail&#xff0c;此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…

流量日志分析--实操

[鹤城杯 2021]流量分析 <--第一道流量分析不难,主要就是布尔盲注的流量包分析,直接查看http请求包即可我们可以通过观察看到注入成功的响应长度不同,这里成功的为978字节,失败的994字节.不要问为什么.其实也可以直接判断.978的流量比994的少了非常多 显然就是成功的(因为这里…

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初步使用(二)

前言&#xff1a; 在前面一篇文章云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初始安装&#xff08;一&#xff09;_华为cna_晚风_END的博客-CSDN博客 介绍了基于VMware虚拟机里嵌套部署华为云的云计算&#xff0c;不过仅仅是做到了在VRM的web界面添加计算节点…

高效数据传输:轻松上手将Kafka实时数据接入CnosDB

本篇我们将主要介绍如何在 Ubuntu 22.04.2 LTS 环境下&#xff0c;实现一个KafkaTelegrafCnosDB 同步实时获取流数据并存储的方案。在本次操作中&#xff0c;CnosDB 版本是2.3.0&#xff0c;Kafka 版本是2.5.1&#xff0c;Telegraf 版本是1.27.1 随着越来越多的应用程序架构转…

keil构建STM32工程并使用proteus仿真led点灯实验

STM32单片机与51单片机有很大区别&#xff0c;不仅结构上有很大差异&#xff0c;STM32更复杂一些&#xff0c;在操作上来说&#xff0c;STM32也要复杂很多&#xff0c;51单片机上手写代码&#xff0c;可以很直接操作引脚&#xff0c;但是STM32单片机在操作引脚之前需要作很多初…

学无止境·运维高阶⑤(LVS-DR 群集 配置Nginx负载均衡)

LVS-DR 群集 && 配置Nginx负载均衡 一、LVS-DR 群集1、相关配置环境2、在RS上配置并启动脚本2.1相关脚本2.2 启动脚本&#xff0c;另一台RS同样步骤 3、LVS-DR模式配置脚本4、测试 二、Nginx负载均衡1、安装Nginx并关闭相应设置2、向主机 node2&#xff0c;node3 写入内…

【第二阶段】kotlin函数引用

针对上篇传入函数参数我们也可以重新定义一个函数&#xff0c;然后在main中调用时传入函数对象 lambda属于函数类型的对象&#xff0c;需要把普通函数变成函数类型的对象&#xff08;函数引用&#xff09;&#xff0c;使用“&#xff1a;&#xff1a;” /*** You can edit, ru…

[足式机器人]Part3机构运动微分几何学分析与综合Ch03-1 空间约束曲线与约束曲面微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学 3.1 空间曲线微分几何学概述3.1.1 矢量表示3.1.2 Frenet标架 连杆机构中的连杆与连架杆构成运动副&#xff0c;该运动副元素的特征点或特…

二十二、策略模式

目录 1、项目需求2、传统方案解决鸭子问题的分析和代码实现3、传统方式实现存在的问题分析和解决方案4、策略模式基本介绍5、使用策略模式解决鸭子问题6、策略模式的注意事项和细节7、策略模式的使用场景 以具体项目来演示为什么需要策略模式&#xff0c;策略模式的优点&#x…

GitHub 如何部署写好的H5静态页面

感谢粉皮zu的私信&#xff0c;又有素材写笔记了。(●’◡’●) 刚好记录一下我示例代码的GitHub部署配置&#xff0c;以便于后期追加仓库。 效果 环境 gitwin 步骤 第一步 新建仓库 第二步 拉取代码 将仓库clone到本地 git clone 地址第三步 部署文件 新建.github\workflo…

线性规划模型-应用篇

文章目录 模型特点使用技巧工具包和求解器模型线性化 应用实例经验总结 模型特点 上一篇中&#xff0c;详细阐述了线性规划问题和单纯形法的算法原理&#xff0c;本文将着重介绍线性模型在工业场景中的应用。 首先需要说清楚的是&#xff0c;为什么线性模型深受研发人员青睐。…

五、约束编程求解优化问题

文章目录 1、瑶草问题-离散优化问题2、重试优化3、分支限界法-改进重试优化法4、重启式搜索4.1 重启方针/策略4.2 自动化搜索策略 THE END 1、瑶草问题-离散优化问题 \qquad 要求在一个建木上构建一个完整的分枝树&#xff0c;每一个完整的分枝有100段&#xff0c;完整分枝上的…

2023年《开学第一课》播出时间是什么时候?开学第一课怎么在手机上观看高清直播?

2023年《开学第一课》播出时间是什么时候&#xff1f; 根据往年《开学第一课》播出时间预计2023年《开学第一课》播出时间是2023年9月1日20:00&#xff0c;如有变化请以官方公布为准&#xff1b; 2023年开学第一课怎么在手机上观看高清直播&#xff1f; 1、打开手机微信&…

第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解

第三章&#xff0c;矩阵&#xff0c;07-用初等变换求逆矩阵、矩阵的LU分解 一个基本的方法求 A − 1 B A^{-1}B A−1BLU分解例1&#xff0c;求矩阵A的LU分解&#xff1a;例12&#xff0c;LU分解解线性方程组&#xff1a; 玩转线性代数(19)初等矩阵与初等变换的相关应用的笔记&a…

Rx.NET in Action 第一章学习笔记

Part 1 初入反应式扩展 什么是反应式程序&#xff1f;它们有什么用&#xff1f;使用反应式扩展&#xff08;Rx&#xff09;编程&#xff0c;会如何改变你编写代码的方式&#xff1f;在开始使用 Rx 之前应该做些什么&#xff1f;为什么 Rx 比传统的事件驱动编程更好&#xff1f…

简单认识Zabbix监控系统及配置

文章目录 一、zabbix概述1、定义2、zabbix监控原理3、监控对象4、zabbix的3种架构&#xff08;1&#xff09; C/S架构&#xff08;2&#xff09;分布式架构&#xff1a;zabbix-proxy-client架构&#xff08;3&#xff09; master-node-client架构 5、zabbix监控模式 二、部署za…

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

背景: apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。 重构后代码结构更加清晰,对扩展更为友好;此外,也更新了dreamview对pnc的支持,使得调试更加方便。 本教程将继续更新对于Apollo Planning2.0决策规划算法代码的详细解析,便于大家更好理解…

[鹏城杯 2022]简单包含

直接用php&#xff1a;// 有wtf 加脏数据绕过

Spring boot中的线程池-ThreadPoolTaskExecutor

一、jdk的阻塞队列&#xff1a; 二、Spring boot工程的有哪些阻塞队列呢&#xff1f; 1、默认注入的ThreadPoolTaskExecutor 视频解说&#xff1a; 线程池篇-springboot项目中的service层里简单注入ThreadPoolTaskExecutor并且使用_哔哩哔哩_bilibili 程序代码&#xff1a;…