最详细STM32,cubeMX 定时器

这篇文章将详细介绍 STM32,cubeMX 定时器的配置和使用。

文章目录

  • 前言
  • 一、定时器基础知识
  • 二、cubeMX 配置
  • 三、定时时长
  • 四、自动生成代码讲解
  • 五、实验程序
  • 总结


前言

  • 实验开发板:STM32F103C8T6。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:了解 cubeMX 定时器 的配置和使用。
  • 实验:使用定时器控制 led 闪烁。

一、定时器基础知识

STM32的定时器是用于时间测量和事件生成的复杂工具。可以使用内部或外部时钟源。时钟源和分频设置将决定定时器计数的速度。

定时器可以配置为在特定事件(如溢出或匹配特定值)上触发中断。这使得它能够周期性地执行代码片段,例如读取传感器数据或刷新显示。

定时器的主要组件:

  • 计数器:定时器的核心部分,可以配置向上/向下 计数。
  • 预分频器:分频定时器的输入时钟改变计数器的计数速率。如果时钟速度是72MHz,并使用预分频值为7199,那么计数器的计数速度将是10kHz。(72MHz / 7199)
  • 自动重载寄存器(ARR, Auto-reload register):定义了计数器重置的值。

二、cubeMX 配置

  1. 选择芯片。
    在这里插入图片描述

  2. 配置仿真。
    在这里插入图片描述

  3. 配置时钟,选择 HSE, 高速时钟。
    在这里插入图片描述

  4. 配置时钟树。选择最大 72 MHZ, 然后双击 enter 即可。系统会自动配置最合适的时钟。
    在这里插入图片描述

  5. 设置工程名,路径和工具链。
    在这里插入图片描述

  6. 自动生成 .c / .h 文件。
    在这里插入图片描述

  7. 将 led 引脚设置输出。
    在这里插入图片描述

  8. 让 led 引脚默认输出高电平。因为 根据实际电路当引脚是低电平时,led 点亮。
    在这里插入图片描述

  9. 这里我使用 定时器2 , 并使用 内部时钟源。
    在这里插入图片描述

  10. 使能定时器中断。
    在这里插入图片描述

  11. 设置 定时器参数(分频系数,向上计数,自动重装载值)。
    在这里插入图片描述

  12. 创建工程。
    在这里插入图片描述

三、定时时长

定时时长 = (计数器自动重载值 + 1 )*( 分频系数 + 1 )/ 定时器时钟频率

(为什么重装载值和分频系数不置为整数? 原因:精越定时)

这里 我想要设置 定时时长为 1ms ,那么首先设置相关参数:

  • 定时器时钟频率 : 72 MHZ。
  • 分频系数 (PSC): 选择 72 分频。
  • 计数器自动重载值(ARR):可控制定时器的定时时间,改变定时时长。

因为 分频系数 / 定时器时钟频率 = 计数器的计数速率, 所以 72 / 72MHZ = 1us 。则每 1 us 计数一次。当计数到 1000 (ARR) 时, 发生定时器的溢出中断. 即 ARR 从 0 增加到 1000 ,每 1 us 增加一次,则 定时时长为 1000 * 1 us = 1 ms .
在这里插入图片描述

四、自动生成代码讲解

自动生成的 定时器的代码在 tim.c 文件中。

  1. 首先还是 先定义一个 定时器对象,这是一个结构体。
  2. 初始化这个结构体中的相关参数。
  3. 调用 HAL_TIM_Base_Init(&htim2) 对其初始化。
  4. 之后自动调转到HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) 执行。
    5. __HAL_RCC_TIM2_CLK_ENABLE( ); 开启定时器 2
  5. HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); 设置优先级
    HAL_NVIC_EnableIRQ(TIM2_IRQn); 使能中断
    在这里插入图片描述
    在这里插入图片描述

五、实验程序

开启定时器中断:

HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

定时器中断回调函数:

/* 发生定时器中断后调用定时器中断回调函数 */HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

定时器控制 led 闪烁:

static int i=0;/* 根据cubeMX 配置的参数确定多久触发定时器中断,这里 是每 1 ms 触发一次中断即调用该函数 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == &htim2){if(++i == 1000)					// 当 i 加到 1000 时,则时间到达 1 s, 翻转 led 电平{i=0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);}}
}

总结

下篇文章为大家介绍 串口 的相关知识。

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

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

相关文章

无人机UAV目标检测与跟踪(代码+数据)

前言 近年来,随着无人机的自主性、灵活性和广泛的应用领域,它们在广泛的消费通讯和网络领域迅速发展。无人机应用提供了可能的民用和公共领域应用,其中可以使用单个或多个无人机。与此同时,我们也需要意识到无人机侵入对空域安全…

牛客:NC59 矩阵的最小路径和

牛客:NC59 矩阵的最小路径和 文章目录 牛客:NC59 矩阵的最小路径和题目描述题解思路题解代码 题目描述 题解思路 动态规划,递推公式:matrix[i][j] min(matrix[i-1][j], matrix[i][j-1]) 题解代码 func minPathSum( matrix [][…

【数据科学赛】2023全球智能汽车AI挑战赛 #¥95000 #LLM文档问答 #视频理解

CompHub[1] 最新的比赛会第一时间在群里通知,欢迎加群交流比赛经验!(公众号回复“加群”即可) 以下内容由AI辅助生成,可能存在错误,可进入比赛主页[2]查看更多(文末阅读原文) 比赛主办方 吉利汽车集团、阿…

【C++】:类和对象(中)之拷贝构造函数+赋值运算符重载

拷贝构造函数 概念 在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎 那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用…

FPGA的斐波那契数列Fibonacci设计verilog,代码和视频

名称:斐波那契数列Fibonacci设计verilog 软件:Quartus 语言:Verilog 代码功能: 设计一个产生斐波那契数列(也叫黄金分割数列)的硬件电路: 斐波那契数列中每个数为其相邻前两个数的和:即FNFN1FN2,(数列…

Python:函数篇(每周练习)

编程题: Python第四章作业(初级) (educoder.net) 题一:无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类,你好!")if __name__ __main__:print_hi_human() 题二&#…

设计模式篇---组合模式

文章目录 概念结构实例总结 概念 组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 当我们开发中遇到树形结构的业务时,可以考虑使用组合模式。(我也没有想明白为啥…

Mysql数据库 2.SQL语言 数据类型与字段约束

Mysql数据类型 数据类型:指的是数据表中的列文件支持存放的数据类型 1.数值类型 Mysql当中有多种数据类型可以存放数值,不同的类型存放的数值的范围或者形式是不同的 注:前三种数字类型我们在实际研发中用的很少,一般整数类型…

空中计算(Over-the-Air Computation)学习笔记

文章目录 写在前面 写在前面 本文是论文A Survey on Over-the-Air Computation的阅读笔记: 通信和计算通常被视为独立的任务。 从工程的角度来看,这种方法是非常有效的,因为可以执行孤立的优化。 然而,对于许多面向计算的应用程序…

游戏反虚拟框架检测方案

游戏风险环境,是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有:iOS越狱、安卓设备root、虚拟机、虚拟框架、云手机等。 因为这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限,所以当游戏处于这些设备环境下&am…

ARM可用的可信固件项目简介

安全之安全(security)博客目录导读 目录 一、TrustedFirmware-A (TF-A) 二、MCUboot 三、TrustedFirmware-M (TF-M) 四、TF-RMM 五、OP-TEE 六、Mbed TLS 七、Hafnium 八、Trusted Services 九、Open CI 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现…

【UE5】 ListView使用DataTable数据的蓝图方法

【UE5】 ListView使用DataTable数据的蓝图方法 ListView 是虚幻引擎中的一种用户界面控件,用于显示可滚动的列表。它可以用于显示大量的数据,并提供了各种功能和自定义选项来满足不同的需求。 DataTable是虚幻引擎中的一种数据表格结构,用于存…

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a)引入 vue-router.js(注意:要在 Vue.js 之后引入). b)创建好路由规则 c)注册到 Vue 实例中 d)展示路由组件 1.3、切换路由的两种方式 1.…

ubuntu20.04 nvidia显卡驱动掉了,变成开源驱动,在软件与更新里选择专有驱动,下载出错,调整ubuntu镜像源之后成功修复

驱动配置好,环境隔了一段时间,打开Ubuntu发现装好的驱动又掉了,软件与更新 那里,附加驱动,显示开源驱动,命令行输入 nvidia-smi 命令查找不到驱动。 点击上面的 nvidia-driver-470(专有&#x…

wps excel js编程

定义全局变量 const a "dota" function test() {Debug.Print(a) }获取表格中单元格内容 function test() {Debug.Print("第一行第二列",Cells(1,2).Text)Debug.Print("A1:",Range("A1").Text) }写单元格 Range("C1").Val…

【面试经典150 | 栈】有效的括号

文章目录 Tag题目来源题目解读解题思路方法一:栈哈希表 其他语言cpython3 写在最后 Tag 【栈】 题目来源 20. 有效的括号 题目解读 括号有三种类型,分别是小括号、中括号和大括号,每种括号的左右两半括号必须一一对应才是有效的括号&#…

JetBrains系列IDE全家桶激活

jetbrains全家桶 正版授权,这里有账号授权的渠道: https://www.mano100.cn/thread-1942-1-1.html 附加授权后的一张图片

【MySQL】8.0新特性、窗口函数和公用表表达式

文章目录 1. 新增特性2. 移除旧特性2.1 优点2.2 缺点 3. 新特性1:窗口函数3.1 使用窗口函数前后对比3.2 窗口函数分类3.3 语法结构3.4 分类讲解3.4.1 序号函数3.4.1.1 ROW_NUMBER()函数3.4.1.2 RANK()函数3.4.1.3 DENSE_RANK()函数 3.4.2 分布函数3.4.2.1 PERCENT_R…

【RNA structures】RNA-seq 分析: RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

Vue2基础知识(一) 认识Vue

💌 所属专栏:【Vue2】😀 作 者:长安不及十里💻工作:目前从事电力行业开发🌈目标:全栈开发🚀 个人简介:一个正在努力学技术的Java工程师,专注基础和…