☰
树莓派串口配置完全指南:UART、mini UART与USB转串口详解
2026/9/28 19:33:59 网站建设 项目流程

人第一次玩树莓派,最容易在串口上栽跟头。满心欢喜地把USB转串口模块插上去,ls /dev一看,ttyUSB0是出来了,结果写程序打不开;或者明明照着教程改了/boot/config.txt,GPIO 14、15 却死活不出数据。这些坑我当年全踩过,而且每次都得翻半天资料才能理清头绪。树莓派上的“串口”远不止一个,它涉及硬件 UART、mini UART、蓝牙复用、USB 转串口芯片,甚至还有内核设备树映射,概念混在一起,新手根本分不清。

这篇我就把树莓派的各个串口从头到尾捋一遍:硬件上到底有哪几类串口、各自对应哪个/dev/节点、怎么配置才能让它们听话、实测中会踩到哪些坑。看完你至少能解决“我的串口为什么不能用”“该用哪个设备名”这一类基础问题,也能为后面做树莓派小车、ROS2 串口桥接 ESP32、接各种传感器模块铺平道路。

1. 树莓派串口家族全景:硬件上到底有哪几个串口

很多人以为树莓派只有一个串口,就是排针上那几根引脚。实际上“串口”这个概念在树莓派上至少有三个层面:芯片内部集成的 UART 控制器、通过 USB 总线扩展出来的 USB 转串口设备,以及通过 GPIO 模拟或 SPI 转出来的额外串口。这三类串口在系统里表现为不同的设备节点,用法和稳定性也完全不同。

1.1 芯片自带的两个原生 UART:PL011 与 mini UART

树莓派 SoC 内部集成了一组 ARM 外设,其中包含一个完整的 PL011 UART 和一个 mini UART。PL011 是 ARM 标准的外设 IP,由博通集成在 BCM2711(树莓派4B)和 BCM2835/2837 等芯片里,硬件上带 FIFO 缓冲区,支持硬件流控,波特率也比较准;mini UART 则是博通自己加的一个简化版 UART,仅仅挂在 GPU 的副时钟域上,没有 FIFO,或者说缓冲区弱很多,波特率还会跟随 GPU 核心频率抖动,高频下容易出乱码。

通俗点说,PL011 就像一台正经的台式机,稳定、功能齐全;mini UART 更像一个临时拼凑的替代品,平时用用还行,数据量大、波特率高或者环境复杂时就容易“掉链子”。树莓派型号不同,这两个 UART 的默认映射也不一样,这也是很多人困惑的根源。

树莓派 4B 上,PL011 对应/dev/ttyAMA0,mini UART 对应/dev/ttyS0。树莓派 3B/3B+ 上则反过来了——mini UART 默认被映射到 GPIO 14/15,也就是排针上的 TXD/RXD,PL011 被分配给了蓝牙模块。这个“反直觉”的默认配置导致 3B 系列的串口在默认状态下特别难用,速度一高就丢数据;而 4B 稍微好一些,GPIO 串口默认走的是 PL011,所以很多人说树莓派 4 的串口比 3 好使,这是有硬件依据的。

1.2 蓝牙模块占用的“隐形串口”

树莓派 3 代开始板载蓝牙,蓝牙芯片通过内部 UART 与 SoC 通信。这个内部连接占用的正是 PL011 UART,所以你会发现/dev/ttyAMA0在默认情况下“存在但不可用”,或者被系统分配给蓝牙协议栈。集群里跑的是 Bluetooth 服务,你往这个节点写数据,要么没反应,要么行为诡异。

这一点非常关键:在树莓派 3B 上如果你想用 GPIO 14/15 做串口通信,默认拿到的是 mini UART,也就是/dev/ttyS0,性能和稳定性都不理想。想用上真正的 PL011,需要先把蓝牙从 AMA0 上“赶走”,通过设备树参数将 PL011 重新分配到 GPIO 串口,同时让 mini UART 去伺候蓝牙(或者干脆把蓝牙关掉)。

在树莓派 4B 上,这个冲突弱了很多,因为芯片内部多了一组 UART 资源,默认 GPIO 串口就是 PL011,蓝牙用的是另一个独立路径。但 4B 上也有自己的坑,比如某些系统镜像里/dev/ttyAMA0仍然可能被 console 占用,后面我会展开讲。

1.3 USB 转串口设备:ttyUSB0 与 ttyACM0

除了原生 UART,树莓派最常用的串口就是 USB 转串口模块了。插上一个基于 CH340、CP2102、FTDI 芯片的 USB 转 TTL 模块后,系统会识别出一个新的串口设备节点。CH340 通常生成/dev/ttyUSB0,CP2102 也大多是ttyUSB0,而基于 USB CDC ACM 协议的设备(比如 Arduino 板载串口、STM32 虚拟串口、某些 4G 模块)会生成/dev/ttyACM0。

这两者的区别在于驱动框架不同。ttyUSB0走的是 usb-serial 驱动,ttyACM0走的是 cdc_acm 驱动,它们在数据缓冲、线路编码处理上有细微差异。实操中你一般不需要关心底层差异,只需要知道:如果你插上设备却没有出现ttyUSB0,先看看是不是芯片没供电或者线材有问题;如果出现的是ttyACM0,别奇怪,这是正常的,代码里把设备名改一下即可。

USB 转串口模块的好处是即插即用、不占用 GPIO、调试时方便插拔,坏处是如果你需要同时接多个串口设备,USB 口不够用,而且某些劣质模块在树莓派的 5V 和 3.3V 电平之间转换存在隐患。最常见的 CP2102 模块一般是 3.3V 的,CH340 模块很多是 5V 逻辑的,直接接树莓派 GPIO 需要注意电平匹配问题。

2. 从引脚到设备节点:串口映射关系与配置

理解了硬件层面有哪些串口,下一步就得明白系统里/dev/ttyXXX这些节点是怎么和物理引脚对应起来的。这个过程涉及设备树、内核驱动和 systemd 服务,看着复杂,其实只需要抓住几个关键配置文件。

2.1 默认映射:GPIO 14/15 到底对应哪个设备

树莓派的 GPIO 14(TXD)和 GPIO 15(RXD)是物理排针上的第 8 和第 10 脚,也是绝大多数串口外设连接的默认引脚。它们对应的 UART 控制器,在不同型号上映射不同。

  • 树莓派 4B / 400 / 5 上,GPIO 14/15 默认对应/dev/ttyAMA0(PL011)。
  • 树莓派 3B / 3B+ / 2B v1.2 上,GPIO 14/15 默认对应/dev/ttyS0(mini UART)。
  • 树莓派 Zero W 和 3 代一样,GPIO 串口默认是 mini UART。

要查看当前系统里 GPIO 14/15 对应的设备节点,可以看内核启动日志或者设备树信息:

dmesg | grep tty cat /proc/device-tree/aliases/uart0 cat /proc/device-tree/aliases/uart1

uart0和uart1是设备树中的别名,通过它们你能知道内核把哪个物理 UART 分配给了哪个功能。树莓派 3B 上你可能看到uart0指向ttyAMA0(蓝牙),uart1指向ttyS0(GPIO)。4B 上则通常是uart0指向ttyAMA0(GPIO),uart1指向蓝牙。

这个映射不是不能改的。通过配置/boot/config.txt里的dtoverlay参数,可以交换这两个 UART 的功能分配。

2.2 用 dtoverlay 把 PL011 换回 GPIO 串口

如果你用的是树莓派 3B/3B+,想让 GPIO 14/15 使用 PL011 而不是 mini UART,需要在/boot/config.txt(树莓派 4B 及更新版本路径可能是/boot/firmware/config.txt)里加上或修改这么一行:

dtoverlay=disable-bt

这一行的作用是禁用板载蓝牙,从而释放 PL011 给 GPIO 串口使用。重启之后,GPIO 14/15 就会指向/dev/ttyAMA0,而且这个 AMA0 是真正的 PL011。

如果你还想保留蓝牙,只是想把两者交换,可以用另一组设备树参数:

dtoverlay=miniuart-bt

这个参数将 PL011 分配给 GPIO 串口,而让 mini UART 去和蓝牙模块通信,考虑到蓝牙波特率不高,mini UART 的抖动对蓝牙影响小,算是两全的方案。

在树莓派 4B 上,通常不需要做这一步,因为默认 GPIO 串口已经是 PL011。但如果你发现/dev/ttyAMA0仍然被 console 占用——也就是说内核启动日志和登录 shell 直接输出到这个串口——你就需要在config.txt里删掉或注释掉enable_uart=1相关的 console 映射,或者调整cmdline.txt中关于console=serial0的配置。

最简单的方法:如果只想让某个串口完全归你的程序使用,就把/boot/cmdline.txt里的console=serial0,115200删除,同时保留console=tty1保证 HDMI 下的终端不受影响。

2.3 设备节点是如何生成的:从 pinctrl 到 udev

每次开机,Linux 内核根据设备树描述初始化 UART 控制器,然后注册对应的 tty 驱动,生成/dev/ttyAMA0、/dev/ttyS0这类节点。这个过程看起来是自动的,但背后的逻辑要注意:/dev/ttyS0不是说你插了个串口设备,而是“系统自带的串口芯片”,它由内核的 8250 系列驱动管理;/dev/ttyAMA0则由 PL011 驱动管理;/dev/ttyUSB0则完全由 USB 子系统动态枚举生成。

这也带来一个常见问题:USB 转串口模块插在不同的 USB 口上,设备名可能在ttyUSB0和ttyUSB1之间漂移。解决办法是用 udev 规则给设备绑定固定名称,比如按 USB 序列号或物理端口号绑定。新建一个规则文件:

sudo nano /etc/udev/rules.d/99-usb-serial.rules

内容示例:

KERNEL=="ttyUSB*", ATTRS{serial}=="A50285BI", SYMLINK+="ttyCH340"

这样每次插入对应设备,系统会自动创建一个/dev/ttyCH340的符号链接,你程序里直接用这个固定名字即可。如果你需要同时接多个 USB 转串口,这个技巧几乎是必备的,否则设备名一乱,ROS 节点或者 Python 脚本就会连错设备。

3. 实操:开启串口、配置参数、读写数据

理论说完了,我们来动手。这一节我给你一套从零开始的完整流程,包括如何开启硬件串口、如何测试收发、如何在 Python 里读写,以及一些常用的调试工具。别嫌基础,很多老手也会在某些细节上翻车。

3.1 用 raspi-config 开启硬件串口

树莓派默认情况下,GPIO 串口并没有完全开启,因为系统默认认为你可能不需要它,或者想省电。最稳妥的开启方式是运行:

sudo raspi-config

选择Interface Options→Serial Port,然后:

  • 问你是否要登录 shell 可访问串口:选否,这样系统不会把串口占为 console。
  • 问你是否要启用硬件串口:选是。

两步选完,重启。然后再看/dev下的节点,确认存在且没有被占用。

如果你是纯命令行操作,不想进交互界面,可以直接改/boot/config.txt,在文件末尾加上:

enable_uart=1

然后注释掉/boot/cmdline.txt里的console=serial0,115200,重启即可。注意,这里的enable_uart=1对树莓派全系有效,它的作用是告知 bootloader 和内核启用 GPIO 上的 UART,并设置电压摆率等服务参数。

重启后检查串口是否可用:

ls -l /dev/ttyAMA0 /dev/ttyS0 2>/dev/null

如果看到设备存在,说明串口已经起来了。接着用stty查看和设置参数:

stty -F /dev/ttyAMA0 115200 cs8 -cstopb -parenb

这条命令将波特率设为 115200,8 个数据位,1 个停止位,无校验。这是最常用的串口配置。

3.2 回环测试:一根杜邦线验证串口收发

无论你是刚拿到板子还是刚改完配置,回环测试都是最快验证串口是否正常的方法。把 GPIO 14(TXD)和 GPIO 15(RXD)用一根杜邦线短接,然后向串口发送数据,自己应该能收到自己发出的数据。

用 Python 快速验证:

import serial ser = serial.Serial( port='/dev/ttyAMA0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1 ) ser.write(b'hello, rpi uart\r\n') response = ser.read(64) print('received:', response) ser.close()

如果你看到终端打印出received: b'hello, rpi uart\r\n',说明串口硬件和系统驱动都正常。如果超时没有回应,先检查杜邦线是否插紧、GPIO 编号是否看错(是物理引脚还是 BCM 编号)、以及/dev/ttyAMA0是否真的对应 GPIO 14/15。

回环测试还有一个变种:如果你手头有 USB 转串口模块,可以把模块的 TXD 接到树莓派的 RXD、模块的 RXD 接到树莓派的 TXD,然后通过电脑串口助手发送数据。这样能同时验证树莓派原生串口和 USB 转串口两条链路。

3.3 用 minicom 做裸串口调试

Python 适合自动化场景,但日常调试时用命令行工具更快。树莓派上推荐安装minicom:

sudo apt update sudo apt install minicom

启动:

minicom -b 115200 -D /dev/ttyAMA0

-b指定波特率,-D指定设备。进入后用 Ctrl+A 然后按 Z 可以打开帮助菜单,里面有很多实用功能,比如切换十六进制显示、发送文件等。退出时按 Ctrl+A 再按 X。

另一个轻量工具是screen:

screen /dev/ttyAMA0 115200

用Ctrl+A加K退出。minicom 和 screen 都适用于串口调试,但 minicom 对串口的兼容性更好,尤其是非标准波特率、数据位设置等场景。我个人调试串口模块时习惯先用 screen 快速看一眼有没有数据流,再用 minicom 做详细交互。

调试 Linux 下的串口还有一个基础但重要的概念:串口设备默认可能有硬件流控或者行规程处理问题。如果你发现发送的数据带有多余的\r\n或者接收数据不完整,试着在 Python 里把rtscts和dsrdtr关掉:

ser = serial.Serial( port='/dev/ttyAMA0', baudrate=115200, rtscts=False, dsrdtr=False, xonxoff=False )

写作时要注意,写串口时如果不设置timeout,某些系统会一直阻塞在 read,不太好调试。建议一律给 read 加超时,至少 0.5 秒以上,根据实际数据频率调整。

4. 常见问题与排查技巧实录

串口调试中最浪费时间的就是“玄学问题”——代码逻辑没问题,但数据就是不对。这一节我把这些年踩过和帮别人排查过的典型问题整理出来,按出现频率排序,逐个给出定位方法和解决方案。

4.1 权限问题:Permission denied

新装系统后,普通用户访问/dev/ttyAMA0、/dev/ttyUSB0经常会遇到权限不足,提示Permission denied。原因是这些设备节点的属组是dialout,而你当前用户不在这个组里。

解决办法很简单:

sudo usermod -a -G dialout $USER

然后重新登录,或者执行一次logout再进终端。注意,不会立即生效,某些环境下需要重启一次。如果不想改用户组,也可以临时用sudo python运行脚本,但我不建议这么干,因为一旦你习惯用 sudo 跑 Python,后续文件权限、环境变量都会变得混乱。

类似的还有ttyACM0的权限问题,同样是加入dialout组解决。如果你用的是 Ubuntu Server 版系统,这个组名可能不同,有些发行版叫uucp或者tty,可以自行查看ls -l /dev/tty*的属组信息。

4.2 乱码问题:波特率、电平、地线缺一不可

串口通信最经典的问题就是乱码。出现乱码的根源往往是三个方面:

第一,波特率不一致。树莓派默认 console 波特率是 115200,你外接的 Arduino、ESP32、传感器模块可能运行在 9600 或 57600,收发的波特率不匹配,肯定乱码。这个问题好排查,确认双方波特率即可。

第二,电平不匹配。树莓派 GPIO 是 3.3V TTL 电平,很多 USB 转串口模块也是 3.3V,但有些模块是 5V 逻辑。5V 模块接到 3.3V 的树莓派 RX 引脚,轻则电平识别出错,重则烧毁 GPIO。判断方法:看模块上的标识,经常写有 3.3V 或 5V。实在不确定,用万用表量一下模块 TX 引脚在空闲状态下的电压,3.3V 左右没问题,5V 就需要加电平转换电路或者换个模块。

第三,地线没接。这是新手最容易忽视的。两个设备之间的串口通信,除了 TX、RX,还要共地。树莓派和 USB 转串口模块如果各自有独立电源,必须把双方的 GND 接到一起。地电平不同,信号就会在 0 和高电平之间漂移,表现就是乱码或者间歇性丢数据。我见过很多“换个波特率就好”的错觉,其实是地线接触不良。

4.3 GPIO 串口和蓝牙冲突:ttyS0 波特率不准

树莓派 3B 用户最常见的坑:GPIO 14/15 明明有设备节点,但数据传着传着就丢字节,或者用 115200 和外部模块通信时,对方收到的数据间隔不稳。这个基本可以断定为 mini UART 的时钟抖动问题。

mini UART 的时钟源是 GPU 核心频率,而 GPU 频率会根据系统负载动态调整,比如 CPU 降频时,串口波特率也跟着变。这导致两个问题:一是波特率不精确,二是和环境交互时时钟漂移。解决方法有两条:

  • 在config.txt中加dtoverlay=miniuart-bt,把 PL011 释放给 GPIO 串口,mini UART 用于蓝牙。
  • 或者加core_freq=250固定 GPU 核心频率,尽量减少 mini UART 时钟抖动,但这会让整机能耗增加,GPU 性能反而下降。

我建议优先走第一条路,因为 PL011 的稳定性好得多,而且配置简单。树莓派 4B 用户如果在 GPIO 上做高速通信(比如 1Mbps 以上),也要注意检查所用 UART 是否是 PL011 而不是 mini UART。

4.4 数据丢失:USB 转串口缓冲区与实时性

另一个高频问题是“Linux 从串口接收数据丢失”。这通常和硬件 UART FIFO 及内核 tty 缓冲区有关。树莓派上跑 ROS2、跑 Python,如果你不做特殊配置,接收端在高数据率下可能丢数据。

排查思路:

  • 先确认硬件配置:你是用 PL011 还是 mini UART?如果 mini UART,先解决时钟问题。
  • 检查内核日志:dmesg | grep tty看有没有 overrun 报错。如果有ttyAMA0: RX FIFO overrun之类,说明硬件 FIFO 溢出,可以降低波特率,或者修改内核打开更大的环形缓冲区。
  • 用 Python 读取时尽量用线程 + 队列,避免主线程忙于其他任务不及时read()。串口读操作如果间隔太大,内核缓冲区的数据会被新数据覆盖。

此外,USB 转串口模块本身的质量也会影响数据丢失率。FTDI 芯片的模块通常最稳,CP2102 次之,CH340 更适合低速率。如果要跑 921600 以上的高速串口,尽量别用 CH340 模块,实测在树莓派 4B 上 CH340 高速转发时会出现偶发丢包,而 FTDI 基本没有。

4.5 多路串口扩展:USB 串口池与板载串口选择

如果你的项目需要同时接多个串口设备,比如树莓派小车底盘、ESP32、GPS 模块、传感器集群,一个硬件 UART 明显不够。常见的扩展方式有几种:

  • USB Hub + 多路 USB 转串口。简单粗暴,但要注意总线上设备多了,中断和 DMA 占用会增加,USB 2.0 总线下典型支持十几个串口设备没问题,但要避免劣质 Hub 供电不足。
  • 使用 SPI 转 UART 芯片,比如 SC16IS752,一个芯片可以扩展两路 UART,通过 SPI 和 GPIO 中断实现。这种方式非常节省资源,适合复杂嵌入式场景。
  • 使用树莓派自身的多个 UART 控制器。树莓派 4B 上除了 AMA0 和 ttyS0,通过设备树还可以开启/dev/ttyAMA1到/dev/ttyAMA4,对应板载的另外几组 UART 引脚。但是这些引脚大多与蓝牙、HDMI、PWM 共用,不适合新手直接上手。

我在实际做多设备采集项目时,一般优先板载 PL011 给重要设备,剩下的传感器全部走 USB 转串口,然后通过 udev 规则固定设备名。这样既保证了关键链路稳定性,又降低了整体复杂度。

5. 不同场景下的串口选型建议

前面的内容主要是从“是什么”和“怎么用”的角度讲串口,这一节我从实际项目场景出发,聊聊该怎么选串口方案。不同场景对串口的稳定性、速率、易用性要求不同,选错了方案后续维护很头疼。

5.1 调试和开发场景:USB 转串口优先

如果你只是在电脑上开发、调试树莓派,或者和小伙伴一起调一个传感器模块,最省心的方式是让树莓派作为主机,外接 USB 转串口模块去连接外部设备。这样你不必折腾 GPIO 映射,也不用担心蓝牙冲突,插上就能用。

唯一的坑在供电。部分 USB 转串口模块在接入电脑时会由电脑供电,但接入树莓派后,树莓派的 USB 口输出电流有限,某些传感器或者模块如果用电较多,可能拉低电压导致树莓派重启。遇到这种情况,给 USB Hub 外接独立 5V 电源即可。

5.2 树莓派小车、机器人项目:GPIO 串口更可靠

像树莓派小车、ROS2 串口桥接 ESP32 这类项目,串口设备需要固定、稳定、无需依赖 USB Hub,板载 GPIO 串口更合适。特别是如果你要让树莓派通过 UART 给电机驱动板发指令,或者和 ESP32 做高速双向通信,PL011 的稳定性非常有价值。

投影到实际接线方式:

  • 树莓派 4B 用 GPIO 14/15,对应/dev/ttyAMA0。
  • 树莓派 3B 需要先配置dtoverlay=disable-bt或miniuart-bt,再使用/dev/ttyAMA0。
  • 树莓派 Zero 系列同理。

接线时注意交叉连接:树莓派 TXD → 对端 RXD,树莓派 RXD → 对端 TXD,GND → GND。我曾经见过不少人照着教程接线,结果收到一堆乱码,最后发现是把 TX 和 RX 接成直连了。排查这个问题最快的方法:回环测试 + 万用表测电压。

5.3 高速数据采集场景:硬件流控与 DMA

如果你的应用涉及大量数据,比如高分辨率 IMU 传感器、GPS 差分信号、图像处理辅助数据,串口波特率往往得上到 460800 甚至 921600。此时需要注意两个问题。

一个是硬件流控。PL011 支持 RTS/CTS 硬件流控,可以在高速传输时防止接收端来不及处理导致丢数据。接线时需要多接 RTS/CTS 两根线,并且在对端设备也支持硬件流控的情况下才有效。

另一个是串口 DMA。树莓派内核默认对 PL011 开启了 UART DMA 支持,但如果你用了 Python 的 pyserial,DMA 带来的提升可能不明显,因为瓶颈在应用层读取频率。要充分发挥 DMA 优势,需要用 C 语言编写读取程序,或者用像xbee、serial-com这类底层库,或者干脆直接用ioctl操作。

说实话,对绝大多数爱好者项目,115200 波特率+PL011 已经非常够用。真正需要 921600 的场景,往往得用 SPI 而不是 UART。能用 SPI 不用串口,这是我做传感器采集项目后的切身体会。

5.4 一句话总结各串口适用场景

串口类型设备节点典型场景注意事项
PL011 UARTttyAMA0稳定通信、机器人控制、GPS 等可能被蓝牙/console 占用
mini UARTttyS0临时调试、低速传感器波特率随 GPU 频率抖动
USB 转串口ttyUSB0 / ttyACM0多外设扩展、动态接入设备名可能漂移,注意供电
虚拟串口/dev/pts/x软件模拟调试只用于软件层面,不接硬件

这个表格不是绝对的,但能帮你快速判断当前手里项目该优先碰哪个设备。

6. 善用工具与后续扩展思路(个人经验)

最后聊一点工具层面的个人体会,以及串口应用可以往哪个方向深入。

工具方面,除了前面提到的 minicom、screen、pyserial,还有几个我觉得很实用的。

jserialcomm是 Java 的串口库,如果你用 Java 写上位机,它比一些老旧的 native 库好用。cutecom是一个带界面的调试工具,适合图形化查看数据。busybox microcom常用于嵌入式精简环境,树莓派上也能装。ioio和ser2net可以把串口映射到 TCP 端口,这样你可以通过网络访问远程串口设备,在远程调试和设备集群管理时很有用。

另外一个我强烈建议安装的工具是python3-serial的配套工具pyserial,它不仅能读写串口,还自带miniterm.py脚本,可以快速开一个串口终端,不需要额外装 minicom:

python -m serial.tools.miniterm -e -b 115200 /dev/ttyUSB0

-e选项会显示收到的控制字符,调试诸如换行符、回车符、转义字符的收发非常直观。

在后续扩展上,串口相关的方向可以做很多事情。比如把树莓派的串口数据接入 Node-RED 做可视化仪表盘,或者用 MQTT 把串口数据桥接到云端,再或者用串口配合 GPS 模块做定位数据记录仪。如果是做 ROS2 开发,把串口封装成serial_bridge节点并不复杂,只需要在你的启动脚本里加入串口参数配置,就能让 ESP32、STM32 等底层控制器与上层算法通信。

做串口项目越久越觉得,UART 虽然看起来简单,但坑几乎都在细节里。设备树怎么配、地线接没接、波特率是否一致、权限有没有加上,一个不注意就是要么没数据,要么数据乱飞。把这些基础打磨好,后续做树莓派小车、智能家居、环境监测站这些项目才会有底气。

最后分享一个我吃过亏后的习惯:每次接线和配置完,第一件事不是写代码,而是先用回环测试确认物理链路通不通。别看这个动作简单,它能帮你把“硬件问题”和“软件问题”快速分开,省下的排查时间远超做测试的那一分钟。串口通信没有高深理论,本质上就是把每一层细节都弄清楚,剩下的交给耐心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询