使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
与HAL_ADC_Start_DMA相关的一个十分怪异的问题
STM32F030P4F6无法初始化IO输出高电平
PWM+DMA分多次发送缺点明显,会造成脉冲不连续,有解决的办法吗。
STM32F030F4P6不能烧录程序
stm32f030c8t6移植商家的lcd12864-01A的代码,屏幕没反应,是怎么回事
STM32H723使用DMA方式实现定时器输入捕获只能执行一次?
stlink V3mini 调试器不能识别stm32f030F4P6芯片,有解决办法吗?
求助佬们,STM32U083 进行外部计数只能计数8000多一点
STM32F0 SMBus 中断怎么开启
之前清除标志位是不是恰巧刚清除后,第二标志位置位了,然后再等第一个置位才能判断。
我之前是这么做的,计数器自由运行,只判断第二个标志位(中断,第一个一定是先来的),然后直接取数据16位减法,不需要判断大小。感兴趣的话可以试试看。
从你目前设计来看,你如何区分上沿和下沿的前后关系呢?比如下图,
你代码里只管发生两次捕获事件即可。你是如何区分哪一段的呢?
你可以先以捕获到下降沿为起始条件,在捕获到上沿时应以检测到已经发生下沿
捕获事件作为有效前提,否则本次上沿捕获无效,得等下一次捕获。
目的就是保证你的捕获应该是 先 捕获下沿,然后 捕获上沿的 连续 两次捕获。
另外,根据你目前的设计,被测信号宽度应该不宽于TIMER的计数周期,这样的话,在计算
被测信号宽度时,需稍加判断第二次捕获的数据是否大于前者,若不满足,低电平宽度就
是=CCR2+ARR+1-CCR1;
我是通过比较CCR2>CCR1来作为判断上沿在下沿之后的条件的,这个逻辑没问题,现在主要的问题就是不加delay,那么这个CCR2(上沿)得值基本都是0x11或0x12或0x13这几个值,但是加了delay后就一切正常,能正常捕获到下沿和上沿,不加delay就只有下沿得捕获正常,上沿的捕获值始终是上述三个值,所以一直满足不了CCR2>CCR1
[md]你靠比较ccr2 ccr1捕获值的大小来判断前后时序的逻辑,不是很理解。
因为被测信号过来的时间点是随机的。
至于这里的delay(),如果程序逻辑没问题的话,就没有道理必须放个delay在这里。
你觉得加了delay正常 或许就是个误会。
[md]我觉得没什么问题吧,CCR2>CCR1就可以确保检测到的上升沿是在下降沿之后😕
加这个delay就是因为在调试过程发现CCR2>CCR1这个条件一直满足不了(实际跟踪就是CCR2一直都是0x11或0x12这几个值),一直没有出现CCR2>CCR1的情况,但一旦给这个if中的代码加上断点就可以正常满足条件……我能联想到的自然就是因为加了断点调试后引起了延迟,于是我就手动增加了delay,果然一切就正常了,并且检测的上升沿和下降沿也是正确无误的……目前还不明白根源是什么
嗯,你这样确实可行,我改成这样不加delay也可以了;能用,就是对为什么不行有点好奇,哈哈