libmodbus 源码分析_1
unit-test-server.c
我们接着从源码的单元测试服务器(从机)libmodbus-3.1.10\tests\unit-test-server.c 的 main 函数开始分析源码执行流和所用的数据结构。推进学习百问网提供的全场景工业互联设备管理系统解决方案,其中有对 libmodbus 源码详细的视频课程讲解。
可以看到对于从机,初始化时的操作是类似的
use_backend = RTU; /* 设置传输模式为 RTU */
ip_or_devi...
libmodbus 源码分析_0
libmodbus源码分析
libmodbus 是一个免费的跨平台支持 RTU 和 TCP 的 Modbus 库,遵循 LGPL V2.1+ 协议。libmodbus 支持 Linux、Mac Os X、FreeBSD、QNX 和 Windows 等操作系统。libmodbus 可以向符合 Modbus 协议的设备发送和接收数据,并支持通过串口或者 TCP 网络进行连接。
如何下载、使用和移植libmodbus请参考百问网提供的全场景工业互联设备管理系统解决方案。
各文件作用如下:
win32: 定义在W...
Modbus 协议_1
6 功能码描述
本篇简要解读几个 MODBUS 应用协议规范 中的功能码和作用,更多详细内容参考协议手册。
百问网提供的全场景工业互联设备管理系统解决方案,其中有对 Modbus 详细的视频课程讲解和功能案例测试。
6.1 01 (0x01) 读取线圈 (Read Coils)
此功能码用于从远程设备读取 1 到 2000 个连续的线圈状态。请求 PDU(协议数据单元)指定起始地址,即第一个指定线圈的地址,以及线圈的数量。在 PDU 中,线圈从零开始寻址。因此,编号为 1 到 16 的线圈在 PDU 中的寻...
Modbus 协议_0
MODBUS 应用协议规范
本篇详解 Modbus 组织 提供的 MODBUS 应用协议规范-V1.1b3,感兴趣的朋友可以移步 Modbus 组织官网 详细了解。
推荐学习由百问网提供的全场景工业互联设备管理系统解决方案,其中有对 Modbus 详细的视频课程讲解和案例测试。
1. 引言
1.1 本文档的范围
MODBUS 是一种应用层消息协议,位于 OSI 模型的第七层[参考],提供在不同类型的总线或网络上连接的设备之间的客户端/服务器通信。
自 1979 年以来,MODBUS 已成为工业界的串行事实...
USB 设备编程_2
USB 设备类型之 CDC (Communication Device Class)
CDC 概述
CDC(Communication Device Class,通信设备类)是 USB 设备类规范中专门用于 USB 通信设备的一类。其主要目的是为各种需要通信功能的设备(如调制解调器、网络适配器、虚拟串口设备等)提供一个统一、标准化的接口,使得主机能够识别并正确地与这些设备进行数据交换和控制。CDC 类中不仅定义了数据传输的基本机制,还包括一些特定的控制和管理命令,确保设备能按照既定的协议工作。
根据 CDC...
USB 设备编程_1
描述符相关源码分析
本章分析百问网提供的全场景工业互联设备管理系统解决方案中有关 USB 设备编程,应用层中关于 USB 设备描述符相关源码进行分析。
ux_device_descriptors.h 源文件分析
重点分析头文件中,关于 USB 中各种设备描述符的定义。
USB 复合设备类型枚举
typedef enum
{
CLASS_TYPE_NONE = 0,
CLASS_TYPE_HID = 1,
CLASS_TYPE_CDC_ACM = 2,
CLASS_TYPE...
USB 设备编程_0
USB 设备编程
本篇将详细描述如何通过在嵌入式设备上(以百问网提供的全场景工业互联设备管理系统解决方案中所使用的 STM32H5 系列开发板为例)实现一个 USB 虚拟串口(Virtual COM Port,VCP),从而让嵌入式系统能够通过 USB 接口与计算机或其他主机设备进行串行通信。
本篇的目标是在大概理解 USB 体系结构和协议的基础上通过移植 USBX 并编写驱动程序来实现 虚拟串口 来进一步学习和理解 USB 在实际开发中的应用。
USBX 组件
推荐学习由百问网提供的全场景工业互联设备管理...
MAX13487E 半双工 RS-485/RS-422 收发器详解
MAX13487E 半双工 RS-485/RS-422 收发器详解
RS-485 是一种电气标准(物理层的通信协议)详解参阅RS-485标准详解
本篇以百问网提供的全场景工业互联设备管理系统解决方案所使用的 RS-485 收发器(MAX13487EESA+)为例详解实际的 RS-485 收发器使用案例。
RS-485 收发器
RS-485 收发器的主要功能是实现对 RS-485 总线的发送和接收操作,负责信号的转换和传输。
将数据从微控制器、计算机等设备的 TTL 电平(低电平和高电平)转换为 RS-485...
裸机/FreeRTOS 环境下使用面向对象的方式实现 UART 的通用接口功能
重要的事情说在前边
编写程序时,特别是C程序,应该也只有C程序。一定要 仔细 仔细 仔细 调用宏函数时传递的实参类型是否是被定义函数实际的参数类型。
比如传递指针,up 因为调用 API 时自以为是的传入指针导致程序跑不通,关键是既然可以成功编译,这就很无语。。。
这要 “得益于” 宏函数在预处理阶段只是简单的文本替换,并没有类型检查,这种问题连编译期都不会被检查到。
虽然不是像常规函数一样进行调用,无函数调用开销(如入栈、出栈等操作)。这使得宏函数在某些性能要求较高的情况下比普通函数更有效率。
但是这...
USB 2.0 详解(五)—— USB设备框架
USB 设备框架
一个 USB设备 可以划分为三层:
底层(Bottom Layer):
是一个总线接口,用于传输和接收数据包。
中间层(Middle Layer):
负责在总线接口和设备上不同端点(Endpoints)之间传输数据。
端点是数据的最终消费者或提供者。
它可以被看作是数据的源头(Source)或汇点(Sink)。
顶层(Top Layer):
提供USB设备的具体功能,例如鼠标或ISDN接口。
本章描述了USB设备中间层的常见属性和操作。中间层的这些属性和操作被设备功能特...
USB 2.0 详解(四)—— 协议层(下)
8.6 数据切换同步和重试
USB 提供了一种机制,确保在多次传输中的数据发送方和接收方之间的数据序列同步。该机制可以确保数据传输的握手阶段被发送方和接收方正确地解释。同步是通过使用 DATA0 和 DATA1 的包标识符 (PID) 以及数据发送方和接收方的独立数据切换序列位来实现的。接收方的序列位仅在接收方能够接收数据并且接收了无错误的、带有正确数据 PID 的数据包时切换。发送方的序列位仅在数据发送方接收到有效的 ACK 握手时切换。数据发送方和接收方必须在事务开始时同步它们的序列位。同步机制根据事务...
USB 2.0 详解(四)—— 协议层(中)
USB 协议层
8.5 事务的包序列(Packet Sequences of Transaction)
8.5.2 Bulk事务
Bulk事务类型的特点是能够通过错误检测和重试机制保证主机与设备之间的数据可靠传输。Bulk事务采用三相事务,包括Token包、数据包和握手包,如图8-30所示。在某些流控制和停止条件下,数据阶段可能被握手替代,从而形成一个两相事务,此时不会传输数据。PING和NYET包只能在高速设备中使用。
当主机准备接收bulk数据时,它发送一个IN Token包。设备端点响应返回数据包,...
USB 2.0 详解(四)—— 协议层(上)
USB 协议层
这一章从底层视角介绍 USB 协议,首先讲解字段和数据包的定义。接下来,描述不同事务类型的数据包的事务格式。然后介绍链路层的流控制和事务级别的故障恢复。最后讨论重试同步、数据总线混乱、总线活动丢失的恢复以及高速PING协议。本章作为USB软件开发的重要一章会对重要内容详细注解,其余内容提供说明详解请参阅手册。
8.1 USB 的字节/位顺序
数据位在总线上按照从最低位(LSb)开始依次发送,接着是下一个LSb,直到最高位(MSb)最后发送。在后面的图示中,数据包的显示方式使得每个独立的位和字...
USB 2.0 详解(三)—— 电气特性
电气特性
这里我们略过USB的机械特性 (mechanical properties) 部分,有兴趣的朋友可以参阅 USB 2.0 Specification 中的第六章 Chapter 6 Mechanical 的内容。
本篇介绍 USB 2.0 的电气特性,不打算对 USB 2.0 Specification 中的第七章 Chapter 7 Electrical 进行详细的电气特性解读,会参考 USB 中文网 进行笼统地概念描述。有兴趣的朋友可以自行参阅第七章中的内容。
推荐学习由百问网提供的全场景工业...
USB 2.0 详解(二)—— 数据流模型(下)
数据流模型
5.4 传输类型
USB在主机的客户端软件(USB设备的驱动程序)与USB设备的端点之间通过管道传输数据。由消息管道传输的数据以USB定义的结构进行传输,但USB也允许设备特定的结构化数据在USB定义的消息数据载荷中进行传输。USB还定义了所有管道(无论是流式传输管道还是消息传输管道)传输的数据都必须以数据包的形式传输,但最终数据载荷的格式和解释由使用该管道的客户端软件和功能来负责。
然而,USB提供了不同的传输类型,这些类型优化了与客户端软件和功能的服务需求匹配的特性。一个IRP(I/O请求包...
USB 2.0 详解(二)—— 数据流模型(上)
USB 数据流模型
本章介绍如何通过 USB 传输数据的信息。本章中的内容影响所有实现者。所呈现的内容处于系统的信令和协议定义之上的级别。
有关 USB 系统各自部分的更多详细信息,请参阅第 7 章和第 8 章。本章提供了第 9 章至第 11 章中进一步扩展的框架信息。
所有实现者都应阅读本章,以便了解 USB 的关键概念。
5.1 实现者视角
USB 提供主机与连接的 USB 设备之间的通信服务。然而,终端用户看到的将一个或多个 USB 设备连接到主机的简单操作(如图 5-1 所示)实际上比图中显示的实现...
USB 2.0 详解(一)——体系结构概述
体系结构概述
本章旨在概述 通用串行总线(USB)的体系结构和关键概念。
USB 是一种通过电缆连接的总线,支持主机计算机与一系列同时可访问的外设之间的数据交换。
连接的外设通过主机调度的基于令牌的协议共享 USB 带宽。
该总线允许在主机和其他外设正常运行的情况下,外设可以被连接、配置、使用和移除。
在后续章节中将更详细地描述 USB 的各个组成部分。
4.1 USB 系统描述
USB 系统由以下三个定义区域组成:
USB 互连 (USB interconnect)
USB 设备通过何种方式连接到主机...
RS-485标准详解
RS-485
本篇解读德州仪器提供的《RS-485 设计指南》讲述 RS-485 通信协议的相关概念
1 引言
1983 年,电子工业协会 (EIA) 批准了一个新的平衡传输标准,称之为 RS-485。调查发现,RS-485 备受赞誉并被广泛应用到工业、医疗和消费类产品,成为了工业接口的主力规范。
本篇对应用报告进行解读,为那些对 RS-485 标准不熟的工程师提供设计指南,帮助他们在最短的时间内完成稳健而可靠的数据传输设计。
2 标准和特性
RS-485 标准的本质
电气标准:RS-485 是一个仅定义...
RS-232 标准详解
RS-232
本篇解读德州仪器提供的《RS-232 术语表和选择指南》讲述 RS-232 通信协议的相关概念
1 引言
RS-232 是各种外设通用的点对点通信接口,可实现主机与外设之间的通信。RS-232 符合TIA-232 和 EIA-232 标准。为了说明如何为系统选择正确的 RS-232 器件,以下各节将简要介绍 RS-232 标准以及收发器的主要规格。
2 标准概述
RS-232 标准涵盖三个相关领域:电气、功能和机械。电气规格包括物理电气层标准定义。
2.1 电气概述
RS-232 标准定义了多...
DHT11驱动
DHT11驱动
介绍
参考《HAL快速入门与项目实战(基于DshanMCU-F407)_V1.0》
参考《dht11_datasheet.pdf》
DHT11 驱动涉及引脚的读取操作,具体操作在驱动程序注释中已经说明
驱动程序
driver_dht11.h
#ifndef __DRIVER_DHT11_H__
#define __DRIVER_DHT11_H__
#include "main.h"
#ifdef __cplusplus
extern "C"{
#endif
/**
* @brief ...