网络协议是每个前端工程师都必须要节制的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将先容下这两者以及它们之间的差异。
一、TCP/IP网络模型
打算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、利用哪种措辞进行通信、若何结束通信等规则都须要事先确定。不同的硬件、操作系统之间的通信,所有的这统统都须要一种规则。而我们就把这种规则称为协议(protocol)。

TCP/IP 是互联网干系的各种协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。
TCP/IP模型是互联网的根本,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和运用层。
链路层:卖力封装和解封装IP报文,发送和接管ARP/RARP报文等。网络层:卖力路由以及把分组报文发送给目标网络或主机。传输层:卖力对报文进行分组和重组,并以TCP或UDP协议格式封装报文。运用层:卖力向用户供应运用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。在网络体系构造中网络通信的建立必须是在通信双方的对等层进行,不能交错。 在全体数据传输过程中,数据在发送端时经由各层时都要附加上相应层的协议头和协议尾(仅数据链路层须要封装协议尾)部分,也便是要对数据进行协议封装,以标识对应层所用的通信协议。接下去先容TCP/IP 中有两个具有代表性的传输层协议----TCP 和 UDP。
二、UDP
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不供应数据包分组、组装和不能对数据包进行排序的缺陷,也便是说,当报文发送之后,是无法得知其是否安全完全到达的……
带你避开I2C通信中的坑!
我以为我已经完备学会了IIC,但现实却打了脸,在驱动MPU6050时,总是读取失落败。这个驱动明明是验证过的,为什么会有问题。让我一度很是忧郁。
问题
不卖关子,直接说问题,是我之前的IIC驱动有问题。
问题1:
缺点将CLK旗子暗记GPIO设置为推挽输出。该当设置为开漏输出。
问题2:
读取函数有bug。1处该当先左移再读取SDA的数据,然后删除2处的数据。
问题2:这个便是纯粹的bug了,大家该当看出来了。在RTC的驱动没有触发bug的缘故原由是:在RTC的IIC吸收数据中,实际运用中最高位为0,触发不了这个bug。而在MPU6050的IIC吸收数据中就触发了这个bug。我也在感慨,有时候不是程序没有bug,而是可能没有触发。
问题1:这个问题,实在很大略,IIC协议中也提到过,很多大神也知道须要将MCU的IIC引脚设置为开漏输出。这一方面我也理解,但是没有在意,由于一贯读取RTC一贯“没有bug”。接下来我将细细和大家分享一下IIC为什么须要开漏输出,开漏输出和推挽输出有什么差异。精通的大佬可以出门左转了,想理解一下的同学欢迎连续往下看。
03开漏输出
STM32F207的GPIO框图如下
普通输入模式下,上拉和下拉电阻(微弱)的存在。紧张是由于P-MOS和N-MOS的存在分为下列两种模式
开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS。开漏模式输出1时,端口保持高阻态,这个时候如果端口外上拉电阻,就可以输出电平1……
终于搞清了SPI、UART、I2C通信的差异与运用
电子设备之间的通信就像人类之间的互换,双方都须要说相同的措辞。在电子产品中,这些措辞称为通信协议。
之前有单独地分享了SPI、UART、I2C通信的文章,这篇对它们做一些比拟。
串行 VS 并行
电子设备通过发送数据位从而实现相互交谈。位是二进制的,只能是1或0。通过电压的快速变革,位从一个设备传输到另一个设备。在以5V事情的系统中,“0”通过0V的短脉冲进行通信,而“1”通过5V的短脉冲进行通信。 数据位可以通过并行或串行的形式进行传输。 在并行通信中,数据位在导线上同时传输。下图显示了二进制(01000011)中字母“C”的并行传输:
在串行通信中,位通过单根线逐一发送。下图显示了二进制(01000011)中字母“C”的串行传输:
SPI通信
SPI是一种常见的设备通用通信协议。它有一个独特上风便是可以无中断传输数据,可以连续地发送或吸收任意数量地位。而在I2C和UART中,数据以数据包的形式发送,有着限定位数。在SPI设备中,设备分为主机与从机系统。主机是掌握设备(常日是微掌握器),而从机(常日是传感器,显示器或存储芯片)从主机那获取指令。一套SPI通讯共包含四种旗子暗记线:MOSI (Master Output/Slave Input) – 旗子暗记线,主机输出,从机输入。MISO (Master Input/Slave Output) – 旗子暗记线,主机输入,从机输出。SCLK (Clock) – 时钟旗子暗记。SS/CS (Slave Select/Chip Select) – 片选旗子暗记……
RS485与Modbus通信协议教程
一、序言
在工业掌握、电力通讯、智能仪表等领域,常日情形下是采取串口通信的办法进行数据交流。最初采取的办法是RS232接口,由于工业现场比较繁芜,各种电气设备会在环境中产生比较多的电磁滋扰,会导致旗子暗记传输缺点。
1979年施耐德电气制订了一个用于工业现场的总线协议Modbus协议,现在工业中利用RS485通信场合很多都采取Modbus协议,以是本日我们来理解下RS485通信和Modbus通信协议。
二、RS485通信
1、实际上在RS485之前RS232就已经出身,但是RS232也有不敷:
1)接口的旗子暗记电平值较高,达到十几V,随意马虎破坏接口电路的芯片,而且和TTL电平不兼容,因此和单片机电路接起来的话必须加转换电路。
2)接口利用的旗子暗记线与其他设备形成共地模式的通信,这种共地模式传输随意马虎产生滋扰,并且抗滋扰性能也比较弱。
3)传输间隔、速率都有限,最多只能通信几十米;只能两点之间进行通信,不能够实现多机联网通信。
2、针对RS232接口以上不敷,涌现了RS485等新的接口标准,RS485具备以下的特点:
1)逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。接口旗子暗记电平比RS232降落了,不易破坏电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。
2)RS485通信速率快,数据最高传输速率为10Mbps以上;其内部的物理构造,采取的是平衡驱动器和查分吸收器的组合,抗滋扰能力大大增加。
3)传输间隔最远可达到1200米旁边,但传输速率和传输间隔是成反比的,只有在100KB/s以下的传输速率,才能达到最大的通信间隔,如果须要传输更远间隔可以利用中继。
4)可以在总线上进行联网实现多机通信,总线上许可挂多个收发器,从现有的RS485芯片来看,有可以挂32、64、128、256平分歧个设备的驱动器。
3、RS485有两线制和四线制,四线制只能实现点对点的通信办法,现很少采取。两线制这种接线办法为总线式拓朴构造,在同一总线上最多可以挂接32个结点。在RS485通信网络中一样平常采取的是主从通信办法,即一个主机带多个从机……
从IIC实测波形入手搞懂IIC通信
1 IIC根本知识
首先复习一下IIC根本知识,这部分看不懂的请先带着疑问,然后我们通过剖析IIC的真实波形,这些疑问可能就豁然开朗了~
1.1 IIC是什么
IIC(Inter Integrated Circuit,集成电路总线)是一种由 PHILIPS 公司开拓的两线式串行总线,用于连接微掌握器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和吸收数据。在 CPU (单片机)与IIC模块之间、IIC模块与IIC模块之间进行双向传送。
IIC的一些特点:
IIC是半双工,而不是全双工IIC是真正的多主机总线,(比拟SPI在每次通信前都须要把主机定去世,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时要求总线,可以通过冲突检测和仲裁防止总线数据被毁坏起始和终止旗子暗记都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很随意马虎检测到起始和终止旗子暗记在起始旗子暗记后必须发送一个7位从机地址+1位方向位,用“0”表示主机发送数据,“1”表示主机吸收数据。每当主机向从机发送完一个字节的数据,主机总是须要等待从机给出一个应答旗子暗记,以确认从机是否成功吸收到了数据起始旗子暗记是必需的,结束旗子暗记和应答旗子暗记,都可以不要注:实际利用中,一样平常是单片机作为主机,其它器件作为从机,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。
1.2 IIC物理连接
利用IIC通信的IIC器件有很多,比如陀螺仪加速度计MPU6050,EEPROM存储芯片AT24C02等,通过IIC总线,可以与单片机之间进行数据传输。
IIC通信线只有只有两根,数据线SDA的高低电平传输2进制的数据,时钟线SCL通过方波旗子暗记供应时钟节拍多个IIC器件可以并联在IIC总线上,每个器件有特定的地址,分时共享IIC总线实际利用IIC当然还要连接电源以及共地哦1.3 IIC时序
网上查找IIC的根本知识,可能会搜到这样的时序图:
看起来好繁芜的样子,这时可能一部分人就放弃思考了……
国产单片机见到那好用之新塘031 串口PDMA通信
国产单片机终于起来了,更换的更换,以前常常用STM32,都更换成新塘的,一定没问题,一定会成功量产,一定不要重新来过。末了联系到本日的主角新塘。在上周选用了NUC029,下载资料,搭建环境,串口测试,SPI测试,然后溘然创造这玩意没有DMA,白瞎了这么永劫光啊,样板都做好了,结果出幺蛾子。然后在换M031,这次寻思熟虑,认为不会有问题了才开搞。作为一个半成熟的程序猿,肯定不能helloword起手了,直接上UART吧。
环境搭建这里就跳过了,没啥用,我还是用KEIL 5 开拓,自行下载个PACK包安装就好了。搜索自己的MCU型号,打开页面,在资源中有文档和软件。
在文档中下载数据手册等文档,在软件中下载例程和工具,软件中最实用的因此下几个软件:
从上到下依次是:官方例程库,Nu_link驱动,外设引脚配置软件,时钟配置软件。
外设引脚配置软件用于快速配置引脚以及复用,该软件只能配置引脚及其功能,不能配置外设等功能呢,例如串口的干系配置,这些事实现不了的。
时钟配置软件仅用于配置系统时钟以及各外设时钟。这两个软件支持导出.c代码。可复制粘贴到自己的工程。这两个软件都是非常大略的,这里就不赘述了。但是有一个时钟配置软件有BUG,以我用的M031SE3AE为例,外部时钟最大可利用32M,但是软件中最大只支持24M,希望官方可以修复。
开始代码下载官方的例程,固件库代码在文件夹:D:\M031_Series_BSP_CMSIS_V3.03.000\SampleCode\StdDriver,寄存器代码在D:\M031_Series_BSP_CMSIS_V3.03.000\SampleCode\RegBased这里采取固件库的办法开拓,方便快捷。时钟初始化……
意犹未尽,查看更多精彩文章→→https://www.dianyuan.com/eestar/
更多精彩内容→→
学了那么多年的单片机,你真的学会了吗?
换个角度学习PWM,豁然开朗许多
关于变压器的那些疑问,此文给你作答
关于嵌入式单片机,若何的学习方法才是精确的