- 博客(206)
- 资源 (2)
- 收藏
- 关注
原创 STM32单片机中断机制详解:原理、工作模式与实战应用
本文深入解析STM32单片机中断系统,涵盖中断基本概念、工作原理及实际应用。重点介绍了NVIC控制器的优先级管理机制、三种典型中断应用场景(外部中断、定时器中断和串口中断)的配置方法,以及中断服务程序的编写规范和调试技巧。通过多中断协同工作实例,展示了如何构建高效可靠的嵌入式系统。文章强调合理配置中断优先级和编写简洁ISR的重要性,并提供了常见问题的解决方案,为开发者掌握STM32中断机制提供了实用指导。
2025-09-30 17:14:18
734
原创 一阶低通滤波:从原理到实践,平滑数据的艺术
一阶低通滤波器(1st-order LPF)是一种有效的数据平滑工具,通过抑制高频噪声保留低频信号。其核心公式为离散化的递归计算:y[n] = α * x[n] + (1-α) * y[n-1],其中α决定平滑程度(0<α<1)。该滤波器计算简单,适合嵌入式系统实现(C语言),也可用于数据分析(Python)。典型应用包括传感器去噪、控制系统稳定等,但需注意相位滞后问题,α越小平滑效果越好但滞后越明显。通过合理选择滤波系数,可在噪声抑制和响应速度间取得平衡。
2025-09-06 15:36:34
1692
原创 使用STM32的DWT内核外设精准测量函数运行时间
本文介绍了一种在嵌入式开发中精确测量代码执行时间的高效方法——利用Cortex-M内核的DWT外设。DWT包含一个32位时钟周期计数器CYCCNT,通过读取代码段前后的计数值差值,可精确计算执行时间。文章详细说明了DWT的原理、初始化方法,并提供了基于STM32的代码实现示例。相比传统定时器方法,DWT测量具有极高精度(时钟周期级)、零硬件开销、使用简单等优势。同时指出了注意事项,如芯片支持性、计数器溢出处理等。这种方法特别适合微秒级性能优化和实时性验证场景。
2025-08-26 17:12:18
827
原创 GPIO的核心概念——工作模式、使用场景和原理
摘要:本文详细解析了单片机GPIO的四种工作模式:推挽输出(高低电平驱动能力强,适合高速信号)、开漏输出(仅能拉低,支持总线“线与”)、上拉/下拉输入(避免引脚悬空)。推挽输出通过互补MOS管提供双向驱动,开漏输出依赖外部上拉电阻实现高电平。输入模式中,上拉/下拉输入通过内部电阻确保无信号时引脚处于确定电平,避免干扰。不同模式适用于不同场景,如推挽输出驱动LED、开漏输出用于I2C总线、上拉输入检测按键等。正确配置GPIO模式对电路稳定性和功能实现至关重要。
2025-08-14 14:23:46
1120
原创 三次重合闸原理和实现过程
三次重合闸是电力系统自动控制策略,通过3次分合闸尝试恢复瞬时故障供电(如雷击)。其流程为:首次0.5-1.5s延时重合,失败后依次15s、60s延时尝试,三次失败则闭锁。关键技术包括电压检测(阈值0.7Un)、时间继电器(精度±2%)和断路器耐受能力要求(O-0.3s-CO循环)。适用于110kV线路,需配合继电保护并符合DL/T 871-2015标准。(150字)
2025-05-30 13:50:08
1908
原创 电力系统常识更新ing
通过保持电压的RMS值稳定,可以确保电力系统的正常运行。电压互感器的作用是将一次侧的高电压按比例变换为适合仪表或继电器使用的较低电压,通常二次侧的额定电压为100V。例如,如果一个PT的一次侧电压是10kV,而二次侧电压是100V,那么这个PT的变比就是10000/100,即100。电流互感器的作用是将一次侧的大电流按比例变换为适合仪表或继电器使用的较小电流,通常二次侧的额定电流为5A或1A。例如,如果一个CT的一次侧电流是2000A,而二次侧电流是5A,那么这个CT的变比就是2000/5,即400。
2024-10-31 10:00:41
3548
原创 同一个交换机下接收不同类型的goose报文
以下实践均在同一个交换机上做出,不同交换机上还没有这个问题:单片机网卡同时可以接收带TPID、TCI和不带TPID、TCI都能够接收,使用wireshark抓包看不到TPID、TCI,被抓包软件过滤掉了,goose发布端口能够正常发送,订阅端口也能够正常接收,被抓包软件带偏了,导致无法正常解析带TPID、TCI的报文数据,在enc624j600网卡接收goose报文时,会判断报文类别,也就是ethhdr->type,根据相应的ethhdr->type进入不同的回调函数。
2024-08-27 14:11:17
904
原创 GOOSE报文中的TPID和TCI的含义和作用
TPID: 用于标识以太网帧中是否包含 VLAN 标签。TCI: 包含 VLAN 优先级、CFI 和 VLAN ID 的信息。VID用于标识帧所属的具体 VLAN。交换机通过配置端口到特定的 VLAN 来实现物理 VLAN 隔离。VLAN ID 的取值范围是从 1 到 4094,0 和 4095 通常保留为特殊用途。VLAN 标签中的VID字段用于在网络中区分不同的 VLAN。
2024-07-26 16:46:19
2079
原创 单片机IO口模拟串口实现原理
确保同步:为了确保发送和接收的同步性,可以在发送和接收的开头和结尾添加起始位和停止位。发送时在数据的起始位置输出一个低电平的起始位,接收时检测到低电平的起始位后开始接收数据,接收完毕后检测到高电平的停止位表示接收完成。单片机IO口模拟串口的实现原理相对简单,但通信速率可能受到单片机性能和IO口速度的限制,因此在高速通信或实时性要求较高的场景下,可能需要选择硬件串口或其他更高级的通信方式。根据通信参数,将要发送的数据进行位的切换操作,逐位通过发送引脚发送出去。:顾名思义就是没有校验位,数据位后面接停止位。
2024-06-24 16:49:35
2747
原创 内存泄漏导致Hard_Fault问题记录
如果不这样做,在重复分配而不释放的情况下,会导致内存使用不断增加,最终可能耗尽可用内存,导致内存泄漏或其他内存相关错误。在LwIP中,每当通过pbuf_alloc成功分配了一个pbuf后,就应该在这个pbuf不再需要时使用pbuf_free来释放它,以避免内存泄漏。在函数Ethernet_sendPack中,使用了pbuf_alloc来分配一个新的pbuf结构体,如果在主循环中重复调用这个函数,并且每次调用都成功分配了内存,但没有在发送数据后释放这些内存,这将会导致内存泄漏。实际是出现内存泄漏的问题。
2024-03-27 17:02:10
752
1
原创 GOOSE报文分析
传统变电站的设计规范和原则可以移植到智能变电站,原有的各种回路的功能可以通过GOOSE的输入输出端子来定义和实现,即通过对GOOSE的数据集、控制块和GOINGGIO节点进行预定义后实现其功能。这种过滤的实现是通过订阅方将一个GOOSE报文的目标地址列表配置到接收端的网络适配器中并控制适配器的工作模式,将所有接收到的报文头的目标地址与目标地址列表的内容进行比对,若比对成功,则认为接收的报文是自己所订阅和需要的,然后就将该报文从网络控制器读取到CPU里以进行下一步的解析,否则就丢弃掉该报文。
2024-03-13 19:29:49
5779
原创 SCL配置文件中的GOOSE信息
DataSet 下定义了发送数据FCDA(具有特定功能约束值的 DATA)FCDA需要配置的属性有:ldInst、prefix、lnClass、InInst、doName、daName,这些属性值共同组成了发送数据的引用路径。其需要配置的属性有:控制块名字 name、描述 desc、所关联的被传输的数据集 dataSet、配置版本号 confRef、控制块类型 type、应用标识 appID。IED中的访问点apName,与IED定义下的Access Point的name 相一致。
2024-03-13 19:06:08
1490
原创 三极管使用介绍
如果 P1.0 由程序给一个高电平 1,那么基极 b 和发射极 e 都是 5V,也就是说 e到 b 不会产生一个 0.7V 的压降,这个时候,发射极和集电极也就不会导通,那么竖着看这个电路在三极管处是断开的,没有电流通过,LED2 小灯也就不会亮。最后一个概念,电流控制。以SC1475A2的蓝牙复位电路为例,9013是NPN型三极管,集电极连接3.3V电源,基极连接控制管脚,发射极接地,如果要使得控制信号有效,产生大于0.7V的压降,需要B和E之间导通,①当PC2为低电平时,B和E之间没有压差。
2024-02-29 19:27:41
4036
原创 如何在IEC61850的ICD文件中添加新的DO节点
IEC61850的数据建模,实际上就是将设备的点表按照IEC61850标准的规则编写的一份点表文件,该点表以XML的格式描述,后缀名为.icd,另一个名字叫智能电子设备能力描述文件。
2024-01-10 19:38:59
2185
4
原创 ARM Cortex-Mx 权威指南笔记—SysTick定时器
通过本次学习你可以学到:1、什么是SysTick定时器?2、Systick定时器的操作。3、如何使用Systick定时器。正文内容参考 ARM Cortex-Mx 权威指南笔记 9.5小节。SysTick定时器是Cortex-M处理器内部集成的名为系统节拍定时器,属于NVIC的一部分,并且可以产生Systick异常,是一个向下计数的24位定时器。可以作为一个周期的中断来触发内核,需要保证处理器运行在非特权模式下无法禁止该定时器,以免锁定系统。使用Systick定时器增加了软件的可移植性。
2024-01-08 19:37:13
1429
2
原创 一种多串口冗余设计解决思路
总共11个串口,现在每个串口接收BUFF分配1024个字节的收发缓冲区。原始方法将11个串口全部进行初始化,分配大串口,由于单片机RAM不足,现在将串口1和串口2固定分配为大串口,串口3-11随机选择2个作为大串口,其他串口BUFF缓冲区配置为256字节的小串口,总体可以节约5k左右ram空间。
2024-01-04 04:15:00
639
原创 数据结构—环形缓冲区
环形数组(Circular Array)是一种特殊类型的数组,其元素在内存中首尾相接,形成一个环形。由于环形数组的元素在内存中是首尾相接的,因此不需要为数组的头部和尾部留出额外的空间。易于实现动态扩展:当需要增加更多元素时,环形数组可以通过简单地扩展现有数组的大小来实现动态扩展,而无需重新分配和复制原有数据。由于环形数组的特性,当索引超出数组的界限时,会自动回到数组的开头或结尾,避免了常规数组越界访问导致的错误。环形数组保持了数据的连续性,这有助于提高数据访问的局部性,从而优化CPU缓存的性能。
2024-01-03 13:55:52
1028
1
原创 模糊PID之matlab模糊控制器配置
使用模糊PID时,需要对工具库进行配置,模糊PID是由2个输入个3个输出组成,输出是E和Ec,输出是Kp、Ki和Kd。打开matlab后,需要配置fuzzy工具箱
2022-11-29 09:54:36
8176
3
原创 Redis数据库学习记录
一、redis的存储格式都以键值对的形式存储的。nosql数据库。关系和非关系数据库的区别。1、结构化和非结构化2、关联和非关联3、SQL查询和非SQL查询4、事务性差异总结:安装多看官方文档。
2022-08-18 08:20:07
242
2
基于C++的机房预约系统
2022-07-30
基于STM32F407的火焰传感器报警测试
2021-06-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅