二、初步了解各个外设硬件
在我们确定好要实现的功能后,我们要找到实现功能所对应的模块,然后将他们的功能简要列举出来
这里我举几个我使用过的硬件的例子,将它们的简单功能以及物理特性罗列一下,在脑子里要清楚
1、OLED模块
对于OLED模块大家应该很熟悉,它对于程序的调试有很好的帮助以及有显示信息等功能,四脚OLED有SDA、SCK、VCC、GND,两根数据线两根电源线,使用IIC通信实现,现在的产品基本都会有显示屏,所以这个也是必不可少的
2、GPS模块
一根天线加一个解析模块,有VCC、GND、TX、RX、PPS,这里的PPS引脚是GPS特有引脚,是GPS模块上的一个特殊引脚,它用于输出每秒一个的脉冲信号,这个信号与UTC时间同步,具有非常高的精度和稳定性
3、MPU6050模块
MPU6050模块是一个6轴的陀螺仪芯片,它是使用IIC通信实现的,由3轴加速度计和3轴陀螺仪传感器,分别测量X、Y、Z轴的加速度以及X、Y、Z轴的角速度
它有VCC、GND、SCL、SDA、XDA、XCL、AD0、INT,其中XDA、XCL就相当于SDA和SCL,INT引脚是中断引脚,可以产生中断信号,可以用来触发中断
4、超声测距模块
超声测距模块功能就是测量物体与模块之间的距离,有GND、ECHO、TRIG、VCC,ECHO和TRIG分别是回响引脚和触发引脚,TRIG引脚用来触发超声波测距模块开始测距,ECHO引脚用来接收并输出超声波从发射到被障碍物反射回来并被接收的时间信息
5、温度测控模块
温度测控模块没啥好说的,就是一个温控电阻,然后可以测量实时温度,有VCC、DQ、GND,DQ引脚是DS18B20等温度传感器的数据输入输出引脚,用于传输温度数据等数字信号
6、语音模块
语音模块就是在特定任务下,中断所要执行的程序,比如说摄像头监控到行人闯红灯,这时,喇叭就可以播报:有人闯红灯了,禁止闯红灯!也就是起到一个警示和提醒的作用
这块芯片引脚比较多,说几个重要的,SPK 和SPK-是外接喇叭引脚,M 和M-是外接咪头,也就是麦克风引脚,然后有VCC、GND等
7、SIM模块
因为我们的项目是一个贴近生活的项目,所以会用到SIM模块,用以报警或将信息传递给指定号码
8、按键模块
按键模块用以触发中断,一般有几个按钮就有几个 1个引脚
三、查阅资料
一般在购买硬件之后商家会给我们发一个资料包,商家不发我们也可以直接要,或者直接从网络上找
1、查看手册
一般在刚开始上手硬件之前我们要先翻阅一下手册,第一遍看手册主要是看一下各个引脚的协议,简略的知道它们的连接方法,以及电气属性,其实简单来说就是别给弄坏了就行,保持正确的连接,这样方便我们进行调试
2、查找例程
在资料包中找到这个附带的例程,然后将它下载到单片机里跑一跑,然后我们自己来调试一下,保证程序正常运行,也就是裸机开发,将所有需要该模块实现的程序都移植到一个裸机程序中,实现我们预期的效果,这样这一步就OK了
打开核心板的手册,查看每个引脚对应的协议,修改例程中的某些引脚,避免出现多个设备要共用一个引脚的尴尬局面,这都是要提前规划好的
四、研究硬件功能
挑几个用的比较多的模块解析,其中能用到的比如说串口助手
1、OLED模块
OLED模块就是用来显示图片、数字、文字等的,但是因为单片机它并不是计算机,我们在VS上建一个项目,写一个printf就能直接把文字和数字打印出来,再搭配上数学公式,就可以显示一个精美的图形,在单片机上控制OLED屏幕显示就是控制它的像素点亮灭从而达到视觉上的效果,这时候我们就需要一个文件专门用来存放这些像素点组合起来的文字数字以及图片,然后用一个多个二维数组来维护,但我们怎么知道哪些像素点可以组成文字数字和图片呢,这时我们就可以用到取模工具
要是想要生成图片,就是下面这个图形模式
其实取模软件上面都自带教程的,我这里就不赘述了
获得的点阵数据存储到数组当中,按照循环打印的方式让像素亮起,这样就在视觉上形成了自己想要的图像
如此一来这个图像的生成就可以用来做我们优先级最低的一项任务,用来显示一些固定的图像,就像游戏机的开始界面,不按按钮就一直显示,按下某个按钮就会进入中断,然后程序跑到游戏任务里面执行游戏界面
2、GPS模块
调试这个模块的时候需要用到USB转TTL
就是个东西,可以将USB协议转为TTL协议,那么有人会问了:USB我知道,我们平常用的U盘、很多数据线上的插头都是USB的,TTL是什么?
TTL是一种电子电路中的逻辑电平标准,它使用晶体管进行逻辑电平转换,USB转TTL模块的作用是将计算机上的USB接口的信号转换为TTL电平的串口信号,以便与其他支持TTL电平标准的设备进行串口通信,也就是说是计算机与单片机进行串口通信的桥梁
然后请上我们配套的串口助手
串口助手可以实时接收到来自模块的信息,然后将信息显示甚至保存在文件当中,然后可以对比着商家给的资料就可以解析出经纬度,由于数据涉及到个人位置的隐私问题,就不拿出来举例了,不管是GPS还是北斗定位,它都会涉及到协议问题,再参照使用手册就可以很好理解这个模块的功能,一般这种模块的手册都是很简单的
3、MPU6050模块
这个模块在很多产品中都会用到,像电赛的循迹小车题等的都会用到,只要是要检测运动状态的产品中都会存在这个模块,这个模块很小,有八个引脚大致可以分为四个模块,一个是电源线(VCC、GND),一个是IIC通信线(SDA、SCL、XDA、XCL),一个是中断控制线(INT),一个是地址线(AD0)
电源线就不必多说了,VCC可接3.3V或5V
SCL:I2C通信的时钟线,用于同步数据传输,在I2C通信中,SCL由主设备控制,用于确定数据传输的速率。
SDA:I2C通信的数据线,用于在主设备和从设备之间传输数据。在MPU6050中,SDA引脚用于接收和发送数据
XDA和XCL:这些是MPU6050的辅助I2C接口引脚,用于连接其他外部设备或传感器,并非所有版本的MPU6050都包含这些引脚,具体取决于模块的封装和配置,效果与SCL与SDA相同,目的是将其他设备也挂载到IIC总线上
INT:中断引脚,可用于输出中断信号,当MPU6050检测到特定事件(如数据就绪、超出阈值等)时,可以通过该引脚输出中断信号,通知主控制器进行相应的处理
AD0:地址选择引脚,用于设置MPU6050的I2C地址,通过将该引脚连接到VCC或GND,可以选择不同的I2C设备地址,从而允许在同一I2C总线上连接多个MPU6050模块而不会发生地址冲突
4、语音模块
语音模块的使用可以是外接一个喇叭,或者一个喇叭一个咪头,对于语音模块的使用还是按照步骤来,发来的资料包中看手册看功能,然后再在网络上搜索,这里调试硬件也是需要USB转TTL,可以极大程度的方便我们使用模块,不过这里我们用到的功能是烧录
按照教程的说法,我们可以在某平台上进行固件下载,未来我们要输出的语音指令就可以是对应固件的,比如说固件的语音输出的包头包尾我们可以写在单片机程序当中,然后再在中间加入要语音输出的内容,这样我们就可以很好的将该模块适配到单片机上
网上教程有很多,对于入门使用很详细,入门之后自己挖掘就可以了,这样一个固件就下载好了,这个模块也就调试好了,当然编写程序的时候一定要看这个固件的协议是什么样的,以便对症下药
我所使用的芯片是SU-03T,是一款较普遍且稳定的语音模块芯片
下载是用的烧录工具,在网上可以找到烧录教程
固件对每个引脚都有配置的参数,用户可以自行调整,如果装载着咪头,还可以进行语音唤醒,语音识别后进行相应的操作,这样可以做一些智能家居、智能遥控器、智能音箱啥的
写到这里我突然明白了为什么现在的企业对于这些智能家居、智能小车那么不感冒了,实现的原理在我们梳理模块功能的时候就能将一个小项目给规划出来,包括智能门锁这样的项目,我在网上看到过教程,裸机开发就能搞定,只需要4*4的按钮,这样的项目还不如做一个小型的游戏机,起码小型的游戏机里面的游戏逻辑也就是代码部分要求还是比较高的,像我C语言项目里面的贪吃蛇游戏就可以进行修改然后做成小游戏机
但进行一些类似上面所说的小的项目实践对于深入了解STM32的各种外设是帮助很大的,因为软硬结合的这种工作是需要动手实践的,只看教程和书本是效率很低的一种行为,练手是可以的,搬上台面就没啥竞争力了