蓝桥杯—STM32G431RBT6(TIM定时器输入捕获频率和占空比)

news/2024/12/31 1:32:25/

一、什么是输入捕获?对比输出捕获区别?

输入捕获是指对输入信号的特定事件进行检测和记录它主要用于测量输入信号的时间间隔、频率等参数。而输出捕获则是对输出信号的特定事件进行控制和监测。两者的主要区别在于作用对象不同,输入捕获关注的是输入信号,而输出捕获关注的是输出信号。

输入捕获能够对输入信号的上升沿和下降沿进行捕获,并且记录下捕获时定时器的数值以及触发中断。根据功能分为两类:

  1. 普通输入捕获(只能测频率)

  1. PWM输入模式(可以测频率和占空比)(双通道)

二、使用步骤

1.配置工程


2.输入捕获频率

如图有两个信号发生器,R40和R39可调整信号发生器的频率,PA15和PB4可设置为定时器输入捕获模式,用于采集他所发出的信号

定义变量

 uint32_t cap1,cap2,R39_frq,R40_frq;uint32_t cap1_2,cap2_2,R39_duty,R40_duty;

 开启定时器

	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);

中断回调函数

htim的实例为TIM2时:

  • 如果htim的通道为HAL_TIM_ACTIVE_CHANNEL_1,则执行以下操作:
    • cap1 = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1):读取定时器 2 的通道 1 的捕获值并存储到cap1中。
    • cap1_2 = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2):读取定时器 2 的通道 2 的捕获值并存储到cap1_2中。
    • TIM2->CNT=0:将定时器 2 的计数器清零。
    • R40_frq = 80000000 / 80 / cap1:计算与定时器 2 相关的频率值,其中80000000是系统时钟频率,80是预分频值,cap1是捕获值。
    • R40_duty = (1.0 * cap1_2) / (1.0 * cap1) * 100:计算与定时器 2 相关的占空比值。
    • HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1)HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2):重新启动定时器 2 的通道 1 和通道 2 的输入捕获中断。
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//输入捕获频率
{
if(htim->Instance==TIM2)
{if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1){cap1 = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
cap1_2=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);	
TIM2->CNT=0;R40_frq =80000000/80/cap1;R40_duty=(1.0*cap1_2)/(1.0*cap1)*100;HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);}}
if(htim->Instance==TIM3)
{
if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1){cap2 = HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
cap2_2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);	
TIM3->CNT=0;R39_frq =80000000/80/cap2;R39_duty=(1.0*cap2_2)/(1.0*cap2)*100;HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);}
}

LCD显示 

	sprintf(buf,"   R39_frq:%dHZ    ",R39_frq);//输入捕获频率LCD_DisplayStringLine(Line6,(uint8_t*)buf);sprintf(buf,"   R40_frq:%dHZ    ",R40_frq);LCD_DisplayStringLine(Line7,(uint8_t*)buf);sprintf(buf,"   R39_duty:%d%%    ",R39_duty);//输入捕获频率LCD_DisplayStringLine(Line8,(uint8_t*)buf);sprintf(buf,"   R40_duty:%d%%    ",R40_duty);LCD_DisplayStringLine(Line9,(uint8_t*)buf);

三、效果展示

四、代码开源 

通过网盘分享的文件:18-TEST8-TIM输入频率和占空比.zip
链接: https://pan.baidu.com/s/1SWKCUrFRDdp6I0CK3vGMtA?pwd=0820 提取码: 0820


http://www.ppmy.cn/news/1533492.html

相关文章

第2篇:Linux入侵排查----应急响应篇

第2篇:Linux入侵排查 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程&…

Java中的HTTP请求:简化你的网络通信

在现代软件开发中,网络通信是一项基本而重要的技能。对于Java开发者来说,掌握如何在Java中发送HTTP请求是必不可少的。无论是调用RESTful API、上传文件到服务器,还是与其他Web服务交互,Java都提供了多种工具来简化这些任务。本文…

矩阵学习过程中的一些思考

2024.09.27(学习鸢尾花书_矩阵力量_Ch20) (1)所有中心过原点的椭圆都可以用一个二维矩阵表示,且特征值表示长短轴长度,特征向量表示长短轴所在方向的单位向量(表征椭圆旋转方向)&am…

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测 文章目录 一、基本原理原理流程总结 二、实验结果三、核心代码四、代码获取五、总结 回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提…

第七章 DockerFile

目录 一、概念 二、Dockerfile的常用指令 三、构建镜像 四、CMD和ENTRYPOINT命令的区别 五、EXPOSE指令详解 引言:在上一章《容器数据卷》中,已经给大家简单的介绍了下DockerFile,那么在本章中我们将详细来讲讲DockerFile。 一、概念 …

C#获取变量的数据类型_C#获取对象的数据类型

C#中的数据类型用 Type 类描述,具体的类型是 Type的对象 一、object.GetType() 对象.GetType()-----对象不能为null,否则运行报错; 通用的获取类型方式 底层对象获取类型,所有的对象,变量获取类型,GetType(); 返回的…

图论(dfs系列) 9/27

一、二维网格图中探测环 题意: 给定一个二维数组grid,如果二维数组中存在一个环,处于环上的值都是相同的。返回true;如果不存在就返回false; 思路: 在以往的dfs搜索中,都是往四个方向去dfs;但是在这一道…

(Django)初步使用

前言 Django 是一个功能强大、架构良好、安全可靠的 Python Web 框架,适用于各种规模的项目开发。它的高效开发、数据库支持、安全性、良好的架构设计以及活跃的社区和丰富的文档,使得它成为众多开发者的首选框架。 目录 安装 应用场景 良好的架构设计…