
STM32_串口显示器
简介
STM32三通道串口数据显示器。基于STM32F103C8T6,可同时监控三个UART通道数据,实时显示在0.96寸OLED屏上。支持文本/十六进制自动识别,配备按键菜单,可配置波特率、刷新率等参数。
简介:STM32三通道串口数据显示器。基于STM32F103C8T6,可同时监控三个UART通道数据,实时显示在0.96寸OLED屏上。支持文本/十六进制自动识别,配备按键菜单,可配置波特率、刷新率等参数。开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
STM32三通道串口数据显示器
一个基于STM32F103C8T6的实用工具,可同时监控、解析并显示三个独立UART串口通道的数据流,并通过OLED屏幕与交互菜单进行可视化。
演示视频在附件中。



🎯 项目简介
在嵌入式开发、通信调试或设备监控过程中,常常需要同时观察多个串口的数据。本项目就是为了解决这个痛点而生。它使用一颗常见的STM32F103C8T6作为主控,驱动一个0.96英寸OLED屏幕,能够实时监听、处理并显示来自三个独立UART通道(USART1/2/3)的数据。
项目核心特点是智能、直观、可配置。它不仅能显示原始数据,还能自动识别数据是可读文本还是二进制流(自动以十六进制格式化显示)。用户可以通过简单的按键在通道间切换,并进入设置菜单调整各项参数,使其能够灵活适配各种调试场景。

✨ 功能亮点
-
三通道独立监控:真正同时监听USART1、USART2、USART3,数据接收互不干扰。
-
智能数据显示:自动判断数据为ASCII文本或二进制,并选择最佳显示格式(文本或Hex)。
-
交互式配置菜单:通过按键进入多层菜单,可动态配置:
-
串口参数(波特率、数据位、停止位、校验位)
-
显示参数(刷新频率、数据识别模式)
-
-
清晰的用户界面:
-
顶部状态栏显示当前通道、数据类型和接收统计。
-
主区域分页显示数据内容,长数据支持滚动。
-
底部状态栏显示数据长度和刷新时间。
-
-
即时响应:优化的软件架构确保按键操作和数据刷新无肉眼可见延迟。
🛠️ 硬件设计详解
核心组件
| 组件 | 型号 | 说明 |
|---|---|---|
| 主控芯片 | STM32F103C8T6 | ARM Cortex-M3内核,72MHz主频,64KB Flash,20KB RAM |
| 供电芯片 | LMS1117-3.3 | 3.3V稳压器,提供稳定电源 |
| 显示屏 | 0.96寸OLED | SSD1306驱动,128×64分辨率,4引脚(I²C接口) |
| 接口 | Type-C | 供电与程序下载接口 |
| 按键 | 4个机械按键 | 用于菜单导航和功能操作 |
核心电路
-
主控MCU:STM32F103C8T6,运行于72MHz,提供充足的性能处理三路串口数据流。

-
供电:采用5V USB输入,经线性稳压芯片降压至3.3V供电。(此处16pin-TypeC可以更换为6pin-TypeC,主要看你手上有什么物料。因为目前电路中只需要TypeC提供供电而已,即VBUS和GND)

- 人机交互部分:由按键电路和oled显示屏组成。

- PCB:

串口通信接口
-
USART1:引脚 PA9 (TX), PA10 (RX)
-
USART2:引脚 PA2 (TX), PA3 (RX)
-
USART3:引脚 PB10 (TX), PB11 (RX)
内部TX、RX已与接口处交换,可直接连接到TTL电平的串口设备的对应收发引脚。
人机交互部分
-
显示:采用0.96英寸OLED显示屏,I2C接口(SCL: PB8, SDA: PB9),分辨率128x64,兼顾显示信息量与功耗。
-
输入:三个直插按键,分别定义为“上翻”、“下翻”、“确认/设置”,连接至PA5、PA6、PA7,电路为上拉输入模式。
💻 软件设计架构
项目采用清晰的分层与模块化设计,便于理解和二次开发。代码结构以及编写逻辑参考了up主@江协科技 的32单片机串口+OLED显示屏+非阻塞式按键代码以及up主@梦想做游戏的电工薯 的多级菜单代码。
Project/
├── main.c # 主程序入口,调度器
├── serial.c/.h # 串口管理器(核心通信模块)
├── oled_display.c/.h # 显示引擎(UI渲染核心)
├── key.c/.h # 按键管理器(状态机实现)
├── timer.c/.h # 定时器服务(时基)
└── delay.c/.h # 配置文件
other ├── stm32f10x_it.c # 中断服务程序
└── system_stm32f10x.c
核心模块
-
主循环 (
main.c):协调调度所有任务,包括按键扫描、数据处理、显示更新。 -
串口管理器 (
serial.c/.h):初始化三路串口,配置中断服务程序,实现高效、可靠的数据接收与缓冲区管理。 -
显示引擎 (
oled_display.c/.h):最核心的模块之一。负责:-
驱动OLED底层绘制
-
管理多种显示界面(数据显示、菜单、设置)
-
实现数据格式化(文本截断、Hex转换、滚动算法)
-
-
按键管理器 (
key.c/.h):实现状态机,精准识别单击、长按、连发等操作,为菜单交互提供基础。 -
定时器服务 (
timer.c/.h):提供时基,用于按键防抖、界面刷新定时、滚动动画计时。
工作流程
-
中断驱动数据接收:任意串口收到数据,立即触发中断,将数据存入对应通道的缓冲区。
-
主循环数据处理:主循环检测到数据接收标志,调用显示模块的
UpdateUARTData函数。该函数执行智能识别(判断是否为可打印文本),并将结果格式化后存入显示缓冲区。 -
界面刷新:显示模块根据内部状态(正常模式、菜单模式、编辑模式)和定时器,将显示缓冲区的内容渲染到OLED屏幕上。
-
按键交互:按键状态机运行,任何操作都会触发状态切换或参数修改,并请求屏幕立即刷新,实现流畅的交互反馈。
⚙️ 快速开始
-
硬件准备:元器件、焊接工具、数据线等。
-
软件编译:使用Keil uVision 5打开工程文件,确认芯片型号和调试器配置正确,编译项目。
-
程序烧录:通过ST-LINK或串口将编译好的固件烧录至单片机。
-
连接使用:为设备供电,将需要监控的TTL串口设备连接到对应的UART引脚上,即可在屏幕上观察数据。
- 老生常谈:使用STM32最小系统板进行功能验证时一切正常,PCB板验证时出现过显示迟滞的现象,解决方案是更换8MHz晶振的起振电容,由20pF改为10pF(不过我的板子问题感觉应该是单片机芯片晶振那边的引脚没上到锡,笑死,因为是我用60W便宜烙铁纯手焊的,难免会有点漏洞,不过补焊了一下就好了,完美起振完美运行)。目前已更新2.0(DMA)和3.0(掉电记忆)版本代码,其中3.0掉电记忆功能暂未完善,有兴趣的可以自行补充,若只是使用者建议烧录1.0版本代码使用即可,在使用层面上1.0和2.0版本无异,感兴趣的小伙伴也可以自行优化代码或界面,实现更强大的功能效果,不出意外的话这个项目对于我来说目前状态就属于是结束了。
📄 许可
本项目采用 GPL 3.0 开源协议。您可以自由地使用、修改和分发本项目的代码与设计,但如果您分发修改后的版本,也必须基于相同的GPL 3.0协议开源。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论