论坛元老
 
- 积分
- 8464
- 金钱
- 8464
- 注册时间
- 2020-5-11
- 在线时间
- 3904 小时
|
发表于 2021-10-8 15:20:00
|
显示全部楼层
本帖最后由 LcwSwust 于 2021-10-8 15:30 编辑
楼主这图做得挺好,核心代码一目了然。
我的看法是:
主程序不一定是卡死,而是未能满足条件 (DHT11_time_up==20),
这种条件是很容易引起BUG的,因为定时中断里有DHT11_time_up++,
如果主循环处理一些费时的操作时错过了DHT11_time_up==20的时刻,那就要等很久很久了,
所以建议将条件改为(DHT11_time_up>=20)。
但是,楼主说到“当手松开后HC-SR04还是可以正常测距显示”,那就不像是这个BUG引起的。
另外建议LCD显示函数等费时的操作不要放在中断里。
“将ECHO脚拉低”这操作我看不懂,这脚是输入脚,拉低操作有效?有必要拉低?
“捂住HC-SR04”具体情况我没试过,估计由于盲区问题会使 ECHO脚的宽度变得很宽,下降沿估计在TIM3中断之后了,或者就没有下降沿。建议楼主监测下DHT11_time_up,看这种情况下它是否还在加。
对了,主循环里DHT11_ReadAndShow是不是操作了LCD?外中断也操作了LCD,极有可能冲突,建议LCD操作集中在主循环。
|
|