首页/新闻资讯/正文详情

STM32F103ZET6驱动4.3寸触摸屏:FSMC并口与XPT2046工程实战

发布时间:2026/11/4 9:43:45 来源:云帆数科 栏目:资讯中心
STM32F103ZET6驱动4.3寸触摸屏:FSMC并口与XPT2046工程实战
简介这份资源面向已具备STM32基础、希望从标准库或HAL例程过渡到STM32CubeIDE开发环境的嵌入式学习者提供4.3英寸TFT LCD彩色液晶触摸屏的完整驱动例程。显示部分采用16位8080并口驱动NT35510芯片触摸部分通过I2C总线读取GT968/GT1151触摸芯片覆盖了并口时序配置、I2C通信初始化与坐标读取等关键环节可帮助读者解决CubeIDE下外设移植与屏幕点亮调试的实际问题。压缩包为rar格式整体约73.02MB文件以工程源码、头文件及工程配置为主便于直接导入IDE编译验证。目前已有962人学习下载说明该移植方案具备一定参考价值。读者可从中获得正点原子Keil工程迁移至CubeIDE的目录组织方式、外设初始化代码与触摸坐标处理思路适合作为屏幕驱动移植与排错对照的实践素材。1. 一块 4.3 寸屏从点亮到能点这份 STM32F103ZET6 触摸工程到底给了什么手里有块 4.3 寸 TFT 带触摸的屏主控是 STM32F103ZET6想让它既显示界面又能响应手指最省事的路径不是从零写 FSMC 时序和触摸校准而是先找一份能直接编译、能跑通显示和触摸的完整工程把硬件链路先验证掉。这份资源就是这样一个已经搭好底子的工程包它把 ZET6 的 FSMC 并口驱动、TFT 初始化、触摸屏读取和坐标换算这几件事串成了一条能跑通的链路适合刚拿到屏、不确定接线和时序对不对的开发者也适合想拿它当界面底座、往上叠自己业务逻辑的人。STM32 这块老牌 MCU 的资料多、坑也多真正卡人的往往不是寄存器看不懂而是屏不亮、触摸坐标飘、编译过了下载进去白屏——这份工程的价值就在于把这些前置问题先替你趟过一遍。2. 拆开工程看骨架FSMC 并口驱动与触摸链路是怎么搭起来的拿到一个 .rar 工程包别急着双击打开就编译。先搞清楚它内部的分层后面改起来才知道动哪一层不会把别的层带崩。这类 4.3 寸并口屏工程常见结构是「底层硬件驱动 屏控制器驱动 触摸驱动 应用层」四段式STM32F103ZET6 的 FSMC 外设负责把并口时序做出来屏控制器常见是 ILI9486、NT35510 这类负责把像素数据变成画面触摸部分则走另一条链路通常是 XPT2046 或类似的电阻触摸控制器通过 SPI 或模拟时序读 ADC 值再换算坐标。2.1 先认清 FSMC 并口这条显示主链路4.3 寸 480×272 或 480×800 的屏数据位宽一般是 16 位靠 FSMC 的 NOR/PSRAM 模式模拟出 8080 并口时序。ZET6 的 FSMC 支持把某个 Bank 配置成「模式 A」或「模式 B」屏的 RS命令/数据选择脚接到某根地址线上这样写不同地址就等于发命令或发数据。工程里最关键的几个文件通常是fsmc.c、lcd.c、lcd.h初始化顺序不能乱先开 GPIO 和 FSMC 时钟再配 FSMC 时序参数最后才是屏控制器上电序列。/* 典型 FSMC 时序配置片段参数需按屏手册微调 */ FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef readWriteTiming; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); readWriteTiming.FSMC_AddressSetupTime 0x01; /* 地址建立时间屏慢就加大 */ readWriteTiming.FSMC_AddressHoldTime 0x00; readWriteTiming.FSMC_DataSetupTime 0x04; /* 数据建立时间白屏/花屏先调这个 */ readWriteTiming.FSMC_BusTurnAroundDuration 0x00; readWriteTiming.FSMC_CLKDivision 0x00; readWriteTiming.FSMC_DataLatency 0x00; readWriteTiming.FSMC_AccessMode FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_Bank FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataWidth FSMC_NORSRAM_DataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct readWriteTiming; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct readWriteTiming; FSMC_NORSRAMInit(FSMC_NORSRAMInitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);这段代码的逻辑是FSMC 挂在 AHB 总线上必须先开时钟AddressSetupTime和DataSetupTime是并口时序里最容易翻车的两个参数屏手册给的建立/保持时间换算成 HCLK 周期后填进去填小了就是白屏或雪花填大了刷新变慢但至少能亮。FSMC_AccessMode_A是 8080 并口最常用的模式RS 接地址线 A 系列中的一根工程里一般用宏定义把「命令地址」和「数据地址」区分开比如#define LCD_CMD_ADDR (0x6C000000)、#define LCD_DATA_ADDR (0x6C000002)具体基址取决于你接的是 Bank1 的哪个片选。2.2 触摸这条链路和显示是两套东西很多人第一次做带触摸的屏会以为触摸也走 FSMC其实不是。电阻触摸屏的 XPT2046 是 SPI 接口也有用 GPIO 模拟时序的它输出的是原始 ADC 值需要经过校准才能变成屏幕坐标。工程里触摸相关文件一般是touch.c、touch.h核心是两件事读原始值、做坐标映射。读原始值靠 SPI 发控制字节映射则依赖一组校准参数通常是四点或两点校准得到的系数。/* XPT2046 读一次触摸原始坐标的典型流程软件 SPI 模拟 */ uint16_t TP_ReadAD(uint8_t cmd) { uint16_t val 0; uint8_t i; TP_CS_LOW(); for(i 0; i 8; i) { /* 发命令字节 */ TP_CLK_LOW(); if(cmd 0x80) TP_DIN_HIGH(); else TP_DIN_LOW(); cmd 1; TP_CLK_HIGH(); } for(i 0; i 12; i) { /* 读 12 位 ADC */ TP_CLK_LOW(); val 1; TP_CLK_HIGH(); if(TP_DOUT_READ()) val | 0x01; } TP_CS_HIGH(); return val; }这段的关键在时序XPT2046 是 12 位 ADC命令字节里带通道选择X 还是 Y、参考电压和功耗模式读的时候先发 8 位命令再收 12 位数据CLK 的高低电平顺序错了读出来就是 0 或 4095 这种边界值。工程里通常还会做多次采样取中值或均值因为电阻屏单次采样抖动大直接拿一次值去映射手指一按坐标就跳。校准参数一般存在一个结构体里形如xfac、yfac、xoff、yoff映射公式是screen_x xfac * raw_x xoff这四个数不对触摸就会偏到屏幕外或者上下颠倒。2.3 编译前先核对三件事工程能编译不等于能跑。拿到包之后先确认芯片型号在 Keil 或 IAR 的器件库里选的是 STM32F103ZE不是 ZC、不是 VE再确认启动文件和分散加载配置里的 Flash/RAM 大小对得上 ZET6 的 512KB/64KB最后核对工程里屏的型号宏定义和你手上屏是否一致——同一份代码换个屏控制器初始化序列完全不同ILI9486 的代码刷到 NT35510 上就是白屏。这三件事花十分钟核对能省掉后面两小时的瞎猜。3. 从编译到点亮把工程跑起来的具体步骤与参数核对工程骨架看清了接下来是把它真正跑在板子上。这一步的目标很明确先让屏亮、再让屏显示正确颜色、最后让触摸能点准。三步分开验证出问题时才能定位到是哪一段链路断了而不是笼统地「不工作」。3.1 建立工程与下载配置用 Keil MDK 打开工程后先看 Options for Target 里的几项Device 选 STM32F103ZEDebug 选 ST-Link 或 J-Link按你手上的下载器Utilities 里勾选 Use Debug Driver 并进 Settings 确认能识别到芯片 ID。Flash Download 算法要选对ZET6 是 512KB Flash算法选小了下载会报错或者只写进去一部分。# 若用命令行方式校验芯片是否被识别以常见调试器工具为例 # 先确认调试器连接正常再执行下载 # 具体命令随调试器工具链不同而不同这里只示意流程下载前还有一个容易忽略的点BOOT0 和 BOOT1 跳线。从 Flash 启动要求 BOOT0 接地如果板子上跳线帽位置不对下载成功但程序不跑现象就是「下载器说成功了屏还是黑的」。这个坑我见过不止一次排查时先量 BOOT0 电平比翻代码快得多。3.2 屏不亮时的分层排查顺序屏完全不亮按「电源 → 背光 → 时序 → 初始化序列」的顺序查别一上来就怀疑代码。先量屏的 VCC 和背光供电是否到位4.3 寸屏背光通常需要单独一路有些模块要 3.3V 有些要 5V接错直接不亮。背光正常但屏是白的说明屏上电了但没收到有效初始化这时候回头看 FSMC 时序和屏控制器型号宏。背光正常、屏是花的多半是数据位宽或时序参数不对。现象优先怀疑核对方法全黑无背光背光供电/使能脚量背光引脚电压查使能 GPIO 是否拉高白屏初始化序列/屏型号宏对照屏手册确认控制器型号检查初始化命令表花屏/雪花FSMC 时序/数据位宽加大 DataSetupTime确认 16 位配置显示正常但颜色反像素格式/颜色顺序检查 RGB565 字节序和 MADCTL 寄存器这张表不是让你背是让你在出问题时有个下手顺序。血泪经验是白屏和花屏的根因经常不在同一层白屏多半是初始化没发对花屏多半是时序或位宽混在一起猜只会越猜越乱。3.3 触摸校准四个参数决定点得准不准显示正常之后再做触摸。触摸校准的本质是建立「原始 ADC 值」到「屏幕像素坐标」的线性映射。工程里一般提供一个校准流程在屏幕上依次显示几个十字标记让用户点采集对应的原始值解方程算出xfac/yfac/xoff/yoff。如果工程没带校准界面也可以手动改这四个参数试。/* 触摸坐标映射校准参数需实测填入 */ #define TOUCH_X_MIN 200 #define TOUCH_X_MAX 3800 #define TOUCH_Y_MIN 250 #define TOUCH_Y_MAX 3750 #define LCD_WIDTH 480 #define LCD_HEIGHT 272 uint16_t Touch_MapX(uint16_t raw) { /* 先限幅防止边界外推导致坐标飞出屏幕 */ if(raw TOUCH_X_MIN) raw TOUCH_X_MIN; if(raw TOUCH_X_MAX) raw TOUCH_X_MAX; return (uint16_t)((uint32_t)(raw - TOUCH_X_MIN) * LCD_WIDTH / (TOUCH_X_MAX - TOUCH_X_MIN)); }这段映射的逻辑是先把原始值限幅到校准区间内再做线性拉伸到屏幕分辨率。TOUCH_X_MIN/MAX是你实测的原始值边界不同屏、不同批次差异很大抄别人的参数基本点不准。限幅这一步别省电阻屏在边缘按压时原始值可能超出校准区间不限幅映射出来就是负数或超过 480表现就是「点到屏幕外」。Y 轴同理另外注意有些屏的 X/Y 是反的或者需要交换映射前先确认方向。3.4 用最小测试程序验证显示与触摸别一上来就跑完整应用。写一个最小测试整屏刷红、刷绿、刷蓝各一秒确认颜色和刷新正常再在触摸中断或轮询里读原始值并通过串口打印手指按不同位置看数值变化是否单调。这个最小程序能把「显示链路」和「触摸链路」彻底分开验证后面叠业务逻辑时出问题你就知道不是底层的事。/* 最小验证三色轮播 串口打印触摸原始值 */ while(1) { LCD_Clear(RED); Delay_ms(500); LCD_Clear(GREEN); Delay_ms(500); LCD_Clear(BLUE); Delay_ms(500); if(TP_IsPressed()) { printf(raw x%d, y%d\r\n, TP_GetRawX(), TP_GetRawY()); } }这段代码短但覆盖了两个关键验证点LCD_Clear能跑通说明 FSMC 写数据和屏初始化都对了串口能打出随按压位置变化的原始值说明触摸读取时序对了。两个都过再谈坐标映射准不准。4. 避坑与排查这类并口屏工程最容易翻车的五个地方同样的工程有人半小时点亮有人折腾两天差别往往就在几个固定坑上。下面这几条是按「现象 → 原因 → 解决」整理的遇到问题时对着查比盲改代码高效。4.1 下载成功但屏不亮现象是调试器提示下载完成复位后屏无反应。原因大概率是 BOOT 跳线不对芯片没从 Flash 启动或者工程里时钟配置把 HSE 当成外部晶振但板子上没焊晶振导致时钟起不来卡在启动阶段。解决方法是先量 BOOT0 电平确认接地再把时钟初始化里的 HSE 相关配置改成 HSI 试一次能跑说明是晶振问题。4.2 白屏但背光亮现象是屏全白背光正常。原因通常是屏控制器型号宏和实际屏不一致初始化命令表发给了错误的控制器也可能是 FSMC 的片选或 RS 地址线接错命令和数据发到了同一个地址。解决方法是先对照屏背面丝印或手册确认控制器型号再检查工程里LCD_CMD_ADDR和LCD_DATA_ADDR的偏移是否和硬件 RS 接线一致。4.3 花屏、局部雪花现象是画面能出但有大片噪点或错位。原因是 FSMC 数据建立时间不够或者数据位宽配成了 8 位而屏是 16 位。解决方法是把FSMC_DataSetupTime从 0x04 逐步加大到 0x08、0x0C 试同时确认FSMC_DataWidth是 16bGPIO 复用配置里数据脚一个都不能漏。4.4 触摸坐标乱跳或点不准现象是手指按着不动坐标在跳或者点左边响应到右边。原因是原始采样没做滤波或者校准参数是抄来的不是实测的也可能是 X/Y 方向需要交换。解决方法是采样取 5 次中值重新走一遍校准流程实测四个参数映射前先打印原始值确认 X/Y 是否接反。4.5 加了业务代码后偶发死机现象是跑最小测试正常叠上自己的逻辑后偶尔卡死。原因常见于触摸读取和显示刷新共用延时函数或者中断里做了耗时操作。解决方法是把触摸读取放到主循环轮询、显示刷新用状态机分片中断里只置标志位别在中断里刷屏或做长延时。提示以上五条里前三条属于硬件链路后两条属于软件时序排查时先确认硬件再动代码顺序反了会浪费大量时间。5. 把它当底座往上叠工程复用与二次开发的几个实操技巧这份工程真正的价值不在「能点亮」而在「点亮之后能当底座用」。4.3 寸屏加 ZET6 这个组合常见去向是做小型人机界面、参数设置面板、简易仪表显示。要在它上面叠业务第一件事是把驱动层和应用层切开lcd.c、touch.c、fsmc.c这些不要动业务代码单独建文件通过LCD_DrawPoint、LCD_Fill、Touch_GetXY这类接口调用。这样以后换屏或者换主控只换驱动层业务层不用重写。第二个技巧是给显示刷新做分层。整屏刷新在并口屏上很慢480×272 刷一次要几十毫秒业务里频繁整屏清会明显卡顿。常见做法是只刷变化区域数值变了只重绘那个数字所在的矩形用LCD_Fill先铺背景再画字。我一般会封装一个UI_UpdateValue(x, y, old, new)内部判断新旧值不同才重绘省下来的刷新时间比优化时序参数实在得多。第三个技巧是触摸事件别用「按下即触发」。电阻屏抖动大按下瞬间容易连发多次业务里表现为按钮点一次触发两三次。稳妥做法是加一个简单的状态机检测到按下后延时 20ms 再确认松开后也延时确认中间用标志位锁住直到松开才允许下一次触发。这个逻辑不复杂但能消掉大部分「点一下跳两页」的玄学问题。复用场景建议保留的层需要改的部分换同尺寸不同控制器屏应用层、触摸映射屏初始化序列、型号宏换主控但保留屏应用层FSMC/GPIO 驱动层只做参数面板全部驱动层新增 UI 布局与事件处理最后说一个验证习惯。每次改完驱动层参数别直接跑完整业务先用第 3 章那个三色轮播加串口打印的最小程序过一遍确认显示和触摸都没退化再切回业务工程。这个习惯帮我挡掉过好几次「改了一个时序参数显示好了但触摸挂了」的连锁问题。从那以后我每次动底层配置都强制先走一遍最小验证再谈业务。希望这份拆解能帮你少走点弯路把屏先点亮再谈界面好不好看。本文还有配套的精品资源点击获取

相关推荐

Snake主动轮廓模型MATLAB实现:图像分割从原理到调参避坑
Snake主动轮廓模型MATLAB实现:图像分割从原理到调参避坑

简介:这份资源是面向图像处理与计算机视觉学习者的标准Snake主动轮廓模型MATLAB实现,适合已具备一定MATLAB基础、希望深入理解曲线演化与边缘检测原理的中高级读者。压缩包共27个文件,约41KB,以21个m函数脚本为主体,辅… · 2026/11/4 9:42:44

RFID资产盘点系统:原理、选型与优化实践
RFID资产盘点系统:原理、选型与优化实践

1. RFID资产盘点系统概述在大型企业仓库或固定资产管理中,每年例行的资产盘点往往需要耗费大量人力物力。传统条形码扫描方式要求操作人员近距离逐一对准标签,效率低下且容易漏扫。而RFID(射频识别)技术通过无线电波实现非接触式批… · 2026/11/4 9:42:44

Jev 生态两周爆出 28 个项目:TypeSafe AI 与类型契约实战解析
Jev 生态两周爆出 28 个项目:TypeSafe AI 与类型契约实战解析

1. 从“Jev 火了两周”说起:一个开源生态的爆发式生长 Jev 这个名字,最近两周在开发者圈子里出现的频率高得有点离谱。如果你还没听说过它,简单来说,Jev 是一个围绕 TypeSafe AI 理念构建的模型与工具链体系,核心卖点… · 2026/11/4 9:42:44

AC5 5.05 update 1 build106 老工程编译链接与排错实战
AC5 5.05 update 1 build106 老工程编译链接与排错实战

简介:面向仍在使用 Keil MDK 维护 ARM 嵌入式旧工程、需要补齐经典编译工具链的开发者与学习者,Arm Compiler 5.05 update 1(build 106)是一份 Windows 平台编译器安装资料,重点解决旧项目对 ARMCC 5.05 版本环境的兼容… · 2026/11/4 10:17:37

eDNA数据分析入门:文件结构与处理流程详解
eDNA数据分析入门:文件结构与处理流程详解

1. eDNA数据分析入门:文件结构与核心概念解析环境DNA(eDNA)研究正在彻底改变生物多样性监测的方式。与传统采样方法相比,eDNA技术只需从水、土壤等环境样品中提取DNA,就能获取该环境中所有生物的信息。但当你第一次拿到… · 2026/11/4 10:17:37

基于Quasar框架的博客管理系统前端开发实践
基于Quasar框架的博客管理系统前端开发实践

1. 项目概述与背景最近在B站看到小霖同学的Quasar框架教程,决定跟着学习一下这个基于Vue3的前端框架。Quasar作为一个全能的Vue框架,提供了丰富的UI组件和开发工具,特别适合快速构建响应式Web应用。本文将记录我从零开始搭建一个博客管理前端… · 2026/11/4 10:17:37

Jev:非标解法的技术哲学与工程实践
Jev:非标解法的技术哲学与工程实践

“Jev”这个说法最近在社交平台和弹幕评论区高频出现,但翻遍主流词典、技术文档、百科词条甚至行业黑话手册,都找不到它的标准定义——它压根就不是个正式术语。我最早是在一个讲“AI绘画提示词优化”的视频评论区看到的:“这组prompt写得真J… · 2026/11/4 10:17:37

LLM通用翻译器:机制、能力边界与提示词调优实战
LLM通用翻译器:机制、能力边界与提示词调优实战

1. 为什么我会说LLM是通用翻译器2023年之前,我做翻译工具选型时思路非常固定:英译中用什么、日译中用什么、专业文档翻译又要用什么。传统机器翻译引擎各有各的擅长领域,有的语料库偏向新闻,有的偏向日常口语,遇到专业… · 2026/11/4 10:17:37

ClaudeCode代码生成工具实战:从配置到项目集成
ClaudeCode代码生成工具实战:从配置到项目集成

1. 项目概述作为一名长期关注AI编程助手的开发者,最近终于有机会深度体验了ClaudeCode这款新兴的代码生成工具。与市面上其他AI编程助手不同,ClaudeCode在理解复杂业务逻辑和生成可维护代码方面展现出独特优势。本文将分享我从零开始使用ClaudeCode的完整… · 2026/11/4 10:16:36

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码