- 博客(319)
- 资源 (43)
- 问答 (1)
- 收藏
- 关注
原创 基于DS3231时钟模块的stm32 程序,源码
本文介绍了DS3231高精度实时时钟芯片的结构原理及与STM32的通信实现。DS3231是一款集成温度补偿晶体振荡器的I2C实时时钟器件,具有电池备份功能,断电仍可保持精确计时。文章详细分析了芯片内部结构、寄存器功能及典型应用电路。在STM32通信部分,提供了完整的I2C驱动代码,包括GPIO配置、初始化函数、读写操作等实现细节。通过串口交互可设置时间,并实时读取显示时间、温度信息。该系统实现了DS3231与STM32的高效通信,为嵌入式系统提供了可靠的时间基准。
2020-11-16 09:24:42
15793
11
原创 keil 添加ARM芯片包 (stm32为例)
本文介绍了Keil MDK开发环境中STM32芯片包的安装方法:1)从Keil官网或百度云下载STM32固件库包;2)双击下载的包文件自动安装(会识别MDK安装路径);3)通过MDK的File/DeviceDatabase菜单确认包是否安装成功。安装过程简单,只需按步骤操作即可完成芯片包的配置。
2020-08-31 18:53:42
38180
39
原创 TMC2240 芯片数据手册解读|第十九篇 保护功能与驱动器诊断(Protections and Driver Diagnostics)
本文深入解析TMC2240步进电机驱动芯片的保护与诊断系统。主要内容包括:1)三级过流保护(OCP)机制及其重试策略;2)165°C热关断与120°C过温预警功能;3)OV引脚控制的刹车斩波器过压保护方案;4)对地/对电源短路的三次重试保护;5)开路负载检测方法及局限性;6)多电源轨欠压锁定保护。文章详细阐述了各保护功能的触发条件、故障标志位及恢复方式,并提供了温度测量、电源电压监测等诊断手段,为系统安全运行提供全方位保障。文中所有参数均严格参考官方数据手册,并标注了相关寄存器配置位置。
2026-07-21 08:30:00
81
原创 STM32内核精讲 | 第十六章:NVIC 高级话题
摘要: 本文是《STM32内核精讲》第二阶段的开篇,聚焦NVIC(嵌套向量中断控制器)的进阶原理。首先强调NVIC是纯硬件电路,负责实时仲裁中断优先级。核心内容涵盖: 中断嵌套与优先级屏蔽:详解PRIMASK(全局中断开关)、FAULTMASK(屏蔽所有异常)、BASEPRI(选择性屏蔽低优先级中断)三个寄存器的功能与使用场景,强调BASEPRI的灵活性。 中断响应流程:分为硬件压栈(自动保存8寄存器)、取向量(并行读取ISR地址)、执行ISR三阶段,并介绍尾链和晚到优化机制。 软件触发中断:通过SETPE
2026-07-21 08:30:00
476
原创 TMC2240 芯片数据手册解读|第十八篇 复位、禁用/停止与掉电(Reset, Disable/Stop and Power Down)
本文深入解析了TMC2240电机驱动芯片的三种关键硬件控制机制:紧急停止、外部复位与睡眠模式、掉电位置恢复。文章首先介绍了DRV_ENN引脚的硬件紧急停止功能,以及ENCA引脚复用为停止功能的配置方式及区别。随后详细讲解了SLEEPN引脚的两种触发行为(复位和睡眠模式)及其恢复流程、复位状态检测方法。针对掉电位置保持问题,文章提出了基于步进电机全步锁定效应的两种恢复策略,并给出了上电初始化的最佳实践流程。最后还列出了相关寄存器的速查表,为工程师提供了构建可靠运动控制系统的实用指导。
2026-07-14 08:30:00
87
原创 STM32内核精讲 | 第十五章:内核性能指标
本文是《STM32内核精讲》系列第一阶段的收官之作,重点解析Cortex-M内核的关键性能指标。文章深入剖析了CoreMark和DMIPS两种主流基准测试的标准与方法,指出Dhrystone(DMIPS)作为1984年提出的老标准存在代码量小、易被编译器优化等缺陷,而2009年推出的CoreMark通过链表排序、矩阵运算等更贴近实际场景的测试项目成为新标杆。 文中提供了Cortex-M全系内核(M0到M85)的典型性能数据对比表,并强调DMIPS数值会因编译配置差异产生数倍波动。此外,文章详细讲解了中断延迟
2026-07-14 08:30:00
546
原创 TMC2240 芯片数据手册解读|第十七篇 ABN 增量式编码器接口(ABN Incremental Encoder Interface)
本文深入解析了TMC2240驱动芯片的ABN增量式编码器接口功能。该接口支持标准A/B/N三相信号,通过32位编码器计数器X_ENC和预分频器ENC_CONST实现编码器位置与电机位置的匹配。重点介绍了正交编码原理、N信号处理机制(清零/锁存)、编码器常数计算方法以及ENCMODE寄存器的配置选项。文章还提供了200全步电机搭配1000线编码器的实战案例,说明如何通过ENC_CONST实现分辨率匹配。这一功能为步进电机系统提供了精确的位置反馈,支持失步检测和闭环控制等关键应用场景。(149字)
2026-07-07 08:30:00
96
原创 STM32内核精讲 | 第十四章:Cortex‑M 内核对比与选型
内核架构流水线DMIPS/MHz(典型值)FPU关键特性典型场景M0ARMv6‑M2 级0.9无最小尺寸极简控制M0+ARMv6‑M2 级0.95无最低功耗传感器节点M3ARMv7‑M3 级1.25无均衡之选工业控制M4ARMv7E‑M3 级1.25单精度(可选)DSP+FPU电机控制、音频M7ARMv7E‑M6 级双发射2.14双精度(可选)缓存+TCM高性能实时M23ARMv8‑M BL2 级~1.0无。
2026-07-07 08:30:00
353
原创 TMC2240 芯片数据手册解读|第十六篇 正弦波查找表(Sine Wave Lookup Table)
本文深入解析了TMC2240步进电机驱动芯片的可编程正弦波查找表功能。该技术允许用户通过自定义微步电流波形来补偿低成本电机制造公差,提升运行平滑度。文章详细介绍了微步表的工作原理,包括仅存储1/4波形的差分编码方案、四段斜率控制(X1/X2/X3分段与W0~W3斜率设置),以及START_SIN/START_SIN90/OFFSET_SIN90的相位偏移校准方法。此外,还提供了利用StallGuard4自动校准相位偏移的实用技巧,并给出了默认正弦波表的初始化代码。通过调整这些参数,可以优化电机性能,使其在低
2026-06-30 08:30:00
134
原创 STM32内核精讲 | 第十三章:内存屏障 —— 对抗优化与重排
本文深入探讨了嵌入式系统中内存屏障(Memory Barrier)的重要性及其应用场景。编译器优化和处理器写缓冲器可能导致指令重排,影响外设驱动、共享变量访问和RTOS临界区代码的可靠性。文章详细分析了DMB、DSB和ISB三条内存屏障指令的语义差异及适用场景:DMB用于保证内存访问顺序但不排空写缓冲器,DSB等待所有内存访问完成并排空写缓冲器,ISB则刷新流水线以确保指令重新取指。通过具体示例(如外设寄存器访问、共享变量同步、系统控制寄存器修改等),作者阐明了如何正确使用这些指令来确保代码执行的正确性,特
2026-06-30 08:30:00
597
原创 TMC2240 芯片数据手册解读|第十五篇 诊断输出(Diagnostic Outputs)
本文深入解析TMC2240驱动芯片的诊断输出系统。作为状态反馈通道,DIAG0和DIAG1引脚可实时输出堵转、过温、错误等关键信息,支持开漏/推挽两种输出模式。文章详细介绍了各诊断信号的触发条件、输出行为和应用场景,重点分析了DIAG0独有的复位指示功能和DIAG1的微步索引信号。同时提供了相关寄存器配置速查表,帮助工程师快速实现硬件中断响应和系统保护功能。通过合理配置诊断输出,可实现电机控制的实时监控和故障快速响应。
2026-06-23 08:30:00
121
原创 STM32内核精讲 | 第十二章:调试与跟踪组件
文章摘要(149字): 本文是《STM32内核精讲》系列第十二篇,聚焦Cortex-M内核的调试与跟踪技术。传统断点调试无法捕获全速运行时的偶发问题(如中断延迟、竞争条件),而ARM CoreSight架构提供非侵入式解决方案,包括ITM(无外设printf调试)、DWT(性能计数与数据跟踪)、ETM(指令流跟踪)等组件。文章详解CoreSight的“源→链路→接收端”数据流逻辑,并给出ITM重定向printf和DWT高精度计时的代码实例。通过SWO引脚可实现实时数据监控,适用于低功耗调试等场景,显著提升问
2026-06-23 08:30:00
626
原创 专栏终章:从2019到2026,这场C语言马拉松,我们一起跑到了终点
专栏完结总结:六年C语言学习之旅 这篇专栏回顾了从2019到2026年完整的C语言学习历程。内容分为四个阶段:从基础语法入门,到预处理器与底层机制探索,再到C99/C11新特性与标准库深度学习,最终实现从"使用工具"到"设计工具"的蜕变。学习者不仅掌握了C语言核心知识,更培养了底层思维、调试能力、设计思维等编程核心素养。专栏强调C语言作为计算机科学基础的重要性,为读者指明了数据结构、系统编程、嵌入式开发等后续发展方向。最后寄语读者保持学习热情,将C语言作为探索更广阔技术世界的起点。
2026-06-21 18:14:42
400
原创 18.7【保姆级教程】二叉查找树:让查找像“猜数字”一样快
本文介绍了二叉查找树(BST)的基本概念和实现方法。BST是一种高效的动态数据结构,结合了链表的灵活性和数组的快速查找特性。文章首先解释了二叉树的结构特点,即每个节点最多有两个子节点,并详细说明了二叉查找树的"左小右大"规则如何实现高效查找(时间复杂度O(log n))。随后给出了BST的ADT接口设计,包括插入、查找、删除等核心操作。最后通过C语言代码展示了具体实现,包括递归方式的节点操作和内存管理。文章还指出树结构在文件系统、编译原理等领域的广泛应用,为读者后续学习更复杂树形结构打下基础。
2026-06-21 18:14:11
207
原创 STM32内核精讲 | 第十一章:低功耗模式 —— 内核的睡眠哲学
本文是《STM32内核精讲》系列第十一篇,聚焦Cortex-M内核的低功耗机制。文章从硬件根源入手,详细解析了三种低功耗模式(睡眠、深度睡眠、待机)的差异,涉及电源域划分、SCR寄存器配置及唤醒特性。同时探讨了Sleep-now与Sleep-on-exit两种睡眠策略的适用场景,以及WFI与WFE指令的唤醒逻辑区别。最后通过STM32实例演示了低功耗模式的实际应用,并分析了RTOS中Tickless模式的实现原理。全文深入浅出,为理解嵌入式低功耗设计提供了内核级视角。
2026-06-16 08:30:00
1588
原创 TMC2240 芯片数据手册解读|第十四篇 CoolStep 负载自适应电流调节(CoolStep Load Adaptive Current Scaling)
文章摘要: TMC2240的CoolStep负载自适应电流调节技术能根据实时负载自动调整电机电流,最高可降低75%功耗。其工作原理基于StallGuard传感器反馈,通过SEMIN/SEMAX设定负载阈值,SEUP/SEDN调节动态响应,并结合速度区间(TCOOLTHRS/THIGH)优化。调优需先校准StallGuard,再逐步调整SEMIN(敏感度)、SEMAX(迟滞)、SEUP(升流速度)和SEDN(降流速度),确保高速时全电流、低速时节能。典型场景下,CoolStep在匀速运行中显著减少发热,提升系
2026-06-16 08:30:00
103
原创 STM32内核精讲 | 第九章:堆栈与函数调用(AAPCS)
本文深入解析了ARM架构过程调用标准(AAPCS),重点介绍了函数调用时的寄存器保存规则、栈帧布局及异常处理机制。关键点包括:1)寄存器分为调用者保存(R0-R3、R12、LR)和被调用者保存(R4-R11);2)函数调用通过寄存器(R0-R3)和堆栈传递参数;3)异常发生时硬件自动保存8个寄存器(R0-R3、R12、LR、PC、xPSR)到堆栈,形成标准栈帧结构;4)堆栈需保持8字节对齐以保证兼容性。理解这些机制对调试HardFault、编写中断服务程序至关重要,能帮助开发者分析反汇编代码和进行栈回溯。
2026-06-13 09:15:00
708
原创 18.6【保姆级教程】链表和数组:两种数据容器的终极对决
摘要: 数组和链表在内存布局、操作效率和应用场景上差异显著。数组基于连续内存,支持O(1)随机访问和高效遍历,但插入/删除需移动元素,代价为O(n)。链表通过零散节点实现灵活增删(O(1)),但访问需遍历(O(n))且缓存不友好。 核心对比: 访问:数组高效(直接寻址),链表低效(顺序访问)。 增删:链表高效(改指针),数组低效(移动元素)。 内存:数组紧凑,链表每个节点额外消耗指针空间。 选择建议: 频繁随机访问或遍历 → 数组 高频中间增删或动态扩容 → 链表 内存敏感场景 → 优先数组 理解两者的底层
2026-06-13 09:00:00
759
原创 18.5【保姆级教程】用队列进行模拟:从数据结构到现实世界的“预言机”
本文介绍了如何用C语言队列模拟现实排队场景,如咨询摊位顾客服务过程。通过离散事件模拟方法,以分钟为单位推进时钟,处理顾客到达、服务和离开事件。利用随机数生成顾客到达间隔和服务时长,复用队列ADT实现排队逻辑。模拟结束后统计接待顾客数、流失数、等待时间等指标,可计算平均等待时间、队列长度等关键数据。完整代码展示了8小时(480分钟)的模拟过程,包括队列实现和主循环逻辑,为类似排队问题提供通用解决方案。
2026-06-09 08:30:00
401
原创 TMC2240 芯片数据手册解读|第十三篇 StallGuard4负载测量(StallGuard4 Load Measurement)
摘要: TMC2240的StallGuard4技术专为StealthChop2静音模式设计,通过SG4_RESULT实时测量电机负载,实现堵转检测、无传感器回零和CoolStep节能。其核心原理基于负载角检测,通过SG4_THRS阈值调节灵敏度,并支持四通道独立测量(SG4_IND_0~3)优化相位平衡。独特功能包括无抖动模式切换补偿(sg_angle_offset),解决StealthChop2与SpreadCycle切换时的电流突变问题。调优时需结合SG4_THRS设定与DIAG验证,确保堵转精准触发。
2026-06-09 08:30:00
265
原创 STM32内核精讲 | 第十章:复位序列与启动文件
STM32启动过程详解:从复位到main()的执行机制 本文深入剖析了STM32从上电到执行main()函数之间的关键启动流程。主要内容包括: 复位序列:Cortex-M内核硬件自动从向量表读取初始MSP和PC值,确保中断处理有可用堆栈。 向量表结构:详细解析了向量表的组成(初始SP、复位向量、异常处理程序等)及其重定位机制(通过VTOR寄存器实现)。 系统初始化:SystemInit()函数完成时钟配置等关键设置,为后续操作建立正确时序基准。 C运行时初始化:__main函数负责数据段搬运(Flash→R
2026-06-06 10:36:04
663
原创 18.4【保姆级教程】队列 ADT:从排队买票到抽象数据类型,一步一步封装你的数据结构
本文介绍了如何用C语言实现队列(Queue)这一经典数据结构。首先通过排队买票的类比解释了队列的先进先出(FIFO)特性,并对比了队列与链表的区别。文章详细讲解了队列ADT的设计过程:从抽象描述队列类型、设计函数接口到具体实现。采用循环数组实现队列,解决了普通数组实现的"假溢出"问题。接口设计采用不透明指针类型封装内部结构,通过bool返回值表示操作状态,并使用Item类型别名提高泛用性。最后给出了完整的queue.h和queue.c实现代码,展示了如何创建、销毁队列以及入队、出队等核心操作。
2026-06-06 10:31:56
243
原创 18.3【保姆级教程】抽象数据类型:把你的代码升级成“专业模式”
本文介绍了抽象数据类型(ADT)的概念及其在C语言中的实现方法。主要内容包括: 重新理解数据类型:类型不仅包含存储属性,还定义了可执行的操作 ADT的核心思想:封装数据结构及其操作,对外只暴露接口 ADT三大原则:封装、接口与实现分离、可替换性 实现ADT的四步法: 建立抽象:定义数据类型及其操作 建立接口:编写头文件声明函数 实现接口:在源文件中完成具体实现 使用接口:通过头文件提供的函数操作数据 文章以电影链表为例,展示了如何将链表封装为ADT,包括使用不透明指针隐藏实现细节、统一命名规范等技巧。通过A
2026-06-02 08:30:00
365
原创 TMC2240 芯片数据手册解读|第十二篇 StallGuard2负载测量(StallGuard2 Load Measurement)
本文深入解析了TMC2240步进驱动芯片的StallGuard2无传感器负载测量技术。该技术通过检测线圈电流中的反电动势信号,无需外部传感器即可精确感知电机机械负载。文章详细介绍了SG_RESULT负载测量原理、SGT灵敏度调优方法、sfilt滤波策略配置,并重点讲解了堵转检测和无传感器回零的实战应用流程。同时指出了StallGuard2在极低速和极高速情况下的操作限制,为工程师提供了从基础原理到实际应用的完整技术指南。该技术是实现堵转检测、自动回零和CoolStep节能等功能的核心支撑。
2026-06-02 08:30:00
120
3
原创 STM32内核精讲 | 第八章:SysTick 定时器 —— 内核自带的节拍器
摘要: SysTick是Cortex-M内核中的24位递减计数器,用于精准定时,不依赖外设且跨芯片通用。通过配置SYST_CSR、SYST_RVR等寄存器可实现微秒级延时或周期性中断。在裸机系统中,可用轮询或中断方式实现定时功能;在RTOS中,SysTick作为系统节拍源,驱动任务调度。其优先级通常设为最低以避免干扰关键中断,并与PendSV配合实现安全的任务切换。理解SysTick的底层机制有助于优化嵌入式系统的时间管理。
2026-05-28 08:30:00
567
原创 18.2【保姆级教程】从数组到链表:打破连续内存的魔咒,让数据动态串联
本文探讨了C语言中从静态数组到动态链表的进阶应用。针对数组固定大小的局限性,文章提出使用malloc动态分配内存的方案,并分析了由此带来的内存碎片管理问题。通过引入链表结构,详细讲解了如何利用指针将零散内存块串联成逻辑连续的数据链。重点内容包括:链表节点的结构体设计(数据域+next指针)、头指针的作用原理,以及链表相比数组在内存利用和操作效率上的优缺点对比。文章采用电影管理程序的实例,帮助读者理解动态数据结构的核心思想,为C语言底层开发打下坚实基础。
2026-05-28 08:30:00
397
原创 TMC2240 芯片数据手册解读|第十一篇 基于速度的模式控制(Velocity-Based Mode Control)
本文深入解析TMC2240的速度自适应控制特性,重点介绍三大速度阈值(TCOOLTHRS/TPWMTHRS/THIGH)的工作原理及配置方法。TMC2240通过TSTEP实时监测电机速度,自动在StealthChop2静音模式、SpreadCycle高动态模式和高速模式间切换。文章详细阐述了各阈值的使能条件、迟滞机制及配置建议,特别强调THIGH高速模式下的特殊配置风险。这种速度驱动的智能切换机制无需软件干预,即可实现最优的静音、节能和力矩性能平衡。
2026-05-26 08:30:00
163
原创 18.1【保姆级教程】研究数据表示:在写代码之前,先想清楚“怎么存”
摘要: 本文探讨编程中数据表示的核心决策逻辑,通过地址簿和位图图像两个案例,揭示数据结构选择对程序效率的决定性影响。在地址簿设计中,分析了结构体、动态数组、链表等不同方案的优缺点,强调根据操作频率(增删/查找/排序)选择数据结构;在位图案例中,展示从1位黑白到32位真彩色的存储演进,以及压缩策略的权衡。文章指出,专业编程的核心不在于代码实现,而在于前期数据表示的合理设计——这直接决定了程序的可维护性、扩展性和性能表现。通过这两个典型案例,读者能建立"先设计数据,再编写代码"的工程思维模式
2026-05-24 12:43:18
432
原创 STM32内核精讲 | 第七章:异常与中断系统(NVIC)—— 进阶篇
STM32 NVIC核心机制解析 本文深入剖析Cortex-M内核的NVIC中断控制核心机制,重点讲解四大关键技术: 优先级分组机制:通过AIRCR寄存器的PRIGROUP字段配置抢占优先级和子优先级的位数分配,实现灵活的中断嵌套控制。 晚到(Late-Arriving)优化:高优先级中断可直接覆盖正在处理的中断,省去重复压栈过程,显著降低响应延迟。 尾链(Tail-Chaining)技术:中断返回时直接跳转至下一个挂起中断,避免不必要的出栈/压栈操作,提升连续中断处理效率。 EXC_RETURN机制:异常
2026-05-24 12:42:58
1030
原创 第十八章 高级数据表示:从“编程工匠”到“软件设计师”的蜕变
本文介绍了从C语言基础到项目设计的进阶学习路径,重点讲解了数据结构、算法和抽象数据类型(ADT)的核心概念。文章将编程学习分为三个阶段:熟悉工具、解决复杂问题和创造可复用解决方案。通过具体示例对比不同数据组织方式的优劣,强调数据表示对算法效率的关键影响。详细阐述了ADT的三大优势(封装性、可复用性、可维护性)及其与面向对象编程的关系,并提供了链表、队列、二叉树等数据结构的学习方法。最后给出实践建议,帮助读者从理论过渡到项目设计,完成从"编程工匠"到"设计师"的蜕变。
2026-05-21 08:30:00
370
原创 TMC2240 芯片数据手册解读|第十篇 集成电流检测(Integrated Current Sense)
TMC2240电流检测与设定体系解析 摘要:本文深入解析TMC2240驱动器的集成电流检测(ICS)技术和电流设定体系。ICS技术利用MOSFET的RDS(ON)作为检测元件,省去外部采样电阻,具有体积小、功耗低、温度补偿等优势。电流设定采用双层控制架构:数字标量层通过IRUN/IHOLD参数调节电流百分比,模拟量程层通过RREF电阻和CURRENT_RANGE寄存器设定物理满量程。文章详细介绍了运行电流(IRUN)、保持电流(IHOLD)的配置方法,以及电流升降斜率(IHOLDDELAY/IRUNDELA
2026-05-21 08:30:00
171
原创 STM32保姆级入门教程|第10章:I2C总线协议详解 + EEPROM读写实战(手把手避坑,模块化封装)
**摘要:STM32 I2C驱动EEPROM实战指南 本文详细讲解如何使用STM32CubeIDE通过I2C总线驱动AT24C256 EEPROM芯片,实现数据断电保存功能。内容涵盖: I2C协议原理与硬件接线要点(必须外接4.7kΩ上拉电阻) AT24C256设备地址计算(固定0x50)与操作时序 STM32CubeIDE配置I2C外设(PD14/PD15引脚) 模块化编程实现(封装为24c256.c/h文件) 完整功能实现:单字节/多字节读写、跨页安全写入、数据校验 常见问题解析(开漏输出原理、地址计算
2026-05-19 08:30:00
1073
原创 【互动帖】本专栏即将完结!下一站,你想学什么?由你来定!
摘要: 专栏《C语言从入门到数据结构》即将完结,现邀请读者投票选择下一阶段学习方向。备选方向包括: C语言底层进阶(内存、指针、编译器优化); 嵌入式开发实战(单片机、寄存器操作、RTOS); C++面向对象过渡(类、STL、智能指针); 数据结构与算法(排序、树、图、动态规划); 自定义方向(如游戏引擎、混合编程等)。 读者可通过评论区投票或提出个性化需求,票数最高的选题将成为下一专栏主题。关注博主获取更新动态,共同进阶编程能力! #C语言 #嵌入式 #C++ #算法 #互动征集
2026-05-19 08:30:00
536
原创 STM32内核精讲 | 第六章:异常与中断系统(NVIC)—— 基础篇
文章摘要 本文深入解析了Cortex-M内核的异常与中断机制。首先区分了异常(包括系统异常和外部中断)的概念,介绍了NVIC控制器的核心功能。详细列出了系统异常类型(如Reset、HardFault等)和外部中断编号规则,并阐述了中断向量表的结构与重定位方法。重点讲解了NVIC寄存器的操作方式,包括中断使能、挂起控制及优先级配置。最后通过STM32的EXTI0中断实例,演示了正确的中断配置流程。全文为理解Cortex-M实时响应机制提供了系统性指导,是嵌入式开发的关键知识。
2026-05-16 09:30:00
927
原创 17.13【保姆级教程】可变参数:stdarg.h,让函数接受任意数量参数的黑魔法
摘要 本文介绍了C语言中实现可变参数函数的机制,通过<stdarg.h>头文件提供的宏来实现类似printf()的灵活参数处理。主要内容包括: 可变参数函数原理:通过函数原型中的...表示可变参数,必须至少有一个固定参数。 实现五步流程: 定义va_list变量 用va_start初始化 用va_arg逐个获取参数 用va_end清理 关键宏详解: va_list:参数列表指针 va_start:初始化参数列表 va_arg:获取指定类型参数 va_end:结束参数处理 实战案例:演示了可变参数
2026-05-16 09:30:00
432
原创 17.12【保姆级教程】内存拷贝函数:memcpy 和 memmove,新手必知的核心区别
这篇文章深入讲解了C语言中两个关键内存操作函数memcpy()和memmove()的区别与使用场景。主要内容包括:1) 它们解决了数组不能直接赋值的问题,提供高效的内存拷贝;2) 详细解析函数原型,包括void*指针的通用性和size_t参数的正确用法;3) 核心区别在于处理内存重叠时的行为——memcpy假设内存不重叠(否则行为未定义),而memmove能安全处理重叠情况;4) 通过实际代码演示了正确用法,强调在不确定内存是否重叠时应优先使用memmove。文章还解释了restrict关键字的作用,并对比
2026-05-14 18:00:00
459
原创 TMC2240 芯片数据手册解读|第九篇 SpreadCycle 与经典斩波模式全解析
本文深入解析TMC2240的SpreadCycle电流斩波模式及其关键技术要点。作为与StealthChop2并列的核心驱动方案,SpreadCycle通过逐周期电流监控实现高速动态响应,适用于高精度运动控制场景。文章系统拆解了斩波周期的四相位结构(ON-SD-FD-SD)、关键参数TOFF与TBL的计算方法、迟滞控制原理(HSTRT/HEND)以及自动快衰减优化算法。通过对比SpreadCycle与经典恒定关断时间模式的特性差异,为工程师提供了参数调优的实用指南,帮助实现最优的电机驱动性能。
2026-05-14 18:00:00
223
原创 【番外篇】纯手工 PSP 任务切换终极版:无 RTOS、无 HAL、无 SVC,最简双任务轮转
本文通过STM32H723ZGT6芯片和STM32CubeIDE环境,演示了基于Cortex-M7内核的双任务堆栈切换机制。实验完全脱离HAL库和RTOS,仅使用CMSIS-Core头文件,通过手写汇编实现任务上下文切换。文章详细介绍了工程配置步骤,包括关闭FPU、精简工程文件等关键设置,并提供了完整的代码实现。核心部分展示了如何初始化任务堆栈、定义任务函数,以及通过PendSV异常处理程序完成双任务切换。调试计数器task1_cnt和task2_cnt的同步递增验证了切换的正确性,为理解RTOS底层机制提
2026-05-12 08:30:00
539
原创 17.11【保姆级教程】断言库:从运行时崩溃到编译期拦截,新手必学的调试利器
本文系统讲解C语言断言库的使用,重点介绍运行时断言assert()和编译时断言_Static_assert。assert()用于在运行时检查条件,若失败则终止程序并打印错误信息,适用于参数验证、指针检查等场景,可通过NDEBUG宏在发布版本中关闭。C11引入的_Static_assert则在编译期检查常量表达式,不满足条件直接导致编译失败,适用于数组大小、结构体对齐等静态检查。文章通过多个代码示例演示断言的实际应用,并强调二者的区别与适用场景,帮助开发者选择合适的断言方式提升代码健壮性。
2026-05-12 08:30:00
530
原创 17.10【保姆级教程】通用工具库:从程序善后到快速排序,新手必学的通用利器
文章摘要: 本文深入讲解C语言通用工具库(<stdlib.h>)中的三个关键函数: exit()与atexit(): exit()用于程序终止,比return更灵活,支持状态码(EXIT_SUCCESS/EXIT_FAILURE)。 atexit()注册退出时自动调用的清理函数,按注册逆序执行,适用于资源释放等收尾工作。 qsort()快速排序: 高效排序任意类型数组,需提供比较函数。 比较函数需返回整数:负值(a<b)、零(a=b)、正值(a>b),支持升序/降序和结构体排序。 实
2026-05-09 08:30:00
419
前端实战零依赖文本处理工具开发教程(HTML+CSS+JS)
2026-02-27
【保姆级教程】零基础、谁都能用实现专属表白网页(含烟花+逃跑按钮+飘字,复制即用)
2026-02-26
C 语言 Buffer 内存管理实战技巧:从基础到高并发优化
2026-02-25
基于STM32的Modbus RTU协议实现项目
2026-02-25
基于C#的Socket多客户端通信系统
2026-02-10
毕业设计课题-五子棋游戏项目.pdf
2026-01-31
wpf页面参数传递,源码
2022-07-14
8.6 循环辅助:continue和break.7z
2020-09-11
博文配套工程:STM32保姆级入门教程|第10章:I2C总线协议详解 + EEPROM读写实战(手把手避坑,模块化封装)
2026-05-14
番外篇纯手工 PSP 任务切换终极版:无 RTOS、无 HAL、无 SVC,最简双任务轮转 博文所使用的配套工程
2026-05-05
STM32保姆级入门教程|第9章:工业PID温度控制实战 + PWM加热驱动 + 串口实时调参(手把手避坑,完整闭环控制)
2026-04-28
前端实战数字签名工具:RSA-PSS + WebCrypto API 原理+完整代码+逐行精讲|一篇彻底吃透
2026-04-06
STM32保姆级入门教程|第6章:定时器中断原理 + 精准LED闪烁(1s-2s-3s)实战(功能超详细+CubeIDE手把手)
2026-04-04
前端实战Web 串口调试助手开发教程(HTML+CSS+JS)零依赖浏览器直接运行
2026-03-31
Python安装与VSCode配置完整教程(每步带截图说明)
2026-03-28
前端实战海明码编码与纠错工具:原理+完整代码+逐行精讲|一篇彻底吃透
2026-03-28
前端实战SHA-256哈希生成器:算法原理+前端实现+代码全解|一篇彻底吃透
2026-03-24
STM32保姆级入门教程|第4章:GPIO输入+外部中断 实现按键控制LED(手把手全流程)
2026-03-20
前端实战从零打造高颜值MD5哈希计算工具:HTML+CSS+JavaScript实战详解(附源码)
2026-03-19
STM32保姆级入门教程|第3章:从新建工程到LED闪烁点灯(Hex生成+ST-Link/J-Link切换全攻略)
2026-03-13
STM32保姆级入门教程|第2章:STM32F103RCT6 + J-Link 实现 PA0 引脚 LED 点亮 +
2026-03-08
你开了陌生人防打扰 私信不了你 链接发你了
2026-07-14
错误 10 error LNK1281: 无法生成 SAFESEH 映像。
2016-12-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅