HAL库定时器配置

定时器的开启需要手动开启,例如在driver_capature.c开启,该文件主要写了具体的函数实现,与driver_can.c一样,同时还有回调函数等一些高级的自定义函数。

这段代码是 STM32 HAL 库中用于初始化 定时器 2 (TIM2) 的函数 MX_TIM2_Init。它配置了定时器的基础功能,时钟源,输入捕获通道以及中断功能。以下是逐行解释:

1. 函数开始部分

void MX_TIM2_Init(void)
{/* USER CODE BEGIN TIM2_Init 0 *//* USER CODE END TIM2_Init 0 */

这部分是用户自定义代码的区域,通常用于在初始化代码执行之前添加自定义操作。USER CODE 区域通常是可以修改的区域。

2. 定时器配置结构体定义

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};TIM_IC_InitTypeDef sConfigIC = {0};

这里定义了三个结构体,用于定时器配置:

  • TIM_ClockConfigTypeDef:用于配置定时器的时钟源。
  • TIM_MasterConfigTypeDef:用于配置定时器的主/从模式。
  • TIM_IC_InitTypeDef:用于配置定时器的输入捕获通道。

3. 定时器实例配置

  htim2.Instance = TIM2;htim2.Init.Prescaler = 167;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 65535;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

这里配置了定时器 2 (TIM2) 的一些基本参数:

  • Instance = TIM2:指定定时器 2。
  • Prescaler = 167:设置定时器预分频器值。它决定定时器的计数频率。具体计数频率为系统时钟频率除以(预分频器 + 1)。
  • CounterMode = TIM_COUNTERMODE_UP:设置计数模式为递增模式(计数从 0 到 Period)。
  • Period = 65535:设置定时器的自动重载值,即计数器从 0 增加到 65535 后重载(溢出)。
  • ClockDivision = TIM_CLOCKDIVISION_DIV1:定时器时钟分频因子。
  • AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE:禁用自动重载预加载。

4. 初始化定时器

  if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}

这行代码调用 HAL_TIM_Base_Init 函数来初始化定时器。若初始化失败,则调用 Error_Handler() 来处理错误。

5. 配置定时器时钟源

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}
  • 设置定时器时钟源为内部时钟源 (TIM_CLOCKSOURCE_INTERNAL)。
  • 调用 HAL_TIM_ConfigClockSource 来配置时钟源,如果配置失败,则调用 Error_Handler()

6. 初始化定时器的输入捕获功能

  if (HAL_TIM_IC_Init(&htim2) != HAL_OK){Error_Handler();}
  • 调用 HAL_TIM_IC_Init 来初始化定时器的输入捕获功能。如果失败,则调用 Error_Handler()

7. 配置定时器的主模式

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}
  • 配置定时器的主输出触发为复位信号(TIM_TRGO_RESET)。
  • 设置主从模式为禁用(TIM_MASTERSLAVEMODE_DISABLE)。
  • 使用 HAL_TIMEx_MasterConfigSynchronization 来配置同步。如果配置失败,则调用 Error_Handler()

8. 配置输入捕获通道

  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;sConfigIC.ICFilter = 0;if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_3) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK){Error_Handler();}

这些代码为 TIM2 的 4 个输入捕获通道进行配置:

  • ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING:设置输入捕获的极性为上升沿触发。
  • ICSelection = TIM_ICSELECTION_DIRECTTI:选择直接连接输入信号。
  • ICPrescaler = TIM_ICPSC_DIV1:设置输入捕获的预分频器(没有分频)。
  • ICFilter = 0:设置输入滤波器。

这些配置分别应用于定时器 2 的通道 1、2、3 和 4。

9. 配置中断和启动输入捕获

  /* USER CODE BEGIN TIM2_Init 2 *//* Add by xinggaoyong */__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE|TIM_FLAG_CC1|TIM_FLAG_CC2);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC1);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC2);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC3);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC4);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_3);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_4);  __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_3, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_4, TIM_INPUTCHANNELPOLARITY_FALLING);/* USER CODE END TIM2_Init 2 */
  • __HAL_TIM_CLEAR_FLAG:清除定时器的标志位,如溢出标志和输入捕获标志。
  • __HAL_TIM_ENABLE_IT:使能定时器的中断(溢出中断、输入捕获中断)。
  • HAL_TIM_IC_Start:启动输入捕获功能。
  • __HAL_TIM_SET_CAPTUREPOLARITY:设置捕获极性为下降沿,意味着输入信号的下降沿触发捕获事件。

10. 函数结束

}

函数结束,所有初始化工作完成。

总结

这段代码主要用于初始化 TIM2 定时器,配置输入捕获功能并启用中断。它设置了定时器的时钟、输入捕获的配置、定时器的主从模式、并启用了多通道的输入捕获中断。

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

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

相关文章

k8s部署prometheus+alertmanager+grafana监控

1、下载prometheus.yaml文件 根据github上面的版本对应说明,选择我们要下载的版本,github地址 rootiZj6c72dzbei17o2cuksmeZ:~# wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.14.0.tar.gz rootiZj6c72dzbei17o2cu…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统,扩展卡尔曼滤波 则扩展到了非线性系统,核心原理就是将非线性系统线性化,主要用的的知识点是 泰勒展开(我另外一篇文章的链接),如下是泰勒展开的公式…

【从0实现muduo库系列】第二讲:基础类型与工具类

0 章节重点 重点内容 视频讲解:《CLinux编程进阶:从0实现muduo C网络框架系列》-第2讲.基础类型与工具类 代码改动 cp -r lesson1 lesson2 实现:base/Types.h 实现:base/copyable.h和noncopyable.h 实现:base/Str…

Qemu-STM32(十):STM32F103开篇

简介 本系列博客主要描述了STM32F103的qemu模拟器实现,进行该项目的原因有两点: 作者在高铁上,想在STM32F103上验证一个软件框架时,如果此时掏出开发板,然后接一堆的线,旁边的人估计会投来异样的目光,特别…

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性,其中一个指标就是看崩溃率,如何降低崩溃率,就需要知道存在哪些崩溃,然后对症下药,解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢?又改如何解决…

K8S-etcd服务无法启动问题排查

一、环境、版本信息说明 k8s:v1.19.16 etcdctl version: 3.5.1 3台etcd(10.xxx.xx.129、10.xxx.xx.130、10.xxx.xx.131)组成的集群。 二、问题根因 129节点的etcd数据与其他两台数据不一致,集群一致性校验出错导致无法加入集…

【视觉提示学习】3.21论文随想

. . Frontiers of Information Technology & Electronic Engineering. 2024, 25(1): 42-63 https://doi.org/10.1631/FITEE.2300389 中文综述,根据里面的架构,把视觉提示学习分成两类,一类是单模态提示学习(以vit为代表&…

基于SpringBoot的“校园招聘网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园招聘网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 局部E-R图 系统首页界面 系统注册…

爱普生晶振FC2012AA汽车ADAS主控制系统的理想选择

在汽车智能化的浪潮中,先进驾驶辅助系统(ADAS)正迅速成为现代汽车的核心技术之一。ADAS 系统通过集成多种传感器、摄像头和高性能芯片,实现对车辆周围环境的实时监测和智能决策,为驾驶者提供全方位的安全保障。而在这一…

基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

一、概念 以个人图书管理为例,创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果: 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先,创建一个图书相关的表,点…

阿里云平台服务器操作以及发布静态项目

目录: 1、云服务器介绍2、云服务器界面3、发布静态项目1、启动nginx2、ngixn访问3、外网访问测试4、拷贝静态资源到nginx目录下并重启nginx 1、云服务器介绍 2、云服务器界面 实例详情:里面主要显示云服务的内外网地址以及一些启动/停止的操作。监控&…

注意力机制,本质上是在做什么?

本文以自注意机制为例,输入一个4*4的矩阵 如下: input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时,计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…

C语言-数组指针和指针数组

指针 数组指针与指针数组 数组指针 定义 概念:数组指针是指向数组的指针,本质上还是指针 特点: ①先有数组,后有指针 ②它指向的是一个完整的数组 一维数组指针 语法: 数据类型 (*指针变量名)[容量]; 案例&a…

【前四届会议均已完成独立出版及EI检索 | 河南大学、河南省科学院主办,多高校单位承协办】第五届信号图像处理与通信国际学术会议(ICSIPC 2025)

第五届信号图像处理与通信国际学术会议(ICSIPC 2025) 2025 5th International Conference on Signal Image Processing and Communication(ICSIPC 2025) 会议官网:http://www.icsipc.org 【论文投稿】 会议时间&…

AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用

文章目录 引言 1. 传统 API 的局限性2. MCP(模块化通信协议)的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论:AI 时代的通信新范式 引言 在 AI 驱动的现…

Linux 文件系统的日志模式与性能影响

在 Linux 文件系统中,**日志模式(Journaling Mode)** 是文件系统保证数据一致性和快速恢复的核心机制,但不同的日志模式会对性能产生显著影响。以下是详细分析及优化建议: --- ### **一、日志模式的核心分类** Linux…

TISAX认证注意事项的详细介绍

TISAX(Trusted Information Security Assessment Exchange)认证的注意事项犹如企业在信息安全领域航行时必须遵循的灯塔指引,至关重要且不容忽视。以下是对TISAX认证注意事项的详尽阐述: 首先,企业需深入研读并理解TI…

Nodejs 项目打包部署方式

方式一:PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理(需要额外安装) 二、部署步骤 1.首先在服务器上安装 PM2(推荐): npm install -g pm22.将项目代码上传到服务器&…

springboot整合modbus实现通讯

springboot整合modbus4j实现tcp通讯 前言 本文基于springboot和modbus4j进行简单封装,达到开箱即用的目的,目前本方案仅实现了tcp通讯。代码会放在最后,按照使用方法操作后就可以直接使用 介绍 在使用本方案之前,有必要对modb…

【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来,多行为推荐模型取得了显著成功。然而,许多模型未充分考虑不同行为之间的共性与差异性,以…