I2C,SPI,DAC,看门狗,MODBUS-TCP

发布时间:2026/9/12 12:52:49

I2C,SPI,DAC,看门狗,MODBUS-TCP I2C介绍1.什么是I2C总线协议I2CInter-Integrated Circuit)集成电路总线是一种广泛用于嵌入式系统的同步、串行、半双工通信协议用于在同一块电路板上的集成电路之间进行通信。I2C总线是一种物理通信架构用于连接多个设备实现设备之间的数据传输。I2C协议是一套规则定义了IIC总线上数据通信的过程包括如何启动通信、传输数据、应答信号、结束通信等。2.I2C总线的特点1.双线通信SCL:负责同步数据 SDA:负责数据传输2.同步通信数据传输由时钟信号线控制确保同步。3.串行数据传输每次只传输一位数据通过时间序列完成完整的数据包传输。4.半双工传输在同一时间内通信双方只能有一个方向的数据传输即发送方和接收方需要轮流接收或发送数据不能同时进行。5.主从架构主设备Master控制通信过程生成时钟信号从设备Slave被动响应主设备的命令6.支持多主多从同一总线上可以连接多个主设备和从设备但需要进行冲突检测和仲裁7.从机地址唯一性每个从设备都有一个唯一的7位或10位从机地址主设备通过从机地址指定要通信的从设备8.速度灵活标准模式(Standard Mode)100KHz快速模式Fast Mode)400KHz高速模式(High-Speed Mode)3.4 MHz超高速模式(Ultra-Fast Mode)5 MHz3.I2C协议1.I2C信号I2C总线为开漏输出结构外部需要接上拉电阻维持高电平I2C总线空闲表现为时钟线和数据线均保持高电平持续一段时间。2、数据的有效性I2C是电平触发采样SDA的可变化时机数据线SDA上的数据只能在时钟线SCL为低电平时进行改变。SDA的稳定性SCL为高电平期间SDA必须保持稳定。在SCL为高电平时SDA上的数据被视为有效接收方会在这个时刻对SDA的状态进行采样。3、数据的传输单元(单位)I²C总线以字节8位为单位传输数据每次传输一个字节。4、数据的传输顺序(MSBor LSB)在I²C数据传输中数据的传输顺序是MSB先传输。5、数据传输方向(读or写)主机是要给从机发送数据还是要读取从机的数据。SPI介绍SPI总线是一种用于在微控制器和外部设备之间进行串行通信的同步通信协议。它常用于连接微控制器与外部设备如传感器存储器外部ADC模数转换器等。1.SPI通信引脚SPI总线通常由4根线组成包括SCK,MOSI,MISO,NSS/CS.SCK由主设备通常是微控制器提供时钟信号用于同步数据的传输。MOSI主设备将数据发送到从设备的线路。MISO:从设备将数据发送到主设备的线路。CS用于选择特定的从设备进行通信。当片选线被拉低时表示从设备被选中可以进行通信当片选线被拉高时表示通信结束或者没有被从设备选中。数据传输原理通信始终由主器件发起。当主器件通过MOSI引脚向从设备发起数据时从器件同时通过MISO引脚做出响应。这是一个数据输出和数据输入都由同一时钟进行同步的全双工通信过程。2.SPI的传输方式SPI总线有三种传输方式全双工半双工以及单工传输全双工传输半双工传输在同一个时刻只能为一个传输方向。在SPI的半双工通信模式下SCK用于时钟输出MOSI信号线主模式下或MISO信号线从模式下用于数据传输。SPI为主模式时SPI为从模式时单工传输在同一时刻只有一个传输方向只能发送或者只能接收。只发送模式其实就是全双工模式在发送引脚主模式下的MOSI或从模式下的MISO上发送数据接收引脚主模式下的MISO或从模式下的MOSI可用作通用IO引脚在这种情况下应用程序只需要忽略接收缓冲区中的数据即可。只接收模式下如果是主模式片选拉低且使能了SPI时通信会立即开始只有当SPI控制器被关闭禁止且当前接收结束时才停止如果是从模式只有片选信号被拉低并且一直有来自主器件的SCK输入SPI就会继续接收数据。3.SPI通信协议SPI通信是一种同步通信意味着数据的传输需要在主设备和从设备之间保持同步。根据时钟信号设备得以在正确的时机发送和接收数据从而确保数据传输的有效性以及数据传输的速度。时钟信号由主设备产生通过SCK引脚输出主从设备的通信便根据SCK上的时钟信号进行数据收发。SPI控制器挂载在APB2时钟总线上使用的是APB2时钟总线提供的时钟SPI控制器自身还有一个时钟分频器用于将APB2总线上的时钟进行一定系数的分频后在进行输出。时钟的分频系数由SPLCR1寄存器中的BR位控制。从器件选择NSS引脚管理片选引脚有两种方式软件管理片选引脚和硬件管理片选引脚软件管理片选引脚既不使用SPI控制器自身的NSS引脚使用普通的IO引脚控制片选。硬件管理片选引脚使用SPI控制器自身的NSS引脚进行设备的片选。NSS有两种模式片选引脚拉至低电平是使能运行片选引脚拉高时是取消片选。数据帧格式数据帧长度每个数据帧的长度均为8位或者16位数据帧方式格式进行数据的发送时可以从最高有效位开始发送MSB也可以从最低有效位开始发送LSB。时钟极性和时钟相位时钟极性CPOL为0时SCK时钟线空闲状态下时低电平为1时是高电平。时钟相位CPHA为1时采样数据的第二个边沿。为0时采样数据的第一个边沿。相互结合有4种可能的时序关系DAC控制器数字-模拟转换器是一种将数字信号通常是二进制数转换为模拟信号连续变化的电压或电流信号的电子设备。其核心作用是将离散的数字信号转换成可直接驱动物理世界的连续信号通常用于音频视频传感器控制测量等领域。1.DAC的种类R-2R梯形DAC最常见的DAC之一基于电阻的网络加权电阻DAC每个输入位权重不同电流型DAC通过控制电流源输出模拟信号Sigma-Delta DAC:基于过采样和噪声整形的DAC2.DAC的性能参数分辨率转换精度通常用位数表示如8位16位24位采样率每秒钟处理的样本数通常以赫兹为单位信噪比SNR输出信号与噪声的比例总谐波失真THD描述了在输出的模拟信号中除去理想信号的基频原始信号之外其他频率成分即谐波的相对强度。线性度输入到输出信号之间的关系是否是线性的3.DAC的使用原理DAC模块是12位电压输出数模转换器。DAC可以按8位或12位模式进行配置并且可与DMA控制器配合使用。在12位模式下数据可以采用左对齐或右对齐。DAC有两个输出通道每个通道各有一个转换器。在DAC双通道模式下每个通道可以单独进行转换当两个通道组合在一起同步执行更新操作时也可以同时进行转换。可通过一个输入参考电压引脚VREF与ADC共享来提高分辨率。4.DAC 主要特性两个DAC 转换器各对应一个输出通道12位模式下数据采用左对齐或右对齐同步更新功能生成噪声波生成三角波使用原理参考电压对齐保持寄存器触发模式生成波输出缓冲器对齐保持寄存器对于DAC通道X必须将想要转换的数据输入到下面三个寄存器中8位右对齐12位左对齐12位右对齐。触发模式自动触发对齐保持寄存器中写入数据后立即转换到DORX寄存器中。触发模式软触发定时器触发外部引脚触发。生成波DHRx中的数值不仅可以直接搬运到DORx寄存器输出还可以叠加生成波来实现叠加信号输出。分为三角波和噪声波。独立看门狗看门狗介绍五、MODBUS-TCP基础知识TCP/IP协议基础TCP(传输控制协议)面向连接的、可靠的传输层协议IP(网际协议)负责将数据从源主机传输到目标主机的网络层协议端口TCP/IP协议中标识应用程序的逻辑地址Modbus TCP/IP默认使用端口502套接字IP地址和端口号的组合用于唯一标识网络中的应用程序字节基础与数据表示位计算机中最小的信息单位取值为0或1字节8位组成一个字节范围0-2550x00-0xFF字16位组成一个字范围0-655350x0000-0xFFFF高低字节与字节序在Modbus协议中数据通常以16位字为单位传输高字节16位数据中的前8位高位低字节16位数据中的后8位低位例如对于数值0x1234高字节是0x12低字节是0x34字节序指的是多字节数据在内存中的存储顺序大端序高字节在前低字节在后Modbus协议使用小端序低字节在前高字节在后大多数x86架构CPU使用寄存器类型与功能Modbus协议定义了四种不同类型的寄存器每种寄存器都有特定的用途和地址范围。可以简单理解为四种不同的数据存储区域用于不同类型的信息交换。寄存器类型总览以下是四种寄存器类型的对比寄存器类型标识前缀读写属性数据类型地址范围十进制实际应用场景线圈寄存器0x可读可写位布尔值00001-09999控制开关设备如继电器、阀门离散输入寄存器1x只读位布尔值10001-19999读取传感器状态如限位开关、报警信号输入寄存器3x只读16位整数30001-39999采集模拟量数据如温度、压力保持寄存器4x可读可写16位整数40001-49999存储配置参数如设定值、运行模式注表中的标识前缀是行业内常用的简写方式用于快速区分寄存器类型。例如0x代表线圈寄存器1x代表离散输入寄存器以此类推。线圈寄存器功能相当于设备的开关用于控制各种开关设备。特点可读可写每个线圈只存储一个位0或1。地址范围00001-09999对应偏移量0-9998。实际例子地址00001控制加热器的开关0关闭, 1开启地址00002控制风扇的启停0停止, 1运行常用操作使用功能码05写单个线圈或15写多个线圈来控制设备。离散输入寄存器功能相当于设备的状态指示灯用于监控各种传感器的状态。特点只读每个寄存器只存储一个位0或1。地址范围10001-19999对应偏移量0-9998。实际例子地址10001温度传感器的报警状态0正常, 1超温地址10002门禁开关的状态0关闭, 1打开常用操作使用功能码02读离散输入来获取传感器状态。输入寄存器功能相当于设备的传感器数据采集器用于存储从传感器读取的模拟量数据。特点只读每个寄存器存储一个16位整数范围0-65535。地址范围30001-39999对应偏移量0-9998。实际例子地址30001当前温度值例如读取到250表示25.0℃地址30002湿度值例如读取到605表示60.5%RH常用操作使用功能码04读输入寄存器来采集传感器数据。保持寄存器功能相当于设备的配置参数存储器用于存储和修改设备的设置参数。特点可读可写每个寄存器存储一个16位整数范围0-65535。地址范围40001-49999对应偏移量0-9998。实际例子地址40001温度设定点例如设置为300表示30.0℃地址40002系统运行模式0手动模式, 1自动模式常用操作使用功能码03读保持寄存器或06写单个保持寄存器来读写参数。通信帧结构Modbus TCP/IP帧格式Modbus TCP/IP通信帧基于TCP协议由以下部分组成字段长度(字节)描述事务处理标识符2唯一标识每个Modbus请求/响应事务协议标识符20x0000表示Modbus协议长度字段2后续字节的数量单位标识符功能码数据域单位标识符1用于标识在一个TCP连接上的不同Modbus从站相当于RTU的地址域功能码域1指定要执行的操作如03(读保持寄存器)、06(写单个寄存器)数据域可变包含请求或响应的数据长度取决于功能码和具体操作常用功能码详解读操作功能码功能码01读线圈寄存器功能读取线圈寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x011字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1数据2…数据n2字节0x00003n1字节0x011字节1字节1字节…1字节示例读取从站地址1的线圈寄存器起始地址0x0000读取2个请求帧00 01 00 00 00 06 01 01 00 00 00 02响应帧假设值为0x01, 0x0000 01 00 00 00 04 01 01 01 01功能码02读离散输入寄存器功能读取离散输入寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x021字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1数据2…数据n2字节0x00003n1字节0x021字节1字节1字节…1字节示例读取从站地址1的离散输入寄存器起始地址0x0000读取2个请求帧00 01 00 00 00 06 01 02 00 00 00 02响应帧假设值为0x01, 0x0000 01 00 00 00 04 01 02 01 01功能码03读保持寄存器功能读取保持寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x031字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000032n1字节0x031字节1字节1字节…1字节1字节示例读取从站地址1的保持寄存器起始地址0x0000读取1个请求帧00 01 00 00 00 06 01 03 00 00 00 01响应帧假设寄存器值为0x123400 01 00 00 00 05 01 03 02 12 34功能码04读输入寄存器功能读取输入寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x041字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000032n1字节0x041字节1字节1字节…1字节1字节示例读取从站地址1的输入寄存器起始地址0x0000读取1个请求帧00 01 00 00 00 06 01 04 00 00 00 01响应帧假设寄存器值为0x250000 01 00 00 00 05 01 04 02 25 00写操作功能码功能码05写单个线圈功能设置单个线圈寄存器的值0或1请求帧格式事务处理ID协议ID长度单位ID功能码线圈地址高字节线圈地址低字节值高字节值低字节2字节0x000061字节0x051字节1字节0x000x00/0xFF注值为0x0000表示关闭线圈0xFF00表示打开线圈响应帧格式与请求帧相同示例设置从站地址1的线圈寄存器地址0x0000为1请求帧00 01 00 00 00 06 01 05 00 00 FF 00响应帧00 01 00 00 00 06 01 05 00 00 FF 00功能码06写单个保持寄存器功能设置单个保持寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码寄存器地址高字节寄存器地址低字节数据高字节数据低字节2字节0x000061字节0x061字节1字节1字节1字节响应帧格式与请求帧相同示例设置从站地址1的保持寄存器地址0x0000值为0x1234请求帧00 01 00 00 00 06 01 06 00 00 12 34响应帧00 01 00 00 00 06 01 06 00 00 12 34功能码0F写多个线圈功能设置多个线圈寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节字节数数据1数据2…数据n2字节0x00007n1字节0x0F1字节1字节1字节1字节1字节1字节1字节…1字节响应帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x0F1字节1字节1字节1字节示例设置从站地址1的线圈寄存器起始地址0x0000设置4个值为0x05二进制0101请求帧00 01 00 00 00 08 01 0F 00 00 00 04 01 05响应帧00 01 00 00 00 06 01 0F 00 00 00 04功能码100x10写多个保持寄存器功能设置多个保持寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000072n1字节0x101字节1字节1字节1字节1字节1字节1字节…1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x101字节1字节1字节1字节示例设置从站地址1的保持寄存器起始地址0x0000设置2个值为0x1234和0x5678请求帧00 01 00 00 00 0B 01 10 00 00 00 02 04 12 34 56 78响应帧00 01 00 00 00 06 01 10 00 00 00 02错误响应处理常见的错误响应包括功能码不支持从站返回功能码0x80地址无效返回错误码0x02数据无效返回错误码0x03连接超时主站未在规定时间内建立TCP连接响应超时主站未在规定时间内收到响应
延伸阅读

更多相关文章

2026/9/12 12:51:47

C++异步消息队列:从原理到实现的跨平台线程通信方案

1. 项目概述:为什么我们需要一个跨平台的异步消息队列? 在C多线程编程的世界里,数据共享和线程间通信是永恒的核心挑战。直接共享内存,用锁(mutex)来保护,是很多新手甚至老手的第一反应。但踩过…

2026/9/9 10:02:59

C++中printf格式化字符串深度解析:从原理到安全实践

1. 项目概述:为什么printf依然是C程序员绕不开的坎干了这么多年C,从嵌入式到服务器后台,从学生时代到带团队,我发现一个有趣的现象:无论C标准库里的iostream如何发展,printf这个来自C语言的“老古董”依然活…

2026/9/11 1:23:33

LLM-Cookbook S4-6:RAG技术实战与评估调试完整指南

如果你正在学习大模型应用开发,特别是对RAG(检索增强生成)技术感兴趣,那么LLM-Cookbook项目中的S4-6章节可能是你目前最需要的实战指南。这个由Datawhale团队基于吴恩达大模型课程精心整理的中文教程,已经帮助超过2.4万…

2026/9/12 12:50:35

GDevelop无代码游戏开发:MIT开源+本地AI如何实现一句话做游戏

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

2026/9/12 12:50:35

51单片机直流电机PWM闭环控制Proteus仿真教程

简介:本资源是一套基于51单片机的智能小车仿真学习套件,面向嵌入式初学者、单片机课程设计学生及Proteus仿真入门者,解决直流电机控制逻辑与避障行为模拟的实践难点。压缩包共37个文件,涵盖Proteus仿真工程(.dsn/.dbk&…

2026/9/12 12:50:35

312章103万字跑下来:AI长篇写作真正难的是这三件事

312 章、103 万字、47 条伏笔全程没丢,这篇复盘了 AI长篇写作 真正难的三件事:开书时把规矩立死、中期盯住别记混、后期盯住伏笔别漏收。蛙趣拼文 的一致性检查和伏笔看板把这三件事变成每章两个动作,加起来不到十分钟;据社科院报…

2026/9/12 12:50:35

大数据技术实战:从建模到分析的全流程解析

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

2026/9/12 12:50:35

聚簇索引和非聚簇索引简介

聚簇索引,是对磁盘的数据按照一个或多个列进行重新排序的算法。 磁盘上数据的存储顺序与索引的顺序是一致的。 一般情况下,主键会默认创建聚簇索引。一张表中只能有一个聚簇索引。 所以,在MySQL中,一张表如果存在主键&am…

2026/9/12 12:45:35

dcode 如何在会话中切换模型并持久化模型配置?

dcode 如何在会话中切换模型并持久化模型配置? 【免费下载链接】deepagents The batteries-included agent harness. 项目地址: https://gitcode.com/GitHub_Trending/de/deepagents 在 deepagents 仓库的终端编码产品 deepagents-code(命令名为 …

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码