STM32F4X 定时器中断

STM32F4X 定时器中断

  • 什么是定时器
  • STM32F4X 定时器分类
  • 有关定时器的概念
    • 预分频(PSC)
    • 自动重装载值(ARR)
  • STM32F4X定时器例程
    • 定时器相关函数
    • 定时器例程

什么是定时器

定时器(Timer)最基本的功能就是定时,比如定时翻转LED灯,定时向串口发送数据等。除此之外,定时器还可以跟GPIO结合使用,利用定时器产生PWM波形,利用定时器捕捉电平信号等。本章先来讲解定时器的最基本的用法,定时功能。

STM32F4X 定时器分类

STM32F4X将定时器分成3类,分别是基本定时器,通用定时器和高级定时器,不同类型的定时器功能不同。下图是STM32F4X的定时器分类以及功能。本章会用基本定时器,也就是TIM6或者TIM7来进行讲解。
在这里插入图片描述

有关定时器的概念

预分频(PSC)

定时器想要工作,首先要用时钟,时钟的作用是给定时器一个时基,让定时器按照这个时基单元进行计数。在STM32F4中,定时器是的时钟源是APB时钟。比如APB的时钟是84MHz,那么定时器的时钟就是84MHz。而预分频的作用是对定时器的时钟源进一步细分,得到用户想要的时钟频率。比如用户觉得84MHz的时钟频率太高了,想得到一个42MHz的频率,就可以往定时器的预分频寄存器里面写1(注意:定时器的预分频寄存器会将预分频系数自动加1),就会得到42MHz的频率。
在这里插入图片描述
在这里插入图片描述
要注意的时定时器的时钟源会根据硬件自动选择,具体如下图所示。
高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线。
通用定时器timer2 ~ timer5,通用定时器timer12 ~ timer14以及基本定时器timer6,timer7的时钟来源是APB1总线。

在这里插入图片描述

自动重装载值(ARR)

上面的预分频寄存器设置了定时器的计数频率,那么用户要怎样才能得到想要的定时值呢,这就需要自动重装载值寄存器了。自动重装载寄存器的作用是设置定时器的溢出值,当定时器计数超过自动重装载值寄存器里面值的时候,就会产生一个溢出中断。下面举个例子说明一下。
比如现在需要一个500ms的定时器,APB时钟是84MHz,我们可以这样设置。
预分频系数设置为8399,即定时器的计数频率为84Mhz / 8400 = 10KHZ,定时器每隔10KHz计一次数,也就是0.1ms记一次数,想要得到500ms的定时时间,只需要往自动重装载值寄存器里面写4999即可,也就是0.1*5000 = 500ms。
定时器的计算公式如下:
Tout = (1 / (Tclk / (psc + 1))) * (arr + 1)
Tout:定时器溢出值
Tclk:定时器时钟频率
psc:定时器预分频值
arr:自动重装载值

STM32F4X定时器例程

定时器相关函数

/*
定时器初始化函数
TIMx:定时器索引
TIM_TimeBaseInitStruct:定时器初始化结构体
*/
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)/*
定时器中断使能函数
TIMx:定时器索引
TIM_IT:定时器中断类型
NewState:定时使能
*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)/*
定时器获取中断状态函数
TIMx:定时器索引
TIM_IT:定时器中断类型
返回值:定时器中断状态
*/
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)/*
定时器清除中断状态函数
TIMx:定时器索引
TIM_IT:定时器中断类型
*/
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)

定时器例程

该例程是使用定时器7产生一个500ms的中断

#include "timer.h"void bsp_timer_init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_ClocksTypeDef RCC_Clocks;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE); // 使能定时器7时钟TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式TIM_TimeBaseInitStruct.TIM_Period = 4999; // 重装值为5000 500ms中断一次TIM_TimeBaseInitStruct.TIM_Prescaler = 8399; // 预分配值为8400 即84000000/8400 = 10KHZ 0.1ms计一次书TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStruct); // 初始化定时器7NVIC_InitStruct.NVIC_IRQChannel = TIM7_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStruct.NVIC_IRQChannelSubPriority  = 2;NVIC_Init(&NVIC_InitStruct);  // 配置定时器7 NVIC中断TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE); // 使能更新中断TIM_Cmd(TIM7,ENABLE); // 使能定时器7}void TIM7_IRQHandler(void)
{if(TIM_GetFlagStatus(TIM7,TIM_IT_Update) == SET) // 判断是否为定时器7更新中断{printf("%s\r\n",__func__);TIM_ClearITPendingBit(TIM7,TIM_IT_Update);	// 清除定时器7更新中断}}

打开Xcom串口助手,勾选时间戳功能,可以看到串口每隔500ms就进入中断并打印信息。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode.73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…

亿赛通电子文档安全管理系统 RCE漏洞复现(QVD-2023-19262)

0x01 产品简介 亿赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

基于JSP+Servlet+mysql员工权限管理系统

基于JSPServletmysql员工权限管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的员工权限管理系统[qxxt] 项目架构:B/S架构 开发语言:Java语言 …

Linux上实现分片压缩及解压分片zip压缩包 - 及zip、unzip命令详解

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

JDK 核心jar之 rt.jar

一、JDK目录展示 二、rt.jar 简介 2.1.JAR释义 在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等&…

SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪

简介 生产环境 bug 的定义:RUM 应用和 APM 应用的 error_stack 信息被捕捉后成为 bug。 以 APM 新增错误巡检为例,当出现新错误时,在观测云控制台的「事件」模块下生成新的事件报告,捕捉为 bug。同时利用 Dataflux Func 创建异常…

C 实现Window/DOS 键盘监听事件

今天是重新复习C语言实现的第一天,今天想编写C 对Windwos/Dos 键盘事件的学习。但是我在安装Visual Studio 2022 没有安装MFC 框架,今天记录下VS追加 MFC框架。 Visual Studio 2022 追加MFC 1、打开vs,点击创建新项目,右侧滑动框…

GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放

技术背景 我们在对接GB28181设备接入模块的时候,遇到这样的技术诉求,好多开发者期望能提供编码后(H.264/H.265、AAC/PCMA)数据对接,确保外部采集设备,比如无人机类似回调过来的数据,直接通过模…

使用StreamLold写入 Starrocks报错:Caused by org

问题描述 使用StreamLoad写入Starrocks报错&#xff0c;报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…

c++使用zlib对字符串进行压缩和解压

官网下载zlib库编译后就能使用 #include <string> #include <iostream> #include <memory> #include <assert.h> #include <cstring> #include "zlib.h"#define CHUNK 16384/* Compress from file source to file dest until EOF on …

vsCode使用cuda

一、vsCode使用cuda 前情提要&#xff1a;配置好mingw&#xff1a; 1.安装cuda 参考&#xff1a; **CUDA Toolkit安装教程&#xff08;Windows&#xff09;&#xff1a;**https://blog.csdn.net/qq_42951560/article/details/116131410 2.在vscode中添加includePath c_cp…

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1&#xff1a;将图片转换成patches序列 步骤2&#xff1a;将patches铺平 步骤3&#xff1a;添加Position embedding 步骤4&#xff1a;添加class token 步骤5&#xff1a;输入Transformer Encoder 步…

electron软件安装时,默认选择为全部用户安装

后续可能会用electron开发一些工具&#xff0c;包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度&#xff0c;取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序&#xff0c;真的发布工具了&…

【PHP】函数-作用域可变函数匿名函数闭包常用系统函数

文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关函数 函数 函数&#xff1a;function&#xff0c;是一种语法结构&#xff0c;将实现某一个…

Java快速入门体验

Java快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Maven安装2.1 Maven介绍2.2 Maven安装包下载2.3 Maven安装2.4 Maven初始化 三、Java安装3.1 JDK下载3.2 JDK安装3.3 JDK初始化 四、开发环境搭建4.1 安装开发工具4.2 关联Maven环境4.2.1 新建JAVA项目4.2.2 Maven与…

C++ Day5

目录 一、静态成员 1.1 概念 1.2 格式 1.3 银行账户实例 二、类的继承 2.1 目的 2.2 概念 2.3 格式 2.4 继承方式 2.5 继承中的特殊成员函数 2.5.1 构造函数 2.5.2析构函数 2.5.3 拷贝构造函数 2.5.4拷贝赋值函数 总结&#xff1a; 三、多继承 3.1 概念 3.2 格…

【微服务】微服务调用原理及服务治理

本文通过图文结合&#xff0c;简要讲述微服务的调用原理&#xff0c;以及服务治理的相关概念。 1.微服务的调用原理 举个栗子&#xff1a;你去会所洗脚。首先&#xff0c;技师肯定要先去会所应聘&#xff0c;通过之后&#xff0c;会所会记录该技师的信息和技能&#xff0c;然后…

YOLO目标检测——野生猫科动物图像数据集(虎豹狮等)下载分享

野生猫科动物图像数据集是一个包含了各种野生猫科动物图像样本的数据集&#xff0c;例如狮子、老虎、豹子、猎豹、美洲豹等。这些数据集通常用于研究和分析野生猫科动物的图像识别、分类、行为分析等问题。 数据集点击下载&#xff1a;YOLO野生猫科动物图像数据集&#xff08;虎…

数组和指针练习解析(6)

题目&#xff1a; int main() { char *c[] {"ENTER","NEW","POINT","FIRST"}; char**cp[] {c3,c2,c1,c}; char***cpp cp; printf("%s\n", **cpp); printf("%s\n", *--*cpp3)&#xff1b; printf("%s\n&…

直播平台源码搭建协议讲解篇:传输控制协议TCP

简介&#xff1a; 由于直播平台在当今时代发展的越来越迅速&#xff0c;使得直播平台的技术功能越来越智能&#xff0c;让用户在直播平台中能够和其他用户进行实时互动&#xff0c;让用户可以获取到全世界最新的资讯&#xff0c;让一些用户可以作为主播获得工作&#xff0c;让…