首页 > 其他分享 >【STM32 HAL库】TIM定时器与CubeMX配置

【STM32 HAL库】TIM定时器与CubeMX配置

时间:2024-07-31 15:53:34浏览次数:16  
标签:TypeDef 定时器 HAL htim STM32 TIM Handle

【STM32 HAL库】TIM定时器与CubeMX配置

前言

本文为笔者学习TIM定时器知识的总结与复盘,基于keysking的系列视频,欢迎大家纠正文中错误

TIM定时器基本理论

定时器的本质就是计数器!

定时器的基本计数功能可以通过不同计数方式的组合,实现普通定时、脉冲捕获、测量PWM占空比、输出PWM、编码器测速等功能

定时器的基本作用

设定一个时间,时间到了后,通过中断通知STM32执行某些程序

定时器分类

基本定时器

  • 基本的时间测量
  • 产生周期性中断

通用定时器

  • 基本定时器功能
  • 输入捕获
  • 输出比较 生成PWM

高级定时器

  • 通用定时器功能
  • 高精度工业电机控制

定时器的外部时钟与从模式

在这里插入图片描述
从模式:
外部时钟模式1
以外部输入信号作为外部时钟源
复位模式
计数器更新 重新计数 触发更新中断
门模式
根据电平 暂停或继续计数
触发模式
启动计数 常配合单脉冲

TIM基本定时器

理论

基本定时功能与周期性产生中断
在这里插入图片描述

影子寄存器
预分频器与自动重装载寄存器控制着他们的影子寄存器
在当前计数周期完成后 寄存器将新的值给到影子寄存器中 更新完成
在这里插入图片描述

应用

CubeMX配置

在这里插入图片描述
开启TIM中断
若要每过一个计时周期进入一次中断并完成某项任务 则需开启TIM中断
在这里插入图片描述

定时器溢出时间 T(一个计时周期
在这里插入图片描述
触发事件选择见该Blog

一般情况下 :
激活 --> 根据计时需求配置PSC ARR --> 使能自动重装载寄存器的影子寄存器 --> 其他默认

Keil5代码

启动定时器计时功能 + 开启定时器中断

 HAL_TIM_Base_Start_IT(TIM_Handle TypeDef* htim);

“定时器溢出”中断回调函数

void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) {
	if(htim == &htim4){
		HAL UART Transmit IT(&huart2,(uint8 t*)data, strlen(data));}
}

其他函数

//获取当前计数器的值
__HAL_TIM_GET_COUNTER(TIM_Handle TypeDef* htim);
//设置计数器的值
__HAL_TIM_SET_COUNTER(TIM_Handle TypeDef* htim);
//获取重装载寄存器的值
__HAL_TIM_GET_AUTORELOAD(TIM_Handle TypeDef* htim);
//设置重装载寄存器的值
__HAL_TIM_SET_AUTORELOAD(TIM_Handle TypeDef* htim);
//设置预分频器的值
__HAL_TIM_SET_PRESCALER(TIM_Handle TypeDef* htim);

输入捕获

作为精确的计时器,检测到输入信号电平变化(上升沿或下降沿,并记录当时时间点(记录到捕获寄存器中供程序读取

理论

在这里插入图片描述

应用

CubeMX配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Keil5代码

开启输入捕获

HAL_TIM_IC_Start(TIM_Handle TypeDef* htim,uint32_t Channel);

开启输入捕获 + 开启输入捕获中断

HAL_TIM_IC_Start_IT(TIM_Handle TypeDef* htim,uint32_t Channel);

“输入捕获”中断回调函数

void HAL_TIM_IC_Capturecallback(TIM_HandleTypeDef *htim){
		//养成好习惯 先判断中断源是否来自TIM1的通道4
	if (htim == &htim1 && htim>Channel==HAL_TIM_ACTIVE_CHANNEL 4){
		//逻辑代码
	}	
}

PWM

理论

在这里插入图片描述
PWM信号频率
在这里插入图片描述

应用

CubeMX配置

在这里插入图片描述

Keil5代码

开启PWM

HAL_TIM_PWM_Start(TIM_Handle TypeDef* htim,uint32_t Channel);

停止PWM

HAL_TIM_PWM_Stop(TIM_Handle TypeDef* htim,uint32_t Channel);

设置比较寄存器值

__HAL_TIM_SET_COMPARE(TIM_Handle TypeDef* htim,uint32_t Channel,COMPARE)

标签:TypeDef,定时器,HAL,htim,STM32,TIM,Handle
From: https://blog.csdn.net/AbaAbaxxx_/article/details/140715295

相关文章

  • 核心(Hutool-core)LocalDateTime工具-LocalDateTimeUtil
    介绍从Hutool的5.4.x开始,Hutool加入了针对JDK8+日期API的封装,此工具类的功能包括LocalDateTime和LocalDate的解析、格式化、转换等操作使用日期转换StringdateStr="2020-01-23T12:23:56";DateTimedt=DateUtil.parse(dateStr);//Date对象转换为LocalDateTimeLocalDat......
  • 核心(Hutool-core)计时器工具-TimeInterval
    介绍Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。TimeInterval支持分组计时,方便对比时间。使用TimeIntervaltimer=DateUtil.timer();//---------------------------------//-------这是执行过程//---------------------------------time......
  • 核心(Hutool-core)日期时间对象-DateTime
    由来考虑工具类的局限性,在某些情况下使用并不简便,于是DateTime类诞生。DateTime对象充分吸取Joda-Time库的优点,并提供更多的便捷方法,这样我们在开发时不必再单独导入Joda-Time库便可以享受简单快速的日期时间处理过程。DateTime类继承于java.util.Date类,为Date类扩展了众多简便......
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(
    引言随着物联网(IoT)技术的快速发展,基于STM32的服务器(类似网关)在数据采集、设备控制等方面的应用越来越广泛。本文将介绍搭建一个基于STM32的服务器所需的技术栈,以及详细的搭建步骤和代码示例。技术栈介绍在搭建基于STM32的服务器时,我们需要用到以下技术栈和组件:1.硬......
  • STM32F103+FreeRTOS的使用ESP8266与手机APP实现TCP连接通信控制
    前言本人初学FreeRTOS,来自不知名普通院校,大二物联网专业,简单看完百问网韦东山老师FreeRTOS就想随便找个小项目试试看,手头里没什么元器件,只有一块ESP8266wifi模块以及温湿度模块显示屏模块,所以用到的模块不多,这俩个模块可能不太适用于FreeRTOS,但主要目的想着以最少的资源练练......
  • 如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
    目录前置步骤环境搭建创建容器组在系统任意位置创建一个文件夹创建docker-compose.yaml启动Halo服务配置反向代理以及域名解析Halo初始化页面。更新新版本的halo前置步骤首先你需要一套linux服务器,这里默认你已经有了。如果没有可以在云服务器优惠合集选择,如果你是个人博客选......
  • Datawhale AI夏令营(AI+物质科学)之跑通baseline-Task2新手教程
    前言DatawhaleAI的夏令营(线上的),这期夏令营是基于天池平台“第二届世界科学智能大赛物质科学赛道:催化反应预测”开展的从零入门AIforScience。上篇文章完成Task1教程后,继续给大家干Task2的教程,话不多说,开整!正文第一步:1.打开魔塔社区:链接如下:魔搭社区汇聚各领域最先进的......
  • 手把手带你创建HAL版本MDK工程模板
    如何快速开发STM32项目?我们总不能每次开发一个项目就搭建一次工程,这样效率太低了。通常我们会使用一个模板工程,需要开发新项目的时候拿出来添加一些对应的模块及业务代码,一个项目就开发完成了。但对于新手朋友来讲,如何创建一个工程模板对他们来讲是个非常大的挑战。因为这个过......
  • 零基础快速上手STM32开发(手把手保姆级教程)
    1前言作为一名嵌入式工程师,STM32是必须要学习的一款单片机,同时这款单片机资料足够多,而且比较简单,非常适合初学者入门。STM32是一款由STMicroelectronics公司开发的32位微控制器,由于其强大的处理能力和广泛的应用领域,如嵌入式系统、物联网设备、机器人等,而受到了广泛的欢......
  • 具有 Python lambda 函数的 QTimer 使用先前的数据运行
    我有一个GUI项目,它使用PySide2和Python3.8,它在QThread中执行一些后台任务。在该QThread中,我有QTimer成员对象,该对象必须定期运行一个函数,每次向其传递不同的数据。我没有使用QTimer.singleShot静态函数,因为如果需要某些特定场景,我需要......