第一范文网 - 专业文章范例文档资料分享平台

STM32F407通用定时器输入捕获

来源:用户分享 时间:2025/5/23 0:41:56 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

}

}

}else { }

//还未开始,第一次捕获上升沿

//清空

//标记捕获到了上升沿

TIM5CH1_CAPTURE_STA=0; TIM5CH1_CAPTURE_VAL=0;

TIM5CH1_CAPTURE_STA|=0X40; TIM_Cmd(TIM5,DISABLE ); TIM_SetCounter(TIM5,0);

//关闭定时器5

TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1设为下降沿捕获 TIM_Cmd(TIM5,ENABLE );

//使能定时器5

TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位

此部分代码包含两个函数,其中 TIM5_CH1_Cap_Init函数用于TIM5通道1的输入捕获设 置,其设置和我们上面讲的步骤是一样的,这里就不多说,特别注意:TIM5是32位定时器, 所以arr是u32类型的。接下来,重点来看看第二个函数。TIM5_IRQHandler是TIM5的中断服务函数,该函数用到了两个全局变量,用于辅助实现高电平捕获。其中TIM5CH1_CAPTURE_STA,是用来记录捕获状态,该变量类似我们在usart.c里面自行定义的USART_RX_STA 寄存器(其实就是个变量,只是我们把它当成一个寄存器那样来使用)。TIM5CH1_CAPTURE_STA 各位描述如表所示:

TIM5CH1_CAPTURE_STA bit7 捕获完成标志 bit6 捕获到高电平标志 bit5~0 捕获高电平后定时器溢出的次数 另外一个变量TIM5CH1_CAPTURE_VAL,则用来记录捕获到下降沿的时候,TIM5_CNT的值。 现在介绍一下,捕获高电平脉宽的思路:首先,设置TIM5_CH1捕获上升沿,这在TIM5_Cap_Init 函数执行的时候就设置好了,然后等待上升沿中断到来,当捕获到上升沿中断,此时如果 TIM5CH1_CAPTURE_STA的第6位为0,则表示还没有捕获到新的上升沿,就先把

TIM5CH1_CAPTURE_STA、TIM5CH1_CAPTURE_VAL 和计数器值TIM5->CNT等清零,然后再设置 TIM5CH1_CAPTURE_STA的第6位为1,标记捕获到高电平,最后设置为下降沿捕获,待下降沿到来。如果等待下降沿到来期间,定时器发生了溢出(对32位定时器来说,很难溢出),就在TIM5CH1_CAPTURE_STA里面对溢出次数进行计数,当最大溢出次数来到的时候,就强制标记捕获完成(虽然此时还没有捕获到下降沿)。当下降沿到来的时候,先设置TIM5CH1_CAPTURE_STA的第7位为 1,标记成功捕获一次高电平,然后读取此时的定时器值到TIM5CH1_CAPTURE_VAL里面,最后设置为上升沿捕获,回到初始状态。这样,我们就完成一次高电平捕获了,只要 TIM5CH1_CAPTURE_STA的第7位一直为 1,那么就不会进行第二次捕获,我们在main函数处理完捕获数据后,将TIM5CH1_CAPTURE_STA置零,就可以开启第二次捕获。 接下来,我们看看 main 函数内容:

extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态 extern u32 TIM5CH1_CAPTURE_VAL;//输入捕获值

通过设置TIM5_Cap_Init(0XFFFFFFFF,84-1),将 TIM5_CH1 的捕获计数器设计为 1us 计数一次,并设置重装载值为最大以达到不让定时器溢出的作用(溢出时间为 232-1 us) ,所以我们的捕获时间精度为1us。主函数通过TIM5CH1_CAPTURE_STA 的第7位,来判断有没有成功捕获到一次

电平,如果成功捕获,则将高电平时间通过串口输出到电脑. if(TIM5CH1_CAPTURE_STA&0X80) //成功捕获到了一次高电平 {

temp=TIM5CH1_CAPTURE_STA&0X3F; temp*=0XFFFFFFFF;

//溢出时间总和

//得到总的高电平时间 //开启下一次捕获

temp+=TIM5CH1_CAPTURE_VAL; TIM5CH1_CAPTURE_STA=0; }

PA1(CH2)无法使用。尝试如下:

PA0,2,3,4捕获一起打开,程序在TIM5初始化完成后陷入死循环,无法进入while的大循环。 PA1单独打开,同样无法捕获到。

所以TIM5只有PA0,2,3即通道1,3,4能用,并且如果PA0,1,2,3一起插上PWM信号,则全部无法工作。

设计STM32F407 的TIM5通道捕获PWM时需要注意这一点。

printf(\打印总的高点平时间

搜索更多关于: STM32F407通用定时器输入捕获 的文档
STM32F407通用定时器输入捕获.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8musj41tui7f2vd1ug09_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top