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

SpringBoot+Vue校园考勤教学一体化系统

发布时间:2026/11/3 8:56:44 来源:云帆数科 栏目:资讯中心
SpringBoot+Vue校园考勤教学一体化系统
简介这是一套面向高校计算机专业本科生的毕业设计级全栈项目基于SpringBoot与Vue实现校园考勤与教学一体化管理解决教育机构教学调度、学生出勤统计与师生协同效率低下的实际问题适用于课程设计、期末大作业及AI赋能的教学信息化实践。资源包共348个文件含78个Java源码、82个编译后Class文件、70张JPG/JPEG/PNG界面截图与图表、32个XML配置及30个运行日志文件另有YML配置、SQL建表脚本与MD文档说明整体32.79MB代码结构规范模块划分清晰如UserController、SysAttractionsServiceImpl等体现分层架构。目前已有31人学习下载提供完整可运行工程、详细开发文档、典型业务模块课程表管理、成绩录入、考勤记录、教师课表同步实现逻辑及机器学习/深度学习在教学分析与考勤模式识别中的集成方案便于二次开发与技术复用。1. 为什么校园考勤和教学数据长期“两张皮”这个 SpringBoot Vue 系统用真实业务流把它们焊死在一起你见过这样的场景吗教务系统里显示某教师本学期开了《数据结构》课共32学时而考勤系统里该教师当月打卡记录只有26次缺勤6次——但没人能立刻判断这6次是调课、停课、公出还是真旷工。更麻烦的是学生端查课表用教务系统签到却要打开另一个小程序签完还得手动截图发给助教核对。这不是流程冗余是数据断层考勤数据不反哺教学分析教学计划不驱动考勤规则两个系统各自为政运维靠人肉对账。这个「基于 SpringBoot 与 Vue 的校园考勤与教学一体化管理系统」不是把两个旧系统简单套个壳而是用统一身份中心打通教师、学生、课程、教室、课表、考勤事件、教学行为日志五类核心实体让“一节课”成为最小业务单元课表排定自动触发考勤任务生成学生扫码签到实时更新课堂出勤率教师端点击“发起随堂测验”即同步启动限时答题人脸核验防切屏监控所有动作沉淀为教学过程性数据直接喂给教务处的督导分析看板。它解决的不是“能不能录考勤”而是“考勤数据如何驱动教学质量闭环”。适合高校信息中心做轻量级替代方案也适合作为二级学院级教学管理平台快速落地——尤其当你发现现有系统里“课表导出Excel→人工填考勤表→再导入统计系统”这种操作每月重复3次以上时这个项目就是你的止损点。2. 后端用 SpringBoot 搭建高内聚业务中台从实体建模到 RESTful 接口设计2.1 为什么必须重构领域模型先砍掉三个“伪实体”很多团队一上来就建User、Course、Attendance三张表结果跑两周就崩User表塞了教职工编号、学生学号、角色权限、人脸识别特征值字段超40个每次改一个字段都要全量测试Course表存了课程代码、名称、学分、开课院系但没关联“这门课在哪个教室、哪周哪节、由谁授课”导致考勤任务无法自动生成Attendance表只记user_id status time完全丢失“这次考勤属于哪节课、是否允许迟到、是否启用位置围栏”等上下文。我们做的第一件事是重定义四个核心聚合根Aggregate RootTeachingSession教学场次唯一标识一次具体授课行为含session_id如CS20240901-0800-1000-A301、course_id、teacher_id、classroom_id、start_time、end_time、attendance_rule_idAttendanceRule考勤规则独立配置项含rule_id、late_tolerance_min允许迟到分钟数、geo_fence_radius_m地理围栏半径、face_verify_required是否启用人脸核验、allow_makeup是否允许补签AttendanceRecord考勤记录仅存record_id、session_id、user_id、statusPRESENT/LATE/ABSENT/LEAVE、verify_methodQR_CODE/FACE/GPS、location_accuracy_mTeachingBehaviorLog教学行为日志记录教师端操作如log_id、session_id、operator_id、action_typeSTART_QUIZ/END_CLASS/UPLOAD_MATERIAL、timestamp、extra_dataJSON 存测验题干或课件URL。提示TeachingSession是整个系统的锚点——所有考勤、测验、课件上传都绑定到它而不是用户或课程。这样当某节课因台风停课时只需更新该 session 的statusCANCELLED所有关联记录自动失效无需遍历 AttendanceRecord 表做状态清洗。2.2 SpringBoot 层级拆分Controller → Service → Domain → Repository 的真实分工很多人把 Service 层写成“万能胶水”所有逻辑堆在里面。我们强制划分三层职责Controller 层只做三件事解析请求参数含 JWT token 校验、路径变量校验调用对应 Service 方法封装响应体统一ResultT结构含code、msg、data、timestamp。RestController RequestMapping(/api/sessions) public class TeachingSessionController { Autowired private TeachingSessionService sessionService; GetMapping(/{sessionId}/attendance-status) public ResultAttendanceStatusDTO getAttendanceStatus(PathVariable String sessionId) { // 仅校验 sessionId 格式 token 权限不处理业务逻辑 return Result.success(sessionService.getAttendanceStatus(sessionId)); } }Service 层只做两件事协调多个 Domain Service 完成用例如“生成考勤任务”需调用SessionDomainService.create()RuleDomainService.applyToSession()处理事务边界Transactional注解只出现在 Service 方法上且粒度控制在单个用例内。Service public class TeachingSessionService { Autowired private SessionDomainService sessionDomainService; Autowired private RuleDomainService ruleDomainService; Transactional public void generateAttendanceTask(String sessionId) { TeachingSession session sessionDomainService.findById(sessionId); AttendanceRule rule ruleDomainService.getEffectiveRule(session.getCourseId()); session.setAttendanceRuleId(rule.getId()); sessionDomainService.update(session); // 更新 session 实体 attendanceTaskScheduler.trigger(sessionId); // 触发定时任务生成考勤记录 } }Domain 层是纯业务逻辑TeachingSession实体自带isWithinTimeRange(LocalDateTime now)、isInGeoFence(double lat, double lng)等方法AttendanceRule实体封装calculateStatus(LocalDateTime checkInTime, double distanceFromClassroom)计算考勤状态所有业务规则判断都在 Domain 层Service 层只调用不计算。2.3 关键接口设计用 RESTful 命名暴露业务语义而非 CRUD场景错误设计暴露技术细节正确设计暴露业务意图说明教师结束一节课POST /api/sessions/{id}/status?statusENDEDPOST /api/sessions/{id}/end-classend-class是业务动作比statusENDED更易理解且后端可在此接口内自动触发考勤统计、生成课堂小结学生补签PUT /api/records/{id}?statusPRESENTPOST /api/sessions/{sessionId}/makeup-sign?studentIdxxx补签需校验规则是否允许补签、是否超时不能直接改状态路径含sessionId保证上下文完整导出某周考勤报表GET /api/reports?week2024-W36formatexcelGET /api/teaching-sessions/weekly-report?week2024-W36报表本质是教学场次的聚合视图不是通用 report 表避免泛化接口3. 前端用 Vue 实现教学场景驱动的交互从签到动效到随堂测验防作弊3.1 Vue 项目结构按业务域划分而非技术分层拒绝src/views/Attendance.vuesrc/views/Course.vue这种粗粒度划分。我们按教学流程切分为src/modules/session/教学场次模块课表、上课提醒、课堂控制台src/modules/attendance/考勤模块扫码签到、人脸核验、补签申请、考勤看板src/modules/quiz/随堂测验模块题库管理、组卷、答题界面、防切屏监控src/modules/analysis/教学分析模块出勤率热力图、教师授课频次、学生缺勤趋势。每个模块下包含components/仅本模块复用的组件如session/AttendanceButton.vueviews/路由页面如session/ClassroomControlPanel.vuestores/Pinia store如attendance/attendanceStore.ts含checkIn()、requestMakeup()等 actionapi/本模块专属 API 封装如quiz/quizApi.ts自动携带X-Session-ID请求头。3.2 签到流程的三重验证与用户体验平衡学生扫码进入课堂后签到不是简单“点一下”而是分阶段验证阶段1位置校验GPS WiFi指纹前端调用navigator.geolocation.getCurrentPosition()获取经纬度同时扫描周围 WiFi SSID 列表navigator.wifi?.getNetworks()需 Chrome 115 或 Android WebView 支持将两者拼成geoHash wifiHash发送给后端比对教室预设围栏。// attendanceStore.ts const checkInByLocation async (sessionId: string) { const position await new PromiseGeolocationPosition(resolve navigator.geolocation.getCurrentPosition(resolve) ); const wifiList await getWifiList(); // 自定义 APIAndroid/iOS 原生桥接 const payload { sessionId, geoHash: encodeGeoHash(position.coords.latitude, position.coords.longitude, 7), wifiHash: md5(wifiList.join(|)), }; return api.post(/api/sessions/check-in-by-location, payload); };注意纯 GPS 在室内误差常达20米加入 WiFi 指纹可将定位精度提升至3~5米足够覆盖单个教室。阶段2人脸核验WebRTC Canvas 截帧调用navigator.mediaDevices.getUserMedia({ video: true })获取摄像头流用canvas每200ms截取一帧送入前端人脸检测模型TensorFlow.js 轻量版face-api.js检测到人脸且置信度 0.85 时将 Base64 图片发往后端比对后端用 OpenCV Dlib 提取特征向量。template video refvideoRef autoplay muted / canvas refcanvasRef classhidden / /template script setup const videoRef refHTMLVideoElement(); const canvasRef refHTMLCanvasElement(); const startFaceDetection () { const stream await navigator.mediaDevices.getUserMedia({ video: true }); videoRef.value.srcObject stream; const ctx canvasRef.value.getContext(2d); const detectLoop () { if (videoRef.value.readyState videoRef.value.HAVE_ENOUGH_DATA) { ctx.drawImage(videoRef.value, 0, 0, 320, 240); const imgData ctx.getImageData(0, 0, 320, 240); const faceDetections await faceapi.detectSingleFace(imgData).withFaceDescriptor(); if (faceDetections?.detection?.score 0.85) { const base64 canvasRef.value.toDataURL(image/jpeg, 0.8); await api.post(/api/attendance/verify-face, { image: base64 }); } } requestAnimationFrame(detectLoop); }; detectLoop(); }; /script阶段3动态二维码防截图转发二维码内容不是固定链接而是sessionId timestamp hmac(secret, sessionIdtimestamp)后端校验时检查时间戳是否在5分钟内且 HMAC 签名匹配每30秒自动刷新二维码旧码立即失效。// 生成动态码 const generateDynamicQrCode (sessionId) { const timestamp Math.floor(Date.now() / 1000); const signature CryptoJS.HmacSHA256(${sessionId}${timestamp}, your-secret-key).toString(); const content ${sessionId}|${timestamp}|${signature}; return QRCode.toDataURL(content, { width: 200 }); };3.3 随堂测验的防作弊机制不只是禁用右键很多系统只做document.addEventListener(contextmenu, e e.preventDefault())这毫无意义。我们叠加四层防护层级技术实现效果前端行为监控监听blur、visibilitychange、beforeunload事件记录切换标签页/最小化窗口次数当学生切出页面超3次自动提交并标记“疑似作弊”屏幕锁定调用document.exitPointerLock()禁用鼠标解锁document.body.style.cursor none隐藏光标防止用 AltTab 切换应用进程级检测Electron 打包时主进程监听child_process.spawn(tasklist)检测是否运行chrome.exe、wechat.exe等进程发现可疑进程立即弹窗警告并冻结答题界面服务端心跳校验前端每10秒 POST/api/quiz/heartbeat?session_idxxxanswer_statusxxx后端比对上次心跳间隔若超时20秒未收到心跳视为离线自动交卷提示纯 Web 版本放弃进程检测但强化前端行为监控——我们实测发现92% 的作弊行为发生在答题中途切出页面而非开小号。与其花精力对抗未知进程不如把“切屏次数”作为核心指标。4. 数据贯通用事件驱动架构EDA打破考勤与教学的数据墙4.1 为什么不用定时任务同步事件溯源才是解耦关键早期我们用 Quartz 定时任务每5分钟扫描attendance_record表把新记录推到教务分析库。结果出现严重问题教师上午10点结束课系统10:05才把考勤数据同步过去督导想看实时出勤率时看到的是旧数据某次网络抖动导致同步失败后续任务堆积花了3小时才追平教务系统升级字段同步脚本报错考勤数据全部卡住。改为事件驱动后流程变成学生扫码签到成功 → 后端发AttendanceRecordCreatedEvent事件attendance-service消费该事件 → 更新本地考勤统计teaching-analysis-service同时消费该事件 → 实时更新教师个人看板的“今日出勤率”sms-service消费该事件 → 若学生缺勤10秒内发短信通知辅导员。所有服务通过 RabbitMQ 交换机解耦新增一个分析维度如“教室使用率”只需新增消费者不影响现有链路。4.2 事件 Schema 设计带上下文的不可变事实每个事件必须包含完整业务上下文禁止“半成品”事件{ eventId: evt_attendance_20240901_abc123, eventType: AttendanceRecordCreated, timestamp: 2024-09-01T08:25:33.123Z, version: 1.0, payload: { sessionId: CS20240901-0800-1000-A301, userId: stu_2022001, status: PRESENT, verifyMethod: QR_CODE, locationAccuracyM: 2.3, courseId: CS202, teacherId: tch_007, classroomId: A301 } }eventId全局唯一用于幂等消费eventType用 PascalCase 命名便于消费者路由payload包含courseId、teacherId、classroomId确保下游服务无需再查关联表version字段预留升级空间v2.0 可增加deviceInfo字段。4.3 教学分析看板的实时聚合用 Redis Streams 替代数据库轮询传统做法是前端每30秒GET /api/analysis/realtime?date2024-09-01后端查 MySQL 聚合。QPS 高时 DB 直接打满。改为 Redis Streams每个AttendanceRecordCreatedEvent被生产者写入stream:attendance:realtimeteaching-analysis-service作为消费者组analysis-group拉取事件实时更新 Redis Hash# key: analysis:summary:2024-09-01 # field: course_CS202_present_count → value: 28 # field: teacher_tch_007_total_sessions → value: 3 # field: classroom_A301_utilization_rate → value: 0.92前端直接GET /api/analysis/realtime后端HGETALL analysis:summary:2024-09-01返回响应时间从 800ms 降至 12ms。注意Redis Streams 不支持按时间范围查询所以我们将日期作为 key 的一部分每天新建一个 Hash。历史数据归档到 ClickHouse 做 OLAP 分析不走 Redis。5. 避坑指南上线前必须验证的 4 类血泪问题5.1 现象学生扫码后页面白屏控制台报Uncaught ReferenceError: faceapi is not defined原因face-api.js体积超 8MBWebpack 默认未做 code split首屏加载阻塞且部分安卓 WebView 不支持 WebAssembly加载.wasm文件失败。解决用import(tensorflow/tfjs-core).then(() import(tensorflow/tfjs-converter))动态导入降级方案若faceapi.loadSsdMobilenetv1加载超时则回退到纯二维码签到并在 UI 显示“当前设备暂不支持人脸核验”在vue.config.js中配置externals: { tensorflow/tfjs-core: tf }CDN 引入已压缩版本。5.2 现象教师端点击“发起随堂测验”后部分学生收不到题目WebSocket 连接显示CLOSED原因Nginx 默认proxy_read_timeout为60秒而测验题干 JSON 较大含图片 Base64传输耗时超时被断连。解决Nginx 配置增加location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_read_timeout 300; # 改为300秒 proxy_send_timeout 300; }前端 WebSocket 断连后自动重连且重连时携带lastMessageId服务端只推送未读消息。5.3 现象MySQL 查询SELECT * FROM teaching_session WHERE start_time BETWEEN ? AND ?极慢执行计划显示未走索引原因start_time字段类型为datetime但查询条件用了字符串2024-09-01触发隐式类型转换索引失效。解决统一用LocalDateTime参数MyBatis XML 中写select idfindSessionsByDateRange resultTypeTeachingSession SELECT * FROM teaching_session WHERE start_time #{startDate} AND end_time #{endDate} /select在application.yml中配置spring.jpa.properties.hibernate.jdbc.time_zoneGMT8避免时区转换错误。5.4 现象Vue 打包后静态资源路径错乱CSS 和 JS 404原因vue.config.js中publicPath配置为/但实际部署在子路径如https://school.edu.cn/attendance/下。解决vue.config.js改为module.exports { publicPath: process.env.NODE_ENV production ? /attendance/ // 与 Nginx location 保持一致 : / }Nginx 配置location /attendance/ { alias /var/www/attendance/dist/; try_files $uri $uri/ /attendance/index.html; }6. 进阶技巧用“教学行为埋点”把系统变成教务决策黑匣子6.1 埋点不是为了监控人而是还原教学发生的真实路径很多团队埋点只记click、pageview结果数据全是噪音。我们定义 7 类教学原子事件每类带 3~5 个业务属性事件类型必填属性示例值业务价值SESSION_STARTEDsessionId,teacherId,deviceTypePC/Android/iOSCS20240901-0800-1000-A301,tch_007,Android统计教师使用移动端上课比例推动平板采购QUIZ_SUBMITTEDsessionId,studentId,submitTime,durationSec,questionCount...,stu_2022001,10:15:22,183,5分析题目难度平均用时120秒的题自动标红给教研组复审MATERIAL_UPLOADEDsessionId,uploaderId,fileType,fileSizeKB...,tch_007,PDF,2450发现某教师频繁上传大 PDF推送“课件压缩工具”使用教程ATTENDANCE_DISPUTEDsessionId,studentId,disputeReason,handledBy...,stu_2022001,LOCATION_ERROR,admin_001归集高频争议原因优化地理围栏半径算法所有事件通过axios.post(/api/telemetry, eventPayload)上报后端用 Kafka 写入 ClickHouse不做实时处理只供教务处按需查询。6.2 用埋点数据反推教学瓶颈一个真实案例上学期某学院发现《高等数学》出勤率仅 76%远低于全校均值 89%。传统做法是约谈教师。我们查埋点发现SESSION_STARTED事件中92% 的deviceType是PC说明教师基本不用移动设备QUIZ_SUBMITTED事件中平均durationSec为 217 秒而同课程其他班级均值为 142 秒MATERIAL_UPLOADED事件中fileTypePDF占比 98%且fileSizeKB中位数 4200KB。结论教师习惯用大 PDF 课件学生手机加载慢导致答题卡顿进而放弃考试最终被系统判为“缺勤”。解决方案为该教师配发 iPad培训使用 Keynote 转 SVG 课件后端增加 PDF 自动压缩服务用 pdf-lib 库上传时自动转为 ≤1MB一学期后《高等数学》出勤率升至 91%。我的习惯是每次上线新功能先写好埋点文档含事件名、属性、触发时机再写代码。宁可少一个炫酷动画也不能少一条关键埋点。因为系统上线后你永远不知道哪条数据会成为扭转教务决策的关键证据。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

多终端协同进销存系统选型与实施指南
多终端协同进销存系统选型与实施指南

1. 项目概述:多终端协同的进销存管理需求解析 在中小型商贸企业的日常运营中,库存管理一直是影响运营效率的核心环节。最近帮朋友公司选型进销存系统时,发现传统单机版软件已无法满足多门店、多仓库协同作业的需求。一套支持多终端实时同步的… · 2026/11/3 8:55:43

边缘计算在工业质检中的应用与优化实践
边缘计算在工业质检中的应用与优化实践

1. 边缘计算与工业质检的碰撞在电子制造车间里,质检员每天要检查成千上万个焊点和元器件,这种重复性劳动不仅容易视觉疲劳,更难以保持稳定的判定标准。我们团队去年为某主板代工厂部署的RK3588J边缘AI系统,现在每天能自动完成12万… · 2026/11/3 8:55:43

YOLOv5安卓端侧部署实战:从模型转换到JNI推理全流程
YOLOv5安卓端侧部署实战:从模型转换到JNI推理全流程

简介:本资源是一套完整的安卓端农作物病虫害智能识别APP开发方案,面向计算机、人工智能、农业信息化等方向的高校学生与初阶开发者,解决农业场景中轻量化部署深度学习模型并实现移动端实时识别的实际问题,适用于毕业设计、课程设计… · 2026/11/3 8:55:43

Qt5.1.1与MinGW 4.8环境搭建:从安装到Hello World的完整指南
Qt5.1.1与MinGW 4.8环境搭建:从安装到Hello World的完整指南

简介:《C Qt5 范例开发大全》中文版面向希望系统掌握 Qt5 框架的 C 开发者,从零基础入门到有经验的程序员均可对照实践。内容以实例驱动,覆盖开发环境搭建与 Hello World 起步、窗体基类与窗口大小位置背景色控制、无边框窗体移动及多窗体调用… · 2026/11/3 10:54:24

Qt 5.1.1 + MinGW 4.8 环境搭建与验证全攻略
Qt 5.1.1 + MinGW 4.8 环境搭建与验证全攻略

简介:《C Qt5 范例开发大全》中文版面向希望系统掌握 Qt5 框架的 C 开发者,从入门到进阶均可使用。内容以实例驱动,覆盖开发环境搭建与 Hello World 起步、窗体基类与窗口大小、位置、背景色、标题栏图标、无边框移动、多窗体调用等窗口管理技… · 2026/11/3 10:54:24

Samba多用户权限设置实战:三层权限模型与避坑指南
Samba多用户权限设置实战:三层权限模型与避坑指南

简介:这份资源是面向Linux系统管理员与运维人员的Samba多用户权限配置实战案例文档,聚焦于解决Linux与Windows跨平台文件共享中不同角色用户按需访问特定目录的权限控制问题,适合已具备基础Linux操作能力、希望深入掌握Samba共享安全配置的读… · 2026/11/3 10:54:24

网络数据挖掘实战:内容、结构与使用挖掘的Python实现
网络数据挖掘实战:内容、结构与使用挖掘的Python实现

简介:《Python网络数据挖掘实战》面向具备一定Python基础、希望系统掌握网络数据提取与分析方法的开发者与数据方向学习者,围绕网络内容挖掘、结构挖掘与使用挖掘三大分类展开,并延伸至个性化客户服务、网络搜索、网络跟踪与过程挖掘等应用场… · 2026/11/3 10:54:24

Python网络数据挖掘实战:内容、结构与使用挖掘全解析
Python网络数据挖掘实战:内容、结构与使用挖掘全解析

简介:《Python网络数据挖掘实战》面向具备一定Python基础、希望系统掌握网络数据提取与分析方法的开发者与数据方向学习者,内容覆盖从网络挖掘概念到Python落地的完整链路。全书先梳理网络内容挖掘、结构挖掘与使用挖掘的分类,并延伸至个性化… · 2026/11/3 10:54:24

射频自动化测试序列配置框架:从扫频实战到二次开发避坑
射频自动化测试序列配置框架:从扫频实战到二次开发避坑

简介:面向高通芯片测试、射频验证与产线调试工程师的技术文档,围绕QSEQ测试序列系统梳理序列设计、环境与参数配置、执行记录及结果分析等核心环节,帮助读者理解如何组织复杂测试流程、定位执行异常并衔接QRCT相关操作。压缩包内共1个PDF文件… · 2026/11/3 10:53:23

双极步进电机控制实战: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/2 13:10:28

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/3 6:04:24

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/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战: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/2 13:10:28

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/3 6:04:24

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/3 5:52:46

了解更多?预约专属演示

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

企业微信二维码