【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(6)

Hi٩(๑ ^ o ^ ๑)۶,各位深海王国的同志们,早上下午晚上凌晨好呀~
辛勤工作的你今天也辛苦啦(o゜▽゜)o☆

今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go!

(6)uart串口通信与其他通信和Arduino程序下载失败的问题

经过了前五节,相信大家对Arduino如何使用已经很熟悉了,那么从今天这节开始,我们将会更加深入地了解嵌入式与单片机,相信大家都已经准备好了,加油!

什么是单片机通信?

我们之前介绍过,嵌入式系统就好比我们房子的管家,单片机就好比管家的大脑(见(1)单片机的介绍与嵌入式基本知识)。
同时,在高中生物中我们学过,大脑是通过神经元控制我们的四肢,而神经元之间通过电或化学信号传递信息。

在这里插入图片描述

(图片来源于网络,侵删)

我们单片机之间的通信跟它们是一样一样的,比如我这边发送个高电平1,你那边就开灯,我这边发送个低电平0,你那边就关灯,这就是单片机之间的通信。

就像管家有手有脚,有鼻子有眼一样,在一个单片机系统里,总会有各种各样的外设:视觉传感器就好比管家的眼睛,温度传感器是皮肤,超声波传感器是耳朵等等等。

那么管家的大脑,也就是单片机,就需要和他们进行通讯来获取或写入数据;有的时候单片机还需要跟另一块电路板上的单片机(另一个管家)通讯;甚至有时还需要跟电脑进行通讯,比如我们下载程序的时候。

在这里插入图片描述

(图片来源于网络,侵删)

那么在这些通讯的过程中,就产生了不同的通讯方式。

在本系列第二节(2)初识Arduino与基本单片机电路知识中,我们在Arduino的通信引脚一栏中可以看到arduino支持的几种通讯方式有:

  • I2C通信:A4(SDA)和A5(SCL)引脚用于与I2C/TWI设备进行数据通信。
  • SPI通信:通过数字引脚10(SS)、11(MOSI)、12(MISO)和13(SCK)进行SPI通信。
  • 串行通信:引脚0(RX)和1(TX)用于TTL(Transistor-Transistor Logic)串行通信。

这三种也是单片机最常见的通讯方式,其中最简单最常用的就是串口通讯啦,现在我们分别来讲一讲他们的区别与优势。

uart串口通讯:

串口通讯到底有简单呢,众所周知把大象装进冰箱要三步,在arduino上使用串口通讯比把大象装冰箱还简单,只需要两步:

  1. 打开串口设置波特率Serial.begin();
  2. 发送数据Serial.print();

就怎么简单。然后如果你觉得发送的太快就用delay();函数延迟一段时间再发送。
在这里插入图片描述

如图,只需要怎么几行代码就可以给其他设备发送hello world了。
这个通讯其实只需要两根线(算上地线是三根)就能实现,一根发送T (Transmit),一根接受R(Receive)。
这里一定要注意,需要共地,共地,共地!至于什么是共地,为什么要共地,请看本系列第二节(2)初识Arduino与基本单片机电路知识

在这里插入图片描述

这两根线是相互独立的,也就是说我们能同时进行数据的发送与接受。是不是很简单?
但串口通讯也有一些缺点,比如通信速度慢,只支持一对一通信等。同时因为串口通信使用的是TTL电平,所以也不能远距离通信。

什么是TTL电平呢,这种专业术语乍一看很唬人,实际上就是大家提前约定好了在这个电压标准中什么是0什么是1:
在TTL电平标准里:

  • 0V到0.8V的电压被认为是低电平(表示“0”)。
  • 2V到5V的电压被认为是高电平(表示“1”)。

SPI通讯:

串口通讯通信速度慢,通常情况下,我们使用的最高波特率也就是115200(即11.25KB/s),这个速度下,哪怕你只是下载1个G的游戏。都要下19个小时。

速度慢,究其原因就是因为双方的通讯收到波特率的限制,波特率高,意味着频率越高,对时钟的精度也越高,再高就容易误码了。

那么什么是波特率呢?

这里需要注意哦,波特率并不是简单的速率,不直接等同于数据传输速度。

简单来说,如果你用闪光灯向朋友发送莫斯电码,你闪光的快慢(多久闪一次)决定了你的“波特率”。如果1秒钟能闪5次,那么波特率就是5。但这并不意呀着你每秒能发送5个字母,因为每个字母的莫尔斯电码是不同的,有的长有的短,所以实际能传送的字母数量可能会更少。波特率只是告诉我们信号变化的速度,实际传输的数据量还得考虑每个信号变化能携带多少信息。

更具体一点,波特率是衡量数据传输速度的一种方式,指的是每秒钟传输多少次信号变化。每次信号变化能够携带的信息量取决于系统的设计,但波特率本身关注的是信号变化的频率,而不直接关注信息量的多少。

那么有什么办法能解决传输速率慢的问题呢?

我们可以多加一根时钟线CLOCK,这样双方就不需要约定速度,发送端发送数据的同时,CLOCK这边也发送一个上升沿,就好像喊了一句话让你准备开始接收信号了。当接收端CLOCK线接收到上升沿时,听到有人喊他时,就去数据线上开始接受信号,这样是不是快多啦?

在这里插入图片描述

(图片来源于网络,侵删)

没有了波特率的限制,SPI通讯的速率可以轻松突破10M,所以大家可以观察一下,如果手边有像SD卡模块、屏幕模块这样数据传输量大的硬件外设,一般上面都有CLOCK时钟线。

I2C通讯:

接下里我们来了解一下I2C通讯,I2C主要解决的就是一对多通信的问题,假如我们的系统里有很多个传感器,那么就需要多个串口去挨个连接,这样就很浪费资源,所以就衍生出了I2C通讯,它最大的优势就是支持多设备通讯。

在这里插入图片描述

(图片来源于网络,侵删)

一共就两根线一个时钟线CLOCK和数据线DATA,这两根线也叫总线,所有设备都连接在这上面,每个设备都有自己独立的ID,单片机想要和谁通讯,按照指定通讯协议在总线上呼叫一下对方就可以:

“老李,给我发数据”,“老王,准备接受数据”。

这样就可以实现指定设备的数据发送和接受啦。而其他设备会自动忽略这些指令,是不是很方便呀?

Arduino程序下载失败的问题:

关于通讯方面的了解到这里就差不多啦,接下来我们来聊一聊在使用串口时的Arduino程序下载失败的问题。

我们现在已经知道了Arduino UNO开发板只有一个硬件串口,引脚号为0和1,同时我们想通过电脑给Arduino开发板下载程序的时候,也要使用这个唯一的硬件串口,这时候就出现了串口冲突问题。

在这里插入图片描述

也就是说,如果我们Arduino开发板的0、1号引脚接线了,想给Arduino下载程序,就需要先将0、1号引脚的线拔掉再下载,程序下载好以后才能接回去。

否则就会出现这样的报错:Failed uploading: uploading error: exit status 1,意思就是我们下载出错。

在这里插入图片描述

出现问题的原因与解决办法:

  • 硬件串口被占用,把0、1端口上的线拔掉再下载;

  • 板子的型号、或者连接的端口号选择不对,如何选择正确端口号见(4)CH340驱动安装与Arduino程序下载;

  • 电脑端口坏了或者接触不良,换一个端口试试;

  • 打开了串口监视器,关掉串口监视器重新插一下线下载;

这可是刚入门Arduino时最容易出现的问题,看看你是否中过招?

同时还需要注意当我们使用到I2C功能时,Arduino的A4、A5引脚是不能再作为模拟输入引脚使用的(关于模拟输入引脚的用法我们下节会讲),它们与Arduino的数据线SDA、时钟线SCL一齐构成了Arduino的I2C总线。

同样的还有SPI,如果想使用Arduino的SPI通信就要占用掉Arduino的10、11、12、13号引脚,大家也要注意一下哦。

文章的最后,大家可能会有疑问:每次下载个程序还要插拔线?太麻烦了吧,大都督。有没有什么更简单的方式解决串口占用这个问题呢?

当然是有的啦,在之后我们会讲到的软串口就能从编程层面解决这个问题,不过今天的学习到这里就差不多啦,辛苦啦~

哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!

(◍˃̶ᗜ˂̶◍)✩ 我深海大都督正式授予你深海王国公民的身份~

(・ω< )★ 加入深海大家庭,快乐摆烂每一天!

  • 35
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海大都督

建设深海,没你不行!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值