- 博客(662)
- 资源 (17)
- 收藏
- 关注
原创 多传感器设计如何规划CPU的硬件
摘要:多传感器系统硬件设计需针对不同通讯协议优化CPU配置。串口传感器建议采用双缓存、提高中断优先级或DMA传输;I2C推荐硬件实现,SPI可用DMA提升效率;开关输入宜用扫描方式,脉冲输出采用定时器捕获;模拟量需ADC配合DMA和滤波处理。整体设计应基于RTOS系统,通过合理中断优先级配置和DMA应用来保证数据完整性,提升系统响应速度和用户体验。
2026-03-17 11:15:58
236
1
原创 如何解决EEPROM读写错误
发送“启动条件”后,接着SDA发送9个1,然后在“第10个时钟期间”发送“启动条件”产生,由于SDA一直为高电平,所以在第10个时钟期间又发送一个1,合计10个1,最后在“第11个时钟期间”发送“停止条件”,EEPROM就会执行复位。由于硬件I2C发送“读器件地址0xFF”后,若EEPROM不应答,则立即在I2C总线上产生一个“停止条件”,导致无法实现EEPROM复位序列,所以只能用软件模拟I2C,去复位EEPROM。EEPROM是有这个功能,但是考虑到编程时间,过快的频繁写入数据,是有问题的。
2026-03-04 16:00:54
246
原创 学习TCP/IP的第12步:UDP通讯
本文介绍了UDP协议的基本原理及其在嵌入式系统中的应用实现。UDP作为一种无连接的传输层协议,具有传输效率高、延时小的特点,适用于视频聊天等实时应用场景。文章详细阐述了UDP数据包的结构设计、相关宏定义以及核心操作函数,包括数据包发送函数ENC28J60_Send_UDP_data_packet和客户端发送函数UDP_Client_Send_Data_To_Server。通过STM32平台结合ENC28J60以太网控制器,实现了UDP数据包的收发功能,并提供了局域网通信测试案例,演示了如何通过不同端口发送&
2026-03-03 15:19:25
1045
原创 学习TCP/IP的第11步:HTTP客户端访问httpbin.org服务器
本文介绍了基于ENC28J60以太网模块的HTTP客户端实现,用于访问httpbin.org服务器。主要内容包括:1. 定义了HTTP请求相关的宏和数据结构,包括服务器IP、端口号、HTTP协议版本等常量;2. 实现了TCP/IP协议栈的基础功能,包括ARP、ICMP和TCP数据包处理;3. 详细说明了HTTP客户端功能,包括GET和POST请求的实现方法;4. 提供了完整的函数实现,如Httpbin_org_ip()用于获取服务器IP,Httpbin_GET()和Httpbin_Post()分别处理GET
2026-03-02 09:51:22
868
原创 学习TCP/IP的第9步:客户端和服务端综合测试
本文详细介绍了基于ENC28J60芯片的软件TCP/IP协议栈实现,重点分析了ARP、ICMP和TCP数据包的结构与处理流程。文章首先阐述了选择无硬件协议栈芯片的优势,便于深入理解网络协议底层原理。随后系统性地讲解了以太网数据结构定义、网络信息管理、定时器机制等基础组件,并详细剖析了ARP地址解析、ICMP Ping通信和TCP连接的实现方法。通过实际测试案例展示了各协议层的交互过程,包括ARP请求/应答、ICMP回显请求/响应以及TCP三次握手等关键网络行为。文章特别强调了TCP状态机管理、数据校验和超时
2026-02-03 10:44:53
764
原创 学习TCP/IP的第8步:紧急数据
本文介绍了TCP协议中的紧急数据传输机制。紧急数据是用户数据流中的特殊字节,通过紧急指针定位,最多只能传输1个字节。文章详细解析了TCP/IPv4数据包结构,包括MAC地址、IP头部、TCP头部等字段定义。重点阐述了紧急数据的处理流程:发送端通过设置URG标志位和紧急指针将紧急数据与用户数据一起发送;接收端根据紧急指针提取紧急数据。文中还提供了连接表结构定义、数据包发送函数实现以及序列号更新机制,展示了如何在实际代码中实现TCP紧急数据传输功能。
2026-01-27 10:06:30
811
原创 学习TCP/IP的第7步:设计TCPIP程序要注意的事项
TCP/IP程序设计关键要点:1.数据交付基于端口号;2.连接建立需三次握手(SYN-SYN/ACK-ACK);3.连接关闭需四次挥手,主动方需等待TIME_WAIT状态(默认60秒);4.缓冲区满时需通过窗口机制处理拥塞;5.RST用于异常时重建连接;6.URG实现紧急数据处理。特别注意端口占用问题和连接状态管理,建议服务器使用固定端口,客户端灵活更换端口。
2026-01-26 09:52:07
423
原创 学习TCP/IP的第6步:断开连接
本文介绍了TCP通讯中关闭连接的实现方法,主要涉及FIN和RST两种关闭方式。通过ENC28J60_Send_FIN_ACK_data_packet()函数发送FIN+ACK数据包实现正常关闭,使用ENC28J60_Send_RST_data_packet()函数发送RST数据包实现强制关闭。文章详细分析了TCP数据包的结构和校验和计算方法,包括IP头部和TCP头部的各个字段设置。同时展示了TCP状态转换流程和连接管理机制,包括连接表更新、序列号确认等核心功能。最后通过主程序演示了TCP客户端建立连接、发送
2026-01-23 15:17:07
569
原创 学习TCP/IP的第5步:传输数据
本文介绍了TCP通讯中建立连接、传输数据和关闭连接三个关键过程。重点分析了PSH数据包的发送函数实现,包括数据包结构构建、校验和计算以及用户数据填充等核心步骤。通过STM32与ENC28J60以太网模块的配合,展示了如何在嵌入式系统中实现TCP协议栈功能,包括连接管理、数据收发和状态维护。测试结果验证了TCP客户端与服务器端成功建立连接并完成数据传输的功能实现。
2026-01-23 14:33:54
627
原创 学习TCP/IP的第4步:重点掌握TCP序列号和确认号
TCP通信通过序列号和确认号机制确保数据传输的可靠性。建立连接需三次握手:客户端发送SYN包(含随机初始序列号),服务器回复SYN+ACK(含随机序列号及客户端序列号+1),客户端最后发送ACK确认。数据传输时,序列号随数据长度递增,确认号保持对端最新序列号+1。关闭连接采用四次挥手:双方分别发送FIN包并确认。RST包可强制立即终止连接。整个过程通过序列号和确认号的严格匹配实现数据有序传输和连接状态同步。
2026-01-23 13:45:12
975
1
原创 学习TCP/IP的第3步:和SYN相关的数据包
摘要 本文详细介绍了基于ENC28J60以太网芯片的TCP/IP协议栈学习与实践。通过分析TCP状态转换、数据包结构及实现过程,重点阐述了如何在没有硬件TCP/IP栈的ENC28J60芯片上实现网络通信功能。内容包括: TCP连接状态管理(Closed→SYN-SENT→SYN-RECEIVED→ESTABLISHED) 关键数据结构定义(以太网帧、IP头、TCP头等) 核心功能实现: ARP协议处理(请求/应答) ICMP协议实现(Ping功能) TCP连接建立(SYN/SYN-ACK/ACK三次握手)
2026-01-21 14:23:12
766
1
原创 学习TCP/IP的第2步:ICMP数据包
本文介绍了使用ENC28J60芯片学习TCP/IP协议的方法,重点讲解了ICMP数据包的实现。作者建议选择没有硬件TCP/IP栈的ENC28J60芯片,以便更深入地理解数据包结构。文中详细解析了ICMP协议的工作原理,包括Ping命令使用的回显请求和应答机制,并提供了具体的代码实现。在实现过程中,需要注意关闭计算机防火墙以确保ICMP通讯正常。文章包含完整的ICMP驱动代码和测试程序,展示了如何通过ENC28J60与计算机进行Ping通讯,包括数据包收发、校验和计算等关键步骤。
2026-01-08 12:26:29
700
原创 学习TCP/IP的第1步:ARP数据包
学习TCP/IP协议栈应从底层ARP协议入手,使用ENC28J60等无硬件协议栈的芯片更利于深入理解。本文详细介绍了ARP数据包结构及实现方法,包括: 定义网络信息结构体,包含MAC/IP/子网掩码/网关等参数 实现ARP请求发送函数(已知/未知目标MAC两种场景) 处理ARP请求接收与应答 设计ARP缓存表管理机制,包含超时更新策略 通过完整实现ARP协议栈,可深入理解以太网数据帧结构和网络通信基本原理,为后续学习TCP/IP协议打下基础。
2026-01-07 11:36:44
760
原创 重点学习三极管放大电路设计
本文系统介绍了三极管的基本原理与应用。主要内容包括:1)三极管类型(NPN/PNP)及电路符号识别;2)三个工作区(截止、放大、饱和)的偏置条件;3)关键参数符号及含义(如UBE(on)、VCEO、β值等);4)直流通路分析与静态工作点计算;5)等效电路模型及输入/输出电阻计算;6)共射极放大电路设计,重点分析发射极电阻RE的作用(稳定工作点、负反馈等),并提供具体参数计算方法。文章通过公式推导和实例计算,详细说明了三极管在放大电路中的应用要点。
2025-12-16 17:18:32
1758
原创 uip之TCP服务器
本文基于ENC28J60以太网控制器实现了一个TCP服务器系统,主要包括以下内容: 系统架构 硬件平台:STM32F10x + ENC28J60 软件组件:uIP协议栈、TCP服务器应用、驱动程序 核心功能实现 TCP服务器监听5000端口 支持8个并发TCP连接 实现数据收发和状态管理 提供连接建立、数据传输、超时处理等回调函数 关键技术点 网络初始化配置(IP、MAC、子网掩码等) uIP协议栈移植和优化 数据缓冲区管理 ARP协议处理 定时器管理(500ms轮询) 性能特点 支持最大1518字节以太网
2025-12-11 16:27:21
1124
原创 电池防反接电路
判断电动车充电器好坏需注意:1.需使用Y型螺丝刀打开塑料外壳;2.测量输出电压需外接电池或75Ω大功率电阻(因防反接电路需电池供电才能工作);3.充电器采用DB151晶闸管(触发电流2-15mA)和DB3W双向触发二极管(转折电压28-36V)构成的防反接保护电路,确保电池正接时才能导通充电。测试70V输出时,必须满足上述条件才能正常测量电压。
2025-12-10 15:33:01
593
原创 深度学习uip中的“psock.c和psock.h”
本文对uIP协议栈中的psock.c和psock.h文件进行了深度解析和重构,主要改进包括: 重构了protothread协程实现,通过#define宏控制是否替换原有PT协程机制,便于调试和原理分析。新增了状态机变量STATE_NONE等6种状态定义,优化了协程状态管理。 详细注释了关键数据结构: psock_buf结构体管理输入缓冲区 psock结构体包含双PT协程状态、数据指针和缓冲区信息 新增httpd_state结构体管理HTTP连接状态 重点分析了核心功能函数: 缓冲区操作函数(buf_setu
2025-12-06 19:00:36
640
原创 深度学习uip中“uip_arp.c“
本文介绍了一个经过修改的ARP协议实现文件uip_arp.c,主要功能包括: 初始化ARP表(uip_arp_init) 定时维护ARP表,清理超时条目(uip_arp_timer) 处理接收到的ARP请求和应答(uip_arp_arpin) 处理IP数据包发送时的ARP查询(uip_arp_out) 从IP数据包中更新ARP表(uip_arp_ipin) 该实现包含ARP表管理、请求/应答处理、超时机制等功能,支持以太网和IPv4协议,使用静态ARP表存储IP-MAC映射关系。通过定时器定期清理超时条目,
2025-12-05 10:10:26
657
原创 PT协程分析和应用
本文分析了PT协程的非阻塞特性及其实现原理。PT协程通过switch-case语句和状态变量实现协程调度,表面看似阻塞的代码实际上是基于条件判断的非阻塞执行。文章详细解析了PT协程的核心机制,包括lc-switch.h和pt.h中的关键宏定义,展示了如何通过PT_BEGIN、PT_WAIT_UNTIL等宏实现协程的挂起和恢复。通过一个STM32应用实例,演示了主协程调度子协程的过程,包括定时器同步和时间判断。分析表明,PT协程本质上是单任务的,适合用于学习协程的基本概念和实现原理。
2025-12-03 16:38:34
959
原创 “do{}while(0)”的作用
本文分析了do{}while(0)在C/C++编程中的三种典型应用场景:1)作为代码分块工具,允许在块内定义局部变量;2)用于宏定义,避免宏替换时因缺少大括号导致的逻辑错误;3)替代goto语句实现流程控制,提高代码可读性。在Linux内核和开源代码中,这种结构既能确保宏替换后的语法正确性,又能保持代码整洁,是解决复杂宏定义和流程控制问题的有效方案。通过实例对比展示了do{}while(0)相比直接使用大括号或goto语句的优势。
2025-12-01 14:58:04
487
原创 学习“指针函数,函数指针,指针数组,数组指针”
本文介绍了C语言中指针函数、函数指针、指针数组和数组指针的概念及用法。指针函数是返回指针的函数,函数指针是指向函数的指针变量。指针数组是元素为指针的数组,数组指针则指向一个数组缓冲区。通过typedef为函数指针类型创建别名,可以简化声明。文中提供了完整的测试代码,展示了如何使用结构体数组存储不同函数指针,并通过名称匹配调用相应函数。测试结果表明,系统能正确识别函数名并执行对应的函数操作,未匹配时执行默认函数。该实现方法可用于构建灵活的基于名称的函数调用机制。
2025-11-28 16:59:41
446
原创 以太网HTTP数据包格式分析
本文详细分析了以太网HTTP数据包结构,包括ARP和TCP/IP协议的数据包格式。主要内容包括:1. ARP数据包结构分析,包含以太网头部和ARP头部定义;2. TCP/IP数据包结构解析,涵盖以太网首部、IP头部和TCP头部;3. 通过串口跟踪展示了完整的HTTP通信过程,包括ARP请求/应答、TCP三次握手、HTTP请求/响应等交互数据;4. 提供了校验和计算程序实现;5. 使用表格形式详细解析了ARP和HTTP数据包中各字段的含义和数值。文章通过实际通信数据分析,深入展示了网络协议的工作机制和数据包格
2025-11-24 18:14:09
1261
4
原创 “stdlib.h“中的函数
本文详细分析了C标准库<stdlib.h>中的数值转换和随机数生成函数。主要介绍了三类函数:1)基本转换函数(atoi、atol、atof)将字符串转换为数值;2)高级转换函数(strtol、strtoul、strtod)支持进制转换并返回剩余字符串指针;3)随机数函数(rand、srand)及其实现原理。文章通过代码示例展示了各函数的使用方法,特别比较了在不同系统架构下的行为差异,如32位与16位系统中atoi/atol的区别。此外,还介绍了绝对值函数(abs/labs)和除法函数(div/l
2025-11-22 11:42:58
630
原创 “string.h“中的函数
摘要:本文详细介绍了C语言标准库"string.h"中的常用字符串处理函数,包括字符串长度计算(strlen)、内存设置(memset)、字符串复制(strcpy/strncpy/memcpy/memmove)、字符串比较(strcmp/memcmp)、字符串搜索(strchr/strstr)等函数的使用方法和注意事项。通过代码示例演示了各函数的正确用法,并特别强调了内存溢出的风险及防范措施。文章还包含了自定义字符串处理函数(strnchr/strnstr)的实现,为开发者提供了全面的字
2025-11-22 11:38:20
671
原创 C语言控制语句
本文介绍了C语言中的控制语句,主要包括选择结构和循环结构。选择结构部分详细讲解了if语句(单分支、双分支和多分支)和switch语句的语法格式及应用实例,并比较了两者的使用场景。循环结构部分阐述了while、do-while和for三种循环语句的语法特点,通过具体代码演示了不同循环方式的使用方法。此外还介绍了break、continue、goto等流程控制语句的功能特性,最后概括了顺序结构、选择结构和循环结构三大基本程序结构的特点。全文通过丰富的代码示例,系统性地讲解了C语言流程控制语句的语法规则和实际应用
2025-11-22 11:33:30
431
原创 C语言中的构造类型
本文介绍了C语言中的构造数据类型,包括数组、结构体、联合体和枚举。数组是相同数据类型的连续存储元素集合,分为一维和二维数组,可通过下标或指针访问。结构体允许组合不同数据类型成员,需注意内存对齐问题。联合体让成员共享同一内存空间,适合处理同一数据的多种表示方式。枚举用于定义整型常量集合,可指定或使用默认值。文章详细说明了这些类型的声明格式、内存分配规则和访问方法,并强调了使用时的注意事项,如数组越界和结构体内存对齐等问题。这些构造类型大大增强了C语言处理复杂数据的能力。
2025-11-22 11:31:21
963
原创 字符和字符串
本文介绍了C语言中字符和字符串的基础知识。主要内容包括:字符表示方法(ASCII码1字节,汉字GBK编码2字节)、常用转义字符及其含义、ASCII字符表(需重点记忆0-127字符)、字符串定义(以'\0'结尾的字符序列)。详细讲解了printf函数的格式化输出:整数(%d/%i)、无符号数(%u)、十六进制(%x/X)、八进制(%o)、浮点数(%f/F)、科学计数法(%e/E)、字符(%c)、字符串(%s)等多种格式符的使用方法,并配有具体示例说明不同格式控制符(如宽度、补零等)的输出效果。
2025-11-22 11:26:25
371
原创 STM32单片机C语言运算符
C语言运算符详解:本文系统介绍了C语言中的各类运算符,包括算术运算符(+、-、*、/、%等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!)、位运算符(&、|、~等)、赋值运算符(=、+=等)以及特殊运算符(sizeof、指针运算符等)。通过代码示例详细演示了每种运算符的使用方法,并提供了运算符优先级表。特别强调了自增/自减运算符的前后置区别("++在前先加,++在后先用后加")以及强制类型转换等重要概念。文章还涵盖了条件运算符、逗号运算符
2025-11-22 11:24:40
823
原创 STM32单片机函数
本文介绍了C语言中函数的基本概念和使用方法。首先通过数学中的线性函数类比说明C语言函数的概念,然后详细讲解了函数的声明格式(无参数无返回值、带参数无返回值、带参数带返回值等)。接着阐述了void关键字在函数中的应用,包括表示无返回值和避免未使用变量警告。文章还详细说明了return语句的用法、函数参数传递方式(数值传递和指针传递),并介绍了函数指针的概念与使用方法。最后简要提及了表达式语句的分类。全文通过具体代码示例帮助理解函数在C语言中的实际应用。
2025-11-22 11:19:29
573
原创 STM32单片机指针变量
本文介绍了指针变量的基本概念和应用。指针变量存储另一个变量的内存地址,在MDK-ARM编译器中固定占用4字节空间。文章详细说明了一维指针和二维指针的声明格式及使用方法,包括通过指针间接修改变量值的操作。重点阐述了void和void**这两种通用指针类型的特点:void可指向任何数据类型,void**则指向void*指针。在使用这些通用指针时,需要通过类型转换才能正确访问数据。通过多个具体示例,展示了如何声明、初始化和操作不同类型的指针变量。
2025-11-22 11:16:34
406
原创 STM32单片机变量
本文介绍了C语言中变量的基本概念和使用规范。主要内容包括:1)变量命名规则要求具有可读性,以字母或下划线开头;2)变量声明格式及访问方式,可通过变量名直接访问或获取地址;3)变量类型分为局部变量和全局变量,详细说明了auto、static、extern等修饰符的使用场景;4)介绍了const和volatile修饰变量的特性;5)通过示例说明了同名全局变量和局部变量的处理方式。文章还提供了各种数据类型变量的声明示例,包括整型、浮点型和布尔型等。
2025-11-22 11:14:50
365
原创 STM32单片机在KEIL中的数据类型
本文详细介绍了MDK-ARM编译器支持的数据类型及其特性。主要内容包括:1)基本数据类型(char、int、float等)的位数、字节数和取值范围;2)通过typedef定义的类型别名(如int8_t、uint32_t等);3)单精度和双精度浮点数的IEEE 754存储格式解析;4)编译器特殊定义(如__IO、__I等)及STM32专用数据类型;5)各类型数值范围的定义(INT32_MAX等)。文章强调要掌握这些数据类型的关键特性,建议使用编译器默认配置,并提供了浮点数存储格式的详细计算示例。
2025-11-22 11:11:35
884
原创 TCP数据包格式分析
摘要:本文详细解析了TCP数据包的结构组成和处理流程。TCP数据包由以太网首部(14字节,含MAC地址)、IP头部(20字节)、TCP头部(20-24字节)和用户数据四部分组成。文章通过代码示例展示了以太网首部、IP头部和TCP头部的数据结构定义,并解析了一个实际的TCP数据包实例。此外,还介绍了校验和计算方法(包括IP校验和、TCP校验和)、数据包跟踪处理流程(包括ARP和TCP数据包识别),以及数据收发函数实现。最后给出了一个包含HTML内容的TCP数据包实际案例解析。
2025-11-20 10:59:50
1447
1
原创 以太网ARP数据包格式分析
本文分析了以太网ARP数据包的格式和工作机制。首先介绍了以太网头部结构,包含目的/源MAC地址和协议类型字段。详细解析了ARP数据包结构,包括硬件/协议类型、地址长度、操作码及通信双方的MAC/IP地址。通过实例展示了计算机和ENC28J60设备之间ARP请求与应答的完整交互过程,包括数据包各字段的具体数值。最后提供了ENC28J60发送ARP请求的程序实现代码。分析表明,ARP协议通过广播请求和单播应答的方式实现IP地址到MAC地址的解析,为网络层通信提供底层支持。
2025-11-19 16:20:08
789
原创 如何方便打开或关闭“串口输出的调试信息”
摘要 本文提出了一种通过宏定义来控制串口调试信息输出的方法。通过定义DEBUG_PRINTF宏代替直接使用printf函数,在开发阶段可将宏定义为printf(VA_ARGS)输出调试信息,产品发布时只需将宏定义为空即可关闭所有调试输出。文中详细展示了宏定义方法,并提供了完整的STM32 USART1串口初始化及配置代码,以及包含调试信息输出的主程序示例。这种方法实现了调试信息的灵活控制,避免了在最终产品中手动删除大量printf语句的繁琐工作。
2025-11-19 14:04:01
508
【网络通信硬件】RJ45磁性模块技术规格:10/100BASE-T单端口连接器设计与波峰焊工艺参数
2025-09-16
【电子设计自动化】AD16原理图和PCB设计入门教程:涵盖工作空间创建、项目管理、原理图与PCB绘制、元件库建立及布线规则设置等基础操作指导
2025-08-14
物联网通信中MQTT协议的详细解析及其报文结构实现
2025-07-29
MQTT通信协议-MQTT-3.1.1-CN
2025-07-15
5-W5500-DHCPClient
2025-05-20
如何设计IAP和APP-2025
2025-03-20
SIM800-Series-AT-Command-Manual-V1.07
2024-07-17
基于正点原子的STM32FMP157开发板的FlashLayout
2024-06-24
基于正点原子的STM32FMP157开发板的Uboot移植
2024-06-24
基于正点原子的STM32FMP157开发板的TF-A移植
2024-06-24
基于正点原子的STM32FMP157开发板的busybox根文件系统移植
2024-06-24
以太网ARP-ICMP-TCP-HTTP-UDP通讯【嵌入式网络通信】基于ENC28J60的RP-ICMP-TCP-HTTP-UDP协议栈实现:STM32平台多协议工业控制通信系统开发
2026-03-03
以太网HTTP客户端访问httpbin-org-2026嵌入式系统以太网通信实现:基于ENC28J60的HTTP客户端设计-访问httpbin.org服务的技术方案
2026-03-02
网络通信基于ENC28J60的TCP/IP协议栈设计:以太网内外网访问程序开发与实现
2026-02-09
网络通信基于ENC28J60的TCP/IP协议栈实现:以太网客户端与服务端通信程序设计
2026-02-03
34-ENC28J60以太网-uip-TCP-Server
2025-12-11
以太网HTTP数据包格式分析20251127.pdf网络通信协议分析:以太网ARP与HTTP数据包结构解析及传输机制研究
2025-11-27
《建立一个VC++工程》
2025-09-17
《建立一个VC++程序》基于Visual C++环境的Hello World项实现方法
2025-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅