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

stm32---基本定时器(TIM6,TIM7)

        STM32F1的定时器非常多,由两个基本定时器(TIM6,TIM7)、4个通用定时器(TIM2-TIM5)和两个高级定时器(TIM1,TIM8)组成。基本定时器的功能最为简单,类似于51单片机内定时器。通用定时器是在基本定时器的基础上扩展而来,增加了输入捕获与输出比较等功能。高级定时器又是在通用定时器基础上扩展而来,增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能主要针对工业电机控制方面。但无论是哪个定时器,它们的频率都为72M。

基本定时器只有向上计数方式,且其挂载在APB1总线上,只能由内部时钟供能。基本定时器比较简单,就跟systic差不多。

这个是stm32的中文手册中的介绍。

图介绍:其中自动重装载寄存器(ARR)跟systic中的load寄存器作用一样,其作用主要有三部分:

  1. 设置定时器周期: ARR 决定了基本定时器计数器在溢出(从最大值返回0)之前所需的计数值。换句话说,ARR 值定义了定时器的定时周期。一旦计数器计数达到 ARR 的值,定时器将自动重新加载为0并触发一个更新事件。

  2. 产生定时中断: 当基本定时器的计数器达到 ARR 的值时,会触发一个更新事件,您可以配置定时器中断来捕获这个事件。这允许您在特定的时间间隔内执行代码,以执行定时任务。

  3. 生成PWM信号: 如果您使用基本定时器来生成PWM信号,ARR 将决定PWM信号的周期,即高电平和低电平的时间。

基本定时器通常是16位的,所以 ARR 可以设置的最大值是 65535。预分频器也是16位的,但是在预分频器中数值会自动加1,也就是它的取值范围为1到65536,(因为这个预分频器是作为分母用的,分母不能为0,如:给预分频值设为2-1,那么该定时器的频率为32M)。

自动重装载寄存器下面还有个影子寄存器,这个寄存器是实际起作用的寄存器,这个寄存器我们不能人为的去访问,基本定时器中的控制寄存器(TIMx_CR1)有一位(ARPE)是用来设置自动重装载寄存器是否具有缓冲的,stm32中文手册中的图如下:

当ARPE位设置为0时,该自动重装载寄存器不具备缓冲,它会直接把数值传给影子寄存器,

当ARPE位设置为1时,该自动重装载寄存器具备缓冲,它需要一个更新事件的产生才会把数值传给影子寄存器。

 我们可以写一个基本定时器的简单代码:

void TIM_MyConfig(u16 per,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;/*打开时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);/*初始化定时器*/TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period = per;//自动重装载值TIM_TimeBaseInitStruct.TIM_Prescaler = psc; //分频系数TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct);TIM_Cmd(TIM6, ENABLE);
}

1、第一步打开时钟,因为TIM2-TIM7都是挂载在APB1总线上的,所以我们需要打开APB1时钟,我们可以设置为TIM6。

2、初始化定时器,这个要注意函数是TIM_TimeBaseInit();,这个与其它(如:GPIO的初始化函数GPIO_Init)不一样,其中:

TIM_ClockDivision是用来设置定时器的时钟分频因子的成员,它用于控制定时器时钟的分频,从而影响定时器的计数速度。

在STM32中,TIM_ClockDivision 的设置有以下选项:

  1. TIM_CKD_DIV1: 不分频。定时器的时钟不经过分频,以外部时钟源的速度进行计数。

  2. TIM_CKD_DIV2: 分频为2。定时器的时钟被分为2,即每2个外部时钟周期计数器增加1。

  3. TIM_CKD_DIV4: 分频为4。定时器的时钟被分为4,即每4个外部时钟周期计数器增加1。

但是我们基本定时器使用到的是内部时钟源所以用不到 TIM_ClockDivision,可以设置为TIM_CKD_DIV1或者不配置这个成员,这个我们只在通用定时器或者高级定时器才用得到

TIM_CounterMode是用来设置计数模式的成员,基本定时器只有一种向上计数模式,所以这一位设置为TIM_CounterMode_Up就可以了。

TIM_Period是用来设置自动重装载值的成员(也就是设置计数次数),也就是自动重装载寄存器中的值,当计数器的计数值达到该值时会产生一个更新事件,这个值我们可以通过传参来设置。

TIM_Prescaler 是用来设置分频系数的值(也就是设置多久计数一次),该值也可以通过传参来设置。

在main函数中我们可以这样写:

void HardWare_Init(void)
{TIM_MyConfig(5000-1,7200-1);//0.5秒计数产生一次更新事件
}int main(void)
{u8 flag = 0;HardWare_Init();while(1){if(TIM_GetFlagStatus(TIM6,TIM_FLAG_Update) == SET){flag = !flag;}if(flag){PAin(8) = 0;}else{PAin(8) = 1;}TIM_ClearFlag(TIM6,TIM_FLAG_Update);}
}

可以通过设置基本定时器来让LED灯按时闪烁,其中也用到了位带操作(PAin(8))。因为我们需要判断的是定时器是否发生更新事件,当定时器发生更新事件时说明完成了一个计数周期,所以我们用到的函数是 TIM_GetFlagStatus(TIM6,TIM_FLAG_Update)。

相关文章:

stm32---基本定时器(TIM6,TIM7)

STM32F1的定时器非常多,由两个基本定时器(TIM6,TIM7)、4个通用定时器(TIM2-TIM5)和两个高级定时器(TIM1,TIM8)组成。基本定时器的功能最为简单&am…...

HTML网页设计

HTML网页设计 HTML网页设计1、常用的单标签2、常用的双标签3、列表标签4、超链接标签5、图像和动画标签6、Html5中音频的插入7、定时刷新或跳转8、表格9、HTML表单标签与表单设计 HTML网页设计 属性值一般用" "括起来&#xff0c;且必须使用英文双引号 <head>…...

阶段性总结:跨时钟域同步处理

对时序图与Verilog语言之间的转化的认识&#xff1a; 首先明确工程要实现一个什么功能&#xff1b;用到的硬件实现一个什么功能。 要很明确这个硬件的工作时序&#xff0c;即&#xff1a;用什么样的信号&#xff0c;什么变化规则的信号去驱动这个硬件。 然后对工程进行模块划…...

[交互]接口与路由问题

[交互]接口与路由问题 场景描述问题分析解决方案 这是在实战开发过程中遇到的一个问题&#xff0c;所以导致产生了服务端如何区分浏览器请求的是前端路由还是 api 接口的问题&#xff1f;&#xff1f; 场景描述 这是一个前后端分离开发的项目&#xff0c;因此前端一般都会使用…...

linux 6中4T磁盘识别并分区格式化挂接

存储端划分4T的LUN后&#xff0c;主机端操作如下 1、主机识别&#xff0c;本例中hba卡的端口是host11和host12 [rootdb1 ~]# echo "- - -" > /sys/class/scsi_host/host11/scan [rootdb1 ~]# echo "- - -" > /sys/class/scsi_host/host12/scan …...

【Unity】ShaderGraph应用(浮动气泡)

【Unity】ShaderGraph应用(浮动气泡) 实现效果 一、实现的方法 1.使用节点介绍 Position&#xff1a;获取模型的顶点坐标 Simple Noise:简单的噪声&#xff0c;用于计算顶点抖动 Fresnel Effect&#xff1a;菲涅耳效应&#xff0c;用于实现气泡效果 计算用节点 Add&…...

Android EditText setTranslationY导致输入法覆盖问题

平台 RK3288 Android 8.1 显示: 1920x1080 160 dpi 概述 碰到一个问题&#xff1a; 弹出的输入法会覆盖文本输入框。 原因&#xff1a;输入框使用了setTranslationY() 位置偏移后&#xff0c; 输入法无法正确获取焦点的位置。 分析 先上图: 初始布局 调用etTranslation…...

MySQL 导出和导入数据

文章目录 一&#xff0c;导出数据&#xff08;一&#xff09;使用SELECT ... INTO OUTFILE语句导出数据&#xff08;二&#xff09;使用mysqldump工具导出数据&#xff08;三&#xff09;使用SELECT ... INTO DUMPFILE语句导出数据 二&#xff0c;导入数据&#xff08;一&#…...

ubuntu22.04 设置网卡开机自启

配置文件路径 在Ubuntu中&#xff0c;网络配置文件通常位于/etc/netplan/目录下&#xff0c;其文件名以.yaml为后缀。Netplan是Ubuntu 17.10及更高版本中默认的网络配置工具&#xff0c;用于配置网络接口、IP地址、网关、DNS服务器等。 我们可以看到配置文件为 01-network-ma…...

持续部署:提高敏捷加速软件交付(内含教程)

在当今快节奏的数字化环境中&#xff0c;企业不断寻求更快地交付软件、增强客户体验并在竞争中保持领先的方法。持续部署&#xff08;Continuous Deployment, CD&#xff09;已成为一种改变游戏规则的方法&#xff0c;使企业能够简化软件交付、提高敏捷性并缩短上市时间。持续部…...

Spark_Spark内存模型管理

工作中经常用到Spark内存调参&#xff0c;之前还没对这块记录&#xff0c;这次记录一下。 环境参数 spark 内存模型中会涉及到多个配置&#xff0c;这些配置由一些环境参数及其配置值有关&#xff0c;为防止后面理解混乱&#xff0c;现在这里列举出来&#xff0c;如果忘记了&a…...

C++之operator=与operator==用法区别(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

【漏洞复现】WordPress插件wp-file-manager任意文件上传漏洞(CVE-2020-25213)

文章目录 前言声明一、简介二、插件介绍三、漏洞概述四、影响范围五、漏洞分析六、环境搭建七、漏洞复现手工验证file_Manager_Rce.pyfile_manager_upload.py八、修复建议前言 WordPress插件WPFileManager中存在一个严重的安全漏洞,攻击者可以在安装了此插件的任何WordPress网…...

基于安卓Java试题库在线考试系统uniapp 微信小程序

本文首先分析了题库app应用程序的需求&#xff0c;从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本题库app&#xff0c;主要实现了学生、教师、测试卷、试题、考试等。总体设计主要包括系统功能设计、该系统里充分综合应用Mysql数据库、…...

Java入坑之语法糖

一、for和for-each 1.1for和for-each概念 for 循环是一种常用的循环结构&#xff0c;它可以通过一个变量&#xff08;通常是 i&#xff09;来控制循环的次数和范围。for 循环的语法格式如下&#xff1a; for (初始化; 布尔表达式; 更新) {//代码语句 }for-each 循环是 Java …...

VUE响应式

响应式 :::tip 提示 我们了解过响应式可以同步更新数据和视图&#xff0c;但是其工作原理我们最好也要了解一下。这样当你使用时遇到一些常见的错误&#xff0c;也能够快速定位是什么问题导致的。 了解响应式原理之前&#xff0c;你必须要先去了解 ES5 的 Object.defineProper…...

Godot 和 VScode配置C#环境注意事项

前言 尽管有些博主会建议如果我们熟悉C#的话&#xff0c;最好还是使用GDscript&#xff0c;而且对于小白上手也相对简单&#xff0c;但是C#的性能终究还是比动态语言好&#xff0c;也相比CPP简单些&#xff0c;尽管现在Godot还是有些问题&#xff0c;比如不像unity那样适配swit…...

三、Mediasoup进程通信实现的原理

Mediasoup 创建父子进程&#xff0c;js与c进程交互的通道 worker.js构造函数中创建父子进程&#xff0c;c通过libuv的socket可以实现 JavaScript 与 C 之间的相互收发消息 一、 父子进程通信 这是一个简单的示例&#xff0c;演示了如何使用 libuv 在父子进程之间进行通信。以…...

【计算机网络】 TCP——四次挥手

文章目录 流程考点 流程 主动方打算关闭连接&#xff0c;此时会发送一个TCP首部FIN标志位被置为1的报文&#xff0c;也即FIN报文&#xff0c;之后主动方进入FIN_WAIT_1状态。被动方收到该报文后&#xff0c;就向主动方发送ACK应答报文&#xff0c;接着被动方进入CLOSE_WAIT状态…...

「Java开发指南」在MyEclipse中的Spring开发(二)

在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们主要介绍了一些Spring的基本概念、Spring项目配置及向导&#xff0c;本章节将继续介绍如何管理多个项目&#xff0c;Spring配置编辑器等&#xff0c;欢迎持续关注~ MyEclipse v2023.1.2离线版下载(Q技术…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

Shell 解释器​​ bash 和 dash 区别

bash 和 dash 都是 Unix/Linux 系统中的 ​​Shell 解释器​​&#xff0c;但它们在功能、语法和性能上有显著区别。以下是它们的详细对比&#xff1a; ​​1. 基本区别​​ ​​特性​​​​bash (Bourne-Again SHell)​​​​dash (Debian Almquist SHell)​​​​来源​​G…...

Go爬虫开发学习记录

Go爬虫开发学习记录 基础篇&#xff1a;使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能&#xff0c;是构建爬虫的基石&#xff1a; package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…...