您的位置:首页 > 科技 > 能源 > 博物馆门户网站建设方案_专业定制网红柴火灶_今天刚刚发生的新闻最新新闻_百度服务中心投诉

博物馆门户网站建设方案_专业定制网红柴火灶_今天刚刚发生的新闻最新新闻_百度服务中心投诉

2024/11/18 18:10:29 来源:https://blog.csdn.net/JK03820/article/details/142344969  浏览:    关键词:博物馆门户网站建设方案_专业定制网红柴火灶_今天刚刚发生的新闻最新新闻_百度服务中心投诉
博物馆门户网站建设方案_专业定制网红柴火灶_今天刚刚发生的新闻最新新闻_百度服务中心投诉

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

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

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

  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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com