一、所选主题和项目介绍
本项目设计并实现了一款基于 STM32 双核架构的AMOLED 屏幕蓝牙网关,核心功能是通过低功耗蓝牙接收周边设备的数据,经过处理后在高分辨率条形屏幕上实时显示。项目采用模块化设计,将显示驱动与蓝牙通信分离,既保证了系统的稳定性,又便于后续功能扩展。
该网关可广泛应用于智能家居状态显示、工业设备数据监控、环境传感器数据展示等场景,具有体积小、功耗低、显示清晰、扩展性强等特点。
二、使用到的所有硬件介绍
硬件名称 | 型号 / 规格 | 数量 | 主要功能 |
|---|---|---|---|
主控制器开发板 | STM32U5A5 Nucleo-144 | 1 | 负责屏幕驱动、数据解析和显示控制 |
蓝牙控制器开发板 | STM32WB05 Nucleo-64 | 1 | 负责低功耗蓝牙数据的接收与发送 |
显示模块 | YDP302B001-V6 3.02 英寸 TFT LCD | 1 | 170×560 分辨率,262K 色显示 |
FPC 连接器 | OK-23GF024-04 24pin 0.4mm 间距 | 1 | 连接显示模块与主板 |
电源保护二极管 | SMF5.0A | 1 | 5V ESD 静电保护 |
自恢复保险丝 | 0603 封装 | 1 | 电源过流保护 |
电源指示灯 | 0603 红色 LED | 1 | 系统电源状态指示 |
贴片电容 | 100nF、1μF 0603 封装 | 各 1 个 | 电源滤波 |
贴片电阻 | 4.7kΩ 0603 封装 | 3 个 | 上拉电阻和限流电阻 |
排针连接器 | 2.54mm 间距 2P/8P/10P/16P | 640455-2 | 连接 Nucleo 开发板和外部设备 |
三、方案框图和项目设计思路介绍
3.1 系统方案框图
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 蓝牙设备群 │ │ STM32WB05 │ │ STM32U5A5 │
│ (传感器/开关) │<───────>│ 蓝牙控制器 │<───────>│ 主控制器 │<───────>┐
└─────────────────┘ BLE └─────────────────┘ UART └─────────────────┘ │
│
│
v
┌─────────────────┐
│ YDP302B001-V6 │
│ 显示模块 │
└─────────────────┘
^
│
┌─────────────────┐ ┌─────────────────┐ │
│ 5V电源输入 │────────>│ 电源保护与滤波 │───────────────────────────────────────┘
└─────────────────┘ └─────────────────┘
3.2 设计思路
- 双核架构设计:将蓝牙通信和显示驱动分离,由 STM32WB05 专门处理低功耗蓝牙协议栈,STM32U5A5 专注于高性能显示驱动和数据处理,避免了单芯片方案中蓝牙通信与显示刷新的资源冲突。
- 接口标准化:采用 Nucleo 标准排针接口,便于更换不同型号的 STM32 开发板进行功能验证和升级。
- 模块化设计:显示接口、蓝牙接口、电源电路各自独立,便于单独调试和维护。
- 兼容性设计:预留 Arduino 兼容接口,可直接连接各种 Arduino 扩展板,扩展项目功能。
四、原理图和 PCB 展示及介绍
4.1 原理图设计

本项目原理图分为以下 5 个功能模块:
- 电源输入与保护模块:5V 电源通过 CN6 输入,经过自恢复保险丝 U1 和 ESD 保护二极管 D1 后,输出 3.3V 系统电源。电源指示灯 PWR_LED 通过 R3 限流,指示系统供电状态。
- 显示接口模块:24pin FPC 连接器 CN1 连接 YDP302B001-V6 显示模块,包含 SPI 通信接口、电源接口和预留的触摸接口。
- STM32U5A5 接口模块:CN10 排针连接 U5A5 Nucleo 板的 SPI 和 GPIO 接口,实现屏幕的驱动控制。
- STM32WB05 接口模块:CN9 排针连接 WB05 Nucleo 板的 UART 和 GPIO 接口,实现蓝牙数据的传输。
- Arduino 兼容接口模块:CN5 和 CN6 排针提供标准 Arduino 接口,便于连接各种扩展模块。
4.2 PCB 设计

- 板层结构:两层板设计,顶层为信号层,底层为完整的地平面,保证了良好的信号完整性和 EMC 性能。
- 尺寸规格:90.85mm×73.72mm,适合安装在标准的塑料外壳中。
- 布局特点:
- 显示连接器 CN1 位于 PCB 中央,便于屏幕居中安装
- 电源电路位于 PCB 左侧,远离高速信号线路,减少电源噪声干扰
- Nucleo 接口位于 PCB 右侧和下方,便于插拔开发板
- 布线亮点:
- SPI 信号线采用蛇形等长布线,保证了信号的时序同步
- 所有高速信号线下方均为完整的地平面,无分割
- 电源走线宽度≥0.5mm,保证了足够的载流能力
- 在电源引脚和连接器附近密集放置接地过孔,降低接地阻抗
4.3 打版情况

当前为V0 版本首次打样,主要用于验证电路原理和基本功能。根据调试结果,后续可能会进行以下改进:
- 增加 1.8V LDO 电源芯片,解决 LCD IOVCC 电平匹配问题
- 增加 SPI 电平转换芯片,实现 3.3V MCU 与 1.8V LCD 的可靠通信
- 优化背光驱动电路,增加恒流驱动芯片
- 调整 PCB 布局,进一步减小板卡尺寸
五、调试软件、软件流程图和关键代码介绍
5.0 焊接调试




调试故障总结
- 原计划使用WB05和U5A5进行连接的,但是AMOLED显示器的板子放在上面,WB05的板子无法从下侧直接连接到U5A5,这是nucleo的一点缺陷,而且WB05不能安装到U5A5的上方。
5.1 调试软件
- STM32CubeIDE 1.14.0:用于 STM32U5A5 和 STM32WB05 的软件开发和调试
- STM32CubeMX 6.10.0:用于生成初始化代码和配置外设
- Serial Port Utility:用于串口调试和数据监控
5.2 软件流程图
STM32WB05蓝牙控制器流程:
开始 → 初始化系统时钟 → 初始化UART串口 → 初始化BLE蓝牙协议栈 → 开始广播 → 等待连接
→ 连接成功 → 接收蓝牙数据 → 通过UART发送给U5A5 → 循环接收发送
STM32U5A5主控制器流程:
开始 → 初始化系统时钟 → 初始化UART串口 → 初始化SPI外设 → 初始化LCD显示 → 清屏
→ 显示开机界面 → 等待串口数据 → 接收数据并解析 → 更新显示内容 → 循环等待
5.3 关键代码片段
STM32U5A5 SPI 初始化代码
c
运行
/* SPI2 init function */
void MX_SPI2_Init(void)
{
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // 18MHz
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 7;
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
}
LCD 初始化代码
c
运行
void LCD_Init(void)
{
LCD_RST_LOW();
HAL_Delay(10);
LCD_RST_HIGH();
HAL_Delay(10);
LCD_Write_Cmd(0x11); // Sleep out
HAL_Delay(120);
LCD_Write_Cmd(0x3A); // Set color mode
LCD_Write_Data(0x05); // 16-bit color
LCD_Write_Cmd(0x36); // Set memory data access control
LCD_Write_Data(0x00);
LCD_Write_Cmd(0x29); // Display on
HAL_Delay(10);
}
六、设计中遇到的难题和解决方法
6.1 QSPI 通信不稳定问题
问题描述:当 SPI 时钟频率设置为 36MHz 时,出现随机的通信错误,导致屏幕显示异常。
解决方法:
- 降低 SPI 时钟频率至 18MHz,通信稳定性显著提高。
- 在 PCB 布线中对 SPI 信号线进行蛇形等长处理,保证信号时序同步。
- 在靠近 LCD 端的 SPI 信号线上预留 33Ω 阻尼电阻位置,用于抑制信号反射。
6.2 电源噪声干扰问题
问题描述:背光开启时,屏幕上出现明显的水波纹干扰。
解决方法:
- 在 LCD 电源引脚附近增加 100nF 和 1μF 的去耦电容,且尽可能靠近引脚放置。
- 将背光电源与数字电源分开布线,避免电源噪声耦合到数字电路。
- 在 PCB 底层增加完整的地平面,降低接地阻抗。
七、心得体会
通过本次 AMOLED 屏幕蓝牙网关项目的设计与实现,我在硬件设计、PCB 布线和嵌入式软件开发方面都获得了宝贵的经验。
7.1 主要收获
- 电平匹配的重要性:在设计不同电平的器件接口时,必须仔细阅读数据手册,严格按照器件要求设计电平转换电路,避免因电平不匹配导致器件损坏。
- PCB 布线的细节:高速信号布线需要特别注意阻抗匹配、长度匹配和参考平面的完整性,这些细节直接影响系统的稳定性。
- 模块化设计的优势:采用模块化设计可以大大降低系统的复杂度,便于单独调试和维护,同时也提高了系统的可扩展性。
- 电源设计的关键作用:良好的电源设计是系统稳定工作的基础,必须充分考虑电源滤波、过流保护和 ESD 防护等问题。
7.2 改进建议
- 集成度提升:后续版本可以考虑将 STM32U5A5 和 STM32WB05 芯片直接焊接在 PCB 上,替代 Nucleo 开发板,进一步减小系统体积和成本。
- 电源优化:增加锂电池充电管理电路,使网关可以通过电池供电,提高便携性。
- 功能扩展:增加温湿度、气压等传感器接口,使网关不仅可以显示数据,还可以采集环境数据。
- 显示优化:优化 LCD 驱动代码,提高屏幕刷新速度和显示效果。
本次项目虽然遇到了一些问题,但通过不断的调试和改进,最终实现了预期的功能。在今后的设计中,我会更加注重细节,提高设计的可靠性和稳定性。