当前位置: 首页 > article >正文

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

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

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

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

  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.kler.cn/a/323789.html

相关文章:

  • vue如何实现组件切换
  • 对接阿里云实人认证
  • 基于麒麟服务器操作系统V10版本,部署Nginx服务、MySql服务搭建PHP环境,实现静态网站平台的搭建。
  • 用OMS进行 OceanBase 租户间数据迁移的测评
  • vue内置指令和自定义指令
  • STM32 标准库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别
  • 北斗三号多模对讲机TD70:公专网融合、数模一体、音视频调度,推动应急通信效能升级
  • Xiaojie雷达之路---doa估计(dbf、capon、music算法)
  • 通信工程学习:什么是MIMO多输入多输出技术
  • TDSQL-C电商可视化,重塑电商决策新纪元
  • 我可以通过发包拿到视频网站的视频源文件吗?
  • 软件设计之SSM(1)
  • PWM基础与信号控制
  • C++动态规划问题—第 N 个泰波那契数
  • 物联网助力智慧交通:优势与前景
  • ScrapeGraphAl AI爬虫
  • 零基础教你如何开发webman应用插件
  • Mybatis中字段返回值映射问题
  • XXL-JOB在SpringBoot中的集成
  • 【Redis】安装redis-plus-plus
  • Trick : pair 的二分问题
  • mariadb无法存储中文
  • Colorful/七彩虹将星X17 AT 22 Win11原厂OEM系统 带COLORFUL一键还原
  • 今年Java回暖了吗
  • 根据标签实现CD
  • HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果