news 2026/10/14 11:11:35

串口USART-通用同步/异步收发器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
串口USART-通用同步/异步收发器

串口是什么

  • 串行通信接口
    串行通信:数据一位一位地传

并行通信:数据通过多条线同时传输

USART 通用同步异步收发器

  • 两根线:TX=发送 (Transmit) RX=接收(Receive)
  • 全双工异步通信

全双工通信:发送和接收可以同时进行
单工通信:数据只能沿一个方向传输
半双工通信:数据可以沿两个方向传输,但需要分时进行

异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号
同步通信:双方共用同一个时钟信号

  • 常用于调试打印,和蓝牙/GPS/WiFi模块通信

通信参数

  • 波特率:每秒传多少位数据
  • 数据帧格式:[空闲-高电平]->[起始位-1位]->[数据位-8位]->[停止位-1位]->[空闲-高]

起始位:拉低,开始传
数据位:8位,真正的数据,先传低位
停止位:拉高,传完了

USART vs UART

USART = 通用同步异步收发器(多了同步能力S,带SCLK时钟线)
UART = 通用异步收发器(只有异步)
STM32的USARTx平时当UART用(异步),同步模式像SPI,较少用

STM32 USART引脚


USART1挂载在APB2上,72MHz最常用

USART2挂载在APB1上,36MHz

USART3挂载在APB1上,36MHz

配置步骤

  1. 开时钟:GPIO+USART
  2. GPIO初始化:TX为复用推挽输出,RX用上拉输入
  3. 配置USART:波特率,数据位,停止位,校验,收发模式,硬件控流
  4. 使能USART:USART_Cmd
  5. 发送接收数据
  6. (可选)中断接收:USART_ITConfig开启RXNE中断 + 配置NVIC

串口数据包

为什么要有数据包?

单字节发送无法区分"一个完整的数据",数据包给数据加包头包尾,接收方按帧解析

固定帧(江协例程)

格式:FF包头 + 4字节数据 + FF包尾

  • 包头0xFF标记一帧开始,包尾0xFF标记结束(FE风格)
  • 接收状态机:RxState 0→1→2,逐字节判断包头→存数据→认包尾

可变帧

格式:@ + 数据 + \r\n

  • @标记开始,\r\n标记结束
  • 适合文本命令,如"@1234\r\n"

固定帧 vs 可变帧

固定帧可变帧
包头包尾0xFF / 0xFE@ / \r\n
适合二进制数据(传感器值)文本命令
长度固定可变
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 11:11:16

自托管AI编程助手Tabby完全指南:私有化部署与代码补全实践

最近我经常被问到同一个问题:有没有一种方式,既想用 AI 帮自己写代码,又不想把代码传到别人的服务器上。我以前总推荐直接用 Copilot,确实好用,补全自然,聊天也方便。但时间长了你会发现,代码逐…

作者头像 李华
网站建设 2026/10/14 11:09:54

深入解析线程互斥与临界资源保护机制

1. 线程互斥的核心概念解析 在深入探讨线程互斥之前,我们需要先理解几个关键概念。这些概念是多线程编程的基石,也是理解互斥机制的前提条件。 1.1 共享资源与临界资源 在多线程环境中,线程之间可以通过共享数据来完成交互。这些被多个线程…

作者头像 李华
网站建设 2026/10/14 11:08:26

SpringBoot多商户电商系统架构设计与实现

1. 项目概述 这套基于SpringBoot的多商户电商系统完整代码,是我在实际商业项目中经过验证的成熟解决方案。不同于市面上那些"玩具级"的demo,这套系统完整实现了多商户入驻、商品管理、订单处理、支付对接等电商核心功能模块。最让我满意的是它…

作者头像 李华
网站建设 2026/10/14 11:08:08

C++有限元程序源码实战:从单元刚度矩阵组装到求解器避坑指南

简介:这是一份面向有限元方法初学者与C编程入门者的实践型资源,核心是一套用C编写的有限元计算程序及其完整源码,适合希望把有限元理论与代码实现结合起来、动手跑通第一个FEA小项目的同学。压缩包共6个文件,约7KB,体量…

作者头像 李华
网站建设 2026/10/14 11:07:50

插件机制底层逻辑:从加载失败到接入即用的排查指南

plugins:从“加载失败”到“接入即用”,一文吃透插件机制的底层逻辑先说个扎心的事实:你搜索“plugins”,十有八九不是来学概念的,而是因为某个插件又“did not activate”了。我见过太多人——包括我自己——在部署管…

作者头像 李华
网站建设 2026/10/14 11:07:47

Linux字符设备驱动入门:从Hello World到LED控制

1. 这不是“Hello World”,而是驱动世界的入场券 很多人第一次听说“Linux驱动”,脑子里浮现的是黑乎乎的终端、满屏滚动的dmesg日志,或者某个神秘模块加载失败后报出的“Unknown symbol in module”错误。其实大可不必——驱动开发远没有传说…

作者头像 李华