STM32:TIM通道输入捕获

news2024/11/17 10:50:29

 本文主要讲解如何使用TIMER通道的输入脉冲捕获功能。基于STM32F7的Timer2 Channel3来进行讲解。

配置时钟

Timer2的时钟频率,对应APB1 Timer。

 分频设置为96-1,这样设置每次count计数,对应的时间为1us。Counter设置为最大即可,默认不使用定时器中断。

 每个通道对应一个GPIO。

 初始化流程

注意CubeMx生成代码不会开启捕捉,要调用HAL_TIM_IC_Start_IT进行捕捉。

/* TIM2 init function */
void MX_TIM2_Init(void)
{

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

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

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 96-1;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 0xFFFFFFFF;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  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_3) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
  {
    Error_Handler();
  }

  // Start Capture
  if(HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3) != HAL_OK)
  {
    Error_Handler();
  }

  if(HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_4) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM2_Init 2 */

  /* USER CODE END TIM2_Init 2 */

}

捕获中断处理

 注意TIM输入捕获不会对捕获的脉冲进行计数,需要在中断处理函数里面进行累加处理。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim == &htim2)
    {
        Curr_PGA_Counter++;
    }
}

对应时刻脉冲数

注意HAL_TIM_ReadCapturedValue获取的是以1us为单位的counter,通过此函数可以获取对应时刻的脉冲数。如果counter period设置过小,会很快溢出,重新从0开始计数。建议counter period设置为最大。

uint32_t Get_PG_ChannelA_Counter(void)
{
    return HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_3);
}

void PG_Test(void)
{
    //Pre_PGA_Counter = Curr_PGA_Counter;
    //Pre_PGB_Counter = Curr_PGB_Counter;
    uint32_t timer_us = Get_PG_ChannelA_Counter();
    double timer_s = (double)timer_us/1000000.0;

    Usart_Printf("PGA Counter: %d Timestamp: %fs\n", Curr_PGA_Counter, timer_s);
    //Usart_Printf("Curr_PGB_Counter: %d\n", Curr_PGB_Counter);
}

结果测试:

 

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

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

相关文章

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Linux1024一篇通俗易懂的liunx命令操作总结(第十课)

Linux1024一篇通俗易懂的liunx命令操作总结(第十课) 一 liunx 介绍 Linux是一种免费开源的操作系统,它的设计基于Unix。它最早是由芬兰的一位大学生Linus Torvalds在1991年开始编写的,取名为Linux。Linux具有高度的灵活性和可定制性,可以在…

nginx负载均衡(动静分离)

nginx负载均衡(动静分离) 文章目录 nginx负载均衡(动静分离)工作原理:环境说明:部署nginx负载均衡步骤:在负载均衡(NGINX)主机上做配置:测试:在浏…

疯狂小杨哥有意退网

我是卢松松,点点上面的头像,欢迎关注我哦! 昨天我发了一个文章说:有1.6亿粉丝的疯狂小杨哥也似乎宣布退网,有些人说我胡编乱造,有些人说我为了博眼球什么都敢做。毕竟做了近10多年自媒体了,我不…

Nginx Proxy代理

代理原理 反向代理产生的背景: 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成…

vue真实项目还原

目录 前言一,初步了解,确定方向二,还原数据库三,启动api网站四,启动vue的前台和后台1、vue2的版本依赖踩坑(client_admin)2、node-sass安装踩坑(client_home)&#xff08…

2023年中国印刷电路板行业研究报告

第一章 行业概况 1.1 行业简介 印刷电路板(Printed Circuit Board, PCB)是电子工业的基石,被誉为“电子产品之母”。它在电子设备中扮演着至关重要的角色,为电路中的各类元器件提供了机械支撑,并确保了电子组件之间的…

驱动实现LED点灯

demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" //定义三个指针指向映射后的虚拟内存 unsigned int *vir_moder; unsigned …

安装pythonQt报错

在使用命令行pip install PyQt5安装pythonQt5的时候报错。 镜像源有问题&#xff0c;手动设置可用的源 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tool工具 pip install PyQt5-tools -i https://pypi.douban.com/simple 安装成…

CentOS 7 安装 MySQL 8

一、卸载MariaDB MariaDB是MySQL 的一个分支&#xff0c;完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。 1、查看版本&#xff08;如果有就卸载&#xff09; rpm -qa|grep mariadbrpm -e --nodeps 文件名 二、下载mysql 1、进入 /usr/…

02_diffusion_models_from_scratch_CN

从零开始的扩散模型 有时&#xff0c;只考虑一些事务最简单的情况会有助于更好地理解其工作原理。我们将在本笔记本中尝试这一点&#xff0c;从“玩具”扩散模型开始&#xff0c;看看不同的部分是如何工作的&#xff0c;然后再检查它们与更复杂的实现有何不同。 我们将学习 …

VSCode使用记录

一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展&#xff1a;商店 Chinese (Simplified) (简体中文) Language Pack for Visual Studio CodeLive Serveropen in browserGitLens — Git superchargedRemote - SSHPrettier - Code formatterESLintpxt…

【Java 进阶篇】深入了解 Bootstrap 栅格系统

在网页开发中&#xff0c;创建响应式的布局是至关重要的&#xff0c;因为不同设备和屏幕尺寸需要不同的布局来呈现内容。Bootstrap 提供了一个强大的栅格系统&#xff0c;使开发者能够轻松创建适应不同屏幕的网页布局。本文将深入介绍 Bootstrap 栅格系统&#xff0c;面向初学者…

7.7亿参数,超越5400亿PaLM!UW谷歌提出「分步蒸馏」,只需80%训练数据|ACL 2023

LLM不实用&#xff0c;小模型蒸馏才是「现实」的大模型应用路线&#xff0c;全面领先微调技术&#xff01;土豪请无视。。。 大型语言模型虽然性能优异&#xff0c;可以用零样本或少样本提示解决新任务&#xff0c;但LLM在实际应用部署时却很不实用&#xff0c;内存利用效率低…

成集云 | 思迅商慧集成用友T | 解决方案

源系统成集云目标系统 方案介绍 思迅商慧是一款集批次成本、配送复核、自助收银、供应链、加盟管理等于一身的零售管理软件。可以帮助解决客户的运营和管理难题&#xff0c;包括加盟店管理、供应商管理、配送复核管理、商品经营维护、自助收银系统等。 用友T是一款…

ABAP:EXCEL导入导出等功能

源代码: CLASS zcl_excel_tool DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION. *"* public components of class ZCL_EXCEL_TOOL *"* do not include other source files here!!!TYPE-POOLS ole2 .TYPE-POOLS soi .TYPES:BEGIN OF ty_excel,row TYPE c LENG…

Jetpack:013-Jetpack底部导航栏

文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容&#xff0c;本章回中将介绍 底部导航栏。闲话休提&#xff0c;让我们一起Talk …

蓝桥杯刷题单

第一周&#xff0c;链表、栈、队列 0、时间复杂度与空间复杂度&#xff08;补充内容&#xff09; 1、链表的基础知识&#xff1a;单链表 2、反转链表&#xff08; LeetCode 206 &#xff09; 3、相交链表&#xff08; LeetCode 160 &#xff09; 4、合并两个有序链表 &…

AMEYA360:大唐恩智浦DNB1101助力零碳智慧园区储能升级

一、零碳智慧园区诞生的背景 随着全球气候变化问题日益严峻&#xff0c;近年来&#xff0c;各国政府、科学家和环保组织纷纷发出紧急呼吁&#xff0c;敦促采取更多行动来应对这一全球挑战。 2020年9月22日&#xff0c;我国在第75届联合国大会上正式提出2030年实现碳达峰、2060年…

evilhiding:一款好用的shellcode免杀工具

文章目录 evilhiding工具浅析项目地址用法免杀测试声明 evilhiding shellcode loader,bypassav,免杀工具&#xff0c;一款基于python的shellcode免杀加载器 工具浅析 远控条件触发防沙箱花指令干扰loader和shellcode进行fernet加密触发器混淆干扰特征码自动刷新ico图片的md5…