STM32 定时器输入捕获3——捕获超长高电平

这篇具有很好参考价值的文章主要介绍了STM32 定时器输入捕获3——捕获超长高电平。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        第一章:https://blog.csdn.net/m0_73671341/article/details/134773615?spm=1001.2014.3001.5501

        第二章:https://blog.csdn.net/m0_73671341/article/details/134938332?spm=1001.2014.3001.5501

        从第一章的定时器捕获我们可以知道,即使把定时器捕获时长设置到最大也只有65.536ms,而第二章就说明了,高电平小于65.536ms的时候,如何捕获高电平时间。那么如果高电平时间溢出中断时间65.536ms怎么办?

  • 原先的TIM2(高电平输出)
	TIM_TimeBaseStructure.TIM_Period = 19999;
	TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_SetCompare2(TIM2,10000);//占空比为50%,即10ms高电平

现在把TIM2改成

	TIM_TimeBaseStructure.TIM_Period = 19999;
	TIM_TimeBaseStructure.TIM_Prescaler = 719;

此时TIM2分频系数放大十倍,则频率降低十倍,周期放大十倍。

TIM_SetCompare2(TIM2,10000);//占空比为50%,即100ms高电平

        很明显已经超过最大值65.536ms了。 

这时候如果执行代码,输出高电平时间,会输出34.464ms,很明显65.536+34.464=100ms,65.536是一次周期的时间,所以我们可以得出一个结论:高电平时间=n次周期+最后捕获的时间

        所以我们在TIM3配置中,使能TIM_IT_Update(中断标志位),在TIM3中断函数中,清除TIM_IT_Update。

        代码逻辑:如果定时器在捕获,TIM_IT_Update为Set,并且此时处于高电平。peroid_times++,然后清楚TIM_IT_Update,重复此过程,每次溢出都会让peroid_times++。文章来源地址https://www.toymoban.com/news/detail-802110.html

void TIM3_IRQHandler(void)
{
	static unsigned char high_flag = 0;
	
	if(high_complete_flag == 0)
	{
		if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//溢出
		{
			if(high_flag == 1)
			{
				peroid_times++;
			}
		}
		if(TIM_GetITStatus(TIM3,TIM_FLAG_CC1)==SET)
		{
			if(high_flag == 0)//上升沿
			{
				high_flag = 1;
				high_value = 0;
				TIM_SetCounter(TIM3,0);
				TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_Low);
			}
			else//下降沿
			{
				high_value = TIM_GetCounter(TIM3);
				TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_High);
				high_flag = 0;
				high_complete_flag = 1;
			}
		}
	}
	TIM_ClearITPendingBit(TIM3,TIM_FLAG_CC1|TIM_IT_Update);
}
int main(void)
{
	TIM2_PWM_Configuration();
	
	TIM3_InputCaputure_Configuration();//PA1:发出《————》PA6:接收
	
	Uart1_Configuration();
	
	TIM_SetCompare2(TIM2,10000);//占空比为50%,即100ms高电平
	
	while(1)
	{
		if(high_complete_flag == 1)
		{
			printf("%d us",peroid_times * 65536+high_value);
			high_complete_flag = 0;
		}
		Delay_s(10);
	}
}

到了这里,关于STM32 定时器输入捕获3——捕获超长高电平的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32定时器-输入捕获

    输入捕获工作过程 一句话总结工作过程:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMxCCRx)里面,完成一次捕获。 步骤1:设置输入捕获滤波器(通道1为例) 输入捕获1滤

    2024年02月15日
    浏览(36)
  • stm32 定时器输入捕获实验

    目录 一,简介 二,配置过程  一,设置输入捕获滤波器​ 二,设置输入极性 三,设置输入捕获映射通道  四,设置输入捕获分频器  五,设置中断  ​三,寄存器 四,库函数 五,一般步骤   六,软件部分 输入捕获模式可以用来测量脉冲宽度或者测量频率 原理图 如图  

    2024年01月21日
    浏览(52)
  • STM32标准库通用定时器输入捕获

    输入捕获为STM32定时器的一个功能,可以用来测量输入信号的频率和占空比。 具体原理:当输入信号经过比较捕获通道时,STM32会依据通道的极性设置决定是否触发捕获中断TIM_IT_CCx。此时定时器会将当前计数值TIMx-CNT的值保存在TIMx-CCRx中,通过计算两次捕获中断的时间差便可

    2024年03月11日
    浏览(41)
  • STM32F4_定时器输入捕获详解

    目录 1. 输入捕获简介 2. 输入捕获框图 3. 输入捕获模式 4. 相关寄存器 4.1 TIMx_ARR、TIMx_PSC 4.2 捕获/比较寄存器1:TIMx_CCMR1 4.3 捕获/比较使能寄存器 TIMx_CCER 4.4 中断使能寄存器 TIMx_DIER 5. 库函数配置输入捕获高电平脉冲宽度 6. 实验程序 6.1 main.c 6.2 IntputCapture.c 6.3 IntputCapture.h    

    2024年02月04日
    浏览(45)
  • STM32CubeMX系列06——定时器(定时、PWM、输入捕获)

    ==== 文章汇总(有代码汇总) ==== 正点原子Mini板,主控 STM32F103RCT6. 定时器简介 这里主要讨论通用定时器(系统嘀嗒定时器、看门狗定时器、RTC定时器不考虑在内) 对于STM32F103RCT6 单片机: 2个基本定时器。分别是 TIM6 、 TIM7 。只能16位向上计数、没有IO口,没有捕获和比较通

    2024年02月01日
    浏览(46)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器输入捕获)

    输入捕获可以对 输入的信号的上升沿、下降沿或者双边沿进行捕获 ,常用的有 测量输入信号的脉宽 和 测量PWM 输入信号的频率 和 占空比 这两种。 输入捕获的原理 就是,当捕获到信号的跳变沿的时候,把计数器CNT 的值锁存到捕获寄存器CCR 中,把前后两次捕获到的CCR 寄存

    2023年04月14日
    浏览(101)
  • STM32—TIM:基本定时器(输入捕获:测频率、周期)(标准库)

     频率测量:  频率中界频率:适用测周法                                                           频率中界频率:适用测频法 第一步:配置GPIO,TIM的时基单元              在配置TIM的时基单元参数有些许不同。 初始化输入捕获单元:void TIM_ICInit();   配置触发

    2024年02月13日
    浏览(48)
  • STM32 HAL库定时器输入捕获SlaveMode脉宽测量

    📓SlaveMode模式简介 ✨SlaveMode复位模式:在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时,如果TIMx_CR1寄存器的URS位为低,还会产生一个更新事件UEV;然后所有的预装载寄存器(TIMx_ARR, TIMx_CCRx)都会被更新。 🔖当所测频率低于最小定时器捕获频率

    2024年02月16日
    浏览(46)
  • STM32 CubeMX学习实验13:定时器输入捕获获取PWM频率

    使用定时器5作为输入捕获定时器,将通道1(PA0)设置为输入捕获,设置预分频器和计数值,这里设置为1us计数一次,最大可以捕获周期为0xFFFFFFFFus的PWM,所以一般不需要考虑溢出的问题,使能自动重装载。 使能定时器中断,选择合适的优先级,   将引脚设置下拉,保证没

    2024年03月14日
    浏览(65)
  • STM32 hal库使用笔记(三)定时器—输入捕获和计数脉冲

    目录 一、简介 1.定时器简介 2.输入捕获简介 3.原理介绍 二、HAL库配置 1.时钟树的设置 2.定时器时钟源选择 2.1 计数脉冲(代码对应3.1) 2.2 输入捕获(对应代码3.2)  三、代码编写 实验目的:利用定时器输入捕获实现LED翻转;按键充当外部时钟源,实现LED翻转 实验平台:正

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包