ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32L431核心板原理图深度拆解:电源、时钟与调试链路设计

STM32L431核心板原理图深度拆解:电源、时钟与调试链路设计 简介这份STM32L431RCT6主芯片开发板原理图资源适用于想入门嵌入式的新手、学习STM32/ARM开发板的开发者以及需要对STM32L431RCT6进行选型评估和替换验证的工程师。原理图采用AD18绘制给出mini核心板的完整电源、复位、调试接口等外围电路芯片基于ARM Cortex-M4内核主频80MHzFlash 256KBRAM 64KBLQFP-64封装并已通过排针将GPIO等外设资源引出。资源包共1个文件为PDF格式原理图大小455KB方便直接查阅和打印。目前已有2800余人学习下载。阅读该原理图可快速掌握STM32L431RCT6的最小系统设计思路包括5V转3.3V电源、CH340G USB转串口调试电路、晶振时钟及LED指示灯等模块便于后续自行绘制核心板、评估芯片特性或开展开发验证。1. 一块 LQFP64 的 mini 核心板原理图里藏着哪些边界STM32L431RCT6 这颗芯片常被当成“省电版 F103”来用但它其实是 ARM Cortex-M4 内核、80MHz 主频、Flash 256KB、RAM 64KB封装是 LQFP-64 10x10。这份 mini 核心板原理图把 5V 转 3.3V 电源、8MHz 主时钟、复位、CH340G 下载调试、SWD 接口都画全了唯独没有堆串口座和 SPI 座而是用 2.54mm 排针把所有 IO 引出来让使用者根据自己项目去扩展。对新手来说它能让你看清一颗低功耗 M4 芯片的最小系统到底需要哪些外围对老手来说它适合做芯片评估、替换验证和低功耗摸底。资源是 AD18 工程原理图带网络标号比直接翻数据手册逐脚核对轻松得多。下面按电源、时钟、调试口、外设引脚的顺序拆开讲。2. 电源树与时钟复位mini 核心板最容易被忽略的三层设计2.1 5V 转 3.3V 的 AMS1117 电路为什么还要并两组电容原理图最左侧是 DC 电源输入5V 先进一个 0.5A/30V 的保险丝FB1再进 AMS1117-3.3U1。AMS1117 是经典低压差线性稳压器最大输出电流约 1A但这块板子前面加了 0.5A 保险丝所以整个板子 3.3V 侧的稳态电流最好控制在 500mA 以内。输入侧放 10uF/25VC1负责储能1uFC2负责 LDO 环路稳定输出侧放 1uFC3和 100nFC4并联这是开关电源和 LDO 都常用的“大电容储能、小电容滤高频”组合。1uF 对应 AMS1117 的相位裕度要求100nF 的 ESL 和 ESR 在几十 MHz 频段更低能滤掉来自 MCU 数字内核的高频噪声。实际布局时这两个电容必须贴着 U1 的输出引脚放并且过孔直接回 GND否则滤高频就是空话。电源指示灯是一颗红色 LED 串 1K 电阻接到 VDD_3V3电流只有 (3.3-1.8)/1000 ≈ 1.5mA功耗可忽略。但另外那颗四个蓝色 LED 的驱动不是直接用 GPIO 推的原理图里看是 S8050 三极管在驱动GPIO 只给基极电流LED 回路的几十毫安从 3.3V 直接走三极管到地。这种设计的好处是避免 GPIO 灌电流超规格坏处是低功耗场景下四路 LED 全亮会白白多出几十毫安。做低功耗产品时最好在代码初始化里就把 LED 全灭只在需要指示时点亮并且用 GPIO 控制三极管基极而不是让 LED 常亮。电源部分可以归纳为一张检查表项目数值/型号作用注意事项FB10.5A/30V 保险丝输入过流保护3.3V 总电流不能长期超 0.5AU1AMS1117-3.35V 转 3.3V压差约 1V输入至少 4.3VC110uF/25V输入储能靠近输入端入口C3/C41uF 100nF输出滤波必须靠近 Vout 引脚LED 电源指示红 LED 1K上电指示电流约 1.5mA可忽略2.2 8MHz 主晶振匹配电容与 ESR 约束主时钟用无源晶振 Y2频率 8MHz两个 20pF 电容 C51、C52 分别挂在 OSC_IN 和 OSC_OUT 到地。无源晶振和芯片内部振荡器配合起振匹配电容的经验公式是CL (C51 × C52) / (C51 C52) CstrayC51 和 C52 都是 20pF算出串联电容约 10pF加上 PCB 走线和引脚寄生电容通常 3~5pF等效负载电容约 13~15pF。如果这颗晶振厂商标称 CL12pF这个配置偏大一点频率会略偏低但仍在误差范围内如果厂商标称 CL20pF这个配置就偏小了可能造成起振余量不足。所以不能只看原理图上有电容就以为没问题最好对着实际晶振型号的 datasheet 调整。常见做法是先按 10~15pF 估算贴片后用频率计测 OSC_OUT 的实际频率偏差超过 10ppm 再改电容。STM32L431 的 OSC_IN/OSC_OUT 引脚内部已经集成反馈电阻外部不需要再加 1MΩ 并联电阻这和 STM32F103 早期的参考设计不一样。原理图里晶振线上还接了 PESD3V3S1BA-ND 做 ESD 保护防止生产和使用中静电打坏引脚。主时钟进入内部后通过 PLL 倍频到 80MHzCubeMX 生成的初始化代码关键参数是这样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 20; RCC_OscInitStruct.PLL.PLLP RCC_PLLP_DIV7; RCC_OscInitStruct.PLL.PLLQ RCC_PLLQ_DIV2; RCC_OscInitStruct.PLL.PLLR RCC_PLLR_DIV2;这套参数的实际含义是HSE 8MHz 先经过 PLLM 分频PLLM1 所以 VCO 输入仍是 8MHzPLLN20 让 VCO 输出 160MHzPLLR2 得到系统时钟 SYSCLK80MHz。PLLP 和 PLLQ 是给 USB/SDIO 等外设用的L431 的 USB 需要 48MHz如果不想用外部晶振单独提供 48MHz就要保证 160MHz 经 PLLQ2 输出 80MHz再经 USB prescaler 分频到 48MHz。实际项目里如果发现串口波特率偏第一件事就是查 PLLN/PLLR 是否算错而不是怀疑代码逻辑。2.3 复位电路与 BOOT 引脚悬空策略NRST 引脚上拉到 VDD_3V3通过 10K 电阻再并联 100nF 电容到地同时接一个轻触按键 K2。按键按下时 NRST 拉低MCU 复位松开后 RC 充电恢复高电平。这个 10K × 100nF 的时间常数约 1ms能产生足够宽的复位脉冲。STM32L431 的 NRST 内部本身有上拉外部这个 10K 可以去掉但保留下来可以增强抗干扰能力特别是排针引出复位线时防止静电或感应噪声误复位。BOOT0 引脚在原理图里通过 10K 电阻下拉到地所以默认从 Flash 启动。BOOT1PB2也被 10K 下拉正常应用时 PB2 可以当普通 IO 用。有些核心板会把 BOOT0 做成跳线但这块板子没有作者应该是默认用户只用 SWD 下载不需要串口 ISP。如果你拿到板子想用 UART1 的 bootloader 下载就得自己把 BOOT0 飞线拉高再上电这在评估时需要注意。3. CH340G 与 SWD 双通道调试下载链路怎么接才不占串口3.1 USB 转 TTL 的 CH340G 外围核心板板载了 CH340G 做 USB 转 TTL网络标号是 UART1_Debug_TX 和 UART1_Debug_RX。CH340G 的 XI/XO 引脚接 12MHz 晶振 Y1两个 20pF 电容 C14、C15 做负载匹配。注意 CH340G 的供电接的是 VDD_3V3不是 5V。CH340G 可以用 3.3V 供电此时串口 TX 输出的高电平就是 3.3V和 STM32L431 的 GPIO 电平完全匹配省掉了电平转换芯片。如果图省事把 CH340G 接到 5VTXD 高电平接近 5V直接进 PA3USART1_RX即使不烧引脚也会让低功耗产品的 IO 漏电增加。USB 信号 D-/D 上各串了 22Ω 电阻R18、R19作用是匹配 USB 差分阻抗和抑制边沿振铃。两个 10K 电阻 R16、R17 挂在 USB 数据线上是给 USB 枚举提供空闲态电平参考。CH340G 的全速 USB 握手由芯片内部处理这个 10K 下拉不会影响枚举反而能保证在未连接 USB 主机时数据线状态确定。J1 是 USB 座带外壳引脚焊接时外壳必须可靠接 GND否则 USB 热拔插的静电会直接打向 CH340G。Linux 下验证 CH340G 是否正常识别dmesg | grep -i ch34 lsusb | grep 1a86第一行看内核枚举 log第二行确认 USB Vendor ID 是 0x1a86。如果 dmesg 里没有任何输出先量 CH340G 的 XI 引脚应该能看到 12MHz 正弦波再量 V3 引脚3.3V 供电模式下 V3 电压和 VCC 几乎一样。如果 lsusb 能看到设备但打开串口失败通常是权限问题sudo usermod -aG dialout $USER重新登录后执行ls -l /dev/ttyUSB*确认设备节点存在。CH340G 在 3.3V 供电时最高波特率足够跑 115200RT-Thread 的 FinSH 默认 115200 8N1直接可用。3.2 SWD 四线制与 PESD3V3 保护下载调试用的是 SWD 接口只引出 SWDIO、SWCLK、MCU_RST、GND 四根线通过 J18 排针引出2.54mm 1x4P。SWDIO 对应 PA13SWCLK 对应 PA14RST 对应 NRST。相比 JTAG 的 20 针大接口SWD 省出 16 个引脚对 mini 核心板非常关键。SWDIO 和 SWCLK 线上各串了 100Ω 电阻作用是限制边沿振铃和降低调试器过冲损伤引脚的风险。SWDIO 上拉到 3.3VSWCLK 下拉到地保证调试器接入前电平确定。这里有两个 10K 和一个 100R别在焊接时搞混。PESD3V3S1BA-ND 是一个单通道 ESD 保护二极管反向工作电压 3.3V钳位电压约 7V结电容约 0.4pF放在 SWD 和 USB 线路上。SWD 时钟频率通常 4MHz 以下这个电容影响可以忽略。如果自己扩展板要在高速 USB 上放 PESD注意多个器件并联后总电容不要超过 USB 规范建议的 10pF 以下CH340G 全速 12Mbps 本身余量够但 Full-Speed 的 DSC 信号质量测试还是建议留够余量。用 OpenOCD 烧录的典型命令openocd -f interface/stlink.cfg -f target/stm32l4x.cfg \ -c init -c reset halt \ -c flash write_image erase build/app.bin 0x08000000 \ -c reset run -c shutdown参数解释interface/stlink.cfg是 ST-Link 的接口配置换成 J-Link 就改为interface/jlink.cfgtarget/stm32l4x.cfg声明目标是 STM32L4 系列flash write_image erase表示擦除后写入地址 0x08000000 是 L431 的 Flash 起始地址。如果提示连接失败先确认 SWDIO/SWCLK 没有接反再检查目标板是否被调试器以外的程序占用比如串口终端开着 com 口不会冲突但有些 IDE 的调试服务会独占 SWD。3.3 双通道怎么选调试串口和 SWD 同时存在的好处很多开发板只留一个 USB 转串口下载靠 bootloader调试靠 printf一旦 printf 的串口被占用异常日志就看不到。这块板 CH340G 接 USART1SWD 独立引出两者可以同时工作。SWD 做断点调试USART1 做日志输出互不干扰。RT-Thread 的 FinSH 控制台默认占用一个 UART如果 FinSH 用 USART1那么 CH340G 正好作为交互终端如果同时希望日志和命令分离日志可以放 USART2PB10/PB11 排针引出FinSH 保持 USART1。逻辑上这样规划通道接口用途波特率SWDPA13/PA14下载、断点、单步-USART1PA2/PA3FinSH / 调试串口115200USART2PB10/PB11日志输出、外部设备通信115200 或按需4. 排针引出的不是引脚是外设复用边界4.1 LQFP64 的引脚分组与排针定义这块板子没有把串口座、SPI 座做成标准接口而是通过 J12 到 J17 六组 2.54mm 排针把除电源和 SWD 外的引脚全部引出。J12-J15 是 10PJ16-J17 是 4P加上 J18 的 SWD总共有 60 个左右可用 IO。排针间距 2.54可以直接插面包板也可以做扩展板。但排针引出的是复用引脚不是固化功能用之前必须查清每个引脚当前被谁占用。挑几个容易打架的引脚列一下引脚引脚名主要复用本板连接15PA2USART1_TX, ADC12_IN2, SPI0_IO2CH340G TXD16PA3USART1_RX, ADC12_IN3, SPI0_IO3CH340G RXD21PA5SPI0_SCK, ADC1_IN5, DAC_OUT1排针29PB10I2C1_SCL, USART2_TX排针30PB11I2C1_SDA, USART2_RX排针45PA13SWDIOSWD49PA14SWCLKSWDPA2/PA3 已经被 CH340G 占走如果扩展板上接了一个外部串口设备想用 USART1就会和板载 USB 转串口抢引脚。PB10/PB11 是 I2C1 和 USART2 复用同一时刻只能启用其中一个外设CubeMX 里如果同时勾选 I2C1 和 USART2 且都用这两个引脚编译不会报错但运行时会冲突。建议在设计开始时固定一张自己的引脚分配表每个引脚只允许一个外设占用其他复用功能全部禁用。4.2 四颗 LED 与 GPIO 电流核算原理图里四个蓝色 LED 并排放在 VDD_3V3 和 GND 之间从网络表看它们通过 S8050 三极管驱动基极由 MCU GPIO 控制。S8050 是 NPN 三极管基极串 1K 电阻接 GPIO发射极接地集电极接 LED 负极LED 正极接 3.3V。GPIO 输出高电平时基极有约 (3.3-0.7)/1000 ≈ 2.6mA 电流三极管饱和导通LED 点亮。这种驱动方式下 LED 电流由集电极回路限流电阻决定和 GPIO 灌电流无关。如果直接用 GPIO 推 LED单个引脚最大灌电流约 25mA四路全开会超 MCU 内部电源轨的承受能力所以三极管驱动是更稳妥的做法。做 RT-Thread 应用时LED 点灯代码可以这样写#include rtthread.h #include rtdevice.h #define LED1_PIN GET_PIN(C, 13) #define LED2_PIN GET_PIN(C, 14) #define LED3_PIN GET_PIN(C, 15) static void led_thread_entry(void *parameter) { rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(500); } } static int led_app_init(void) { rt_thread_t tid rt_thread_create(led, led_thread_entry, RT_NULL, 1024, 20, 20); if (tid) rt_thread_startup(tid); return RT_EOK; } INIT_APP_EXPORT(led_app_init);代码里GET_PIN(C, 13)是 RT-Thread 的引脚编号宏把端口 C 第 13 脚映射到 pin 框架统一编号。PIN_MODE_OUTPUT设置推挽输出。如果 LED 接在三极管基极那么输出高电平点亮如果板子改成 LED 接在 3.3V 和 GPIO 之间就要输出低电平点亮逻辑正好相反。调试点灯时先看原理图里 LED 负极是接 GPIO 还是接三极管集电极。4.3 外设规划先画引脚复用表再做电路拿到这种核心板第一步不是写代码而是画一张自己的引脚占用表。至少包含外设功能、引脚号、是否被板载电路占用。例如外设引脚占用情况USART1 TX/RXPA2/PA3被 CH340G 占用SWDPA13/PA14被调试口占用LEDPC13-PC15被板载 LED 复用SPI0PA5-PA7可自由使用I2C1PB10/PB11可自由使用注意与 USART2 冲突把这张表放进工程 README比事后查勘省时。评估 STM32L431RCT6 替换 GD32F303 或旧 F1 平台时重点看外设数量三个 USART、两个 SPI、两个 I2C、一个 CAN、一个 USB 设备、一个 12 位 ADC 加一个 DAC。如果应用需要同时使用 USB 设备功能和 CAN就要特别注意 PA11/PA12 在 L431 上是 USB D-/D 和 CAN0_RX/TX 共用引脚不能同时启用两个外设板子虽然把 PA11/PA12 引到排针了但内部复用冲突无法通过外部跳线解决。5. 打样前用 AD18 跑完这几项检查比抄参考设计更稳原理图资源是 AD18 工程拿到手先跑一遍编译再看三类问题ERC 错误、封装匹配、电源网络名。下面是我会做的核对顺序。5.1 编译与 ERC 检查在 AD18 中打开工程执行Project - Compile PCB Project。编译后在 Messages 面板看 error 和 warning。重点看三类报错Unconnected Pin排针上没连线的引脚可能是故意留空但必须逐个确认。比如 J12 第 10 脚如果悬空要决定是 NC 还是补上 GND。Power Pin Type 冲突VDD_3V3 和 GND 不能同时出现在同一 Net Label 的连线两端ERC 会报错。Net with multiple names同一个网络既有 VDD_3V3 又有 VCC3V3 这种别名会被当成开路。我习惯统一用 VDD_3V3所有模块页共用这个网络名。5.2 BOM 与封装匹配检查核对核心元件位号物料封装检查点U1AMS1117-3.3SOT-223输入/输出/GND 引脚顺序是否与数据手册一致U4STM32L431RCT6LQFP-64第 1 脚方向、热焊盘是否接地U3CH340GSOP-16引脚间距 1.27mm注意 1 脚方向Y28MHz 晶振3215 无源焊盘间距要和晶振脚距一致LED1-4蓝色 LED0805正负极标识别画反LQFP-64 封装最容易出现引脚顺序镜像问题。LQFP-64 是四边引脚第 1 脚从左上角开始逆时针排列。AD18 的 PCB 库里如果是从旧工程复制的封装一定要拿 STM32L431RCT6 的数据手册第 55 页的引脚图比对一次。这个工程叫 Mini_GD32F303RCT6芯片已经换成 STM32L431RCT6GD32F303 和 STM32L431 在 LQFP64 上的引脚定义大体兼容但不代表可以直接用BOOT0、VCAP、VREF 等引脚的编号和功能必须对着 ST 官方 datasheet 确认。5.3 一个实用技巧用 Smart PDF 快速输出分层原理图AD18 的File - Smart PDF可以把多张原理图输出成带书签的 PDF很适合代码评审和归档。我一般这样设置Output 里选 Current ProjectExport Options 里取消“Print on current printer”选 PDF最关键的是勾上“Generate PDF bookmarks”这样每页原理图都能在左侧导航跳转。PDF 版本比发源工程文件安全别人不会误改手机也能看。如果需要给别人做引脚对照再从 Advanced 里勾选 Include net names每一根连线都会标出网络名排查飞线时非常直观。如果要把 PDF 转成图片贴到文档Linux 下用 poppler-utils 的工具pdftoppm -png -r 200 Mini_GD32F303RCT6.pdf page200dpi 足够阅读太高会让文件很大。最后再检查一遍所有网络标号是否一致特别是 UART1_Debug_TX 和 UART1_Debug_RX 这种交叉标号方向错了板子回来就只能飞线。这板子本身是 mini 核心板打样时建议把排针焊盘做成通孔方便插拔和扩展。本文还有配套的精品资源点击获取
返回列表