STM_HAL_TIM_IC_(输入捕获,捕获PWM波)

介绍

TM32微控制器提供了输入捕获(Input Capture)功能,这是一种用于精确测量外部信号脉冲宽度和周期的强大技术。输入捕获通常与定时器(如TIM)的高级控制定时器(TIM1和TIM8)或通用定时器(TIM2至TIM5)配合使用。

输入捕获的工作原理

输入捕获模式允许用户在定时器的计数器与一个外部信号(通常是一个边沿触发信号)的边沿同步时,捕获定时器的当前计数值。通过捕获信号的两个连续边沿之间的定时器计数值,可以计算出信号的脉冲宽度或周期。

输入捕获的关键特性

  • 时间戳功能:能够记录信号边沿的确切时刻。
  • 方向检测:可以检测信号的上升沿和下降沿,从而判断信号的频率和方向。
  • 脉冲计数和频率测量:通过计算两个连续捕获事件之间的时间差,可以测量信号的频率和周期。
  • 脉宽调制(PWM)信号分析:可以分析PWM信号的占空比和频率。

如何使用STM32的输入捕获

  1. 配置定时器和通道:选择一个定时器,并配置其通道为输入捕获模式。
  2. 选择输入信号:将外部信号连接到定时器的相应输入引脚。
  3. 配置触发边沿:设置捕获信号是上升沿还是下降沿触发,或者两者都触发。
  4. 配置预分频器和计数器:根据输入信号的频率和所需的分辨率来配置定时器的预分频器和自动重装载寄存器(ARR)。
  5. 中断和回调函数:配置输入捕获中断,并在中断服务例程中读取捕获寄存器的值,以计算信号的时间参数。

注意事项

  • 时钟源选择:确保定时器时钟源配置正确,以获得准确的计时。
  • 采样率:根据信号频率选择合适的采样率,以避免信号变化太快而无法准确捕获。
  • 噪声抑制:可能需要对输入信号进行去抖动处理,以防止误触发。

 哪些定时器有输入捕获

  1. 高级控制定时器(TIM1和TIM8):这些定时器提供了最丰富的功能,包括输入捕获、输出比较、PWM生成等。

  2. 通用定时器(TIM2至TIM5):这些定时器也支持输入捕获,但功能相对于高级控制定时器来说较少。

  3. 基本定时器(TIM6和TIM7):这些定时器主要用于简单的时间计数,不支持输入捕获功能。

  4. 低功耗定时器(LPTIM):在某些STM32微控制器中,还可能包括低功耗定时器,它们在低功耗模式下非常有用,但可能不支持输入捕获。

 STM32Cude设置

1时钟源设置

2开启输入捕获

3输入捕获的设置

配置选项介绍

  1. Polarity Selection:这个选项允许你选择捕获信号的边沿极性。你可以选择:

    • Rising Edge:只在信号的上升沿捕获计数器的值。
    • Falling Edge:只在信号的下降沿捕获计数器的值。
    • Both Edges:在信号的上升沿和下降沿都捕获计数器的值。
  2. IC Selection:这个选项决定了输入信号的来源。通常,你可以选择:

    • Direct:直接连接到定时器的输入通道,不经过任何其他硬件处理。
    • Indirect:通过一个滤波器或信号处理器连接到定时器的输入通道。
  3. Prescaler Division Ratio:这个选项允许你设置一个预分频器,用于降低输入信号的频率。你可以选择不进行预分频(No division),或者选择2、4、8等分频比,以便在捕获之前降低信号的频率。

  4. Input Filter (4 bits value):这个选项允许你设置一个数字滤波器,用于减少输入信号上的噪声。滤波器的宽度可以从0到15,其中0表示不使用滤波器,而15表示最强的滤波器设置。滤波器的宽度决定了信号必须保持新电平多长时间才能被视为有效跳变。

 

4开启中断

之后生成代码

代码设置

有哪些函数

  1. HAL_TIM_IC_Init:用于初始化定时器的输入捕获通道。

    HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);
    
  2. HAL_TIM_IC_ConfigChannel:用于配置定时器的输入捕获通道

    HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfigIC, uint32_t Channel);
    
  3. HAL_TIM_IC_Start用于启动输入捕获。

    HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
    
  4. HAL_TIM_IC_Start_IT用于启动输入捕获并使能中断。

    HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
    
  5. HAL_TIM_IC_Stop:用于停止输入捕获。

    HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
    
  6. HAL_TIM_IC_Stop_IT:用于停止输入捕获并禁用中断。

    HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
    
  7. HAL_TIM_IRQHandler:用于定时器中断处理函数,需要在用户定义的中断服务例程中调用

  8. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
    
  9. HAL_TIM_IC_CaptureCallback:用于输入捕获中断的回调函数,需要在HAL_TIM_IRQHandler中调用。

    1. 是捕获一次返回一次中断

      void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);

2实验思路将PWM产生的波,用通道1进行捕获返回捕获的值

main.h源码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){//获取占空比中的频率   要获取一个周期的频率 =频率/(预分频+重装值);重装值为 第二次计数减去第一次计数uint32_t tim__CNT=__HAL_TIM_GET_COUNTER(htim);//当前计数值uint32_t tim__PSC=TIM2->PSC;//预分频值uint32_t PAB1_HZ=72000000;//PAB1频率uint32_t data=PAB1_HZ/(tim__CNT+tim__PSC);//占空的频率char  aa[10];sprintf(aa,"频率%06d",data);HAL_UART_Transmit(&huart1,(uint8_t*)aa,10,20);
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//启动捕获HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//启动PWM/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

总结

输入捕获就是在产生输入波形的信号时产生一个反馈信号

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

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

相关文章

JavaEE-文件IO2

文章目录 前言一、字节流1.1 读文件1.2 写文件 二、字符流2.1 读文件2.2 写文件 三、文件IO三道例题 前言 在这里对Java标准库中对文件内容的操作进行总结,总体上分为两部分,字节流和字符流,就是以字节为单位读取文件和以字符为单位读取文件…

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是来自 labs.google 的最新实验,您可以查看音乐效果和图像效果的新更新,现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能,以更好地理解这些生成…

cmake使用交叉编译工具链并验证

目录 一、内容 二、配置 1. 准备cmake文件 2. 使用交叉编译 三、验证 1. 构建阶段验证 2. 编译阶段验证 一、内容 目的:在X86环境下编译ARM平台软件 编写交叉编译配置文件:xx.cmake 执行cmake命令时指定:cmake \ -DCMAKE_TOOLCHAIN_F…

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用: 题目: 开始操作: 1)、切换集群 2)、提取错误日志 3)、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用: 百度…

简单的UDP网络程序:多人群聊系统

本章重点 能够实现一个简单的udp客户端/服务器; 1.创建套接字 我们把服务器封装成一个类,当我们定义出一个服务器对象后需要马上初始化服务器,而初始化服务器需要做的第一件事就是创建套接字。 ⭐参数说明: domain:创建套接字的域…

Nginx代理配置(专业版)

写在前面提醒:使用代理,如果可以,请尽量支持双协议,http、https均要支持哈。 注意:监控系统只是运行代码,是否支持https,需要运维同学在你们的服务器上配置https证书,配置好证书&…

在 CentOS 上安装 PostgreSQL 的全面指南

PostgreSQL 是一种功能强大的开源关系型数据库管理系统,广泛应用于各种领域。它提供了诸如事务处理、并发控制和数据完整性等高级功能,因此深受开发者和企业的欢迎。本指南将逐步引导您在 CentOS 上安装 PostgreSQL,以便您充分利用其众多优势…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用,可接入 OPENAI API 或 通义千问API 开源地址: https://github.com/isnl/EsChat 大声(偷偷)告诉你:通义千问有免费API额度可白嫖!!! 版本特性 OPENAI 和 通义千…

利用英特尔 Gaudi 2 和至强 CPU 构建经济高效的企业级 RAG 应用

检索增强生成 (Retrieval Augmented Generation,RAG) 可将存储在外部数据库中的新鲜领域知识纳入大语言模型以增强其文本生成能力。其提供了一种将公司数据与训练期间语言模型学到的知识分开的方式,有助于我们在性能、准确性及安全隐私之间进行有效折衷。…

任推邦:实力强劲的APP推广拉新平台,号称不扣量

任推邦简介 任推邦是国内数一数二的项目分发平台,也是一个不扣量的项目APP推广拉新平台,隶属于聚名科技集团股份有限公司。聚名科技成立时间在2012年,是安徽省老牌互联网企业,历经11年的飞速发展,聚名科技成功布局打造…

小程序的这些知识你知道吗?

一:导航传参 无论是编程式还是声明式导肮传参都是在url?keyvalue&key1value1,无论是否是tabbar页面. 对于回退页面,没办法传参. 这个参数是,跳转到页面的时候,跳转到另一个页面,这个页面就是刚开始执行,等数据执行之后,触发onload,传递的参数放在内存中,跳转是内部底层触…

云端力量:利用移动云服务器高效部署Spring Boot Web应用

文章目录 一、移动云介绍二、移动云产品选择三、体验云主机ECS四、使用移动云服务器部署SpringBoot Web应用4.1移动云ECS安装JDK4.2移动云ECS安装MySQL4.3移动云ECS数据库插入数据4.4移动云ECS部署Spring Boot Web应用 总结 一、移动云介绍 移动云是中国移动基于自研的先进技术…

Linux中常见的基本指令(上)

目录 一、ls指令 1. ls 2. ls -l 3. ls -a 4.ls -F 二、qwd指令 三、cd指令 1. cd .. 2. cd / / / 3. cd ../ / / 4. cd ~ 5. cd - 五、mkdir指令 六、rmdir指令和rm指令 一、ls指令 语法 : ls [ 选项 ][ 目录或文件 ] 。 功能 :对于目录…

桶排序和基数排序

前言: 这篇文章,我们就来了解一些鲜为人知的排序,桶排序和基数排序。 桶排序: 桶排序的思想: 桶排序的思想就是把待排序的数尽量均匀地放到各个桶中,再对各个桶进行局部的排序,最后再按序将各…

AI Agent: Agent框架+7个实例

何谓Agent Agent 作为一种新兴的人工智能技术,正在受到越来越多的关注。要说清楚什么是 Agent,先得看看人工智能的本质是什么。 人工智能这个名称来自它试图通过计算机程序或机器来模拟、扩展和增强人类智能的 一些方面。在这个定义中,“人…

C# WPF入门学习(四)—— 按钮控件

上期介绍了WPF的实现架构和原理,之后我们开始来使用WPF来学习各种控件。 一、尝试插入一个按钮(方法一) 1. VS2019 在界面中,点击工具栏中的视图,在下拉菜单中选择工具箱。 至于编译器中的视图怎么舒服怎么来布置&am…

服务器硬件全攻略:从入门到精通,全面解析服务器性能与稳定性!

服务器是计算机网络中提供特定服务的计算机系统,其硬件配置和性能直接影响到整个网络系统的运行效率和稳定性。作为一个资深的技术人员,本文将全面详细地介绍服务器硬件基础知识,包括介绍、命令或语法、主要作用以及使用方法等。 一、介绍 服…

Linux基础(七):Linux 系统上的库文件生成与使用

学过C语言我们知道,C语言有标准库和自定义库,这些方便了我们的实际开发,提供了已经实现好的函数接口,我们使用的时候,只需要引入头文件即可,那具体的实现过程又是怎么样的呢?我们又该如何实现我…

Mysql中的慢查询

Mysql慢查询的一些sql命令 慢查询的默认事件为10秒 #注意:慢查询一般是在调试阶段开启的,在开发阶段中一般不会开启,会对效率产生延误 #查询慢查询是否开启 show variables like %general%; #慢查询时间设置 show variables like long_query…

查找专利渠道

官方渠道 常规检索 (cnipa.gov.cn)https://pss-system.cponline.cnipa.gov.cn/conventionalSearch 佰腾网 佰腾网 - 查专利就上佰腾网_佰腾全球专利搜索平台_商标查询平台_企业工商信息查询平台 (baiten.cn)https://www.baiten.cn/