本地回环地址127.0.0.1 

127.0.0.1属于特殊IP地址,是IPv4协议中的本地回环地址,所有发往该地址的数据包均由操作系统内核直接环回至本地,不会经过物理网卡或外部网络。中文名称为"回送地址",外文名称为"localhost",在操作系统hosts文件中通常将localhost与127.0.0.1绑定在一起。

用途
  • 1. 网络协议测试:常用"ping 127.0.0.1"命令测试本机TCP/IP协议簇是否正确安装,能ping通说明网卡和IP协议安装正常。
  • 2. 本地服务访问:某些应用程序在同一台机器上运行时,可将服务器IP地址设为127.0.0.1调用本机资源,无需外部网络连接。
  • 3. 安全隔离:将服务绑定到127.0.0.1可起到安全保护作用,仅接受本机发起的连接请求,外部设备无法访问。
与localhost的关系
  • 1. 实质等价:对应大多数用户来说,localhost实质上就是指向127.0.0.1这个本地IP地址,二者在功能上可以互换使用。
  • 2. 技术差异:127.0.0.1是确定的IP地址无需解析,localhost是需要通过hosts文件或DNS解析的主机名,可能存在被篡改的风险。
  • 3. 使用建议:日常开发推荐使用localhost(享受浏览器安全上下文),调试或配置时使用127.0.0.1(稳定可靠)。
IP地址

IP地址由两部分组成,网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。IP地址根据网络号和主机号分为A、B、C三类及特殊地址D、E。全0和全1的都保留不用。

  • A类:第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为"0",所以地址的网络号取值于1~126之间。一般用于大型网络。
  • B类:前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为"10",所以地址的网络号取值于128~191之间。一般用于中等规模网络。
  • C类:前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为"110",所以地址的网络号取值于192~223之间。一般用于小型网络。
  • D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。
  • E类:是保留地址。该类IP地址的最前面为"1111",所以地址的网络号取值于240~255之间。
  • 回送地址:127.0.0.1 ,一般用于测试使用,常用于网站建设。
双绞线

当高频电信号通过铜导线传输时,变化的电流会产生变化的磁场,从而在周围的空间和邻近导线上感应出不需要的噪声电压。

双绞线就是把两根导线紧紧缠绕在一起。这意味着干扰磁场在一个绞合周期内,感应出的电动势方向相反、大小几乎相等,相互抵消,从而大幅度削弱共模干扰。

在实际网线内部,四对线彼此紧挨着并行延伸。如果所有线对采用相同的绞距,那么感应干扰也会同步;为了打破这种同频共振,引入"不等绞距"原则。

随着网络速率从百兆跨越到千兆乃至万兆,对线缆内部结构控制的精度要求也呈指数级上升。超五类主要依靠严格控制四对线的绞距组合来抑制近端串扰;而到了六类线阶段,由于工作频率提升至250MHz,依靠不等绞距已经难以应付极高频下的线间泄露,物理结构上往往加入了十字骨架。将四对线物理隔开,固定了它们之间的几何位置,防止线对在受到外力挤压时发生变形而导致绞距失效。

串行通信

串口通信是一种通过单一数据线逐位传输信息的异步通信方式,依赖于起始位、数据位、校验位和停止位构成的数据帧;RS-232、RS-485与USB-to-Serial是三种最广泛的串行通信方式。

RS232通讯

RS-232是最早被标准化的串行通信接口之一,该标准采用点对点全双工通信模式,使用独立的发送(TXD)、接收(RXD)和地线(GND)构成基本通信链路。可选引脚如RTS、CTS、DTR、DSR等用于硬件流控,提升数据完整性。

  • 逻辑'1'电平:  -3V~-15V
  • 逻辑'0'电平:  +3V~+15V
  • 最大传输距离: ≤15m(典型)
  • 支持波特率:    1200bps ~ 115200bps

应用局限性:

  • 注:由于RS-232使用负逻辑,负电压表示"1",与其他数字系统正逻辑不兼容,通讯时需要加电平转换芯片(如MAX232或SP3232);
  • 通信距离短;
  • 抗共模干扰能力差(因无差分信号)
  • 不支持多设备挂载(仅点对点)
  • 功耗较高(需±12V电源供电);
485通讯

RS-485,是一种更为现代化的工业级串行通信标准。RS是Recommended Standard的缩写,就是推荐标准意思;485是标准识号。1983年,RS-485通讯接口被电子工业协会(Electronics Industries Association EIA)批准为一种通讯接口标准。

RS-485采用差分电压传输,即利用两根信号线A(+)和B(-)之间的电压差来表示逻辑状态。通信基本流程:发送端驱动器将TTL电平转换为差分信号,经双绞线传输后,接收端比较器恢复原始数据。

  • VA > VB时,表示逻辑"0";
  • VA < VB时,表示逻辑“1”;

RS-485的电气参数为:

  • 差分电压范围为±1.5V ~ ±6V;
  • 共模电压范围为-7 ~ +12V;
  • 可支持32个多点拓扑连接,见下面的网络拓扑图。
  • 最小差分电压容限:200mV;(接收电路:如果Vab≥200mV,识别为'1',Vab≤-200mV,识别为逻辑'0'。)
  • 其它:信号A空闲时为高电平(485_A+),信号B空闲时为低电平(485_B-)。

为什么是32个?和发送电路的驱动能力有关,接收端输入阻抗并非理想的高祖,而是12kΩ;32个相当于32个阻抗并联:R = 12000/32 = 375Ω.

USB-to-Serial桥接芯片的工作机制

随着个人计算机逐步淘汰原生串口(COM口),USB-to-Serial转换器应用而生。FT232RL,CH340G,CP2102;

原理:USB-to-Serial本质上是一个协议转换器,负责将USB协议栈的数据包解析为UART帧格式:

  1. USB接口控制器:处理USB枚举、描述符读取和端点管理;
  2. FIFO缓冲区:暂存待发送或接收的数据;
  3. UART引擎:执行起始位、数据位、校验位、停止位的组装与拆解;
  4. 电平转换电路:输出3.3V或5V TTL电平,部分型号支持RS-232电平输出。
其它参考查阅
电平转换电路设计:
  • 电源隔离:使用光耦或磁耦隔离防止地环路;
  • 电平匹配:确保输入/输出电压与上下游器件兼容;
  • 浪涌保护:TVS二极管吸收瞬态高压。
串口帧结构

一个完整的UART(通用异步收发器)数据帧通常由几部分:起始位数据位可选的奇偶校验位停止位。现代大多数设备遵循8-N-1(8数据, 无校验, 1停止)

  1. T->>R:空闲(高电平)
  2. T->>R:起始位(低电平,1bit)
  3. T->>R:数据位D0-D7(LSB先行)
  4. T->>R:奇偶校验位(可选)
  5. T->>R:停止位(高电平,1/1.5/2bit)
  6. T->>R:空闲(高电平)
数据位长度(7/8位选择)

数据位长度决定了传输的有效信息量,常见是7位或8位。8位恰好对应1个字节(Byte),而7位模式主要兼容早期ASCII编码系统(7位表示128个字符)

奇偶校验位生成原理及检测

奇偶校验是一种简单的错误检测机制,用于发现单比特错误。它通过在数据位后附加一个校验位,使得整个数据中"1"的个数满载预设条件:

  • 偶校验(Even Parity):使总"1"数为偶数;
  • 奇校验(Odd Parity):使总"1"数为奇数;

比如发送数据为0x5A(二进制01011010),其中含4个"1"(偶数)。若启用偶校验,则校验位为0;若启用奇校验,则校验位为1.接收端在收到数据后重新计算"1"的数量,并与接收到的校验位比较。如果不符,则判定发生了传输错误。

波特率匹配与误差容忍度

波特率(Baud Rate)是指单位时间内传输的符号数,对于UART而言,每个符号代表一个比特,故波特率等于比特率(bits/s)。常见的波特率有9600, 19200, 38400, 57600, 115200等。过高或过低的波特率都可能导致问题,尤其是在晶振精度有限或线路质量不佳的情况下。

异步串口通信对波特率误差有一定的容忍度,通常要求:

  • 发送端和接收端的波特率差异不超过2-3%
  • 累计误差不超过半个位时间
  • 例如115200bps时:允许误差范围:±3456bps (3%),10位帧(1字节)累计误差需<4.34us
  • 115200bps理论周期8.68us,若实际8.70us (+0.23%误差),10位累积误差:0.23*10=2.3%,50位累积误差:0.23%*50 = 11.5% (超过安全阈值)
波特率理论周期波特率允许误差累计允许误差
9600104.16us±288bps(101.13us~107.39us)52.08us
1440069.44us±432bps(67.42us~71.59us)34.72us
1920052.08us

±576bps(50.56us~53.69us)

26.04us
3840026.04us

±1152bps(25.28us~26.84us)

13.02us
5600017.85us±1680bps(17.33us~18.41us)8.9us
5760017.36us±1728bps(16.85us~17.89us)8.68us
1152008.68us

±3456bps(8.42us~8.95us)

4.34us

波特率脉宽

多个字节

波特率计算公式

位时间计算:位时间 = 1 / 波特率

以115200bps为例:位时间= 1 / 115200 ≈ 8.68us(微秒),这个时间决定了:

  • 发送端:每位电平保持的持续时间
  • 接收端:采样点的间隔时间
软件实现
1. 定时器基础

定时器16位重载模式                                            
定时器1T模式,加1时间是1/FOSC(11.0592MHz对应是0.0904us)       
16位最大计数值是0xFFFF(65536*0.0904us=5924.4544us=5.9244544ms)
比如我们定时1ms,要计数1000us/0.0904us = 11061.9 取11062(0x2B36)  
定时器重载值Vload = 65536-11062 = 54474(D4CA)                 
伪代码:Vload = 65536-(延时/(1/FOSC))=(65536-FOSC*延时)   
程序实现:          

#define FOSC 11059200   //1/FOSC单位是s                                        
#define T1MS (65536-FOSC/(1000))   //FOSC(s)*0.001s                           
TL0 = T1MS;                                                   
TH0 = T1MS >> 8;

2. 定时器基础-定时波特率,以9600为例,104us

#define T1MS (65536-FOSC*104/1000000))     //64386                     
TL0 = T1MS;                                                   
TH0 = T1MS >> 8;

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐