站内搜索
发作品签到
专业版

STM32_串口显示器

工程标签

96
0
0
0

简介

STM32三通道串口数据显示器。基于STM32F103C8T6,可同时监控三个UART通道数据,实时显示在0.96寸OLED屏上。支持文本/十六进制自动识别,配备按键菜单,可配置波特率、刷新率等参数。

简介:STM32三通道串口数据显示器。基于STM32F103C8T6,可同时监控三个UART通道数据,实时显示在0.96寸OLED屏上。支持文本/十六进制自动识别,配备按键菜单,可配置波特率、刷新率等参数。
复刻成本:55

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2026-02-02 15:20:55更新时间:2026-02-10 22:39:54

描述

STM32三通道串口数据显示器

一个基于STM32F103C8T6的实用工具,可同时监控、解析并显示三个独立UART串口通道的数据流,并通过OLED屏幕与交互菜单进行可视化。

演示视频在附件中。

实物演示0

实物演示1

实物演示2

🎯 项目简介

在嵌入式开发、通信调试或设备监控过程中,常常需要同时观察多个串口的数据。本项目就是为了解决这个痛点而生。它使用一颗常见的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

pcb图

串口通信接口

  1. USART1:引脚 PA9 (TX), PA10 (RX)

  2. USART2:引脚 PA2 (TX), PA3 (RX)

  3. 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):提供时基,用于按键防抖、界面刷新定时、滚动动画计时。

工作流程

  1. 中断驱动数据接收:任意串口收到数据,立即触发中断,将数据存入对应通道的缓冲区。

  2. 主循环数据处理:主循环检测到数据接收标志,调用显示模块的UpdateUARTData函数。该函数执行智能识别(判断是否为可打印文本),并将结果格式化后存入显示缓冲区。

  3. 界面刷新:显示模块根据内部状态(正常模式、菜单模式、编辑模式)和定时器,将显示缓冲区的内容渲染到OLED屏幕上。

  4. 按键交互:按键状态机运行,任何操作都会触发状态切换或参数修改,并请求屏幕立即刷新,实现流畅的交互反馈。

⚙️ 快速开始

  1. 硬件准备:元器件、焊接工具、数据线等。

  2. 软件编译:使用Keil uVision 5打开工程文件,确认芯片型号和调试器配置正确,编译项目。

  3. 程序烧录:通过ST-LINK或串口将编译好的固件烧录至单片机。

  4. 连接使用:为设备供电,将需要监控的TTL串口设备连接到对应的UART引脚上,即可在屏幕上观察数据。

  5. 老生常谈:使用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

3D模型

序号文件名称下载次数
1
3DShell_PCB1.zip
0

附件

序号文件名称下载次数
1
串口上位机.zip
0
2
演示视频.zip
0
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航