资讯动态

STM32F103RCT6+W5500无线基站板:从原理图到源码的设计解析

发布时间:2026/9/14 22:31:22 来源:尧图企业网站定制
简介面向嵌入式与物联网开发者的STM32F103RCT6W5500无线基站板完整设计资料以2层板145×100 mm形式提供硬件原理图、PCB与封装库同时包含配套STM32软件源码适合需要快速搭建无线数据采集、基站或网关原型的工程师学习参考。压缩包内共717个文件其中AD设计部分含schdoc、pcbdoc、schlib、pcblib等文件软件部分以C/C源码.c/.h、Keil工程uvproj/uvopt及编译输出hex/axf为主整体约21MB便于本地展开后按硬件与软件目录检索。目前已有1061人学习下载。除完整可改的原理图与PCB工程外还附带覆盖LQFP48、LQFP64、ESP-07、HR911105A、USB_B等31类常用器件的封装库可直接用于后续项目复用软件源码便于理解W5500以太网通信与STM32外设配置流程是一套从画板到写驱动的闭环参考方案。1. STM32F103RCT6W5500 无线基站板主控、回传与完整交付看到 STM32F103RCT6 和 W5500 这两个芯片第一反应通常是开发板但标题里加了“无线基站板”四个字角色就变了这不是一块练手的学习板而是一块要长期通电、跑协议、做数据回传的设备主控板。STM32F103RCT6 负责应用逻辑和无线模块的调度W5500 用 SPI 口给设备接一条 10/100M 以太网链路。由于 TCP/IP 协议栈在 W5500 内部由硬件完成STM32 不需要为每个连接中断发愁这对只有 48KB RAM 的 F103 来说非常关键。配套的原理图、PCB、封装库和软件源码正好覆盖了一个嵌入式网络设备从图纸到固件的完整链路。下面顺着这四个交付物往下拆讲清楚每一块的设计取舍和落地参数。2. 原理图设计STM32F103RCT6 最小系统、W5500 SPI 链路与 ERC 检查2.1 STM32F103RCT6 最小系统与 boot 引脚怎么画STM32F103RCT6 是 LQFP64 封装256KB Flash、48KB SRAM跑 72MHz 主频。原理图设计从最小系统开始少画任何一个电源引脚都会让板子在上电后表现得很奇怪。3.3V 电源走星形拓扑每个 VDD 引脚放一颗 100nF远端再加一颗 10uF 钽电容或多层陶瓷电容VDDA 建议串一颗 10 欧电阻再进 3.3V同时并 100nF。复位脚 NRST 接一颗 100nF 到地配合外部按键或者直接由调试器驱动。8MHz 晶振的两个引脚各接一颗 20pF 电容到地晶振两端并一颗 1M 电阻用于反馈偏置。这些参数都是 F103 数据手册推荐值直接照抄即可。boot 引脚的画法在热词里出现频率很高这里说清楚。BOOT0 和 BOOT1 各用一颗 10k 电阻下拉到 GNDBOOT0 再预留一颗 0 欧电阻到 3.3V。这样默认从主 Flash 启动需要 ISP 下载时把 0 欧电阻焊上BOOT0 被拉高BOOT1 保持低复位后进入系统存储器。具体启动关系见表。BOOT0BOOT1启动位置0任意主 Flash10系统存储器ISP11SRAM注意 STM32F103 在 LQFP64 封装上 BOOT1 跟 PB2 是同一个引脚。如果原理图里把 PB2 直接接 3.3V 上拉一是 ISP 模式会变成 SRAM 启动二是 PB2 作为普通 IO 用时会受限制。所以 BOOT1 那颗下拉电阻必须保留要复用 PB2 就只让它经 10k 到地不接其它强驱动网络。2.2 W5500 电路图SPI 四线、复位和中断的引脚映射W5500 是一颗 3.3V 供电、SPI 从机接口的以太网控制器外部只需要一颗 25MHz 晶振和一对网络变压器。画原理图时先把引脚映射表列出来放在手边能少走很多弯路。下面这张表是按照 SPI1 外设做的典型接法。W5500 引脚功能连接目标SCSSPI 片选STM32 PB12SCLKSPI 时钟PA5 (SPI1_SCK)MOSI主机出从机入PA7 (SPI1_MOSI)MISO主机入从机出PA6建议加 10k 上拉RSTn复位控制PB11由 GPIO 控制INTn中断输出PB10下降沿触发 EXTIW5500 的 MISO 是三态输出空闲时是高阻建议在 MISO 上加一颗 10k 上拉防止 STM32 的输入悬空。RSTn 不能直接接 STM32 的复位信号要单独留 GPIO 控制上电后 STM32 置低至少 500us 再拉高让 W5500 完成内部复位。这个时序在软件源码里也会体现。网络变压器方面最省事的做法是用带变压器的 RJ45 一体座比如 HR911105A。它内部集成了共模电感和端接电阻网络外围只需按数据手册把中心抽头和 LED 引脚接好。用分离式变压器时要特别注意 TXCT/RXCT 中心抽头的接法按变压器规格接 3.3V 或电阻电容网络接错会导致网口丢包严重。25MHz 晶振的负载电容按 10~15pF 选取具体以晶振规格书为准。还有一点很多人会漏W5500 的 INTn 是开漏输出必须加上拉电阻到 3.3V否则中断信号丢失软件里状态永远轮询不到。2.3 AD 原理图编译与 ERC连线有没有接上在 AD 里把连线画完先别急着进 PCB做一次编译检查。菜单 Project - Compile PCB Project快捷键 CC编译结果会出现在 Messages 面板。常见的错误类型包括 Duplicate Net Name、Unconnected Pin、Floating Net Label其中 Unconnected Pin 最多多数是某个引脚忘了连网络标号。如果某些引脚按数据手册要求不接比如 NC 脚不要空着放一个 No ERC 标记菜单 Place - Directives - No ERC。不加标记的话ERC 会把它当作悬空引脚报出来干扰真正问题的排查。AD20 里可以通过 Project - Project Options - Error Reporting 调整报错级别把 W5500 那些 NC 脚对应的告警改成 Ignore。注意不要全局 Ignore否则真漏连也看不出来。建原理图库时就要把 BOOT0、NRST、VDDA 这类特殊引脚单独命名不要都用 NET1、NET2。AD 的编译检查靠网络名做连接关系判断命名不规范时 ERC 提示基本没法看。检查“原理图有没有连上”还有一个被低估的功能交叉探测。在原理图里选中某个网络右键切换到 Cross SelectPCB 中会高亮同一网络PCB 里选中网络也能反向定位到原理图。补连线和评审阶段用这个方式效率很高。3. PCB 设计层叠、板框导入、差分对走线与铜皮挖空3.1 层叠与板框用 DWG 文件导入 AD 生成基站板外形无线基站板往往需要配合机箱、天线馈线和固定孔位板框不能随手画。最常见做法是结构工程师在 AutoCAD 里画好 dwg再导入 AD。流程是File - Import - DWG/DXF导入时把单位选成 mm缩放比例保持 1:1图层映射建议全部放到 Mechanical 1 层。导入后选中板框线条用 Design - Board Shape - Define from selected objects 生成板外形。如果手头没有 DWG也可以直接在 AD 里用 PT 在 Mechanical 1 层画闭合线框再执行同样的 Define 操作。注意板框必须是闭合图形有断点的话 AD 会提示 Board Shape 定义失败。这时候用 CtrlM 测量工具检查关键尺寸比如天线安装孔的中心距、网口端口的凸出长度确认无误后再进入布局。层叠选择上1.6mm 板厚、4 层板是这类板子的基准配置顶层走信号和射频走线第二层完整地平面第三层电源平面底层走低速信号。2 层板虽然也能把 W5500 跑通但以太网差分对和天线区域没有完整参考平面EMC 性能会差很多。层叠厚度一般取相邻层间距 0.2mm 左右、外层铜厚 1oz 内层 0.5oz 的常见组合最后以板厂的叠构表为准。如果预算限制只能做 2 层建议把底层大部分区域铺地电源走线用短粗路径到达负载。再说一个 dwg 导入的易错点AutoCAD 文件里如果有多个图纸空间导入前先在 CAD 里炸开块并清除无关图层否则 AD 会导入一堆多余的线头清理起来比画一个板框还费时间。3.2 PCB 走线要求与差分对规则W5500 的 100Ω 差分线W5500 的 TX/TX-、RX/RX- 是两对 100Ω 差分线。走线要求第一条是阻抗受控这需要给差分对设置规则。在 AD 中打开 Design - Rules快捷键 DR新建一个 Differential Pairs Routing 规则目标阻抗填 100Ω线宽和间距按板厂给出的层叠计算结果填。4 层板常规情况下线宽 0.15mm、间距 0.15mm 是一个常见起点但每个板厂的介质厚度不同最终值听板厂的。差分对在 PCB 上的处理有几个硬要求等长误差控制在 5mil 以内、同一对线成对走、少打过孔、保持恒定间距。W5500 和变压器之间的距离越短越好一般控制在 8~12mm过长会让共模噪声变成辐射源。变压器正下方区域顶层和内部的铜皮要挖空形成物理隔离防止网口浪涌耦合进板内。普通走线的规则顺便提一下因为热词里一直在问 pcb 走线要求和电流能力。0.3mm 线宽在 1oz 铜厚下大概能过 1A 电流这是一般估算值实际受温升和走线长度影响。电源线宁可加宽到 0.5~1mm也不要按信号线 0.15mm 去画。过孔建议外径 0.3mm、内径 0.2mm电源过孔多打几个并联降低自感和等效电阻。对象线宽间距说明普通信号0.15mm0.15mm满足大多数板厂最小能力电源0.5mm 以上按规则按电流调整过孔并联差分对按阻抗计算按阻抗计算目标 100Ω等长 5mil晶振走线与铺铜保持 3W—下方挖空周围包地W5500 的 SCLK、MOSI、MISO 属于数字信号可以按普通信号处理但尽量短、少穿越电源分割区。4 层板第三层是电源平面时SPI 走线不要跨过电源平面的狭窄瓶颈跨了信号回路会被拉长干扰源就会从这里耦合进来。3.3 铜皮挖空天线净空区、晶振与变压器下方的处理无线基站板的天线区域铜皮必须挖空。这里说的挖空和开窗是两件事挖空是去掉铜皮让天线下方没有导体开窗是去掉阻焊让铜箔露出来做焊盘或镀金。AD20 里铜皮挖空的操作是菜单 Place - Polygon Pour Cutout在要挖空的地方画一个闭合区域AD 会在铺铜时自动把这片区域排除。画好后用 Tools - Polygon Pours - Repour All 重新铺铜检查挖空区域边缘是否和天线净空边界完全重合。另一个容易漏的是晶振下方。F103 的 8MHz 晶振和 W5500 的 25MHz 晶振下面都不要铺铜也不能走普通信号线。晶振是高频敏感器件铜皮和走线会增加寄生电容导致起振困难或者频率偏移。处理方式和天线类似用 Polygon Pour Cutout 挖掉晶振正下方区域并在晶振周围打一圈地孔形成屏蔽。还有一个同样是挖空操作网络变压器下方。HR911105A 一体座的正下方顶层和中间层铜皮全挖掉只剩机械固定焊盘目的是切断网口共模噪声进入板内的通路。这个处理在多数参考设计里都能看到不是玄学。挖空之后用 3D 模式按键盘 3 键看一眼铺铜结果确认挖空边界没有悬空的铜皮碎块。4. 封装库与输出LQFP64 封装、DRC 检查、Gerber 和钻孔文件4.1 封装库设计与 AD 元件库对照表封装库其实分两层含义原理图符号库和 PCB 封装库。很多新人只画 PCB 封装忽略原理图符号的引脚命名结果 AD 的元件库对照表里全是疑问。做法是先从数据手册整理一张对照表把 STM32F103RCT6 的 64 个引脚按功能分组同时列出 W5500 的引脚功能两边的网络名用同一种命名风格这样后面原理图编译和回头检查都能少花很多时间。LQFP64 的封装直接用 IPC 向导生成在 PCB 库编辑器里 Tools - IPC Compliant Footprint Wizard - LQFP填入引脚数 64、间距 0.5mm、本体尺寸 10x10mm向导会基于 IPC 标准算出焊盘长度和宽度。生成后一定对照 ST 手册检查 1 脚位置和丝印外框IPC 向导给的丝印有时偏小会盖住 1 脚标识。HR911105A 这类带变压器的网口座封装尺寸误差容忍度极低。建议用供应商提供的二维图导入在 PCB 库中 File - Import - DWG/DXF选 mm 单位把焊盘位置放在机械层做参考然后照着画焊盘和定位柱。如果供应商有 Step 文件直接 Place - 3D Body 导入配合 AD20 的 3D 模式检查网口座和外壳的干涉。回应一个常见问题AD 元件库对照表匹配不上。原因是原理图库里的 PCB Footprint 属性写的名字和 PCB 库里的元件名不完全一致多一个空格都不行。检查方法是在原理图里双击元件看 Footprint 字段是否和 PCB 库里的元件名完全一致尤其是网口座这类带供应商型号的封装。4.2 DRC 检查把画板规则变成可执行约束PCB 画完必须运行 DRC菜单 Tools - Design Rule Check快捷键 TD。AD20 的 DRC 能检查开路、短路、线宽违约、丝印压焊盘等几十类问题前提是 Design - Rules 里真正设置了规则。很多人布线时把 DRC 关掉板厂回复 lost net 才回头补这一步别省。规则建议值常见报错Minimum Clearance0.15mmClearance Constraint ViolationMinimum Width0.13mmWidth Constraint ViolationMinimum Hole Size0.2mmHole Size Constraint ViolationSilk Over Component Pads0.13mmSilkscreen Over Component PadsUn-Routed NetOnUn-Routed Net Constraint其中 Un-Routed Net 是必须开的规则它负责检查没连完的网络。跑完 DRC 后按错误类型逐条看Starved Thermal 类告警如果铺铜连接方式选的直接连接可以不理会Un-Routed 和 Short Circuit 必须清零。Messages 面板里双击错误能跳到具体位置配合 CtrlM 量一下是不是真的有问题。DRC 检查的一个关键细节是给不同网络类别设置不同优先级。比如 AGND 和 GND 之间的间距按 0.2mm 加严普通网络按 0.15mm。右键规则可以调整优先级否则默认规则会覆盖加严规则你辛苦设的约束根本不生效。4.3 Gerber 导出、钻孔文件名称与 CAM 验证板厂要的最终文件是 Gerber不是 .PcbDoc。菜单 File - Fabrication Outputs - Gerber Files选择 RS-274X 格式格式设为 2:5即整数 2 位、小数 5 位英制。勾选需要的层顶层、底层、两层丝印、两层阻焊、Keepout 层。钻孔单独导出File - Fabrication Outputs - NC Drill Files格式同样选 2:5。关于 ad 导出的钻孔文件名称是什么AD 默认生成的是 .TXT 后缀的 NC Drill 文件比如 project.TXT同时会生成 .DRR 钻孔报告。有些版本会输出 .DRL 后缀找不到 .TXT 就把输出目录里 .DRL 文件一起带上。CAM 工具导入时Gerber 和钻孔文件的格式参数要保持一致否则钻孔位置会整体偏移。提交前把导出的文件用 CAM350 或在线 Gerber 查看器打开检查每一层的对齐。CAM350 的 File - Import - Auto 会把同一目录下的 Gerber 自动组合成一个可视的 PCB用来核对钻孔层、阻焊开窗和板框是否对齐。这一步能拦住大部分交付事故。5. 软件源码W5500 SPI 驱动、寄存器初始化与 TCP Server5.1 SPI 帧格式与 W5500 寄存器读写函数看软件源码之前先把 W5500 的 SPI 帧格式讲清楚。一帧由 2 字节地址、1 字节控制字节、N 字节数据组成。控制字节的 bit7 是 RWB1 读 0 写bit6-3 是 BSB用来选择访问公共寄存器、Socket 寄存器、TX 缓冲还是 RX 缓冲。下面是带宏定义的读写函数。#define W5500_BSB_COMMON (0x00u 3) // 公共寄存器 #define W5500_BSB_SOCKET0 (0x01u 3) // Socket 0 寄存器 #define W5500_BSB_SOCKET1 (0x02u 3) #define W5500_BSB_TX (0x05u 3) // TX 发送缓冲 #define W5500_BSB_RX (0x06u 3) // RX 接收缓冲 static uint8_t spi_xfer(uint8_t data) { uint8_t rx; HAL_SPI_TransmitReceive(hspi1, data, rx, 1, 10); return rx; } void w5500_write_reg(uint16_t addr, uint8_t bsb, uint8_t data) { CS_LOW(); // 整个帧期间 CS 必须保持低 spi_xfer(addr 8); // 地址高字节 spi_xfer(addr 0xFF); // 地址低字节 spi_xfer(bsb | 0x00); // 控制字节 bit70写操作 spi_xfer(data); CS_HIGH(); } uint8_t w5500_read_reg(uint16_t addr, uint8_t bsb) { uint8_t val; CS_LOW(); spi_xfer(addr 8); spi_xfer(addr 0xFF); spi_xfer(bsb | 0x80); // bit71读操作 val spi_xfer(0xFF); // 发伪字节取回数据 CS_HIGH(); return val; }控制字节的低 3 位在标准寄存器访问时固定为 0宏定义已经做了移位。CS 的时序要注意SPI 时钟必须等 CS 完全拉低后再启动帧结束先停时钟再拉高 CS。如果 CS 在传输中途抖动W5500 的帧同步会乱掉。SPI 初始化用 SPI1模式 0即 CPOL0、CPHA1EDGEMSB 先行软件控制 NSS。72MHz 的 APB2 四分频给到 18MHzW5500 支持更高 SPI 时钟这个余量在调试期很有用。5.2 W5500 初始化与 TCP Server 流程软件源码的初始化顺序一般是等待硬件复位完成软件复位配置网关、子网、MAC、本地 IP然后打开 Socket 做 TCP 服务。核心代码如下。void w5500_hw_reset(void) { HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET); HAL_Delay(50); HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET); HAL_Delay(500); // W5500 复位后等待 500us 以上 } void w5500_init(void) { w5500_hw_reset(); w5500_write_reg(0x0000, W5500_BSB_COMMON, 0x80); // MR 软复位 HAL_Delay(5); uint8_t mac[6] {0x02, 0x00, 0x00, 0xAA, 0xBB, 0x01}; uint8_t ip[4] {192, 168, 1, 200}; uint8_t gw[4] {192, 168, 1, 1}; uint8_t sub[4] {255, 255, 255, 0}; for (int i 0; i 6; i) w5500_write_reg(0x0009 i, W5500_BSB_COMMON, mac[i]); // SHAR for (int i 0; i 4; i) w5500_write_reg(0x000F i, W5500_BSB_COMMON, ip[i]); // SIPR for (int i 0; i 4; i) w5500_write_reg(0x0001 i, W5500_BSB_COMMON, gw[i]); // GAR for (int i 0; i 4; i) w5500_write_reg(0x0005 i, W5500_BSB_COMMON, sub[i]); // SUBR }寄存器偏移对应 W5500 公共寄存器表GAR 从 0x0001、SUBR 从 0x0005、SHAR 从 0x0009、SIPR 从 0x000F。地址连续循环写即可。MAC 地址首字节建议填偶数表示本地管理地址避免与厂商冲突。TCP Server 打开流程如下。void tcp_server_open(void) { w5500_write_reg(0x0000, W5500_BSB_SOCKET0, 0x01); // Sn_MR TCP w5500_write_reg(0x0004, W5500_BSB_SOCKET0, 5000 8); // Sn_PORT0 w5500_write_reg(0x0005, W5500_BSB_SOCKET0, 5000 0xFF); w5500_write_reg(0x0001, W5500_BSB_SOCKET0, 0x01); // Sn_CR OPEN while (w5500_read_reg(0x0003, W5500_BSB_SOCKET0) ! 0x13); // SOCK_INIT w5500_write_reg(0x0001, W5500_BSB_SOCKET0, 0x02); // Sn_CR LISTEN while (w5500_read_reg(0x0003, W5500_BSB_SOCKET0) ! 0x14); // SOCK_LISTEN }Sn_CR 是 Socket 命令寄存器写 0x01 打开0x02 监听。Sn_SR 返回 0x13 表示 INIT0x14 表示 LISTEN。三次握手由 W5500 硬件完成客户端连上后 Sn_SR 会变成 0x17 ESTABLISHED。5.3 中断引脚与 Socket 状态处理INTn 引脚在 W5500 检测到连接变化、收到数据、发送完成时拉低。把 PB10 配置为 EXTI 下降沿中断在中断里读 Socket 中断寄存器 Sn_IR再写 1 清除对应位。轮询方式更简单主循环里每 10ms 读一次 Sn_SR状态变化时打印或者切换业务逻辑。对无线基站板这种低频控制、状态上报的场景轮询完全够用中断主要留给需要低延时的应用。读取接收数据时先读 Sn_RX_RSR 拿到收到字节数再根据 Sn_RX_RD 指向的地址用 BSB_RX 块读取数据读完更新 Sn_RX_RD 并写 Sn_CR 的 RECV 命令释放接收缓冲。这部分如果实现不规范常见症状是丢包或者读出来的数据错位。RX/TX 缓冲区大小分别由 Socket 区 0x001E 和 0x001F 寄存器配置按 W5500 手册的缓冲大小编码设置所有 Socket 的 RXTX 总量不能超过芯片内置的 32KB。默认 2KB 能跑通轻量业务批量升级固件时会明显偏慢。6. 验证与排错版本寄存器回读、逻辑分析仪看 SPI 时序6.1 回读版本寄存器验证 SPI 通路软件写完不要直接调 TCP先做最小验证读 VERSIONR。这个寄存器在公共寄存器块的 0x0039W5500 出厂默认值是 0x04。uint8_t ver w5500_read_reg(0x0039, W5500_BSB_COMMON); printf(W5500 version: 0x%02X\r\n, ver);读出来是 0x04说明电源、晶振、复位、SPI 四线全通。读到 0xFF检查 CS 波形和 MISO 上拉。读到 0x00多半是 W5500 还在复位状态或者 25MHz 晶振没起振。这是整个软件源码里最值钱的两分钟测试比任何在线调试都直接。6.2 用逻辑分析仪抓 SPI 帧和 MISO 相位版本寄存器读不对的时候把 SPI 时钟降到 1MHz接逻辑分析仪抓 CS、SCLK、MOSI、MISO 四路。正确的一帧应该是CS 拉低16 个时钟发地址8 个时钟发控制字节数据阶段 MISO 出现有效电平。常见错误包括MISO 全程低说明片子没回应地址和控制字节对但数据全 1说明 CS 时序不对时钟空闲电平不对说明 SPI 模式配错。还有一个工程技巧把版本号回读放在 1ms 定时器里循环执行串口打印。正常应该一直是 0x04如果偶尔变成 0xFF 或 0x00基本可以断定是 SPI 时序裕量不足。我的习惯是先把 18MHz 降一半跑通双向数据后再两倍两倍往上抬同时盯住 MISO 波形边沿直到边沿开始变缓就停在上一档。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价