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

查看: 5200|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版