【STM32】HAL库 CubeMX教程---基本定时器 定时
目录
一、基本定时器的作用
二、常用型号的TIM时钟频率
三、CubeMX配置
四、编写执行代码
实验目标:
通过CUbeMX+HAL,配置TIM6,1s中断一次,闪烁LED。
一、基本定时器的作用
基本定时器,主要用于实现定时和计数功能。作用包括:
-  
定时功能:可以产生周期性的中断,用于实现定时任务。例如,可以设置一个定时器每隔一定时间(如1秒)产生一次中断,用于执行周期性的任务,如数据采集、系统心跳等。
 -  
计数功能:基本定时器可以对外部事件进行计数,如脉冲计数。这在测量频率、周期或者进行简单的事件计数时非常有用。
 -  
驱动数模转换器(DAC):可用于驱动DAC,以产生精确的模拟信号。
 -  
产生时基:基本定时器可以为系统提供时基,用于其他外设的同步操作。
 -  
中断服务:通过配置基本定时器,可以在特定的时间点触发中断服务程序,执行特定的处理逻辑。
 
基本定时器结构简单,易于理解和使用。在STM32系列中,基本定时器(如TIM6和TIM7)是16位的向上计数定时器,它们只能向上计数,没有外部输入/输出通道,但可以用于简单的定时任务。通用定时器(如TIM2、TIM3、TIM4)和高级定时器(如TIM1和TIM8)则提供了更多的功能和灵活性。
二、常用型号的TIM时钟频率
1. 常用的STM32F103C8, 是不带TIM6、TIM7的, F103系列要RC起,才带基本定时器。
2. F103系列:所有 TIM 的时钟频率都是72MHz;
3. F407系列:TIM1、8、9、10、11的时钟频率是168MHz,其它TIM的时钟频率是84MHz.
三、CubeMX配置
这里使用现有的CubeMX工程,略过工程配置部分。
如果学习如何新建CubeMX工程, 可以参考下面文章:
STM32CubeMX新建一个工程_STM32F103
STM32CubeMX新建一个工程_STM32F407
使用CubeMX对定时器进行定时配置,过程相当简单便捷。
我们只需配置几个重要参数:时钟源、PSC、ARR、中断。
1、配置参数

参数讲解:
① Prescaler(预分频系数):即PSC寄存器值。简单地理解:内部时钟分频后再给CNT计数器使用,用于控制每一脉冲的时间。按上文内容得知,STM32F407的TIM2时钟是84M,在设置预分频为84后,计数器脉冲频率:84M/84=1MHz,即每秒产生1百万个脉冲信号,1秒/1M=1us, 即每1us产生一次脉冲信号。
② Counter Mode (计数方式): 向上计数
③ Counter Period (计数周期): 即ARR寄存器值,多少个脉冲作为1个波形周期。
④ auto-reload preload (自动重载值的预装载): 当改变周期值ARR时,是否等到下一个更新事件再写入数值,使得数值的更改不影响执行中的波形。
2、打开中断
基本定时器,只有一种中断,按下图,打勾即可。
当计数器(CNT)的值,达到周期值(ARR)时,就会触发中断。
注意:打勾中断后,生成的代码,只是帮我们添加了中断的配置; 而中断的开启,需要使用代码“手动”开启。

四、编写执行代码
代码共为3部分:初始化配置、开启TIM、中断回调函数。
1、初始化配置
CubeMX根据我们的配置,已生成好了初始化代码,我们不用管它。
如果想查看它的初始化实现过程,可以双击 "tim.c"。
2、开启TIM
谨记一个,当我们使用CubeMX配置外设功能时,它只是根据参数的配置生成初始化代码(即上面的第1步),而不会主动开启外设功能,特别是中断的开启,如TIM、ADC、UART等。
所以,我们需要在main.c中,“手动”开启TIM6。
如下图,在while前,添加:
HAL_TIM_Base_Start_IT(&htim6);

调用HAL_TIM_Base_Start_IT(&htim6)后,TIM6就会开始工作。
下面是它的工作原理,硬件自动运行,不用干预,我们只需大概地知道工作过程、原理:
① TIM会自动检测脉冲信号,每来一个脉冲,计数器CNT就会硬件自动加1。
② 当寄存器CNT的计数值==设定的自动重装载值ARR,就会产生溢出中断。
③ 发生溢出中断时,CNT值被硬件置0,开始新一轮计数; 硬件自动找寻中断服务函数入口。
使用CubeMX生成的HAL代码,我们不需要像使用标准库时那样自己编写中断函数,CubeMX已帮我们整理好中断函数的跳转,只需要重写中断回调函数。
3、重写TIM6的中断回调函数
如上所述,基本定时器,只有一种中断(CNT向上计数,达到ARR值),所以也只有一个中断回调函数:
HAL_TIM_PeriodElapsedCallback();
当CNT值==周期值(ARR),即1周期结束,硬件自动调用中断服务函数,继而调用回调函数。
我们可以在工程中任意一个c文件中编写它。
习惯上,会在main.c的尾部编写这个函数。
如下图,我们在main.c的 注释行 /* USER CODE BEGIN 4 */ 下面编写它。
如果工程中已有这个函数,我们只需在函数内增加TIM6的判断部分;
如果工程中没有这个函数,增加即可。
所有TIM的计数器溢出中断(即1周期结束), 都会统一调用它。

在这个回调函数中,我们执行的动作是:每1000ms, 反转PB2电平(LED)。
如果你的开发板上,PB2引脚接的是 LED, 而且也初始化成输出模式,它就会每1秒闪烁1次。
4、思路优化:
上述操作,将会每1s进入1000次中断,当发现变量cnt累加到1000后,才反转LED。
频繁地出入中断,大大地浪费着芯片运行资源。本篇如此设计,仅为了直观地展示和理解。
我们在设计时,应该尽量地节省运行资源。
上面的定时操作,有多种优化的方法,这里使用下面的操作:
psc改为8400(计数脉冲0.0001s),ARR改为10000(1万个脉冲组成1周期)。
然后,修改回调函数,取消计数判断那部分。
这样修改后,将会每1s进入1次中断,调用回调函数1次,能有效地节省运行资源。
相关文章:
【STM32】HAL库 CubeMX教程---基本定时器 定时
目录 一、基本定时器的作用 二、常用型号的TIM时钟频率 三、CubeMX配置 四、编写执行代码 实验目标: 通过CUbeMXHAL,配置TIM6,1s中断一次,闪烁LED。 一、基本定时器的作用 基本定时器,主要用于实现定时和计数功能…...
2024年最新整理腾讯云学生服务器价格、续费和购买流程
2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…...
【QT】重载的信号槽/槽函数做lambda表达式
重载的信号槽 函数指针: int fun(int a,long b) int (*funp)(int, long) fun; 实现回调函数就需要函数指针 信号重载 派生类槽函数发送两个信号 派生类给父类发两个信号 void (SubWidget::*mysigsub)() &SubWidget::sigSub;connect(&subw,mysigsub,t…...
C++之类(一)
1,封装 1.1 封装的引用 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 1.1.1 封装意义一: 在设计类的时候,属性和行为写在一起,表…...
【工具类】repo是什么,repo常用命令,repo和git和git-repo的关系
1. repo 1. repo 1.1. repo是什么1.2. 安装1.3. repo 命令 1.3.1. repo help1.3.2. repo init1.3.3. repo sync1.3.4. repo upload1.3.5. repo start1.3.6. repo forall 1.4. mainfest 文件1.5. git-repo简介(非android repo)1.6. 参考资料 1.1. repo是什么 Repo 是一个 go…...
Java中可以实现的定时任务策略
Java中可以实现的定时任务策略 文章目录 Java中可以实现的定时任务策略自定义独立线程JDK提供的调度线程池-**ScheduledExecutorService**内核是Spring的Task执行调度quartz调度 #mermaid-svg-mQ9rPqk0Ds3ULnvD {font-family:"trebuchet ms",verdana,arial,sans-seri…...
【目标分类图像增强方法】
图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理: 几何变换: 旋转(Rotation&#…...
游戏盾如何应对微商城网站DDoS攻击
游戏盾如何应对微商城网站DDoS攻击?随着电子商务的快速发展,微商城网站已成为众多商家开展在线业务的重要平台。然而,与此同时,网络安全威胁也愈发严重。其中,分布式拒绝服务(DDoS)攻击是一种常…...
安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...
钉钉群内自定义机器人发送消息功能实现
文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档,使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后,获得改机器人的…...
网站维护3年15000元,贵不贵?市场价多少
一般来说,给公司做好网站上线之后,网站就进入了运维期间,某功力公司给客户收费3年15000元网站运维费用,到底高不高呢? 首先,来看看网站运维都有哪些项目 网站运维涉及多个项目和任务,包括但不限…...
ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记
在ROS 2中,Executor是一个核心概念,负责管理节点(Node)中的回调函数,如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调,从而在ROS 2系统中实现异步编程。 ROS 2 …...
Unity 动画(旧版-新版)
旧版 旧版-动画组件:Animation 窗口-动画 动画文件后缀: .anim 将制作后的动画拖动到Animation组件上 旧版的操作 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {// Start is called before…...
Linux和Windows操作系统线程调度策略
本文介绍Linux和Windows操作系统线程调度策略。 不同的操作系统具有不同的线程调度策略,本文针对常见的操作系统(Linux和Windows操作系统)对其线程调度策略作简要说明,并不对其内在运行机制作详细介绍。 1.Linux操作系统线程调度…...
[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置
ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…...
RK3568平台 USB数据包的收发格式
一.USB硬件拓扑结构 compound device :多个设备组合起来,通过HUB跟Host相连composite device :一个物理设备有多个逻辑设备(multiple interfaces) 在软件开发过程中,我们可以忽略Hub的存在,硬件拓扑图简化如下&#x…...
Day 8.TCP通信
TCP通信 TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:发…...
小游戏加固方案已全面适配微信、QQ、抖音、快手、美团、华为、支付宝渠道
2023年,国内移动游戏收入与游戏用户规模双双创下历史新高。其中小游戏异军突起,市场规模达到200亿元,同比增长300%,成了万众瞩目的行业新风口。 小游戏的高速发展带来了更多的活力,产出了多款月流水过亿的热门游戏。行…...
粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主
云开发版粉色UI微信小程序源码,背景图、头像、壁纸小程序源码,带流量主功能。 云开发小程序源码无需服务器和域名即可搭建小程序另外还带有流量主功能噢!微信平台注册小程序就可以了。 这套粉色UI非常的好看,里面保护有背景图、…...
chrome选项页面options page配置
options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,可以看到有的Google Chrome扩展程序有“选项Options”链接,如下图所示。单击“选项Options”…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
