首页 > 其他分享 >蓝桥杯—STM32G431RBT6(TIM定时器输入捕获频率和占空比)

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

时间:2024-09-28 15:21:57浏览次数:11  
标签:HAL 捕获 cap1 STM32G431RBT6 蓝桥 TIM R40 占空比 CHANNEL

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

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

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

  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

标签:HAL,捕获,cap1,STM32G431RBT6,蓝桥,TIM,R40,占空比,CHANNEL
From: https://blog.csdn.net/JK03820/article/details/142344969

相关文章

  • 蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)
    目录一、前言二、代码实现功能:​编辑按如图配置定义变量编写执行代码 显示在LCD上加入按键效果三、效果展示四、代码开源 一、前言ARR即自动重装载值(AutoReloadRegister)。相当于一个水杯,水杯容量,水满为一个周期,倒掉重新滴水。它是一个用于指定特定数值的参......
  • 剪枝的应用,bfs判重 蚱蜢跳——蓝桥p642
    **问题描述总共有九个盘子,八只蚱蜢,且每个盘子中只能容下一只蚱蜢,蚱蜢的编号为1~8,如果蚱蜢所在的盘子紧邻着空盘子,那么该蚱蜢可以从自己的盘子跳到空盘子中,也可以隔一个盘子跳到空盘子中,问一开始状态是012345678,蚱蜢至少该跳多少步才可以被变为087654321**输入无**输出蚱蜢跳......
  • 【蓝桥杯】“萌新首秀”全国高校新生编程排位赛2
    1.世上有10种人题目世上有10种人 代码#includeusingnamespacestd;intmain(){cout<<2;return0;}2.01切换题目01切换 题目分析直接判断字符串最后一个字符是0还是1就好了代码#includeusingnamespacestd;intmain(){stringstr;cin>>st......
  • 第十五届蓝桥杯javaA组 砍柴 (两种写法)详解
    参考资料原题链接砍柴-蓝桥云课(lanqiao.cn)区间质数搜索——埃拉托斯特尼筛法和欧拉筛法-CSDN博客思路质数筛+二分+博弈+状态机(只因bushi)$$状态转移方程 dp[i] = !dp[i-p]$$由原始题意可以看出砍树长度限制为小于其长度的质数——暗示你使用质数筛交替砍......
  • 蓝桥4-R格式-1
    知识铺垫(高精度算法):在C/C++中,我们经常会碰到限定数据范围的情况,C++规定:int占32位,即4个字节,即int的范围是[-231,231-1],为10^9数量级longlong占64位,即8个字节,即longlong的范围是[-263,263-1],为10……18数量级如果超过该数量级,则需引入高精度算法。1.高精度加法A+BProblem(......
  • 【每周例题】蓝桥杯 C++ 数树数
    数树数题目数树数题目分析通过图片的二叉树,我们可以发现每一个·分支的L=2a-1R=2a代码#include<iostream>#include<string>usingnamespacestd;chars[50];inta;intmain(){intn,q;cin>>n>>q;for(inti=0;i<q;i++){......
  • 【每周例题】蓝桥杯 C++ 生物芯片
    生物芯片题目生物芯片题目分析·1.下面是亮灯规律,剩下的以此类推:我们可以看到,不亮灯的都是n的平方 2.所以亮灯的数目=该区间内所有灯的数量-不亮灯的数目(简而言之,所有不亮灯的号码开方后都是整数)代码#include<iostream>#include<cmath>usingnamespacestd;......
  • 蓝桥杯3-好数
    #include<iostream>usingnamespacestd;boolcheck(intx){intwei=1;//用于计算位数while(x){intb=x%10;//b表示对应位数的数字if(wei%2==1)//如果是奇数位{if(b%2==0)//如果奇数位是偶数,返回为假......
  • 蓝桥杯嵌入式冲刺国奖-3、LCD程序
    在上一章的基础上我们构建LCD程序的模板。1、用官方程序进行移植官方资源包:通过百度网盘分享的文件:2-新版竞赛平台.zip链接:https://pan.baidu.com/s/1Z8mD4NrywlqbpUEDKSHAtw?pwd=1234 提取码:1234 官方为我们提供了LCD的资源包,我们仅需要移植即可使用,我们在上节代码......
  • 蓝桥杯嵌入式的学习总结
    一.前言    嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计,生产的一款“蓝桥杯全国软件与信息技术专业人才大赛-嵌入式设计与开发科目“专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景。以下内容都是小编......