你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f030定时器输入捕获异常

[复制链接]
_带头大哥_ 提问时间:2024-12-5 18:01 / 已解决

我使用STM32F030得TIM3去做一个输入捕获,需求是检测一个大约80us的低电平,我得思路是通过CH1直接检测下降沿,CH2间接检测上升沿,然后判断二者的差值;现在遇到一个问题就是上升沿的检测始终有问题,下降沿检测正常,最后跟踪下来发现在while(1)中增加一个HAL_Delay(1)就可以正常完成我得需求,但我不知道为什么会如此;已经排查过输入的波形没问题;也尝试过交换CH1和CH2也一样有问题

a1985eec-1619-4006-9c5e-da6c6a7e06f3.png

7676d41c-d4e7-4f97-878f-a98fad986ce1.png

7b345f88-b4a1-4d2c-a7cc-a0d1b4f6d321.png
收藏 评论6 发布时间:2024-12-5 18:01

举报

6个回答
butterflyspring 最优答案 回答时间:2024-12-9 16:11:19
会不会是加断点后,导致两个捕获标志都有足够的时间按先后顺序置位起来了呢?

之前清除标志位是不是恰巧刚清除后,第二标志位置位了,然后再等第一个置位才能判断。

我之前是这么做的,计数器自由运行,只判断第二个标志位(中断,第一个一定是先来的),然后直接取数据16位减法,不需要判断大小。感兴趣的话可以试试看。
xmshao 回答时间:2024-12-6 11:03:01
你的需求是看明白了,就是通过TIM3 的IC1 IC2对外部一输入信号进行捕获测量。


从你目前设计来看,你如何区分上沿和下沿的前后关系呢?比如下图,


你代码里只管发生两次捕获事件即可。你是如何区分哪一段的呢?


rrr.png




你可以先以捕获到下降沿为起始条件,在捕获到上沿时应以检测到已经发生下沿
捕获事件作为有效前提,否则本次上沿捕获无效,得等下一次捕获。


目的就是保证你的捕获应该是 先 捕获下沿,然后 捕获上沿的   连续  两次捕获。


另外,根据你目前的设计,被测信号宽度应该不宽于TIMER的计数周期,这样的话,在计算
被测信号宽度时,需稍加判断第二次捕获的数据是否大于前者,若不满足,低电平宽度就
是=CCR2+ARR+1-CCR1;
_带头大哥_ 回答时间:2024-12-6 14:06:07

xmshao 发表于 2024-12-6 11:03
你的需求是看明白了,就是通过TIM3 的IC1 IC2对外部一输入信号进行捕获测量。</p>
<p>

我是通过比较CCR2>CCR1来作为判断上沿在下沿之后的条件的,这个逻辑没问题,现在主要的问题就是不加delay,那么这个CCR2(上沿)得值基本都是0x11或0x12或0x13这几个值,但是加了delay后就一切正常,能正常捕获到下沿和上沿,不加delay就只有下沿得捕获正常,上沿的捕获值始终是上述三个值,所以一直满足不了CCR2>CCR1

xmshao 回答时间:2024-12-6 15:10:35

<em>带头大哥</em> 发表于 2024-12-6 14:06
我是通过比较CCR2&gt;CCR1来作为判断上沿在下沿之后的条件的,这个逻辑没问题,现在主要的问题就是不加d ...

[md]你靠比较ccr2 ccr1捕获值的大小来判断前后时序的逻辑,不是很理解。

因为被测信号过来的时间点是随机的。

至于这里的delay(),如果程序逻辑没问题的话,就没有道理必须放个delay在这里。

你觉得加了delay正常 或许就是个误会。

_带头大哥_ 回答时间:2024-12-8 20:43:18

xmshao 发表于 2024-12-6 15:10</p>
<p>[md]你靠比较ccr2 ccr1捕获值的大小来判断前后时序的逻辑,不是很理解。

[md]我觉得没什么问题吧,CCR2>CCR1就可以确保检测到的上升沿是在下降沿之后😕

加这个delay就是因为在调试过程发现CCR2>CCR1这个条件一直满足不了(实际跟踪就是CCR2一直都是0x11或0x12这几个值),一直没有出现CCR2>CCR1的情况,但一旦给这个if中的代码加上断点就可以正常满足条件……我能联想到的自然就是因为加了断点调试后引起了延迟,于是我就手动增加了delay,果然一切就正常了,并且检测的上升沿和下降沿也是正确无误的……目前还不明白根源是什么

_带头大哥_ 回答时间:5 天前

butterflyspring 发表于 2024-12-9 16:11
会不会是加断点后,导致两个捕获标志都有足够的时间按先后顺序置位起来了呢?</p>
<p>之前清除标志位是不是恰巧刚 ...

嗯,你这样确实可行,我改成这样不加delay也可以了;能用,就是对为什么不行有点好奇,哈哈

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版