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

USART通信详解:USART和UART区别、异步/同步模式、8N1、状态标志与调试方法

USART通信详解:USART和UART区别、异步/同步模式、8N1、状态标志与调试方法

一、本文适用场景

USART是嵌入式开发中非常常见的串口通信外设,尤其在STM32、GD32、NXP、TI等单片机中经常出现。

很多初学者在学习串口通信时,经常会遇到下面这些疑问:

  • UART和USART到底有什么区别?
  • USART为什么比UART多了一个“S”?
  • 为什么有些芯片手册写的是USART,但平时却当普通串口使用?
  • USART异步模式和UART是不是一回事?
  • USART同步模式为什么多了一根CK时钟线?
  • 8N1是什么意思?
  • USART一帧数据由哪些部分组成?
  • TXE、TC、RXNE、IDLE、ORE、FE、PE这些标志分别代表什么?
  • 中断接收和DMA接收有什么区别?
  • 串口乱码、收不到数据、丢字节应该如何排查?

本文从USART的基础概念开始,依次介绍USART与UART的区别、异步模式、同步模式、数据帧格式、常见状态标志、中断和DMA接收,以及实际项目中的调试思路。


二、什么是USART

USART的英文全称是:

Universal Synchronous/Asynchronous Receiver/Transmitter

中文一般称为:

通用同步/异步收发器

从名字就可以看出,USART比UART多了一个“S”。

这个“S”代表:

Synchronous,同步

也就是说,USART既可以支持异步通信,也可以支持同步通信。

可以简单理解为:

UART:只支持异步通信 USART:既支持异步通信,也支持同步通信

在很多单片机中,USART外设通常被配置成异步模式使用,也就是我们平时常说的“串口通信”。

因此在实际开发中,经常会看到这种情况:

芯片手册中外设名称叫USART, 但是项目中把它当UART串口使用。

这并不矛盾。

因为USART工作在异步模式时,本质上就是普通UART串口通信。


三、UART和USART有什么区别

UART的全称是:

Universal Asynchronous Receiver/Transmitter

USART的全称是:

Universal Synchronous/Asynchronous Receiver/Transmitter

两者最大的区别在于是否支持同步通信。

对比项UARTUSART
全称Universal Asynchronous Receiver/TransmitterUniversal Synchronous/Asynchronous Receiver/Transmitter
中文含义通用异步收发器通用同步/异步收发器
是否支持异步通信支持支持
是否支持同步通信不支持支持
是否需要时钟线不需要异步模式不需要,同步模式可使用CK
常见信号TX、RX、GND异步:TX、RX、GND;同步:TX、RX、CK、GND
常见用途普通串口通信普通串口通信,也可用于同步收发场景

可以用一句话记住:

UART = 只异步 USART = 异步 + 同步

日常开发中,如果只是用TX、RX、GND进行串口收发,那么USART一般就是工作在异步模式。


图1 USART基础与UART的区别

USART既可以工作在异步模式,也可以工作在同步模式。UART只支持异步通信;USART在异步模式下与常见UART串口通信非常接近,在同步模式下则可以额外使用CK时钟线。


四、USART异步模式是什么

USART异步模式是最常见的使用方式。

异步模式下,USART不使用单独的时钟线。

常见信号为:

TX RX GND

其中:

TX:发送数据 RX:接收数据 GND:共地

异步通信的特点是:

发送方和接收方没有共享时钟线。

因此,双方必须提前约定好相同的通信参数,例如:

波特率:115200 数据位:8位 校验位:无 停止位:1位

也就是常说的:

115200 8N1

如果双方参数不一致,就容易出现乱码、接收错误或者完全无法通信。


五、USART异步模式的常见接线

异步模式下,USART通常按照下面方式连接:

A设备TX → B设备RX A设备RX ← B设备TX A设备GND ↔ B设备GND

也就是说:

TX和RX需要交叉连接 GND需要共地

不能接成:

TX接TX RX接RX

因为TX是发送端,RX是接收端。

正确原则是:

一个设备的发送端,连接另一个设备的接收端。

如果只需要单向发送,例如A设备只向B设备发送日志,那么可以只连接:

A设备TX → B设备RX A设备GND ↔ B设备GND

但是如果需要双向通信,就必须同时连接TX和RX两条数据线。


六、USART异步模式一帧数据由什么组成

USART异步模式发送数据时,不是只发送8个数据位,而是会自动加上起始位、可选校验位和停止位。

一帧典型数据通常包括:

空闲状态 起始位 数据位 可选校验位 停止位

典型顺序如下:

空闲高电平 ↓ 起始位低电平 ↓ 数据位D0~D7 ↓ 可选校验位 ↓ 停止位高电平 ↓ 回到空闲高电平

1. 空闲状态

USART异步串口在没有发送数据时,线路通常保持高电平。

也就是:

空闲状态 = 高电平

2. 起始位

起始位通常为低电平。

当接收方检测到线路从高电平变成低电平时,会认为一帧数据即将开始。

起始位的作用是:

告诉接收方:新的一帧数据开始了。

3. 数据位

数据位是真正传输的数据内容。

常见数据位长度包括:

7位 8位 9位

最常见的是8位数据位。

USART异步模式下,数据通常是低位先发送,也就是:

D0先发送 D7后发送

4. 校验位

校验位是可选的,用于简单检测数据错误。

常见校验方式包括:

无校验 奇校验 偶校验

5. 停止位

停止位通常为高电平。

常见停止位配置包括:

1位停止位 1.5位停止位 2位停止位

最常见的是1位停止位。

停止位表示当前这一帧数据结束,同时让线路回到空闲状态。


七、什么是8N1

8N1是USART异步通信中最常见的数据格式。

它的含义是:

8 = 8个数据位 N = No Parity,无校验 1 = 1个停止位

因此:

115200 8N1

表示:

波特率:115200 数据位:8位 校验位:无 停止位:1位

这是很多单片机调试、串口助手通信、模块通信中最常见的配置。

8N1实际占多少位

虽然有效数据是1个字节,也就是8位,但8N1真正在线路上传输时,还包含:

1个起始位 8个数据位 1个停止位

总共为:

1 + 8 + 1 = 10位

所以,发送1个字节有效数据,实际需要10个比特时间。

例如波特率为115200时,理论最大有效字节速率约为:

115200 / 10 = 11520 字节/秒

这只是理论值,实际还会受到软件处理、协议开销和缓冲区影响。


图2 USART异步模式与数据帧格式

USART工作在异步模式时,不使用单独时钟线,通信双方通过提前约定波特率和数据格式完成收发。最常见的格式是8N1,即8个数据位、无校验、1个停止位。


八、为什么波特率不一致会乱码

USART异步通信没有单独时钟线。

发送方和接收方各自根据自己的时钟进行发送和采样。

波特率决定了每一位数据持续多长时间。

例如:

115200 bit/s

表示每秒大约传输115200个比特。

每个比特时间约为:

1 / 115200 ≈ 8.68微秒

接收方检测到起始位后,会根据配置的波特率,在每一个数据位的中间位置附近进行采样。

如果发送方和接收方波特率不一致,就会出现采样点偏移。

刚开始可能偏移不明显,但随着数据位增加,偏差会不断累积。

最终接收方可能采到错误的位,导致:

  • 乱码;
  • 数据错位;
  • 偶尔正确;
  • 偶尔错误;
  • 帧错误;
  • 校验错误。

因此,USART通信双方必须保证:

波特率一致 数据位一致 校验位一致 停止位一致

九、USART同步模式是什么

USART同步模式相比异步模式,多了一个时钟信号:

CK

同步模式常见信号包括:

TX RX CK GND

其中:

TX:发送数据 RX:接收数据 CK:时钟线 GND:参考地

在同步模式下,CK通常由主设备提供。

通信双方按照CK时钟节拍完成数据发送和接收。

也就是说:

异步模式:靠双方提前约定波特率 同步模式:靠CK时钟同步采样

同步模式的特点包括:

  • 有明确的时钟信号;
  • 数据采样时刻更容易对齐;
  • 对时序要求更明确;
  • 引脚数量更多;
  • 配置更复杂;
  • 使用频率低于普通异步串口。

在日常串口调试、日志输出、串口助手通信中,大多数情况下使用的是异步模式,而不是同步模式。


十、USART同步模式通信过程

USART同步模式的典型通信过程可以理解为:

主设备输出CK时钟 ↓ 发送端在TX线上放置数据 ↓ 接收端根据CK时钟边沿采样 ↓ 双方按照相同节拍完成收发

同步模式下,CK的作用类似于“节拍器”。

它告诉接收方:

应该在什么时候读取数据。

相比异步模式,接收方不再完全依赖自身波特率估算采样时刻,而是根据外部时钟配合接收。

不过,不同芯片对USART同步模式的支持情况、CK极性、CK相位和引脚复用方式可能不同。

实际使用时必须查看芯片参考手册。


十一、USART同步模式和异步模式对比

对比项异步模式同步模式
是否有时钟线无单独时钟线有CK时钟线
常见信号TX、RX、GNDTX、RX、CK、GND
采样依据靠波特率约定靠CK时钟同步
使用复杂度较低较高
常见用途调试日志、模块通信、串口助手对同步时序有要求的场景
使用频率最常见相对较少

可以简单记住:

异步模式 = TX + RX + GND 同步模式 = TX + RX + CK + GND

图3 USART同步模式通信原理

USART同步模式下,除了TX和RX,还会使用CK时钟线。CK通常由主设备提供,数据在时钟配合下完成同步采样和传输。


十二、USART发送流程

USART发送数据时,通常经历以下过程:

CPU写入发送数据寄存器 ↓ USART硬件开始移位发送 ↓ TX线上逐位输出 ↓ 发送寄存器空,允许写入下一个字节 ↓ 整个数据帧发送完成

在很多单片机中,发送相关标志包括:

TXE TC

1. TXE

TXE通常表示:

发送数据寄存器为空

也就是说,CPU可以继续向发送寄存器写入下一个字节。

但是要注意:

TXE置位不一定代表最后一个字节已经完全从TX引脚发出。

它更多表示发送数据寄存器可以继续写入。

2. TC

TC通常表示:

发送完成

也就是发送数据寄存器和移位寄存器中的内容都已经发送完。

如果需要在发送结束后立即关闭发送器、切换RS485方向或者拉低控制引脚,通常应该等待TC,而不是只等待TXE。


十三、USART接收流程

USART接收数据时,通常经历以下过程:

RX检测到起始位 ↓ 按照波特率或时钟节拍采样 ↓ 还原数据位 ↓ 检查校验位和停止位 ↓ 数据写入接收数据寄存器 ↓ RXNE标志置位 ↓ CPU读取接收数据

RXNE

RXNE通常表示:

接收数据寄存器非空

也就是已经收到了一个新字节。

程序应及时读取接收寄存器。

如果没有及时读取,下一个字节又到来,就可能发生接收溢出。


十四、USART常见状态标志

不同芯片或不同库函数中,USART状态标志的名称可能不完全一样,但含义通常比较接近。

常见状态标志如下:

标志常见含义
TXE发送数据寄存器为空
TC发送完成
RXNE接收数据寄存器非空
IDLE检测到总线空闲
ORE接收溢出错误
FE帧错误
PE校验错误

1. IDLE

IDLE表示:

总线空闲

在不定长数据接收中非常常用。

例如接收一包长度不固定的数据,可以使用:

DMA + IDLE中断

基本思路是:

DMA持续搬运接收数据 ↓ USART检测到一段时间没有新数据 ↓ 触发IDLE中断 ↓ 程序计算本次收到的数据长度 ↓ 处理这一包数据

2. ORE

ORE表示:

接收溢出错误

常见原因是CPU没有及时读取接收数据寄存器。

比如:

  • 中断处理太慢;
  • 中断被长时间关闭;
  • 波特率过高;
  • 接收缓冲区太小;
  • 在中断中执行了复杂逻辑;
  • 主循环处理不及时。

3. FE

FE表示:

帧错误

常见原因包括:

  • 波特率错误;
  • 停止位配置不同;
  • 电平异常;
  • 干扰严重;
  • 接收端采样时刻偏移。

4. PE

PE表示:

校验错误

常见原因包括:

  • 双方校验位配置不同;
  • 信号干扰;
  • 波特率偏差;
  • 数据采样错误。

十五、USART中断和DMA有什么用

1. 中断接收

中断接收适合逐字节处理。

基本流程为:

收到一个字节 ↓ RXNE置位 ↓ 进入USART中断 ↓ 读取数据寄存器 ↓ 放入软件缓冲区 ↓ 退出中断

中断服务函数中应尽量只做简单操作。

推荐在中断中完成:

  • 读取数据;
  • 放入缓冲区;
  • 更新接收计数;
  • 设置标志位。

不建议在中断中完成:

  • 大量字符串解析;
  • 长时间循环;
  • Flash写入;
  • 打印日志;
  • 等待其他事件;
  • 复杂协议处理。

2. DMA接收

DMA适合高速、连续、大量数据接收。

DMA可以自动把USART接收寄存器中的数据搬运到内存中,减少CPU中断次数。

常见用法包括:

固定长度DMA接收 循环DMA接收 DMA + IDLE不定长接收

3. DMA + IDLE

DMA + IDLE是USART不定长数据接收中非常常见的方案。

适合下面这种场景:

不知道一帧数据具体什么时候结束 但帧与帧之间有空闲间隔

当USART检测到一段时间没有新数据,就产生IDLE中断,程序再计算DMA缓冲区中已经收到多少数据。


图4 USART发送、接收、状态标志、中断和DMA

发送数据时重点关注TXE和TC;接收数据时重点关注RXNE;不定长数据接收常配合DMA和IDLE空闲中断。


十六、USART为什么会乱码

USART乱码通常与以下问题有关:

  • 波特率不一致;
  • 数据位不同;
  • 校验位不同;
  • 停止位不同;
  • TTL、RS232、RS485电平标准不匹配;
  • TX和RX接错;
  • GND没有共地;
  • 晶振误差较大;
  • 干扰较强;
  • 上位机串口工具配置错误;
  • 程序发送的是二进制数据,但串口工具按文本显示;
  • 中文编码不一致。

其中最常见的是:

波特率不一致 8N1配置不一致

如果串口助手显示乱码,建议先检查:

波特率 数据位 校验位 停止位

十七、USART收不到数据怎么排查

收不到数据时,可以按照下面顺序检查:

1. 对方是否真的发送数据 2. TX和RX是否交叉连接 3. GND是否共地 4. RX引脚是否配置正确 5. GPIO复用是否正确 6. USART外设时钟是否开启 7. 波特率是否一致 8. 数据格式是否一致 9. 接收中断是否开启 10. NVIC是否配置 11. DMA是否启动 12. 是否读取了错误的USART实例

最简单的判断方式是:

用逻辑分析仪或示波器直接看RX引脚是否有波形。

如果RX引脚没有波形,优先排查硬件接线和对方设备。

如果RX引脚有正常波形,但程序收不到,优先排查USART配置、中断、DMA和软件逻辑。


十八、USART丢字节怎么排查

丢字节通常说明:

数据到达速度 > 软件处理速度

常见原因包括:

  • 中断响应不及时;
  • 中断中处理时间太长;
  • 接收缓冲区太小;
  • DMA缓冲区被覆盖;
  • 环形缓冲区写满;
  • 主循环处理太慢;
  • 高优先级中断长期占用CPU;
  • 波特率过高;
  • 关闭中断时间过长。

解决思路包括:

  • 增大接收缓冲区;
  • 使用环形缓冲区;
  • 使用DMA;
  • 缩短中断处理时间;
  • 将协议解析放到任务或主循环中;
  • 降低波特率;
  • 增加流控;
  • 优化任务优先级。

十九、USART帧错误怎么排查

帧错误通常表示:

应该出现停止位的位置,没有检测到正确的高电平。

常见原因包括:

  • 波特率错误;
  • 停止位配置不一致;
  • 数据线干扰;
  • 电平标准错误;
  • 接地异常;
  • 信号反相;
  • 发送端格式错误。

调试时可以用逻辑分析仪观察:

空闲电平是否为高 是否出现起始位下降沿 位宽是否对应目标波特率 停止位是否恢复高电平

二十、USART推荐调试顺序

实际项目中,USART异常可以按以下顺序排查:

第1步:确认供电正常 第2步:确认TX和RX交叉连接 第3步:确认GND共地 第4步:确认电平标准匹配 第5步:确认波特率一致 第6步:确认数据位、校验位、停止位一致 第7步:确认GPIO复用正确 第8步:确认USART外设时钟已开启 第9步:确认中断或DMA已经正确配置 第10步:发送0x55或0xAA观察波形 第11步:用逻辑分析仪测量位宽 第12步:检查TXE、TC、RXNE、ORE、FE等标志 第13步:最后再排查业务协议解析

调试时不要一开始就怀疑复杂业务逻辑。

最常见的问题往往是:

接线错误 参数不一致 电平不匹配 中断或DMA没有正确配置

图5 USART调试技巧与常见问题

USART出现乱码、收不到数据、丢字节或帧错误时,应先检查接线、共地、波特率、数据格式和电平标准,再检查中断、DMA、缓冲区和软件逻辑。


二十一、USART与TTL、RS232、RS485的关系

很多人容易把USART和TTL、RS232、RS485混在一起。

实际上它们关注的层次不同。

1. USART

USART主要描述:

数据如何收发

包括:

  • 起始位;
  • 数据位;
  • 校验位;
  • 停止位;
  • 波特率;
  • 发送和接收;
  • 状态标志;
  • 中断和DMA。

2. TTL串口

TTL串口主要描述电平标准。

常见电平为:

3.3V 5V

单片机的TX和RX通常属于TTL或CMOS电平。

3. RS232

RS232使用不同于TTL的电压范围和逻辑定义。

MCU的TTL串口不能直接连接标准RS232接口。

通常需要电平转换芯片,例如:

MAX232

4. RS485

RS485使用差分信号,适合长距离和工业现场通信。

MCU的USART通常需要通过RS485收发器连接到RS485总线。

常见芯片包括:

MAX485 SP3485

可以简单理解为:

USART负责数据格式 TTL / RS232 / RS485负责电气接口

二十二、USART工程实践建议

1. 初始化后先打印固定字符串

例如:

printf("USART INIT OK\r\n");

或者:

usart_send_string("USART INIT OK\r\n");

这样可以快速验证:

  • TX是否正常;
  • 波特率是否正确;
  • 上位机串口工具是否配置正确;
  • 发送路径是否打通。

2. 接收中断只做轻量操作

中断中建议只做:

读取数据 放入缓冲区 设置标志位

复杂协议解析应该放在主循环或任务中。

3. 使用环形缓冲区

USART是连续字节流。

接收数据时,推荐使用环形缓冲区暂存数据。

这样可以避免因为主循环暂时来不及处理而丢字节。

4. 不定长数据推荐DMA + IDLE

对于不定长协议,例如AT指令、串口屏、GPS数据等,DMA + IDLE是非常常见的接收方案。

它可以减少每字节中断,提高效率。

5. 增加错误统计

建议统计以下错误:

  • 接收溢出次数;
  • 帧错误次数;
  • 校验错误次数;
  • 缓冲区满次数;
  • 协议解析失败次数;
  • 通信超时次数。

这些统计信息对排查偶发问题非常有帮助。


二十三、USART和SPI、I2C的区别

对比项USART异步模式SPII2C
时钟方式异步,无单独时钟线同步,有SCLK同步,有SCL
常见信号线TX、RX、GNDSCLK、MOSI、MISO、CSSCL、SDA
通信方向全双工全双工通常半双工理解
设备选择无统一地址依靠CS片选依靠设备地址
ACK机制无统一ACK无统一ACK有ACK/NACK
常见用途调试、模块通信、日志输出Flash、屏幕、ADC传感器、EEPROM

USART异步模式最大的优势是:

  • 接线简单;
  • 调试方便;
  • 上位机工具多;
  • 适合日志输出;
  • 适合模块通信。

不足是:

  • 没有统一地址机制;
  • 没有统一ACK;
  • 波特率必须一致;
  • TTL串口不适合长距离;
  • 高速连续数据容易丢字节;
  • 应用层协议需要自行设计。

二十四、核心知识总结

学习USART,可以先记住以下结论:

  1. USART全称是通用同步/异步收发器。

  2. UART只支持异步通信。

  3. USART既支持异步通信,也支持同步通信。

  4. USART异步模式就是常见串口通信。

  5. USART异步模式常用TX、RX、GND。

  6. TX和RX需要交叉连接。

  7. 双方GND需要共地。

  8. USART同步模式会额外使用CK时钟线。

  9. CK通常由主设备提供。

  10. 异步模式靠波特率约定采样时刻。

  11. 同步模式靠CK时钟同步采样。

  12. 异步模式一帧数据通常包含起始位、数据位、校验位和停止位。

  13. 线路空闲通常为高电平。

  14. 起始位通常为低电平。

  15. 停止位通常为高电平。

  16. 数据通常低位先发送。

  17. 8N1表示8位数据、无校验、1位停止位。

  18. 波特率不一致容易出现乱码。

  19. TXE表示发送数据寄存器为空。

  20. TC表示发送完成。

  21. RXNE表示接收数据寄存器非空。

  22. IDLE常用于不定长数据接收。

  23. ORE表示接收溢出。

  24. FE表示帧错误。

  25. PE表示校验错误。

  26. 中断适合逐字节接收。

  27. DMA适合高速连续数据。

  28. DMA + IDLE适合不定长数据帧接收。

  29. 调试USART先看接线、共地、参数和电平。

  30. 最后再排查中断、DMA、缓冲区和协议解析。


二十五、结语

真正掌握USART,不只是会调用发送函数,而是能够理解整个通信过程:

CPU写入发送数据 ↓ USART硬件添加帧格式 ↓ TX引脚逐位输出 ↓ 对方RX检测起始位 ↓ 按波特率或CK时钟采样 ↓ 还原数据 ↓ 设置RXNE等状态标志 ↓ CPU通过中断、DMA或轮询读取数据

调试时,需要把以下几部分对应起来:

硬件接线 + 电平标准 + 波特率和8N1 + USART状态标志 + 中断或DMA + 接收缓冲区 + 逻辑分析仪波形 + 应用层协议

当这些内容能够对应起来时,就可以快速判断问题到底发生在:

  • TX/RX接线;
  • GND共地;
  • 电平转换;
  • 波特率;
  • 数据格式;
  • 起始位和停止位;
  • 状态标志;
  • 中断配置;
  • DMA配置;
  • 缓冲区;
  • 协议解析。

这也是从“会用串口”走向“能独立调试USART通信系统”的关键一步。


http://www.cnnetsun.cn/news/3150583.html

相关文章:

  • RAG 工程化实践:如何避免半成品文档进入在线召回
  • 微信 Dat 文件逆向分析:从 0x17CE 文件头到 PNG 图片的 3 步解密实战
  • 一次 Agent Run 是怎么发生的:从用户目标到工具调用、状态更新和风险拦截
  • STM32与H桥驱动芯片实现直流有刷电机高性能控制
  • 电机控制到底要学哪些东西?它不是一门课,而是一个交叉工程系统
  • 基于Codex与Claude的学术技能包:自动化科研工作流全解析
  • stortrace可视化分析:如何解读IO延迟热力图和时序图
  • 小米寥寥几家车企设计汽车顶棚
  • 速卖通商品信息自动翻译实现方案
  • 2026年AI论文软件测评:5款神器从大纲到答辩全链路通关攻略
  • 2026年靠谱AI论文软件全攻略(含保姆级操作教程)
  • WasmVideoPlayer:浏览器里直接播放H265视频
  • GitHub功能全览:含AI代码创作、多解决方案及汽车故障诊断音频ML项目
  • 性价比高的区域教育一体化管理平台哪个更完善
  • 云原生技术28-K8s排障实战:20个常见问题的快速定位与解决,从CrashLoopBackOff到Running的完整指南
  • SSTImap实战指南:自动化检测与利用服务器端模板注入漏洞
  • 2025年AI Agent爆发:程序员转型“智能体指挥官“的5个实战路径
  • cubesendbox安装过程踩坑笔记➕解决方案
  • 2026,需要处理音视频字幕的开发者该怎么选靠谱好用的字幕提取器
  • AI技能管理新范式:告别手动复制,实现提示词工程化与资产化
  • 终极GitHub下载加速指南:3分钟解决国内访问缓慢问题
  • 通过代理路由实现Codex无缝切换国产大模型:CC Switch配置指南
  • 从零理解 RBAC:元点Admin 如何实现按钮级权限控制
  • 2026实测解析:软件测试培训为什么首推橙好测试开发?零基础/转行必看
  • Skills Manager:开源AI技能管家,实现提示词工程化与团队协作
  • GPT-5.5 Instant:从拼智商到拼情商,AI助手如何变得更懂你
  • 基于大数据爬虫+Hadoop用户偏好迁移的电影推荐系统
  • Dify 实战指南:从零构建 AI 应用,掌握 Agent 工作流与 RAG 核心
  • 当我们在浏览器里点开一把小锁:SSL/TLS是怎么保护我们的
  • python字符串的四种定义方式