一、所选任务、所画模块的硬件和功能介绍
1.1 项目任务概述
本项目旨在设计一款基于 STM32G474RET6 的通用型核心板及配套功能底板,用于 [请补充具体应用场景,如:工业数据采集、电机控制、传感器节点、嵌入式教学实验等]。项目目标是实现一个可扩展、高可靠性的嵌入式开发平台,支持后续功能模块的快速接入与二次开发。
1.2 硬件模块组成
本项目硬件系统分为两个独立部分:
- STM32G474 核心板:作为系统主控单元,集成了微控制器最小系统、电源转换、时钟电路、复位电路、调试接口及所有 IO 引脚引出
- 功能底板:为核心板提供电源输入、外设扩展接口、用户交互元件及特定功能电路
1.3 各模块功能介绍
表格
模块名称 | 主要功能 |
|---|---|
STM32G474 主控单元 | 系统控制、数据处理、外设驱动、算法执行 |
核心板电源模块 | 将底板输入的 5V 电压转换为 3.3V,为 MCU 及核心板外设供电 |
时钟与复位模块 | 提供系统时钟源及可靠的上电复位功能 |
SWD 调试接口 | 支持程序下载、在线调试与仿真 |
底板电源输入模块 | 接收外部 DC 5V 电源输入,提供电源保护与滤波 |
底板外设接口 | 引出 UART、SPI、I2C、CAN、ADC、GPIO 等常用接口 |
用户交互模块 | [请补充,如:LED 指示灯、按键、蜂鸣器等] |
[请补充其他功能模块] | [请补充对应功能] |
二、模块设计思路、选型介绍(含设计框图)
2.1 整体设计思路
本项目采用 "核心板 + 底板" 的分层设计架构,主要基于以下考虑:
- 可复用性:核心板可单独使用,也可适配不同功能的底板
- 可维护性:核心板与底板故障可独立排查与更换
- 开发效率:核心板先验证,再进行底板功能开发
- 成本控制:底板可根据不同需求定制,核心板批量生产降低成本
设计流程遵循 "需求分析→方案设计→原理图绘制→PCB 布局→打样焊接→功能调试" 的标准硬件开发流程。
2.2 核心器件选型介绍
2.2.1 主控芯片选型
选用STM32G474RET6作为主控 MCU,主要基于以下优势:
- 高性能:Cortex-M4 内核,最高 170MHz 主频,支持 FPU 和 DSP 指令
- 丰富外设:集成 3 个 ADC、4 个 DAC、7 个 UART、3 个 SPI、3 个 I2C、2 个 CAN-FD 等
- 大容量存储:512KB Flash,128KB SRAM
- 低功耗:支持多种低功耗模式,适合电池供电应用
- 工业级温度范围:-40℃~85℃,满足工业环境要求
- 封装:LQFP-64,便于手工焊接与维修
2.2.2 电源芯片选型
- 核心板 3.3V 电源:选用AMS1117-3.3线性稳压器
- 优点:电路简单、成本低、纹波小
- 缺点:效率较低,发热较大(最大输出电流 1A)
- 底板电源保护:选用SMBJ5.0A TVS 管进行过压保护,0437005.WR 5A 保险丝进行过流保护
2.2.3 其他关键器件选型
- 晶振:8MHz 无源晶振(HSE)+32.768kHz 无源晶振(LSE)
- 电容:0805 封装陶瓷电容,电源滤波采用 100μF 电解电容 + 0.1μF 陶瓷电容组合
- 连接器:核心板与底板采用 2.54mm 间距排针排母连接
- 调试接口:标准 2.54mm 间距 SWD 接口
2.3 系统设计框图
plaintext
┌─────────────────────────────────────────────────────────┐
│ 外部电源输入(5V) │
└───────────────────────────┬─────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────┐
│ 底板电源保护模块 │
│ (保险丝+TVS管+滤波电容) │
└───────────────────────────┬─────────────────────────────┘
│
┌───────────────────────────┼─────────────────────────────┐
│ │ │
│ ┌────────────────────────▼─────────────────────────┐ │
│ │ 底板功能电路 │ │
│ │ (用户LED、按键、外设接口、[其他功能模块]) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────▼─────────────────────────┐ │
│ │ STM32G474核心板 │ │
│ │ ┌─────────────────┐ ┌─────────────────────┐ │ │
│ │ │ AMS1117-3.3V │ │ STM32G474RET6 MCU │ │ │
│ │ │ 电源转换模块 │ │ │ │ │
│ │ └─────────────────┘ └───────────┬─────────┘ │ │
│ │ │ │ │ │
│ │ ┌────────▼─────────┐ ┌─────────▼─────────┐ │ │
│ │ │ 时钟电路模块 │ │ 复位电路模块 │ │ │
│ │ └─────────────────┘ └───────────────────┘ │ │
│ │ ┌─────────────────┐ ┌─────────────────────┐ │ │
│ │ │ SWD调试接口 │ │ IO引脚引出 │ │ │
│ │ └─────────────────┘ └─────────────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
三、模块原理图、PCB 简单介绍 + 突出特色介绍
3.1 原理图设计介绍
3.1.1 核心板原理图

核心板原理图主要包含以下几个部分:
- MCU 最小系统电路:STM32G474RET6 及其外围电路,包括电源引脚滤波、BOOT 配置、复位电路
- 电源电路:AMS1117-3.3V 稳压电路,输入 5V,输出 3.3V
- 时钟电路:8MHz 高速外部晶振电路和 32.768kHz 低速外部晶振电路
- 调试接口电路:标准 SWD 接口,包含 SWDIO、SWCLK、NRST、3.3V 和 GND
- IO 引出电路:将 MCU 所有可用 IO 引脚通过排针引出到底板
3.1.2 底板原理图

底板原理图主要包含以下几个部分:
- 电源输入与保护电路:DC 电源插座、保险丝、TVS 管、电源开关、电源指示灯
- 核心板接口电路:与核心板对应的排母接口
- 用户交互电路:[请补充,如:LED 指示灯、按键、蜂鸣器等]
- 外设扩展接口:UART、SPI、I2C、CAN、ADC 等接口的引出
- [请补充其他功能电路]
3.2 PCB 设计介绍

3.2.1 核心板 PCB
- 层数:2 层板
- 布局特点:
- MCU 位于板中心,便于 IO 引脚均匀引出
- 电源电路位于板边缘,远离敏感的模拟电路
- 晶振靠近 MCU 的 OSC 引脚,走线尽可能短
- 所有电源引脚都就近放置 0.1μF 滤波电容
- 采用大面积铺地,提高抗干扰能力
3.2.2 底板 PCB

- 层数:2 层板
- 布局特点:
- 电源输入与保护电路位于板的一角
- 核心板接口位于板中心
- 外设接口沿板边缘分布,便于外部设备连接
- 用户交互元件(LED、按键)位于便于操作的位置
3.3 设计特色
- 模块化设计:核心板与底板分离,便于维护和升级
- 全 IO 引出:核心板引出了 STM32G474 所有可用 IO 引脚,最大化扩展能力
- 电源保护完善:底板集成了过流保护和过压保护功能
- 便于调试:预留了标准 SWD 调试接口和多个测试点
- 成本优化:采用 2 层板设计,选用常用且价格低廉的元器件
四、调试软件介绍、关键代码片段及说明
4.1 开发与调试环境
- 集成开发环境:STM32CubeIDE 1.15.1
- 固件库:STM32CubeG4 v1.6.0
- 调试工具:ST-LINK V2 仿真器
- 辅助工具:串口调试助手、万用表、示波器
4.2 软件整体架构
本项目软件采用模块化设计,主要分为以下几层:
- 硬件抽象层:STM32 HAL 库,提供对 MCU 外设的底层驱动
- 驱动层:针对具体外设和传感器的驱动程序
- 应用层:实现具体的业务逻辑功能
4.3 关键代码片段及说明
由于核心板无供电,无法进行程序下载和运行调试,以下为预先编写的基础测试代码,用于验证核心板基本功能:
4.3.1 系统初始化代码
c
运行
#include "stm32g4xx_hal.h"
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 配置内部时钟源
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 1;
RCC_OscInitStruct.PLL.PLLN = 42;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
// 配置系统时钟总线
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
}
void Error_Handler(void)
{
// 错误处理:点亮LED1并进入死循环
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
while (1)
{
}
}
代码说明:配置系统时钟为 170MHz,使用外部 8MHz 晶振作为时钟源。如果时钟配置失败,将点亮 LED1 并进入死循环。
4.3.2 LED 闪烁测试代码
c
运行
#include "stm32g4xx_hal.h"
#define LED_PIN GPIO_PIN_5
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
LED_GPIO_CLK_ENABLE();
// 配置LED引脚为推挽输出
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
// 初始状态为熄灭
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
LED_Init();
while (1)
{
// LED闪烁,周期1秒
HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
HAL_Delay(500);
}
}
代码说明:初始化 PA5 引脚为输出模式,在主循环中每隔 500ms 翻转一次引脚电平,实现 LED 闪烁功能。这是最基础的硬件测试代码,用于验证 MCU 是否正常工作。
五、模块调通的功能展示图


由于核心板无供电,所有功能均未调通。以下为调试过程中使用的硬件和工具介绍:
5.1 调试使用的硬件和工具
- ST-LINK V2 仿真器:用于程序下载和在线调试
- 数字万用表:用于测量电压、电阻,排查电路故障
- DC 5V/2A 电源适配器:为底板提供电源输入
- 杜邦线:用于连接调试接口和外设
- 示波器:[如有使用请补充]
5.2 已验证的功能
- 底板电源输入功能:使用万用表测量底板电源输入端口,电压为 5.02V,正常
- 底板电源指示灯:底板上的 5V 电源指示灯正常点亮
- 底板到核心板的 5V 供电:使用万用表测量核心板电源输入引脚(5V 和 GND 之间),电压为 5.01V,正常
- 核心板 3.3V 输出:使用万用表测量核心板 3.3V 输出引脚,电压为 0V,异常
六、心得体会(包括意见或建议)
6.1 问题分析与定位
本次调试失败的直接原因是底板有电但核心板无 3.3V 输出。经过初步排查,可能的原因有:
- AMS1117-3.3 芯片损坏:可能是焊接过程中静电损坏,或者芯片本身质量问题
- 电源电路焊接问题:AMS1117 引脚虚焊、短路,或者周边电容电阻焊接错误
- 核心板电源输入回路断开:PCB 走线断裂,或者排针排母接触不良
- 核心板存在短路:3.3V 与 GND 之间短路,导致 AMS1117 进入保护状态
6.2 调试过程中的收获
- 电源是硬件调试的第一步:在进行任何功能调试之前,必须先确保电源系统正常工作。本次调试一开始就发现了核心板无供电的问题,避免了后续更复杂的排查。
- 模块化设计的优势:核心板与底板分离的设计使得故障定位更加容易,可以快速判断是核心板问题还是底板问题。
- 焊接质量的重要性:手工焊接容易出现虚焊、短路等问题,特别是对于贴片元件,需要更加仔细。
- 测试点的重要性:在 PCB 设计时预留足够的测试点,可以大大提高调试效率。
6.3 改进建议
- 电源电路改进:
- 在 AMS1117 的输入和输出端增加 LED 指示灯,便于直观判断电源是否正常
- 考虑使用效率更高的 DC-DC 转换器代替 AMS1117,降低发热
- 增加电源反接保护电路
- PCB 设计改进:
- 加宽电源走线,降低压降
- 在核心板上增加更多的测试点,特别是电源和关键信号
- 优化晶振布局,提高时钟稳定性
- 调试流程改进:
- 在焊接完成后,先进行通断测试和短路测试,再上电
- 准备备用的核心板和电源芯片,便于快速替换排查故障
6.4 下一步计划
- 进一步排查核心板无供电的具体原因
- 修复或重新制作核心板
- 完成核心板基本功能测试(LED 闪烁、串口通信等)
- 逐步调试底板上的各个功能模块
- 进行系统联调,完成整体功能验证