STM32 超声波不能正常输出

HAL_Delay(0);

//TIM4的两个通道分别上升沿、下降沿捕获
uint32_t valueRising = HAL_TIM_ReadCapturedValue(&htim4, TIM_CHANNEL_1);
uint32_t valueFalling = HAL_TIM_ReadCapturedValue(&htim4, TIM_CHANNEL_2);
__HAL_TIM_CLEAR_FLAG(&htim4,TIM_FLAG_CC1);
//虽然不知道要不要清楚终端标志位,但用不用都没差

uint32_t time = valueFalling - valueRising;
uint32_t length = 100000*time*340/2*7200/72000000;
trace_printf("Length:%d\n",length);

直接开定时器捕获超声波,测距。


然后输出就是这个样子,首先并不准,其次貌似会延时。而且无论我把time前面的数字改成1000还是10000还是100000,输出永远最大是两位数。

所以问题出在哪里啊嘤嘤嘤。

谢谢大家!


Length:32

Length:32

Length:32

Length:32

Length:32

Length:32

Length:32

Length:32

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:3

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1

Length:1


已邀请:

admin

赞同来自: 大猫lynn

首先,你定时器捕获所用的配置需要检查,是否最小步距是小于超声波步距的,例如超声波的波形周期是20us,那么你设置的定时器捕获时间就要远小于20us,例如可以是4us-10us

其次,你获取捕获到的时间函数是在哪里写的? 写到while里肯定是不行的,一般callback里面

还有,如果在callback里面就尽量不要做一些复杂的运算,us级的运算也会影响到捕获

另外,你不知道还有一个pwm输入捕获模式吗?

admin

赞同来自: 大猫lynn

http://www.stm32cube.com/question/651看这个帖子里面的介绍

ldaksldaskld

赞同来自:

楼主可以分享下代码吗,

要回复问题请先登录注册