步骤一 准备材料
1,stm32开发板
2,us-100超声波测距模块
3,oled屏幕(用于显示)
4,杜邦线若干(连接用)
/电脑啥的就不说了/
步骤二 硬件连接
一,看图(原理图)连线
注意:我在这使用的是串口测距模式,所以此跳线帽必须插上
注意:TX与单片机串口TX连,RX与串口RX连
测距模块连好之后我们再来连OLED(只是为了显示用,也可以用串口发送到上位机在电脑上看)
这是端口定义,采用SPI,为了方便用了PD2-6六个连续的引脚,把屏幕对应连接就好了
注意:此工程用的是cube配置生成的代码,开发板使用的是正点原子F4的开发板,(如果相同可以直接把程序拿过去用)关于cube配置和代码讲解在第三四部分
现在我们假装已经连好了,效果如下(有点乱哈哈)
步骤三 cube配置部分(不用cube用库函数也一样)
1-配置串口
在这里用的是串口2(串口1我自己调试的时候用的,不用管)
1-mode选择Asynchronous(异步模式)
2-parameter Settings,只需要把波特率改成9600就行,其余默认。
(改成9600的原因是需要以9600波特率向测距模块发送0x55,其才会工作)
2配置GPIO(给oled用)
配置结果如下(根据自己情况配置和连线)
配置完这两个就可以生成代码了,(注意路径不要包含中文字符),然后开始快乐的程序环节。
步骤四 程序讲解部分
oled部分和cube自己生成的就不讲了,主要说一下关于测距模块的部分。
定义部分
都有注释,就不说了。
主函数部分
110行处为开启接收中断,在接收到数据时,会进入接收中断,第一个参数是串口号,第二个参数是存放数的地址,第三个参数是接收数据的个数。注意此函数要在中断回调函数中调用,否则只会执行一次,就是只能接受到两个数据后面就不再进入中断了。
回调函数部分
上面用到的几个关于串口的函数都可以在hal库里面uart.h里面找到。关于发送和开启接收中断直接用就行,回调函数需要自己写。(不理解回调函数的可以去百度一下,简单看来就是进入中断这个函数会被执行)
步骤五 原理及整体思路讲解
原理部分(应该放在最开始?懒得改了哈哈)
在串口模式下只需要在 Trig/TX 管脚输入 0X55 (波特率 9600),
系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回波信号。
当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过 Echo/RX管脚输出。
输出的距离值共两个字节,第一个字节是距离的高 8 位
(HDate),第二个字节为距离的低 8 位(LData),单位为毫
米。即距离值为 (HData*256 +LData)mm。
程序思路
在while(1)里面一直发送0x55给测距模块,模块就会返回两个八位的数据,分别是距离的高八位和低八位,单位mm,每次接收到返回的数据时都会进入中断把返回的数据保存下来,然后在while(1)里面对数据进行处理和显示。(思路很简单,我却弄了好长时间,好想哭)
步骤六 成果验收
emm一个人不太方便拍,几十厘米(多的没验证,据说可以测四米)内还是挺准的,误差大概几mm吧。