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

STM32定时器定时及其应用

STM32定时器定时及其应用

  • 定时器概述
  • ☆定时器相关配置
  • CubeMX工程配置及程序实现
  • 固件库程序设计及实现

定时器概述

  • 1. 工作原理
    使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器

  • 2. 定时器分类
      基本定时器(TIM6~TIM7)
      通用定时器(TIM2~TIM5)
      高级定时器(TIM1和TIM8)

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

  • 4. 通用定时器介绍

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

    计数模式计数器溢出值计数器重装值
    向上计数CNT = ARRCNT = 0
    向下计数CNT = 0CNT = ARR
    中心对齐计数CNT = ARR - 1CNT = ARR
    CNT = 1CNT = 0

在这里插入图片描述

  • 6. 定时器时钟源

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

    例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72M

☆定时器相关配置

  • 使能时钟配置
  • 定时器参数配置
  • NVIC中断配置
  • 中断服务函数

CubeMX工程配置及程序实现

  • 时钟配置

    1. 采用外部高速晶振
    2. 时钟树配置
  • 定时器配置

    1. 开启定时器

    2. 参数设置

    3. 使能中断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…...

计算机网络-笔记-第五章-运输层

&#x1f338;章节汇总 一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 五、第五章——运输层 1、运输层概述 2、运输层端口号、复用、分用 &#xff08;1&#xff0…...

java-参数传递机制

java参数传递机制都是值传递。 基本类型参数传输都是数据值。 传递到方法中的值是拷贝后的值。 引用类型参数传输的都是地址值。 如果是数组的参数传递&#xff0c;那么是引用传递&#xff08;本质上还是值传递&#xff0c;但是由于数组的值传递是传递数组的内存地址&#xf…...

Python编程练习与解答 练习96:字符串是否表示整数

本练习将编写一个名为isInteger的函数&#xff0c;用于确定字符串中的字符是否代表有效整数&#xff0c;确定字符串是否表示整数时&#xff0c;则应忽略开通要或者结尾的任何空白。一旦这个空白被忽略&#xff0c;如果字符串的长度至少是1&#xff0c;且只包含数字&#xff0c;…...

Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入

1. Scala的特质trait与java接口的区别 Scala中的特质&#xff08;trait&#xff09;和Java中的接口&#xff08;interface&#xff09;在概念和使用上有一些区别&#xff1a; 默认实现&#xff1a;在Java中&#xff0c;接口只能定义方法的签名&#xff0c;而没有默认实现。而在…...

检查js中的字符串是否可以成为回文

探索 JavaScript 中的字符串操作领域揭示了一个令人着迷的挑战&#xff1a;确定给定的字符串是否可以转换为回文。回文&#xff0c;即正反读相同的单词或短语&#xff0c;具有固有的吸引力&#xff0c;并激发了寻求揭开其神秘属性的开发人员的好奇心。在本文中&#xff0c;我们…...

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测&#xff08;风电功率预测&#xff09; 目录 时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测&#xff08;风电功率预测&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1…...

WebSocket--技术文档--基本概念--《快速了解WebSocket协议》

阿丹&#xff1a; 不断学习新技术&#xff0c;丰富自己了解更多才能扩展更多世界可能。 官网 WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区 软件简介 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebS…...

flutter报错-cmdline-tools component is missing

安装完androidsdk和android studio后&#xff0c;打开控制台&#xff0c;出现错误 解决办法 找到自己安装android sdk的位置&#xff0c;然后安装上&#xff0c;并将下面的勾选上 再次运行 flutter doctor 不报错&#xff0c;出现以下画面 Doctor summary (to see all det…...

torch.bmm功能解读

bmm 是 batched matrix multiple 的简写&#xff0c;即批量矩阵乘法&#xff0c;矩阵是二维的&#xff0c;加上batch一个维度&#xff0c;因此该函数的输入必须是两个三维的 tensor&#xff0c;三个维度代表的含义分别是&#xff1a;&#xff08;批量&#xff0c;行&#xff0c…...

如何使用Puppeteer进行金融数据抓取和预测

导语 Puppeteer是一个基于Node.js的库&#xff0c;可以用来控制Chrome或Chromium浏览器&#xff0c;实现网页操作、截图、PDF生成等功能。本文将介绍如何使用Puppeteer进行金融数据抓取和预测&#xff0c;以及如何使用亿牛云爬虫代理提高爬虫效果。 概述 金融数据抓取是指从…...

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聊天服务器&#xff0c;实现服务器和客户端的文件传输。…...

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文件及地点获取经纬度方法

文章目录 前言一、如何获取某地的经纬度&#xff1f;1.1 搜索百度地图1.2 在下方找到地图开放平台1.3 下滑找到坐标拾取器1.4 使用 二、sql文件2.1 创建表2.2 插入数据 前言 当工作业务上需要涉及地图&#xff0c;给前端返回经纬度等场景&#xff0c;需要掌握区域经纬度的获取…...

[国产MCU]-W801开发实例-WiFi网络扫描

WiFi网络扫描 文章目录 WiFi网络扫描1、WiFi模块介绍2、WiFi扫描API介绍3、WiFi扫描实例本文将演示如何使用WiFi模块进行WiFi网络扫描。 1、WiFi模块介绍 W801的WiFi具有如下特性: 支持 GB15629.11-2006 IEEE802.11 b/g/n支持 Wi-Fi WMM/WMM-PS/WPA/WPA2/WPS支持 EDCA信道接入…...

SpringBoot使用kafka事务-消费者方

前言 在上一篇文章中&#xff0c;写到了如何在springboot中生产者如何使用kafka的事务&#xff0c;详情链接&#xff1a;Springboot使用kafka事务-生产者方 那么&#xff0c;这一篇就接着上篇所写的内容&#xff0c;讲解一下再springboot中消费者如何使用kafka的事务。 实现…...

C# 实现PictureBox从指定的文件夹内进行翻页操作

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

Eureka 注册中心的使用

环境 springboot springcloud Eureka-Server注册中心服务端 pom.xml导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.7.RELEAS…...

vue3 组件通信方式

文章目录 组件通信方式props自定义事件全局事件总线v-modeluseAttrsref与$parentprovide与injectpiniaslot 组件通信方式 props ​ 实现父子组件通信,在vue3中可以通过defineProps获取父组件传递的数据。且在组件内部不需要引入defineProps方法可以直接使用&#xff01; 父组…...

淘宝商品API使用示例:如何通过调用外部API来获取淘宝商品价格销量主图详情数据

淘宝上的商品信息量非常之大&#xff0c;商品的详情信息也很齐全。如何通过调用外部API来实现批量获取商品价格销量主图详情等信息呢&#xff1f;上周刚好完成了一个完整的淘宝商品采集项目&#xff0c;今天特来分享一下。 接口名称&#xff1a;item_get 请求地址&#xff1a…...

RK3568-android11-适配ov13850摄像头

硬件连接 主要分为两部分: mipi接口:传输摄像头数据 i2c接口:配置摄像头和对焦马达芯片寄存器相关驱动 |-- arch/arm64/boot/dts/rockchip DTS配置文件 |-- drivers/phy/rockchip/|-- phy-rockchip-mipi-rx.c mipi dphy 驱动 |-- drivers/media||-- platform/rockchip/isp1…...

基于Sider-chatgpt3.5-编写一个使用springboot2.5连接elasticsearch7的demo程序,包括基本的功能,用模板方法

下面是一个使用Spring Boot 2.5连接Elasticsearch 7的示例程序&#xff0c;包括基本的功能&#xff0c;使用模板方法&#xff1a; 首先&#xff0c;确保你的项目中添加了以下依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> &l…...

nodejs中如何使用Redis

Redis介绍&#xff1a; Redis 是一个开源的内存数据结构存储器&#xff0c;一般可以用于数据库、缓存、消息代理等&#xff0c;我们常在项目中用redis解决高并发、高可用、高可扩展、大数据存储等问题&#xff1b; 它本质上是一个NoSql&#xff08;非关系型数据库&#xff09;…...

golang append坑

查看如下代码输出 package mainimport "fmt"func main() {a : make([][]int, 0)b : make([]int, 0)b append(b, 1)a append(a, b)fmt.Println(a)b[0] 2fmt.Println(a) }输出&#xff1a; [[1]] [[2]]可以看出b改变之后&#xff0c;在a中也发生了改变&#xff0c…...