粉丝5.8万获赞17.5万

在一个单片机系统里,总是会有各种各样的外设,比如说 sd 卡加速度传感器、屏幕、 gps 温湿度传感器等等,那单片机需要和他们通信来获取数据,或者说给他们写入数据,那有的时候呢,单片机还需要和另外一块电路板上的单片机系统,甚至是电脑进行通信, 那在这些通信的过程中,就需要用到不同的通信方式,常见的有于 a r t i 方 c s p i i s 二三二等等。 所以我们为什么需要这么多不同的通信方式呢?他们各自的应用场景又是什么呢?那在这里面你最熟悉的应该就是 uvit 了,因为大部分人入门单片机时,最早接触的也就是他, 俗称串口,通信初始化之后,只需要这么一行代码就可以给其他设备发送 hello word 了,用于调试非常的方便。它的物理层其实就是两根 线,一根发送,一根接收,双方约定好通信的速度,比如说九千六百 bps, 然后以这种数据包的形式给对方发送数据,一次呢,发送八位,也就是一个字节的数据, 你可以发现他的两根线是相互独立的,也就是说两边可以同时发送数据给对方。那看上去串口这种通信方式非常的不错,简单方便。 但是其实他也有一些缺点,最主要的有三个,第一个是不能远距离传输信号,第二个是通信速度有点慢,第三个是原则上只支持一对一的通信,不能支持一对多的通信。 那针对以上这几个问题呢,就分别衍生出了一些其他的通信方式。首先说一下 rs 二三二和 rs 四八五,那因为创口通信使用的是 ttl 电瓶,所以他只能在很短的距离内做通信,一般就认为是在同一块电路板上的 两个芯片,或者是两块距离很近的电路板之间,否则的话信号非常容易受到干扰。那如果要进行远距离通信,就需要加入专门的芯片来对信号进行抗干扰的处理, 这就衍生出了 i s 二三二和 i s 四八五通信,那像二三二最大通信距离可以支持到三十米左右,好, 四八五的话最大通信距离甚至可以超过一千米。同时呢,四八五还增加了一对多的通信功能。所以虽然四八五比在座的大部分人年纪都要大,但是凭借着简单易用又稳定的性能,在很多领域依然被广泛使用着。 然后说回 uvit 的第二个缺点,通信速度慢。大部分情况下,我们使用的最高创口波特率也就是幺幺五二零零,那这个速度下一小时都写不满一张六十四兆的 sd 卡,那究其原因,其实就是因为他的通信需要双方约定波特率,那这是一件不太靠谱的 事情。因为早期单片机频率比较低以及时钟精度的问题,所以双方的波特率并不可能做到完全的一致,传输速度太快的话很容易雾满。那解决这个问题的办法就是加入一个 clock 信号,双方不需要约定具体的通信速度,发送端发送一个比特数据时,只需要同时给一个 clock 的上升沿, 接收端这边收到上升营的信号后,就去数据线上拿数据,这样就完全不依赖于系统时钟的准确度了,单纯靠时钟来做信号的同步, 所以 spi 的最高通信速率可以轻松的突破十兆。那像 sd 卡屏幕这种对通信速度有要求的外设,很多都会使用 spi 接口。最后说一下串口的第三个问题,就是原则上不支持一对多的通信, 如果你的系统里有很多个传感器,那就需要多个窗口去挨个连接,这样就很浪费资源。所以由此衍生出来 iphone c 通信, 它最大的优势就是支持多设备互相通信,一共有两根线,一根是数据,一根是 clock, 他们构成了一个信息通道,成为总线,所有的设备都挂载在这个总线上,每个设备都有一个自己独立的 id, 那当片机想要跟任意的设备通信时, 只需要按照特定的通信协议在这个总线上吼一嗓子,哎,几号设备给我你的数据,那这个时候其他的设备听到不是在叫自己,就会自动的忽略掉这个指令,而被叫到的设备就会上传对应的数据。 不过也正是因为有了总线的概念,所以 iphone c 通信协议也相对前面几个要复杂一些,而且还有一些高级功能,比如说支持多主通信什么的。那看到这里,今天的视频也就差不多结束了, 不过依然残存了很多的问题,比如说为什么 u a r t 的 t t l 电瓶不支持远距离通信,同时它又为什么不支持一对多的通 信?这么连接不可以吗?而方西通信的具体通信协议又是什么样子的?那这些问题我也会在后面的视频里单独给大家挨个介绍,今天的视频我们主要记住每种通信方式适用的场景就可以了。那今天视频就到这里了,如果你觉得你有帮助,别忘了关注和参联,我们下期再见。拜拜。


单片机中最常用的通讯协议有 iphone c s p i 和 u a r t。 我们已经学习了 iphone c 和 spi。 这节课我们来学习 u a r t, 也就是串口通讯。 串口基本上是所有单片机中都具备的外设,使用它可以实现程序下载、串口通信等功能。由于这个串口通信他简单方便,现如今越来越多的设备和模块支持串口通信功能,这也让开发工作变得越来越简单而且高效。 这节课我们来学习如何使用 micropicent 控制 e s p 三二的创口实现数据收发。 要了解窗口通信,首先就要了解串形通信和并行通信。并行通信就是说我们的数据字节用多条数据线同时开始发送,这种传输方 是只适合短距离传输,而且呢,这种传输方式使用的比较少,长距离传输成本高,所以我们只需要简单了解即可。 接着是串行通信。串行通信呢,是将数据字节以一位一位的形式在一条数据线上逐个传输,只需要一条数据线就可以了。发送时呢,要把并行数据变成串行数据发送到线路上,接收时呢,再把串行数据变成并行数据。 而关于串行数据传输,他也分为两类,异步串行通信和同步串行通信。同步串行通信使用比较少,一般也不会用,不了解也没关系。 而一定要了解的呢,是翼步串行通信方式。翼步通信是指通信的发送与接收设备使用各自的时钟控制数据的 发送和接收过程。为使双方收发协调,要求发送和接收的设备始终尽可能一致,一不通信是以字符构成的真为单位进行传输的,字符与字符之间的间隙,也就是时间间隔,是任意的 异步通信的一针字符信息呢,由四部分组成,首先就是这个起始位,接着是数据位,即有教验位和停止位。一般啊,我们也不需要使用这个教验位,但是串形通信他偶尔也会使用一下 教验位,由名字我们就可以知道,就是说看你这针数据有没有错误。在我们的串行通信中,一般使用基偶教验,基教验时就是数据中的一的个数,与教验位的和是基数就是基教验,反过来呢,就是偶教验。 接收字符时,我们通过对一的个数的教验,如果发现一的个数不一致,那么就说明数据传输过程中出现了错误。 那所以什么是 uart 呢? uart 的全称是通用一部收发传输器,它的工作原理是约定好通讯的波特率,然后将数据一位一位的进行传输。 e s p 三二呢,它有三个硬件, u r t, 分别是 id 为零一二,而且呢,它们每个都分配有默认的 g p l 口,比如这个 u r t 零对应的就是发送端是 g p l 一,接收端是 g p l 三, u r t 二呢,就是十七十六。 这 u r t 零呢,主要用于下载和交互式解释器调试,也就是 riple。 而 u r t 一呢,用于模块内部连接, flash 工厂 也不使用,而因此可以使用的也就只有 u a r t 二,它可以和外部的串口设备进行通信。 了解完基本原理之后,我们就可以来设计电路了,咱们这个电路呢,设计的比较简单,只需要用到一个串口模块和杜邦线。 我们把这个 esp 三二的 rx 二引脚和创口模块的 tx 引脚相连,把这个 esp 三二的 txr 引脚连接创口模块的 rx。 因为我们单片机发送数据,这个创口模块要接收对不对?而我们这个创口模块发送数据,这个单片机要接收,所以要让 rx 连接 tx。 最后就是让这个创口模块的接音地接上电源地就 ok 了。 这个 u v r t 呢,它也是在某信模块中,我们只需要了解它的构造函数和使用方法即可。 它的构造函数呢,有这么几个参数,第一个是 id, id 呢,咱们刚才说了对不对? esp 三二有三个硬件 ult, 分别是零一二,但是我们也只说了这零和一不能用,我们也只能用二。 接着是波特律,波特律常用的值就是幺幺五二零零和九六零零。关于波特律哈,就单片机或者计算机在串口通讯时的速率,就用波特律来表示, 它定义为每秒传输二进制代码的个数,即一波特等于一位,每秒单位就是 b p s。 关于波特率的计算,在串行通信中,收发双方对发送或接收数据的速率要有约定,我们的电脑可以使用这个串口调试工具来设置我们电脑的参数,而我们的 esp 三二单片机呢,你就 只能通过代码的形式了。接着是 rx 和 tx, 他们分别是这个数据的接收引角和发送引角,我们定义了这个 id 之后,就相当于已经指定了这个收发引角了,所以他们两个不填也可以。 接着是这个 b 词, b 词就是数据位,他的默认值为八,就是在数据包的起始位之后,紧接着的就是要传输的主体数据内容,也称为有效数据,这有效数据的长度呢,通常为八或者是九,这个看你自己设置了 倒数。第二个就是 party, 也就是教验位,默认是耐,最后一个就 stop, 也就是停止位。默认是一,通常呢,我们只需要定一个波特率和 id 就行了,其他的都是默认参数,对不对? 然后是 uvrt 的常用方法,第一个我们就不多说了,就是如何构建 uvrt 的对象。第二个呢,就是我们使用 uvrt 如何发送数据呢?就是用 read 方法,它的参数就是我们要发送的内容。然后 read 方法呢,它是要接收数据参数,填写的是我们要接收的数据的最大长度。最后一个就是 any, 用于判断我们这个串口是否有数据输入,接下来我们就可以敲代码了。 接下来呢,我们让这个单片机末串口来发送数据,那就由 r t 点 ret 发送一个内容,我们比如写个哈喽 运行,我们看一下,咱们看啊,右边是不是就接收到了我们发的哈喽,那我如果想在这里发送信息给我们的 esp 三二开发版,那你想想我是不是得一直在接收他,对不对?所以我们这个获取创口助手发过来的信息的话,就需要写在一个循环里面,就一个 yo 处, 我们需要不断的扫描你有没有发送这个信息,条件是什么呢?条件就是如果有 u r t 点 any, 如果有数据输入,那么我就用 text 这个变量来接收发送过来的数据,我们试这个长度二十。 接着我在笑中打印这个 text, 我们看一下,这里我重新运行了,他重新发了一遍,哈喽,我给他发一个 i 发送,哎,咱们看 high, 我是不是就接收到了? 这样我们就实现了单片机与 pc 端的这个创口助手进行数据收发,是不是很简单?其实有一个问题啊,就是我们需要一直不断的循环去扫描到底有没有数据输入,这样很占用性能对不对?所以呢,单片机中对于这种问题的处理方式呢, 一般是通过中断来处理这样的问题的,减少这个功耗。针对串口就存在一个串口中断,我们的麦克 pase 中呢,他也有串口中断这个方法,但是在这里他收了一个现用只有 wipi 这种型号的 esp 三二单片机才能使用串口中断方法。 所以我们目前如果想对创口这个数据进行检测的话,你就只能使用 yo 处这个循环的方式,不断的便利了。

大家好,今天给大家说下创口通信基础知识,创口通信分类有哪些? u r 是什么? 创口通信分类有哪些?通信可分为并行通信和创行通信。 创新通信数据通过单根线一位一位的传输,传输速率较慢,但通讯距离较远,抗干扰能力较强,而且啊成本较低。 而并行通信通过多根线同时将数据的所有位一次传输完,传输数率较高,但通讯距离较, 抗干扰能力较弱,成本也较高。而由于串行通信的优点以及对缺点的弥补,导致如今基本都采用串行通信。而对于串行通信, 我们又可以分为是否有同步时钟和传出方向两大类。按照是否有同步时钟,分为同步和一步 同步通信指带时钟同步信号,发送方和接收方在同一时钟的控制下实现同步传输。 e 不通信呢?指不带时钟同步信号,使用各自的时钟控制,但需要双方互相约定好数据 传输速率。那按照数据传输方向分为单工、半双工和全双工。单工通信数据只沿着一个方向传输,不能实现双方通信,例如电视广播 那半双公通信数据则可以沿着两个方向传输,但是同一时间数据只能在一个方向上传输。实际上啊是切换的单攻,例如对讲机。 而全双通通信数据就可以沿着两个方向传输,可以同时进行,比如手机通话,单片机上常见的外 设有 ur、 iphone c s p i 这三种,他们可以有两种方式分类,一是按照是否有同步时钟,那同步通信有 s p i 和 iphone c e 不通信的话就有 ur, 但目前单片机上通常为 usat, 也可以配置同步时钟。二是按照数据传输方向,全双弓有 ur 和 spi, 半双弓有 iphone c。 那 ur 是什么?在嵌入式开发中, ur 创口通信协议全称叫做通用翼步收发传输器,是翼步创口 通信协议的一种。工作原理呢,是将传输数据的每一个字符一位接一位的传输。创口通信的数据格式包含起始位、数据位、 教练位和停止位。起始位指的是逻辑一切换到逻辑零,表示传输制服的开始。 数据位呢,可以是四五六七八位。逻辑零或逻辑一构成一个字符, 而基偶教验位数据位加上这一位后,使得一的位数为偶数偶教业或基数基教业,以此啊 来教验数据传输的正确性。最后停止位,他指的是一个字符,数据的结束标志可以是一位一点五位二位的高电瓶。 那 ur 传输数据的顺序是,刚开始传输一个起始位,接着传输数据位,接着传输教研位。 当然照应为可要可不要最后再传输停止为,这样一针的数据就传输完了。好,以上是本期内容,我们下期再见。


我们在日常工作和学习中经常需要使用串口功能来调试烧路芯片,而 usb 转 urt 模块则是我们需要使用的工具,通过该工具能够将 ttl 信号转换成 usb 信号,进而在尚未机软件中显示串口通讯的内容。 市面上常用的 usb 转 usb 模块一般是 usb a 接口类型的,该接口类型具有易出现接触不良,不方便拔插的缺点,同时 usb 通信电瓶不能自由选择模块,不能对外供电。为解决以上不足, 记忆电子工作室设计了一款 usb 转 urt 模块,该模块具有以下特点,一、小体积模块尺寸四十五乘二十三毫米,二胎 c 接口,方便拔插。三、 urt 通信电瓶可选,支持五伏、三点三伏、二点五伏和一点八伏。四、具有外部供电能力。支持五伏、三点三伏、二点五伏和一点八伏电源对外供电。 五、具有电源指示灯和通讯状态指示灯。六、具有过流过压保护功能。 该模块最大波特率可达三兆 bps, 对外电源最大能提供三百毫安的负载能力,无需整机上电即可给 mcu 芯片烧路固件。 另外,为防止金属物品意外接触到模块器件,损坏芯片,我们为该模块设计了一个遮蔽板,提供保护的同时能够更加清晰的指示端口私印信息。对于这样一款 usb 转 usb 模块,小伙伴们喜欢吗?


好,我们这节课来讲一下这个串口啊,这个叫呃一这个一步劝行通讯了,一步劝行通讯了。 我们看怎么定义的啊, u r t 呢,它是一种通行通用的串形数据总线啊,它是串形的, 它可以用于一部通讯了,而且这个总线它是双向通讯的,它可以实现全双攻的 传输与接收了啊。所以大家要先要要知道传双工什么概念,之前有讲过了啊,就是可以双向通讯了,同时通讯。我们在单面机产品设计之中呢,我们这个窗口 主要用于设备与设备之间的一个通讯了啊,就是这个主要是用于内部的一些通讯了,内部通讯了,还有设备跟传感器之间的通讯都是可以的。 当然呢,他一般的话他也会啊。一般我们也可以把这个串口通过一个电瓶转换芯片啊,把它做成一个四八五的接口啊,构成一个中工业的一个总线了啊,这个是全书接口了啊,这是那那这是内部接口, 就是说如如果我们要用到四八五的话啊,比如说四四八五一个, 我们其实里面他也是用用了券口协议的啊,我们单面机其实是券口协议的,再通过一个芯片把它转成这个 四四八五的一个接口来传输了。我们这节课主要是讲这个,讲这个内部的券口, 我们来看一下,这是它的一个券口的协议了。 窗口的话啊,这个线大家知道哈,一般我们有有三根线啊,一个发送,一个接收,还有一根 d 线, 这个是一边的,另另外一边的话,这是发送,那另外一边就接收了啊,这么全输了啊,这边接收这边就发送了啊,这里发这个,这个是地线了, 所以它是三根线,三根线。 我们来看一下这个这个 数据传输格式啊,这个是这个是空空闲位,空闲位啊,他是一个高电瓶的,就说这个是空闲位,就是当我们总先生没有任何数据传输的时候,其他就是一个空闲位了啊。看一下 空弦位,它是处于逻辑一状态,表示当前线路上没有资料进行传送了啊,所以默认是高电频。 我们再来看一下起始位。当当我们需要发发数据的时候呢,比如说我这个需要发数据给他,那就需要一个起始位了。起始位的话啊,他他是一个低电频了啊,就是先发 出一个逻辑零信号,就表示我们字符开始要传送了。这一来当我们这个啊,这个接收端检测到这个低电瓶的时候呢,啊,他就开始做好一个接收的准备,然后我们这个 电瓶的宽度是多少呢?啊,这个这个时间是多少呢?啊,这个时间的话,就是我们这个呃波特率了啊,波特率的话,它是衡量数据传输速度的一个指标,它是指每秒钟传送的比特位 啊,是每秒钟传送的比特位。那比如说我们这个这个波特率是九千六啊,比如说是九千六,那这个起手位的 这个,这个是这个长这个时间就是一除以九千六了。那那大概是呃零点多毫米了不,零点多毫秒了。我们可以计算一下。比如说我拿拿个计算器, 一除以九千六,我们可以看一下,哎, 我们用一千除以九千六 x 零点一多少 啊?零点一零四毫, 好秒了时间了啊。所以这个这个播脱率越大的话,就是这个时间就越短了。比如说我们常比如常用的幺幺五二零零啊,这时间就越短 啊。我我们的单面机就就检测这个下降盐啊,减下降盐,然后他会检测这个检测低电瓶了啊,就认为起已经起死了。起死之后呢,啊,就需要开始发数据了。就是我们这一端开始发数据,他是一个比特,一个比特机进行发送的, 而且从第一位开始发啊,紧接着切之后呢,我们就开始发数据了。数据的话它长度呢?啊,有四位到八位的都是有的。我们现在用的比较多的是八位了。八位八位刚好是一个字节了啊,也有也有四位的, 比如说我,比如说我们有啊,我们有呃,四四位单面积是吧,也发四位的,五位六位七位都有啊。一般构成一个字符,从最第一位开始发送, 当我们发发送到最后一个啊,有有效比特之后呢,啊,后面他是基偶较量位了啊,基偶较量位这位的话是可有可无的,这个要双方约定了 基友。这样基友圈为什么意思呢?它藕叫燕和鸡叫燕,藕叫燕的话,它是是一的位数为为偶数了。 这什么意思呢?比如说我们发一个零零幺幺幺零零啊,打个比喻哈,像像像像。 这个数据的话,他的偶数位,他的他的一的话是有三位的,三位的话他是基数了。如果我们需要需要要验的话。 哦,那那这里必须要发个一了。发一的话,那就是那就是四四四个一了,他就变成偶数了,这就叫偶叫燕了。那如果需要鸡叫燕呢?鸡叫燕的话,前面刚好是一,一的个数刚好是三个了。那这里主要发零就行了 啊,八零就行了。这个是基,这个是基偶教验。基偶教验的话,他可以教验书啊,资料全书的一个正确性。但是他还是有风险的。比如说啊,比如说我们我们这个这个这个一变为零,零变为一的话,如果这两个比特位同 时变化了啊,但是他他的他这个一的个数并没有变化,这个时候啊,他他还是认为教练是对的啊。他所以说他教练的这个准确性还是还是并不是很高了, 并不是很高。当然假如只是其中一位变化了啊,那那确实啊,是可以教育出来。如果两位同时变化了,他就教育失败了啊。就他这个数据全输错。但是教育是对的。 所以我们现在更多的采用 crc 教练了啊, csc 杠幺六教练了啊,这种教练的话,任何一个笔都出问题了啊,他他都会出错了。 这个教验是很重要的哈,他是验证我们的数据是不是对的, 因为我们的全数时候呢,它 这数据可能又干扰出现错了。如果出现错了啊,那那那我们是可以可以可以重新传输的。但是如果他没有检测到一个错误了啊,他就正常接收了,那有可能会对产品产生一些啊,一些影响,这些影响的话就不好说了是不是? 所以传输的可靠性是非常重要的,所以需要增加一些教验啊,既有教验,还有一些其他的教验。 当我们传输完机油键之后呢,我们就需要把这把这个字节进行停止了啊,他是一个字节一个字节发送的,他需要发一个停止位。 停止位的话啊,是一个字符数据的结束标志啊,一般发一个高定频了,发完之后啊,这个字节就全完了。而这个停 指位的话,他可是一位一点五位或者两位的高电瓶了。那为什么需要为什么会这三种三种情况呢?一般我们是用一位的哈,也用两位的。这个的话,由于数据在传输线上是定时的啊,时间是固定的, 但是我们每个设备是有有自己的时钟了,那可能会出现啊,他们之间并不是同步的。 当因为停止位,因此停止位他不仅仅是全书的一个结束的,他还是可以给计算机来进来进行一个一个同步的,一个一个校正的,同步的,一个校正的。就是说停止位越多的话啊,这这 空闲时间了啊,他他们之间可以时间可以自自行同步一下啊。但是呢,这个每加一个停止位的话,他传输出就多一个比特,他的速度也会慢一点了。 所以大家需要去看两边的情况啊,假如一个设备啊,他的这个比如说,比如说我们俩两边的时钟误差比较大,或者其他原因,我们就可以把这个结束位用用两个高利民来做了。这样子的话,他这个可靠性会好一点,会传的慢一点。但是 啊,当我们传完之后呢,啊,他又出来空前电瓶了,如果我们还需要继续发送,我们就继续要发一个起始位了啊,然后再发数据位啊,再既有教验啊,再发停止位,一个字节一个一个字节的 一个发送啊。这个就是我们一个创口的协议了啊。其实理解起来是比较简单的,是不是大家稍微理解一下即可啊?以后有兴趣呢,也可以拿试播器啊,去装一下波形啊。去分析一下。 我们看产品的应用。产品应用的话,圈口的话,还一还是用的比较多的哈。比如说我们一些啊,一些模块,不是我们这个 wifi 模块啊,它就是用一个一个圈口跟它通讯型了啊,叫一般动用 a t 指定 有有个指定协议了。我们弄个窗口就可以控制我们这个 wifi 模块的联网啊,搜发数据了啊,非常方便。还有我们这个 gps 模块啊,也可以用窗口来通讯了。还有我们这个蓝牙啊,甚至我们的 四 g, 五 g 啊,我们这个啊,我们这些做做啊,做无限的厂商,他把这些模块都做好了,那我们就可以很方便的集成到我们这个产品中来。 我们只需要通过串口啊,就可以跟我们的单面机啊进行一个通讯了,这样子我们也可以非常方便的实现一个联网啊。就啊还还有很多一些传感器也是可以通过串口来通讯的啊。串口通讯的, 一般来说我们的单面积的话,一般都都会有圈口的,一般一般有一个两个甚至四个都有的啊,也可能没有啊。这个大家看有些有些可能通过软件模拟了。如果圈口这个数量太少的话啊,可以模拟 哪一种的话,我们可以通过一些一些一些模拟芯片,比如说 cd 啊,四零五二啊,这里模拟芯片进行扩展,一个一个一个圈口通过芯片扩展成四个圈口了。 ctrl 但但但是它需要切换开关来切换的。像这种的话就非常方便,我们以一个主机对四个传感器啊,或者或者四个模块都可以,我们需要需要跟哪个通讯,我们就把开关切过去了 啊。进来的话我们我们单面积的一个串口就可以接很多外设了啊,这个是非常方便的 啊。关于圈圈口的一个软件的编程呢,大家可以去学我们的实章课程啊,一般都会有讲解。好,那谢谢大家。