STM32定时器定时及其应用
STM32定时器定时及其应用
- 定时器概述
- ☆定时器相关配置
- CubeMX工程配置及程序实现
- 固件库程序设计及实现
定时器概述
-
1. 工作原理
使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器

-
2. 定时器分类
基本定时器(TIM6~TIM7)
通用定时器(TIM2~TIM5)
高级定时器(TIM1和TIM8)定时器类型 主要功能 基本定时器 没有输入输出通道,常用作时基,即定时功能 通用定时器 具有多路独立通道,可用于输入捕获/输出比较,也可用作时基 高级定时器 除具备通用定时器所有功能外,还具备带死区控制的互补信号输出刹车输入等功能 -
3. STM32F103C8T6资源

-
4. 通用定时器介绍
- 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
- 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。
- 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C.PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出 - 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
- 如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
-
5. 定时器计数模式
计数模式 计数器溢出值 计数器重装值 向上计数 CNT = ARR CNT = 0 向下计数 CNT = 0 CNT = ARR 中心对齐计数 CNT = ARR - 1 CNT = ARR CNT = 1 CNT = 0

-
6. 定时器时钟源
- 时钟源:定时器时钟TIMxCLK,即内部时钟CK_INT,经APB预分频后分频提供
- 计数器时钟:定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数。
- 计数器CNT:是一个16位/32的计数器
- 自动重装载寄存器:这里面装着的计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。
- 计数中断时间:1/(TIMxCLK/(PSC+1))*(ARR+1))

-
7. 定时器溢出时间公式☆

例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72M
☆定时器相关配置
- 使能时钟配置
- 定时器参数配置
- NVIC中断配置
- 中断服务函数
CubeMX工程配置及程序实现
-
时钟配置
- 采用外部高速晶振

- 时钟树配置

- 采用外部高速晶振
-
定时器配置
-
开启定时器

-
参数设置

-
使能中断NVIC

-
-
程序设计
//初始化TIM2用于计时 HAL_TIM_Base_Start_IT(&htim2); //定时器中断服务程序 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if( htim->Instance == TIM2){HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);} }
固件库程序设计及实现
-
使能时钟配置
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //初始化定时器时钟 -
定时器结构体配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定时器结构体定义TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置预分频系数TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure ); //初始化结构体TIM_ITConfig( TIM2, TIM_IT_Update, ENABLE); //使能中断 允许更新中断源TIM_Cmd( TIM2, ENABLE); //使能定时器2 -
NVIC中断配置
NVIC_InitTypeDef NVIC_InitStructure; //NVIC结构体定义//NVIC初始化NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //中断通道 TIM2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级NVIC_Init(&NVIC_InitStructure); //初始化NVIC结构体 -
定时器2初始化函数设计
void TIM2_Init(u16 psc, u16 arr) //500ms{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //初始化定时器时钟//定时器初始化 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频TIM_TimeBaseStructure.TIM_Prescaler = psc;TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure ); //初始化结构体TIM_ITConfig( TIM2, TIM_IT_Update, ENABLE); //使能中断 允许更新中断源//NVIC初始化NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);TIM_Cmd( TIM2, ENABLE); //使能定时器2} -
中断服务函数
//TIM2 中断服务函数 void TIM2_IRQHandler(void) {if( TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET ) //中断标志位判断,确认进入中断{LED1 = !LED1;TIM_ClearFlag(TIM2, TIM_IT_Update); //清除中断标志位} }
相关文章:
STM32定时器定时及其应用
STM32定时器定时及其应用 定时器概述☆定时器相关配置CubeMX工程配置及程序实现固件库程序设计及实现 定时器概述 1. 工作原理 使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器 2. 定时器分类 基本定时器(TIM6~TIM7…...
(牛客) 游游的字符重排(next_permutation的使用)
题目描述 游游定义一个字符串是“好串”,当且仅当该字符串相邻的字符不相等。例如"arcaea"是好串,而"food"不是好串。 游游拿到了一个字符串,她可以将该字符串的各个字符顺序随意打乱。她想知道一共可以生产多少种不同的…...
RTPEngine 通过 HTTP 获取指标的方式
文章目录 1.背景介绍2.RTPEngine 支持的 HTTP 请求3.通过 HTTP 请求获取指标的方法3.1 脚本配置3.2 请求方式 1.背景介绍 RTPEngine 是常用的媒体代理服务器,通常被集成到 SIP 代理服务器中以减小代理服务器媒体传输的压力,其架构如下图所示。这种使用方…...
聚鑫数藏平台——引领数字资产管理新风向
随着数字经济的飞速发展,新金融生态应运而生。区块链技术的崭新突破,使数字资产的重要性日益凸显,为投资者带来了前所未有的机遇和挑战。在此背景下,聚鑫数藏平台横空出世,引领着数字资产管理的新风向。 聚鑫数藏平台&…...
web3j solidity 转java
需要使用的环境 web3j,nodejs 安装编译sol工具 1 $ npm install -g solc 保存为hello.sol文件到本地 1 2 3 4 5 6 7 8 pragma solidity 0.4.19; contract hello { function main(uint a) constant returns (uint b) { uint result a * 8; …...
uniapp项目实战系列(3):底部导航栏与头部导航栏的配置
目录 系列往期文章(点击跳转)uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管(点击跳转)uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具…...
Jwt工具类
导入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency> <dependency><groupId>javax.xml.bind</groupId><artifactId>jax…...
计算机网络-笔记-第五章-运输层
🌸章节汇总 一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 五、第五章——运输层 1、运输层概述 2、运输层端口号、复用、分用 (1࿰…...
java-参数传递机制
java参数传递机制都是值传递。 基本类型参数传输都是数据值。 传递到方法中的值是拷贝后的值。 引用类型参数传输的都是地址值。 如果是数组的参数传递,那么是引用传递(本质上还是值传递,但是由于数组的值传递是传递数组的内存地址…...
Python编程练习与解答 练习96:字符串是否表示整数
本练习将编写一个名为isInteger的函数,用于确定字符串中的字符是否代表有效整数,确定字符串是否表示整数时,则应忽略开通要或者结尾的任何空白。一旦这个空白被忽略,如果字符串的长度至少是1,且只包含数字,…...
Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入
1. Scala的特质trait与java接口的区别 Scala中的特质(trait)和Java中的接口(interface)在概念和使用上有一些区别: 默认实现:在Java中,接口只能定义方法的签名,而没有默认实现。而在…...
检查js中的字符串是否可以成为回文
探索 JavaScript 中的字符串操作领域揭示了一个令人着迷的挑战:确定给定的字符串是否可以转换为回文。回文,即正反读相同的单词或短语,具有固有的吸引力,并激发了寻求揭开其神秘属性的开发人员的好奇心。在本文中,我们…...
时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)
时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测) 目录 时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1…...
WebSocket--技术文档--基本概念--《快速了解WebSocket协议》
阿丹: 不断学习新技术,丰富自己了解更多才能扩展更多世界可能。 官网 WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区 软件简介 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebS…...
flutter报错-cmdline-tools component is missing
安装完androidsdk和android studio后,打开控制台,出现错误 解决办法 找到自己安装android sdk的位置,然后安装上,并将下面的勾选上 再次运行 flutter doctor 不报错,出现以下画面 Doctor summary (to see all det…...
torch.bmm功能解读
bmm 是 batched matrix multiple 的简写,即批量矩阵乘法,矩阵是二维的,加上batch一个维度,因此该函数的输入必须是两个三维的 tensor,三个维度代表的含义分别是:(批量,行,…...
如何使用Puppeteer进行金融数据抓取和预测
导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、PDF生成等功能。本文将介绍如何使用Puppeteer进行金融数据抓取和预测,以及如何使用亿牛云爬虫代理提高爬虫效果。 概述 金融数据抓取是指从…...
Linux下 Socket服务器和客户端文件互传
目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器,实现服务器和客户端的文件传输。…...
Nginx详解 第五部分:Ngnix反向代理(负载均衡 动静分离 缓存 透传 )
Part 5 一、正向代理与反向代理1.1 正向代理简介1.2 反向代理简介 二、配置反向代理2.1 反向代理配置参数2.1.1 proxy_pass2.1.2 其余参数 2.2 配置实例:反向代理单台web服务器2.3 代理转发 三、反向代理实现动静分离四、缓存功能五、反向代理客户端的IP透传5.1 原理概述5.2 一…...
中国行政区域带坐标经纬度sql文件及地点获取经纬度方法
文章目录 前言一、如何获取某地的经纬度?1.1 搜索百度地图1.2 在下方找到地图开放平台1.3 下滑找到坐标拾取器1.4 使用 二、sql文件2.1 创建表2.2 插入数据 前言 当工作业务上需要涉及地图,给前端返回经纬度等场景,需要掌握区域经纬度的获取…...
BubbleRAG:破局黑盒图谱,召回精确率双杀
LLMs 在知识密集型任务中普遍存在幻觉问题,且训练数据的静态性导致知识过时。 RAG 通过引入外部知识缓解这一问题,其中基于知识图谱(KG)的RAG能显式建模跨文档依赖,支持结构化推理。然而,现有方法在黑盒知识…...
YOLOv5后处理升级指南:一文搞懂NMS、Soft-NMS和CIoU-NMS怎么选
YOLOv5后处理优化实战:NMS算法选型与性能调优指南 当你的YOLOv5模型完成训练后,最后一个关键环节是后处理优化——这直接决定了检测框的质量和最终性能表现。面对琳琅满目的NMS变种和IoU计算方法,工程师们常常陷入选择困难:Soft-N…...
从七鳃鳗到潜水器:手把手教你用Python生态学模型搞定2024美赛A、B题
从七鳃鳗到潜水器:Python生态学建模实战指南 数学建模竞赛中,生态学问题往往让参赛者望而生畏——复杂的生物系统、多变的环境参数、非线性相互作用,这些要素叠加起来容易让人陷入理论推导的泥潭。但换个角度看,这正是Python科学计…...
3大突破策略:Bypass Paywalls Clean 2024全场景应用指南
3大突破策略:Bypass Paywalls Clean 2024全场景应用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,付费墙已成为知识获取的主要障碍…...
嵌入式NTP客户端库:高精度时间同步与自动时区管理
1. NTP客户端库深度解析:嵌入式系统中的高精度时间同步与时区管理1.1 库定位与工程价值NTP(Network Time Protocol)客户端库是嵌入式系统中实现网络时间同步的关键组件。该库并非简单封装UDP通信,而是构建了一套完整的“时间服务栈…...
Tecplot三维可视化保姆教程:从MATLAB数据到专业云图只需5步
Tecplot三维可视化实战指南:从MATLAB数据到科研级云图全解析 在工程仿真与科学计算领域,数据可视化是研究成果呈现的关键环节。当二维图表无法满足复杂空间数据的展示需求时,Tecplot作为专业的三维可视化工具便展现出独特优势。本文将手把手带…...
【设计模式】行为型-模板方法模式
文章目录前言一、概念二、核心结构三、Java 代码实现(订单支付流程)1. 抽象类(定义模板)2. 具体子类:微信支付3. 具体子类:支付宝支付4. 客户端调用四、钩子方法(Hook)—— 让模板更…...
**NPU设计新范式:基于RISC-V的可配置计算单元实现与性能优化实践**在人工智能加速领域,
NPU设计新范式:基于RISC-V的可配置计算单元实现与性能优化实践 在人工智能加速领域,NPU(神经网络处理单元) 正从专用硬件向灵活可编程架构演进。本文将深入探讨一种基于 RISC-V指令集扩展 的轻量级NPU设计方案,并通过实…...
单片机死循环设计与中断机制解析
1. 单片机程序为何需要死循环设计第一次接触单片机编程时,很多初学者都会对main()函数里那个看似"不合理"的while(1)死循环产生疑问。我当年在实验室调试第一个51单片机项目时,也曾向导师提出过同样的问题。经过这些年的项目实践,我…...
Jimeng LoRA企业落地案例:设计公司LoRA训练-测试-选型一体化流程
Jimeng LoRA企业落地案例:设计公司LoRA训练-测试-选型一体化流程 1. 项目简介 今天给大家分享一个特别实用的企业级AI应用案例——如何为设计公司搭建一套完整的LoRA模型训练、测试和选型流程。这个项目基于Jimeng(即梦)系列LoRA模型&#…...
