当前位置: 首页 > news >正文

揭秘通信技术:电信号传输、通信划分、串口通信

通信概念

电信号传输方式

在数据的传输过程中主要是通过电信号进行传输的,电信号通过物理介质(如导线、光纤、空气等)从发送端传递到接收端的技术范式,其核心差异体现在信号载体形式、传输介质、抗干扰能力、传输距离等维度。根据电信号的本质特征和工程应用场景,可将其分为以下几大类:

电平信号

概念:以 “单个信号线上的电平值” 相对 “公共地线(GND)” 的电压差来表示逻辑(0/1)或模拟量

可以理解为:“用一根线传递信号,另一根线传递‘基准 0 点’(地线),接收端通过对比信号线与地线的电压差判断信号含义”。

差分信号

概念:以 “两根互补信号线(如 A+、A-,或 D+、D-)之间的电压差” 来表示逻辑(0/1)或模拟量,不依赖公共地线,两根线的信号幅度相等、极性相反。

可以理解为:“用两根线传递‘相反的信号’,接收端通过计算两根线的电压差判断信号含义 —— 外部噪声会同时耦合到两根线,差值抵消,从而消除干扰”。

电平信号和差分信号的区别:

电平信号✅ 优点:线路简单(仅需 2 线)、成本低、实现容易

❌ 缺点:抗干扰能力弱(地线噪声会直接影响信号)、传输距离短(通常 < 10 米)

应用场景:开发板内部通信采用电平信号,如串口通信(TTL\RS232)、SPI、IIC等

差分信号✅ 优点:抗干扰能力极强(外部噪声会同时耦合到两根线,差值抵消)、传输距离远(可达百米级)

❌ 缺点:线路复杂(需 2 线)、成本略高、需差分芯片处理

应用场景:开发板与外部设备通信采用差分信号,如RS485串口通信、以太网、USB、CAN等

通信划分

对于有线通信中按照不同的通信维度,划分了多种通信类别

​​​​​​​通信方向划分

单工:要么收,要么发,只能做接收设备或者发送设备一根信号线只能单向发送或单向接收比如收音机

半双工可以收,可以发,但是不能同时收发,一根信号线可以接收数据也可以发送数据,但是两者不能同时进行比如对讲机

全双工可以在同一时刻既接收,又发送两根信号线,一根发送数据,另一根接收数据,真正实现同时收发数据,速度快;比如:手机打电话

​​​​​​​通信方式划分

串行通信指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。数据一位一位串起来,逐个传输,数据按位顺序传输。

优点:占用引脚资源少

缺点:速度相对较慢

并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行使用多根线同时传输一个字的多个位,如 8 根线一次传输 8 个位。

优点:速度快

缺点:占用引脚资源多

应用:像屏幕显示用的是并行

​​​​​​​时钟信号划分

同步通信发送方和接收方通过同一时钟信号来协调数据传输节奏,确保双方同步的读取 / 发送数据(时钟信号由主机产生,从机被动同步)。

异步通信发送方和接收方无共用时钟信号,有自己独立的时钟信号,通过预设的波特率(数据传输速率)和起始 / 停止位来实现数据通信(双方需提前约定波特率,允许微小误差)。

因此,同步通信和异步通信主要区别,就看有没有时钟线(SCL/SCK)

uart:串行异步全双工 SPI:串行同步全双工

IIC:串行同步半双工 单总线:串行异步半双工

串口通信

在串口通信中主要包含两类UART和USART(通用同步sync/异步async收发器),他们主要区别是:

  • USART: 支持同步\异步通信、全双工、串行
  • UART :没有时钟线,只支持异步通信、全双工、串行

在串口通信(如UART协议)中,TXD和RXD是两条核心数据传输线,分别代表发送数据(Transmit Data)和接收数据(Receive Data)

​​​​​​​协议格式

在通信中数据的交互需要遵循一定的格式,接收方才能按照规定的格式进行接收并解析数据,协议格式也叫数据帧或帧格式

传输过程:空闲状态默认为高电平,开始传输数据时将电平拉低,表示起始位,接下来传输实际数据,遵循低位先行原则,校验位根据用户设置确定是否有校验位,最后数据传输结束把电平拉高,表示停止位。

起始位:表示要开始发送数据,占1位

数据位:表示通信中数据位的个数,一般位5、7、8位。对于stm32u5数据位为7、8、9位(通过cubemx配置串口属性能看到)

校验位:在串口通信中一种简单的检错方式。一般不设置,因为校验位不能完全保证数据无误传输。

奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数

如:1000110(0)

偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数

如:1000110(1)

停止位:数据传输结束标志,停止位典型的值为1、1.5和2位。

波特率数据传输的速率,指每秒数据传输的位数,单位为bit/s

常见的波特率:9600bit/s、115200bit/s

​​​​​​​USART框图

UART数据发送和接收的过程:

发送过程:由CPUDMA向数据发送寄存器(TDR)中写入要发送的数据,由发送移位寄存器将数据按位移到发送端口输出。

接收过程通过端口接收到的数据先存入接收移位寄存器中,将移位寄存器中数据存入数据接收寄存器,再由CPUDMA读取接收数据寄存器(RDR)中的数据。

注意:如果CPU发送数据过快,会出现数据被覆盖情况,此时需要通过ISR中断和状态寄存器来标志数据是否可以发送。

USART寄存器

​​​​​​​中断和状态寄存器

USART_ISR

  • 第七位:TXFNF,发送数据标记,当发送数据寄存器为空,此位为1,也就是数据写入到发送数据寄存器之后,发送数据移位寄存器,从发送数据寄存器中将数据全部移走之后ISR第七位置1(TXFNF为1时表示可以往TDR写数据)
  • 第五位:RXFNE,接收数据标记,当接收数据寄存器非空,这个位置为1,数据被接受数据移位寄存器搬到接收数据寄存器中以后,ISR第五位置1(RXFNE为1表示可以读取RDR中数据)

​​​​​​​数据发送寄存器

USART_TDR决定发送的数据将要发送的数据写入,0-8位有效(u5可以发送的数据位是7、8、9位)

​​​​​​​数据接收寄存器

USART_RDR决定接收的数据将要接收数据进行读取

​​​​​​​原理图分析

找到核心板的typec口,丝印为J4,这个是usart1

CH340E:是电平转换芯片,将USB差分信号转换为TTL电平信号

​​​​​​​cubemx配置

​​​​​​​代码实现

while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */USART1->TDR='A';HAL_Delay(1000);}

printf重定向

int printf(const char * format,...)

在Linux中实现向终端输出时使用了printf,printf函数底层调用的是fputc函数,fputc是将要发送的数据写入到标准输出流stdout因此如果想让printf将数据输出到串口,需要重写fputc

函数原型:int fputc(int /*c*/, FILE * /*stream*/),这里的fputc是一个弱函数,前面有weak修饰。

WEAK弱符号

weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。

加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,

那么编译器就会执行__weak 修饰的函数,并且编译器不会报错。

步骤:

  1. 在keil5中如果使用C库相关函数,需要勾选上微库

勾完这个库后必须全部编译,要不会报以下两个错误

  1. 添加stdio.h头文件,并实现重定向
#include<stdio.h>intfputc(intch,FILE*p){while(!(USART1->ISR&1<<7));//等待TDR为空,即TXE置1,跳出while,然后往TDR中放数据USART1->TDR=ch;}intmain(){printf("hello world");HAL_Delay(1000);}

​​​​​​​HAL库实现通信

​​​​​​​​​​​​​​代码实现

uint8_t buf[32]="";/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_UART_Receive(&huart1,buf,sizeof(buf),100);HAL_UART_Transmit(&huart1,buf,sizeof(buf),100);memset(buf,0,sizeof(buf));}


​​​​​​​​​​​​​​

http://www.jsqmd.com/news/204258/

相关文章:

  • 【Docker故障恢复终极指南】:9个高频场景的应急处理方案
  • SPI通信:高效同步串行接口解析、软硬件spi
  • 别再手动分配流量了!5步实现Docker微服务自动负载均衡
  • VibeThinker-1.5B的局限性有哪些?开发者必须知道的事
  • 如何用Docker实现毫秒级服务发现与动态负载均衡?一线大厂架构师亲授
  • 苏州会议餐配送/苏州盒饭配送/苏州工作餐配送哪家好?2026年苏州餐饮公司实力盘点 - 栗子测评
  • 地理空间数据分析:处理经纬度坐标与区域划分问题
  • Docker多容器日志集中处理方案(ELK+Fluentd实战落地)
  • ‌低代码AI测试平台实操教程
  • 计算机网络MTU分片问题:VibeThinker计算传输效率
  • 系统学习screen指令:全面讲解参数选项与实际场景
  • 2025年乌鲁木齐装修公司权威推荐榜单:新房装修/别墅装修/装修质量/装修价格/装修全包本地服务商精选 - 品牌推荐官
  • HBuilderX与Android Studio协同配置:Windows实战说明
  • 2026年 电线电缆回收厂家权威推荐榜:废旧电缆/工程剩余电缆/二手电线电缆专业回收服务深度解析 - 品牌企业推荐师(官方)
  • 新定义问题(24年甘肃兰州中考真题)
  • 网盘直链下载助手流行背后,是开发者对高效资源的渴求——如同VibeThinker
  • 企业能否用VibeThinker降本增效?适用场景与限制分析
  • ‌AI赋能安全测试:漏洞检测新方法
  • 2026年热门的电动堆高车厂家推荐 - 栗子测评
  • 2026年口碑好的白光干涉仪厂家推荐,靠谱供应商与专业技术企业全解析 - myqiye
  • Web前端也能玩转大模型?结合VibeThinker实现智能代码补全
  • 【架构师私藏干货】:构建稳定Docker多容器环境的6大黄金法则
  • 实测VibeThinker-1.5B:用英语提问提升算法解题准确率
  • 大润发购物卡回收价格表,大润发怎么挂失补办 - 京回收小程序
  • 2026年靠谱磁分离机实力服务企业排行榜,新测评精选磁分离机生产企业推荐 - mypinpai
  • Git多项目协作混乱?用Docker实现工作树隔离的4种高阶方案
  • 免费开源!这个自愈测试框架,让我的脚本活了3年
  • 测试工程师必学的AI算法基础
  • 2026电饭煲选购全指南:苏泊尔旋焰釜为何被实验室列为“米饭口感基准机” - 品牌推荐排行榜
  • 法律条文推理应用:基于给定案情推测可能判决结果