【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

news2024/12/30 4:19:16

在这里插入图片描述

个人主页~

实战项目的实现过程(一)~


实战项目的实现过程

  • 二、初步了解各个外设硬件
    • 1、OLED模块
    • 2、GPS模块
    • 3、MPU6050模块
    • 4、超声测距模块
    • 5、温度测控模块
    • 6、语音模块
    • 7、SIM模块
    • 8、按键模块
  • 三、查阅资料
    • 1、查看手册
    • 2、查找例程
  • 四、研究硬件功能
    • 1、OLED模块
    • 2、GPS模块
    • 3、MPU6050模块
    • 4、语音模块

二、初步了解各个外设硬件

在我们确定好要实现的功能后,我们要找到实现功能所对应的模块,然后将他们的功能简要列举出来

这里我举几个我使用过的硬件的例子,将它们的简单功能以及物理特性罗列一下,在脑子里要清楚

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的各种外设是帮助很大的,因为软硬结合的这种工作是需要动手实践的,只看教程和书本是效率很低的一种行为,练手是可以的,搬上台面就没啥竞争力了


今日分享就到这里了~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCv图像处理: 时域滤波与频域滤波

时域滤波: 空间域滤波的步骤一般如下: 1. 选择滤波器 选择一种低通滤波器,常见的包括: 均值滤波(平均滤波器)高斯滤波(Gaussian filter) 2. 定义滤波器核 根据选择的滤波器类型&…

【卡码网Python基础课 19.洗盘子】

目录 题目描述与分析一、栈二、栈的操作三、代码编写 题目描述与分析 题目描述: 在餐厅里,洗盘子的工作需要使用到栈这种数据结构。 假设你手里有一个盘子堆放区。现在需要模拟洗盘子的过程,每个盘子都有一个编号。 盘子堆放区操作说明&…

同一台电脑上安装不同版本的nodejs(搭配VSCode)

今天拉取了一个前后端分离的项目,运行前端的时候,出现node版本不匹配的情况。 本文章将从安装node.js开始到VSCode使用进行讲解 1、去官网下载node版本 以16版本为例,需要哪个版本,就在网址上把版本号替换即可 https://nodejs.o…

在ADS中使用传输端口参数构建理想元器件模型---以3dB电桥为例

在ADS中使用传输端口参数(S、Z、Y、ABCD)构建理想元器件模型—以3dB电桥为例 本文工程文件下载:在ADS中使用传输端口参数构建理想元器件模型-以3dB电桥为例-工程文件 目录 在ADS中使用传输端口参数(S、Z、Y、ABCD)构建…

8月18日笔记

目标不出网场景 在目标环境完全不出网的情况下,即所有的网络通信如SMB(Server Message Block)、DNS(Domain Name System)甚至包括TCP(Transmission Control Protocol)都不允许与外部网络进行交…

使用极限网关实现 ES 跨集群搜索

使用 ES 的小伙伴,有没有在用跨集群搜索的? 熟悉 ES 的小伙伴都知道,ES 本身就能实现跨集群搜索,那为啥还要聊这个?试想一下,如果集群都上线投产了,才出现跨集群搜索需求,那么可能出…

重磅!RISC-V+OpenHarmony平板电脑发布

仟江水商业电讯(8月18日 北京 委托发布)RISC-V作为历史上全球发展速度最快、创新最为活跃的开放指令架构,正在不断拓展高性能计算领域的边界。OpenHarmony是由开放原子开源基金会孵化并运营的开源项目,已成为发展速度最快的智能终…

Chapter 40 Socket网络编程

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、Socket网络编程二、Socket服务端编程三、Socket客户端编程四、服务端与客户端相互通讯 前言 在现代计算机网络中,Socket(套接字&#xff09…

【题解】—— LeetCode一周小结33

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结32 12.实现一个魔法字典 题目链接:676. 实现一个魔…

Kettle根据时间戳同步数据实现

1 Kettle总体步骤 更多数据实时同步方案,请参考笔者的另一篇博文:大数据时代,数据实时同步解决方案的思考—最全的数据同步总结 由于Kettle自身的特殊性以及在多个步骤中kettle自身处理数据库事务的特殊性,尝试了很多种方案&…

win11内存占用高的解决办法

win11莫名奇妙的总是内存爆满,真的抽象,16g根本不够用。尝试各种方法看看能不能解决… 方法一 关闭快速启动 win11系统,自带快速开机功能,可能用较大内存,关闭看看。控制面板找到电源设置关闭快速启动。 如果没找到要…

C++ | Leetcode C++题解之第345题反转字符串中的元音字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string reverseVowels(string s) {auto isVowel [vowels "aeiouAEIOU"s](char ch) {return vowels.find(ch) ! string::npos;};int n s.size();int i 0, j n - 1;while (i < j) {while (i < …

Leetcode JAVA刷刷站(48)旋转图像

一、题目概述 二、思路方向 要在原地顺时针旋转一个 n x n 的二维矩阵 90 度&#xff0c;你可以通过一系列交换操作来实现。这里的关键在于理解旋转后的矩阵与原矩阵之间的元素对应关系。 假设原矩阵为 matrix&#xff0c;其中 matrix[i][j] 表示第 i 行第 j 列的元素。旋转 90…

【每日一题 | 数据结构】压缩矩阵存储算法

题型方法讲解 首先明确&#xff0c;压缩矩阵存储算法是408考试中的重点、难点、高频考点&#xff0c;甚至曾经达成了连续五年考到程度&#xff0c;让同学们感到恐惧。很多同学都会把这类题型当成一个记公式的题&#xff0c;其实不然&#xff0c;这个视频将会告诉你如何用推导的…

485总线常开+常闭,8路C型继电器输出模块DAM-3018CA

阿尔泰科技 型号&#xff1a;DAM-3018CA 概述&#xff1a; DAM-3018CA为8路C型继电器输出模块&#xff0c;每通道具有LED指示灯指示&#xff0c;RS485通讯接口&#xff0c;带有标准ModbusRTU协议。配备良好的人机交互界面&#xff0c;使用方便&#xff0c;性能稳定。 产品图…

Leetcode JAVA刷刷站(50)Pow(x, n)

一、题目概述 二、思路方向 方法1&#xff1a;递归&#xff08;考虑正负n&#xff09; 这种方法利用递归的思想&#xff0c;将问题分解为更小的子问题。同时&#xff0c;考虑到n可能是负数&#xff0c;我们可以先处理n的符号&#xff0c;然后将问题转化为正数幂的问题。 publi…

24/8/15算法笔记 复习_决策树

#手动计算决策树到底是如何实现分类的 p1 (y N).mean() p2 (y Y).mean()p1 * np.log2(1/p1) p2*np.log2(1/p2)X[真实用户] y x X[日志密度].unique()#.unique() 是一个方法&#xff0c;它返回一个数组&#xff0c;包含 X[日志密度] 列中所有不同的值。 x.sort()#排序 print…

读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读

1. 基本信息 零信任网络&#xff1a;在不可信网络中构建安全系统 道格巴斯&#xff08;Doug Barth&#xff09; 著 人民邮电出版社,2019年8月出版 1.1. 读薄率 书籍总字数252千字&#xff0c;笔记总字数73194字。 读薄率73194252000≈29.5% 这个读薄率是最高的吧&#x…

客户端登录逻辑

将网关服务器发送的数据通过信号传递给 TcpMgr 中定义的槽函数 void LoginDialog::initHttpHandlers() {// 注册获取登录回包逻辑m_handlers.insert(ReqId::ID_LOGIN_USER, [this](QJsonObject jsonObj){int error jsonObj["error"].toInt();if(error ! ErrorCodes:…

Superset BI封装自定义组件(堆叠柱状图)

目录 前言 封装步骤 一、创建组件文件夹 二、预设组件信息 三、使用组件 往期回顾 前言 Superset 是一个现代化的、易于使用的、轻量级的数据可视化工具&#xff0c;它允许用户通过简单的点击操作来创建和分享图表。如果你想在 Superset 中创建自定义组件&#xff0c;你…