STM32CubeMX学习记录——配置定时器

news2024/9/22 10:26:22

文章目录

  • 前言
  • 一、学习目的
  • 二、CubeMX配置
  • 三、代码编写

一、学习目的

  在STM32学习中,定时器是一个非常重要的组成部分。本文将详细记录如何通过CubeMX工具配置定时器,以实现1ms的定时功能。(附计算公式)

二、CubeMX配置

(1)首先打开CubeMX软件,新建工程。有关软件使用以及新建工程的相关操作在之前的文章中已经有过记载,有需要可以查看以下文章:蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)_蓝桥杯嵌入式led-CSDN博客

(2)进入如下界面后,先点击System Core > RCC时钟选项,如图步骤所示打开高速时钟设置

(3)再点击SYS >Debug ,选择串口通信方式

(4)接着按照下图步骤修改时钟参数设置时钟频率为72MHz,以下提供修改后的参数图

(5)完成以上基础配置就可以开始配置定时器了,按照以下标注的操作步骤进行配置,1点击进入左侧的Timers>TIM2,2配置时钟源为内部时钟,3打开定时器中断设置

(6)配置定时器的参数,这一步用来设置定时的时长,定时时长的计算公式如下:

定时时间 = (预分频器值\times计数器重载值)/ 定时器时钟频率

脉冲频率 = 1 / 定时时间

由于我们前面设置的时钟频率为72MHz,因此,我们想要定时1ms就可以计算出:预分频器值\times计数器重载值 = 72000,即可以如下设置参数:

至此,定时器配置已经完成,接下来就可以按照如下步骤生成工程文件:

(1)给工程文件命名 > 选择编辑器

(2)选择生成文件类型 > 生成文件

三、代码编写

        CubeMX的配置完成之后,就可以打开工程文件进行代码编写了

(1)在编写代码时,首先需要使能定时器中断,可以通过以下代码进行开启和关闭

HAL_TIM_Base_Start_IT(&htim2); //使用定时器的时候调用这个函数启动
HAL_TIM_Base_Stop_IT(&htim2);  //停止定时器的时候调用这个函数关闭

        这里需要注意的是,一旦写下HAL_TIM_Base_Start_IT(&htim2); 函数,程序就会开启中断,所以一般写在主函数while循环前面,也可以根据需要写在对应操作后面

(2)以下是定时器中断服务函数,也叫回调函数:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM2)
  {
    //编写回调逻辑,即定时器2定时5MS后的逻辑
  }
}

        从代码中可以看出,函数会先进行判断,如果TIM2中断才会执行中断事件,也就对应了上面的“一旦写下HAL_TIM_Base_Start_IT(&htim2); 函数,程序就会开启中断”

        然后就可以编写相关的中断时间,例如希望定时1秒后点亮LED灯,可以如下编写代码:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static int i;
  if(htim->Instance == TIM2)
  {
    if(i == 1000) // 执行1000次1ms定时,即1秒后
        {
            i = 0;   //让i = 0,重新计时
            LED = 0; // 点亮LED(需要另外配置和编写函数)
        }
  }
}

至此,定时器的配置就记录完成了

引用

感谢以下文章博主

STM32CubeMX——定时器配置_cubemx配置定时器-CSDN博客

蓝桥杯嵌入式学习记录——PWM输出_蓝桥杯pwm-CSDN博客

STM32CubeMX——定时器之定时功能_stm32cubemx 定时器-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锂电搅拌设备实现产线可视化

锂离子电池生产过程中的搅拌设备是确保电池性能与一致性的重要环节。随着智能制造和工业4.0概念的深入发展,实现锂电搅拌设备的产线可视化与信息化已成为提升生产效率、优化产品质量、降低运营成本的关键路径。这一转变不仅要求技术上的革新,还涉及到管理…

如何在 .NET 中实现 SM3withSM2 签名:详细步骤和示例代码

下面是一个详细的示例,展示如何在 .NET 中实现 SM3withSM2 签名和验证,包括生成密钥对、计算哈希、签名和验证。示例使用了 BouncyCastle 库,你可以根据实际需求对代码进行调整。 1. 安装依赖库 使用 NuGet 安装 BouncyCastle 库&#xff1a…

ThinkPHP5.0.15漏洞解析及SQL注入

第一步: 通过查看5.0.15和5.0.16版本的对比,可以看到16版本对在Builder.php里面对数据库的增减做了修正,所以可以15版本的漏洞就存在在这里。这里的代码用的拼接的方式,就可以尝试使用报错注入来实现。 第二步: 我们…

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说:要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频,此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…

一文搞定SQLite数据库

文章目录 SQLite数据库一、SQLite简介1、简介2、SQLite特性3、适用场景4、不适用场景5、如何选择 二、SQLite安装1、下载2、安装 三、SQLite基本语法1、数据库操作①、新建数据库②、查看数据库③、查看帮助指令 2、表操作①、新增表②、查看表信息③、查看表索引信息④、查看表…

dataV组件使用——数据更新更新组件

bug 当数据更新只更新一个属性页面不会刷新(this.config1.data arr;) 必须重新赋值整个config 方式一:检测到数据更新重新赋值config this.config1 {data: arr,header: ["所在单位", "人员姓名", "职位", &q…

【前端模式设计】js订阅发布模式之我见

一知半解最可怕 /*** description 订阅发布通知*/ export class SubscriptionPublish {private eventMap: Record<string, ((params: any) > any)[]>;constructor() {this.eventMap {};}on(key: string, handler: (params: any) > any) {if (!this.eventMap[key]…

星露谷模组开发教程#7 自定义机器

首发于Enaium的个人博客 添加大型工艺品 机器也算是大型工艺品&#xff0c;所以我们需要先添加它的大型工艺品。 这里做一张16x32格式为png的图。 if (e.Name.IsEquivalentTo("Data/BigCraftables")) {e.Edit(assets >{var dict assets.AsDictionary<string…

动手学深度学习——02深度学习介绍

AI 地图 X 轴&#xff1a;不同的模式&#xff08;越往右时间越新&#xff09; 符号学概率模型&#xff1a;统计学模型机器学习 Y 轴&#xff1a;问题领域&#xff08;先要了解一个东西&#xff0c;然后通过推理形成知识&#xff0c;最后做规划&#xff09; 感知&#xff1a;…

【C++】特殊类设计类型转换

目录 &#x1f4a1;前言一&#xff0c;特殊类设计1. 请设计一个类&#xff0c;不能被拷贝2. 请设计一个类&#xff0c;只能在堆上创建对象3. 请设计一个类&#xff0c;只能在栈上创建对象4. 请设计一个类&#xff0c;不能被继承5. 请设计一个类&#xff0c;只能创建一个对象(单…

Web3与医疗健康:去中心化技术在医疗行业的应用前景

随着区块链技术和去中心化理念的兴起&#xff0c;Web3作为新一代互联网技术正逐渐影响各个行业。在医疗健康领域&#xff0c;Web3技术的应用前景引起了广泛关注。本文将探讨Web3如何通过去中心化技术提升医疗健康行业的效率、透明度和安全性&#xff0c;并分析其在实际应用中的…

Docker 部署 SkyWalking 的指南

Docker 部署 SkyWalking 的指南 SkyWalking 是一款开源的应用性能监控工具&#xff0c;特别适用于分布式系统。通过 Docker 部署 SkyWalking&#xff0c;可以简化安装和配置过程。本文将详细介绍如何使用 Docker 部署 SkyWalking。 环境准备 在开始之前&#xff0c;请确保你…

LeetCode-3148. 矩阵中的最大得分

本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教. 1.题干 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&…

小程序实现设备消息订阅

小程序实现设备消息订阅 一、说明 先说明一下什么是小程序的消息订阅&#xff0c;其实就是在小程序进行某个消息的订阅&#xff0c;订阅以后就可以在微信收到推送的消息了。推送走的服务端&#xff0c;在服务端调用微信的推送接口&#xff0c;然后推送至指定的微信用户。 二…

xlua热补丁

print("*********第一个热补丁***********")--直接写好代码 运行 是会报错的 --我们必须做4个非常重要的操作 --1.加特性 --2.加宏 第一次开发热补丁需要加 --3.生成代码 --4.hotfix 注入 --注入时可能报错 提示你要引入Tools--热补丁的缺点&#xff1a;只要我们修改…

无人值守变电站视频监控统一接入系统方案

目录 一、背景介绍 1、无人值守变电站 2、特点 二、需求分析 1、基本需求 2、需求分析 三、目标和网络 1、设计目标 2、系统网络建设目标 四、系统组成 1、总体架构图 2、前端采集层 &#xff08;1&#xff09;摄像头 &#xff08;2&#xff09;传感器 &#xf…

Qt——多线程

一、QThread类 如果要设计多线程程序&#xff0c;一般是从QThread继承定义一个线程类&#xff0c;并重新定义QThread的虚函数 run() &#xff0c;在函数 run() 里处理线程的事件循环。 应用程序的线程称为主线程&#xff0c;创建的其他线程称为工作线程。主线程的 start() 函数…

猫头虎 分享已解决Bug || Failed to start docker.service: Unit not found. 解决方案

猫头虎 分享已解决Bug || Failed to start docker.service: Unit not found. 解决方案 今天猫头虎带您解决一个在运维工作中常见的问题&#xff1a; Failed to start docker.service: Unit not found.。这是一个困扰了许多运维小伙伴的问题&#xff0c;尤其是在部署Docker时&a…

安全测试担心效果不好?这3个安全测试工具你用了吗?

其实在信息科技发展的初期&#xff0c;很多互联网公司就有意识到保护软件产品安全的重要性。但时至今日&#xff0c;我们还是经常能看到某某app软件泄露用户隐私信息&#xff0c;或遭受黑客攻击导致一些损失&#xff0c;其中不乏有一定市场地位的大厂。此类信息安全问题屡见不鲜…

元素设置了sticky粘性布局后,关于滚动后怎么样让这个元素自动添加阴影,我用自定义指令实现

前言 在写h5或者pc站的时候&#xff0c;顶部总会固定一些东西。然后我们会设置顶部的容器为粘性布局固定在顶部。但滚动之后会很僵硬。例如下面这样&#xff1a; 我们看看element的表格的效果&#xff1a; 再来看看最后我们实现的效果&#xff1a; 其实网上也有纯css实现…