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

查看: 5198|回复: 29

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

[复制链接]

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2015-11-19 14:35:47 | 显示全部楼层 |阅读模式
本帖最后由 星辰一方 于 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();函数不能出现在中断中!
重要的事情说两遍!


评分

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

查看全部评分

回复

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2015-11-20 08:54:18 | 显示全部楼层
HAL_Delay(1)放在中断中也应该没问题,问题的关键是你按键的中断优先级比SYSTICK的优先级高,所以才导致延时没法进行。生成代码时默认SYSTICK的优先级应该是最低的。
回复 支持 1 反对 0

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
 楼主| 发表于 2015-11-19 14:37:48 | 显示全部楼层
工程文件奉上~!

007.rar

下载

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

回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2015-11-19 16:55:11 | 显示全部楼层
多谢分享。。。。辛苦了
STMCU-Logo.png
回复 支持 反对

使用道具 举报

9

主题

436

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-9-20
发表于 2015-11-19 19:21:03 | 显示全部楼层
谢谢lz 怪不得老是进HAL_Delay()就卡死,这下有救了
回复 支持 反对

使用道具 举报

2

主题

397

回帖

0

蝴蝶豆

高级会员

最后登录
2016-12-21
发表于 2015-11-19 20:54:51 来自手机 | 显示全部楼层
超声波模块超声波模块
回复 支持 反对

使用道具 举报

41

主题

2476

回帖

282

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-11-19 22:05:52 | 显示全部楼层
很详细,,顶
回复 支持 反对

使用道具 举报

10

主题

379

回帖

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2015-11-20 08:40:09 | 显示全部楼层
兄弟学习能力很不错
stmcu.png
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
 楼主| 发表于 2015-11-20 19:53:14 | 显示全部楼层
creep 发表于 2015-11-20 08:54
HAL_Delay(1)放在中断中也应该没问题,问题的关键是你按键的中断优先级比SYSTICK的优先级高,所以才导致延 ...

原来如此,只知道冲突,没去管它,多谢大神指点!
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
 楼主| 发表于 2015-11-20 19:53:44 | 显示全部楼层
安臣 发表于 2015-11-20 08:40
兄弟学习能力很不错

是我看错了么兄台你的头像……
回复 支持 反对

使用道具 举报

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