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

【NUCLEO-L476RG开发】+传感器系列第三贴——玩转超声波测距  

[复制链接]
星辰一方 提问时间:2015-11-19 14:35 /
本帖最后由 星辰一方 于 2015-11-19 14:35 编辑

超声波模块,相信很多人都用过,不难调试,但是这次我却栽了个大跟头!连续调了两天,建了10多个工程才弄下来,下面先来讲下详细过程,后面再讲这次心得体会!
实验内容:使用HAL库,实现超声波测距,并将距离用于LED亮度调节,距离越短,LED越暗,同时串口输出距离,单位mm;
工程创建过程:
【1】创建工程,配置TIM2的CH4为输入捕获,连接超声波模块的Echo引脚,用于捕获脉宽;
005.jpg
【2】配置TIM3的CH1为PWM输出模式,用于连接LED,调节LED亮度;
010.jpg
【3】打开UART2,异步,并配置PB12为推挽输出,连接超声波模块Trig引脚,用于超声波触发;
015.jpg
【4】配置TIM2参数,打开TIM2中断,并配置预分频79,周期59999,触发方式选择上升和下降沿触发,如下图:
020.jpg 025.jpg
【5】配置TIM3,打开中断,并配置预分频与计数周期,配置占空比,如下图:
030.jpg 035.jpg
【6】配置UART2,打开中断,设置8位长度,其他保持默认:
040.jpg 045.jpg
【7】生成工程文件,并打开,找到tim.c中下图选中位置代码,并剪切:
050.jpg
将该行代码粘贴到tim.c下图位置,
055.jpg
然后到 main.c中,在下图位置添加下图阴影部分代码,这一步操作的目的主要是为了在运行过程中修改PWM占空比。
060.jpg
【8】在下图位置处定义下面枚举变量,用于超声波测距过程中,状态识别:
065.jpg 下图代码用于printf重定向,不再详述,
070.jpg
下面几个函数是超声波测距触发、计算距离、延时函数、TIM2捕获中断函数,写在用户代码4区域,别忘记函数声明!
075.jpg 080.jpg
下面是定时器启动函数,卸载main函数内部:
085.jpg
下面是主循环内部函数,主要实现周期测距,并根据距离计算占空比,更新占空比,以改变LED亮度;
090.jpg
硬件电路连接及测试效果:
095.jpg 100.jpg
调试总结:
这个小测试调试比较纠结:
1、首先是cubemx版本问题,不知道4.11+V1.10pack好像有bug,测试按键中断都没成功,找了一晚上原因也没查出来bug在哪里,后来无奈,卸载cubemx4.11,并删除v1.1的pack,然后重装cubemx4.10和v1.0pack,测试通过!就是这样,很神奇,上次调试ADC的时候是4.10有bug,4.11没问题,之前也用过别的板子,从来没碰到过这样的情况,因为开始无论如何想不到这么简单的配置,cubemx还能出问题?
2、然后,同样耗费了我一个晚上的是For_Echo()这个函数中,Trig置位之后要保持一段时间,模块要求好像是40微妙,我想给它来个1ms吧!结果就没多想写了HAL_Delay(1);接下来的情况就是,死活调试不好,因为开始调试时候For_Echo(),被我放在按键的回调函数里面了,也就是说放在中断服务函数里面了!知道今天再看才发现,HAL_Delay();这个函数是不能在中断中出现的!有可能会造成中断冲突!大家引以为戒!很早就了解这个情况,这次大意了!
HAL_Delay();函数不能出现在中断中!
HAL_Delay();函数不能出现在中断中!
重要的事情说两遍!


评分

参与人数 1 ST金币 +30 收起 理由
沐紫 + 30

查看全部评分

收藏 7 评论29 发布时间:2015-11-19 14:35

举报

29个回答
creep 回答时间:2015-11-20 08:54:18
HAL_Delay(1)放在中断中也应该没问题,问题的关键是你按键的中断优先级比SYSTICK的优先级高,所以才导致延时没法进行。生成代码时默认SYSTICK的优先级应该是最低的。
星辰一方 回答时间:2016-1-12 08:48:09
anan2015anan 发表于 2016-1-9 02:12
代码是下载楼主的,串口设置中串口无法选择,打开串口总显示串口被占用或者串口不存在。。。

...

哦也有可能是你没选中串口,看下串口设置里面串口那一栏,选中你的串口,或者也有可能是你的串口调试助手有问题,再或者就只有是你驱动没装好了
星辰一方 回答时间:2015-12-30 19:45:02
馕边子 发表于 2015-12-30 13:57
程序重现,距离误差有点大,呵呵

呵呵……我把帖子发过来,从常理来说就不会发个错的来误导大家,所以有问题自己先仔细查一下,你看看Echo Beginning和Echo Ended这两个数据,虽然没看你代码,你的定时器周期和时钟频率没有和我的设置一致
星辰一方 回答时间:2015-11-19 14:37:48
工程文件奉上~!

007.rar

下载

22.09 KB, 下载次数: 100, 下载积分: ST金币 -1

Paderboy 回答时间:2015-11-19 16:55:11
多谢分享。。。。辛苦了
STMCU-Logo.png
hooke 回答时间:2015-11-19 19:21:03
谢谢lz 怪不得老是进HAL_Delay()就卡死,这下有救了
foxglove 回答时间:2015-11-19 20:54:51
超声波模块超声波模块
埃斯提爱慕 回答时间:2015-11-19 22:05:52
提示: 作者被禁止或删除 内容自动屏蔽
安臣 回答时间:2015-11-20 08:40:09
兄弟学习能力很不错
stmcu.png
星辰一方 回答时间:2015-11-20 19:53:14
creep 发表于 2015-11-20 08:54
HAL_Delay(1)放在中断中也应该没问题,问题的关键是你按键的中断优先级比SYSTICK的优先级高,所以才导致延 ...

原来如此,只知道冲突,没去管它,多谢大神指点!
星辰一方 回答时间:2015-11-20 19:53:44
安臣 发表于 2015-11-20 08:40
兄弟学习能力很不错

是我看错了么兄台你的头像……
星辰一方 回答时间:2015-11-20 19:54:27
pamhood 发表于 2015-11-19 19:21
谢谢lz 怪不得老是进HAL_Delay()就卡死,这下有救了

请看8楼,可以从根源解决问题……
安臣 回答时间:2015-11-20 20:54:55
没看错哦   可以大胆看
orima 回答时间:2015-11-21 11:19:13
多谢分享。
青檬 回答时间:2015-12-23 10:33:43
各种小配件都那里来的?
青檬 回答时间:2015-12-23 10:34:19
手又痒痒了,可惜电脑里连个软件都没有
12下一页

所属标签

相似问题

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