基于STM32的定时器--定时中断(HAL库)

基于STM32的定时器--定时中断(HAL库)

  • 介绍
    • 引言
    • 定时器介绍
  • 实例
    • 项目介绍
    • 准备
    • 设计流程

介绍

引言

本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。

定时器介绍

定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)。每个定时器模块都具有多个通道,每个通道都可以用于不同的定时和计数操作。

以下是一些常见的STM32定时器的特点和功能:

  1. 通用定时器(General Purpose Timer):STM32中常见的通用定时器包括TIM2、TIM3、TIM4等。它们通常具有以下特点:
    • 可以选择不同的时钟源和分频因子,以获得所需的定时精度。
    • 支持输入捕获功能,用于测量外部信号的脉冲宽度、周期等。
    • 支持输出比较功能,可用于生成精确的脉冲、PWM信号等。
    • 支持定时中断,可以在达到指定的定时值时触发中断。
  2. 高级定时器(Advanced Timer):STM32中常见的高级定时器包括TIM1、TIM8等。它们通常具有以下特点:
    • 具有更多的定时通道,用于更复杂的定时和计数操作。
    • 支持更高的定时精度和频率。
    • 提供更多的功能选项,如编码器接口、PWM输入捕获等。
  3. 低功耗定时器(Low-Power Timer,LPTIM):STM32中的LPTIM模块是为低功耗应用设计的定时器,具有以下特点:
    • 在低功耗模式下仍能保持活动,以提供精确的时间计数。
    • 适用于节能需求高的应用,如电池供电的系统。

使用STM32的定时器,您可以执行以下操作:

  • 计时和测量外部信号的时间参数,如脉冲宽度、周期等。
  • 生成精确的定时延迟,用于控制操作的时序。
  • 产生PWM信号,用于驱动电机、控制LED亮度等。
  • 触发中断,以响应特定的定时事件。

实例

项目介绍

此项目为了讲解如何使用定时器,每10us触发一次定时器中断。我们可以通过这个实例,进行自己的开发。

准备

  1. MCU:STM32F407(根据自己的需求选择即可,流程都一样)
  2. 库:HAL库
  3. 开发工具:STM32CubeMX
  4. 开发环境Keil 5

设计流程

  1. 使用STM32CubeMX创建一个工程

  2. RCC选取外部时钟
    ![3

  3. 选择Debug(不选不能烧录和调试)

在这里插入图片描述
4. Clock Source:定时器时钟源,选择Internal Clock

5. 然后开始配置时钟树,设置如下图所示,使定时器主频为168MHz。而TIM3是挂接在APB1上的,所以也就是要让APB1这儿最终为84MHz

6. 实现时钟配置:设置定时器中断,每10us触发中断一次。(后续canopen的最小时间单位即为此处进入一次中断的时间),每次进入定时器中断的的时间计算公式为:
t i m e = (( P r e s c a l e r + 1 )( P e r i o d + 1 )) / 定时器总线时钟源 time=((Prescaler+1)(Period+1))/定时器总线时钟源 time=((Prescaler+1)(Period+1))/定时器总线时钟源
eg:当定时器总线时钟源为84MHz,Prescaler为83,Period为9.此时定时时间为:84*10/84000000=0.00001s=10us。


7. 打开定时器中断

8. 填写生成的工程信息(工程名称,存放位置等)
在这里插入图片描述
值得注意的是,MDK的最小版本千万不要选错
9. 生成代码

  1. 成功的话会出现提示

  2. 进入工程,发现初始化代码都已经生成

  3. 进入Keil 5后,不要忘了配置debug,不然会烧录失败。
    在这里插入图片描述

  4. 我们需要开启定时器中断: HAL_TIM_Base_Start_IT(&htim3);

  5. 编写定时器中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == htim3.Instance) 
	{	
	
		//书写我们想要执行的功能
	}
}
  1. 编译一下,无错误,项目完成,每10us进入中断回调函数一次。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python升降序排列数字

Python升降序排列数字 在Python编程中,排序是一个非常常见并且重要的操作。Python提供了多种排序算法以满足不同的需求。 排序算法 Python中内置的排序算法有两种:Timsort和Quicksort。其中Timsort是一种混合排序算法,结合了插入排序和归并…

Linux系统中源码安装1.8.x版本Arduino IDE

本文内容参考: Ubuntu22.04安装Arduino IDE及Arduino UNO(使用CH341驱动)调试方法__KILLMILEDC_的博客-CSDN博客 在Linux上下载arduino_不说话的白帽子的博客-CSDN博客 https://guoqing.blog.csdn.net/article/details/88913063?spm1001.…

Linux NGINX服务 ReWrite^location

ReWrite^location 从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。 rewrite 对访问…

c++ new 源码学习一下

之前有一篇文章介绍了 new 的一些用法 c new 在指定内存上创建对象&#xff0c;今天结合源码来学习一下 new 更详细的用法。相关的源码&#xff1a;gcc git 1&#xff0c;void* operator new (std::size_t size); 我们可以在头文件<new>里看到它的原型&#xff1a; _G…

C++11 -- lambda表达式

文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…

Quest 3初体验,或是苹果MR最大竞争对手

随着苹果MR临近&#xff0c;我们从彭博Mark Gurman了解到更多消息。昨日&#xff0c;Mark Gurman发布了Quest 3上手体验文章&#xff0c;并认为Quest 3可能是苹果MR头显最大的竞争对手。 1&#xff0c;Meta是XR头显领导者 尽管WWDC 23苹果MR将会成为最大的主角&#xff0c;但…

node.js与内置模块

一、目标 能够知道什么是Node.js能够知道Node.js可以做什么能够说出Node.js中的JavaScript的组成部分能够使用fs模块读写操作文件能够使用path模块处理路径能够使用http模块写一个基本的web服务器 二、目录 初始Node.jsfs文件系统模块path路径模块http模块 1.初始Node.js …

macos wireshark 抓取https包

1、启动浏览器 1.1 创建空文件 $ touch /Users/zhujl/Downloads/https/mysslkey.log 2、设置wireshark tls属性&#xff0c;指定tls密钥存储文件 2.1 进入Wireshark Preferfences > Protocols > TLS 属性配置 2.2 勾选上Reassemable TLS records spanning multiple …

设计模式B站学习(一)(java)

这里写目录标题 一、设计模式概述1.1 软件设计模式的产生背景1.2 软件设计模式的概念1.3 学习设计模式的必要性1.4 设计模式分类 二、UML图2.1 类图概述2.2 类图的作用2.3 类图表示法2.3.1 类图表示方法2.3.2 类与类之间关系的表示方法2.3.2.1 关联关系2.3.2.2 聚合关系2.3.2.3…

Selenium的使用

一、基础 1、特点 selenium 是web中基于UI的自动化测试工具&#xff0c;它支持多平台、多语言、多浏览器&#xff0c;还有丰富的API。 2、原理 自动化脚本代码会创建一个http请求发送给浏览器驱动进行解析&#xff0c;浏览器驱动会操控浏览器执行测试&#xff0c;浏览器接着…

ffmpeg编译成wasm

最近在看ffmpeg的源码 https://ffmpeg.xianwaizhiyin.net/ffplay/ https://crifan.github.io/media_process_ffmpeg/website/audio_process/ 做个可运行的例子 代码在找了一堆&#xff0c;可用的版本放在这 https://github.com/killinux/ffmpeg_wasm_demo 先把ffmpeg 编译成 …

内蒙古自治区出台加快充换电基础设施建设实施方案

摘要&#xff1a;为深入贯彻落实《国务院办公厅关于印发新能源汽车产业发展规划&#xff08;2021—2035年&#xff09;的通知》&#xff08;国办发 ﹝2020﹞39号&#xff09;、《国家发展改革委等部门关于进一步提升电动汽车充电基础设施服务保障能力的实施意见》&#xff08;发…

Unity——在C#中调用C++动态链接库(DLL)

一、创建C动态链接库&#xff08;DLL&#xff09; 1、新建C空项目 打开VS&#xff0c;新建一个C空项目&#xff0c;自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目&#xff0c;点击属性&#xff0c;打开项目属性页&#xff0c;将常规中的配置类型改为动态库&…

电力电子技术的论文

电力电子技术的论文范文一&#xff1a;Matlab电力电子技术应用 【文章摘要】信息技术的快速发展推动许多学科进一步完善&#xff0c;以电力电子技术为例&#xff0c;其本身具有较强的理论性、实践性等特征&#xff0c;涉及的波形图、电路图也较多&#xff0c;相关设计人员需掌握…

【C++初阶】C++STL详解(一)—— string类

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 CSTL详解&#xff08;一…

新华三的网络脉动:为AI泵血,向产业奔流

AI大模型作为最新的通用技术&#xff0c;今年以来&#xff0c;发展如火如荼。也有很多从业者和专家注意到&#xff0c;AI模型训练和应用过程中&#xff0c;需要优先考虑网络的升级与适配。 如果说数据中心、算力集群是AI的“心脏”&#xff0c;那么网络就犹如AI的“动脉”&…

综合指挥调度系统行业分类汇总

综合指挥调度系统是将语音、视频、GIS进行高度融合&#xff0c;构建“平战结合”的指挥调度模式&#xff0c;既满足平时的应急培训、日常通信、会议会商等要求&#xff0c;也能够应对战时的应急指挥、应急救援、应急决策等需求&#xff0c;达到统一指挥、联合行动的目的&#x…

ArduPilot之H743+BMI270x2+First Normal Takeoff

ArduPilot之H743BMI270x2First Normal Takeoff 1. 源由2. 正常起飞3. 问题汇总3.1 机架构型3.2 IMU对齐3.3 接收机3.4 GPS3.5 VTX3.6 电调3.7 PID 4. 总结5. 参考资料6. 附录6.1 补充AcroTrainer视频6.2 补充Acro视频 1. 源由 鉴于目前该飞控板子在ArduPilot开源社区尚未得到官…

15.2:分金条的最小代价

一块金条切成两半&#xff0c;是需要花费和长度数值一样的铜板 比如长度为20的金条&#xff0c;不管怎么切都要花费20个铜板&#xff0c;一群人想整分整块金条&#xff0c;怎么分最省铜板? 例如&#xff0c;给定数组{10,20,30}&#xff0c;代表一共三个人&#xff0c;整块金条…

笔试强训错题总结(一)

笔试强训错题总结 文章目录 笔试强训错题总结选择题编程题连续最大和不要二最近公共祖先最大连续的bit数幸运的袋子手套 选择题 以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main(void) {printf("%s , %5.3s\n", "computer&q…