嵌入式总线通信协议库
项目概述
这是一个用于嵌入式系统的总线通信协议库,提供了多种常用通信协议的实现,包括UART、SPI、I2C、I3C、CAN、Modbus、SMBus、RS232和RS485。该项目采用模块化设计,每个协议独立为一个模块,便于集成和使用(HAL部分由用户根据自己的硬件进行适配)。 持续更新中...
目录结构
base_buss/
├── 3rd_party/ # 第三方库
│ └── securelib/ # 安全库
├── src/ # 源代码目录
│ ├── uart/ # UART模块
│ ├── spi/ # SPI模块
│ ├── i2c/ # I2C模块
│ ├── i3c/ # I3C模块
│ ├── can/ # CAN模块
│ ├── modbus/ # Modbus模块
│ ├── smbus/ # SMBus模块
│ ├── rs232/ # RS232模块
│ ├── rs485/ # RS485模块
│ ├── main.c # 测试主函数
│ └── CMakeLists.txt # 源码根目录CMake配置
├── CMakeLists.txt # 项目根CMake配置
└── README.md # 项目说明文档
模块介绍
UART (通用异步收发传输器)
UART是一种异步串行通信协议,常用于微控制器与其它设备之间的短距离通信。
主要功能:
- 初始化UART外设
- 发送数据
- 接收数据
- 设置波特率
- 启用/禁用中断
API接口:
UartInit()- 初始化UARTUartSendData()- 发送数据UartReceiveData()- 接收数据UartSetBaudRate()- 设置波特率UartEnableInterrupts()- 启用中断UartDisableInterrupts()- 禁用中断
SPI (串行外设接口)
SPI是一种同步串行通信协议,支持全双工通信,常用于微控制器与传感器、存储器等外设的通信。
主要功能:
- 初始化SPI外设
- 全双工数据传输
- 单向发送数据
- 单向接收数据
- 设置时钟速度
- 设置主从模式
API接口:
SpiInit()- 初始化SPISpiTransfer()- 全双工传输SpiSendData()- 发送数据SpiReceiveData()- 接收数据SpiSetClockSpeed()- 设置时钟速度SpiSetMode()- 设置主从模式
I2C (Inter-Integrated Circuit)
I2C是一种多主机、多从机的串行通信协议,只需要两根线(SDA和SCL)即可实现设备间通信。
主要功能:
- 初始化I2C外设
- 向设备写入数据
- 从设备读取数据
- 设置时钟速度
- 检查设备是否存在
API接口:
I2cInit()- 初始化I2CI2cWriteData()- 写入数据I2cReadData()- 读取数据I2cSetClockSpeed()- 设置时钟速度I2cCheckDevice()- 检查设备
I3C (Improved Inter-Integrated Circuit)
I3C是I2C的改进版本,提供了更高的数据传输速率和更丰富的功能。
主要功能:
- 初始化I3C外设
- 向设备发送数据
- 从设备读取数据
- 设置时钟速度
- 检查设备是否存在
API接口:
I3cInit()- 初始化I3CI3cSendData()- 发送数据I3cReadData()- 读取数据I3cSetClockSpeed()- 设置时钟速度I3cCheckDevice()- 检查设备
CAN (Controller Area Network)
CAN是一种广泛应用于汽车和工业控制领域的串行通信协议,具有高可靠性和抗干扰能力。
主要功能:
- 初始化CAN外设
- 发送CAN消息
- 接收CAN消息
- 设置波特率
- 启用/禁用中断
API接口:
CanInit()- 初始化CANCanSendData()- 发送数据CanReceiveData()- 接收数据CanSetBaudRate()- 设置波特率CanEnableInterrupts()- 启用中断CanDisableInterrupts()- 禁用中断
Modbus
Modbus是一种串行通信协议,广泛应用于工业电子设备之间。
主要功能:
- 初始化Modbus通信
- 发送请求并接收响应
- 读取线圈状态
- 读取离散输入
- 读取保持寄存器
- 读取输入寄存器
- 写入单个线圈
- 写入单个寄存器
API接口:
ModbusInit()- 初始化ModbusModbusSendReceive()- 发送请求并接收响应ModbusReadCoils()- 读取线圈ModbusReadDiscreteInputs()- 读取离散输入ModbusReadHoldingRegisters()- 读取保持寄存器ModbusReadInputRegisters()- 读取输入寄存器ModbusWriteSingleCoil()- 写入单个线圈ModbusWriteSingleRegister()- 写入单个寄存器
SMBus (System Management Bus)
SMBus是基于I2C的两线制总线,主要用于系统管理和通信。
主要功能:
- 初始化SMBus外设
- 向设备发送数据
- 从设备读取数据
- 读写字节数据
- 设置时钟速度
- 检查设备是否存在
API接口:
SmBusInit()- 初始化SMBusSmBusSendData()- 发送数据SmBusReadData()- 读取数据SmBusReadByte()- 读取字节SmBusWriteByte()- 写入字节SmBusSetClockSpeed()- 设置时钟速度SmBusCheckDevice()- 检查设备
RS232
RS232是一种标准的串行通信协议,广泛用于计算机与外设之间的通信。
主要功能:
- 初始化RS232外设
- 发送数据
- 接收数据
- 设置波特率
- 启用/禁用中断
API接口:
Rs232Init()- 初始化RS232Rs232SendData()- 发送数据Rs232ReceiveData()- 接收数据Rs232SetBaudRate()- 设置波特率Rs232EnableInterrupts()- 启用中断Rs232DisableInterrupts()- 禁用中断
RS485
RS485是一种差分串行通信协议,支持多点通信,传输距离远,抗干扰能力强。
主要功能:
- 初始化RS485外设
- 发送数据
- 接收数据
- 设置波特率
- 启用发送/接收模式
API接口:
Rs485Init()- 初始化RS485Rs485SendData()- 发送数据Rs485ReceiveData()- 接收数据Rs485SetBaudRate()- 设置波特率Rs485EnableTransmit()- 启用发送模式Rs485EnableReceive()- 启用接收模式
硬件抽象层(HAL)
每个模块都采用了硬件抽象层设计,将硬件相关操作与协议逻辑分离。硬件相关函数位于xxx_hal.c和xxx_hal.h文件中,便于移植到不同的硬件平台。
编译构建
项目使用CMake构建系统,支持跨平台编译。
构建步骤
mkdir build
cd build
cmake ..
make
构建配置
- 支持Debug和Release两种构建模式
- 默认使用C99标准
- Debug模式启用调试信息和额外警告
- Release模式启用优化
使用示例
每个模块都提供了测试函数,可在main.c中找到使用示例。
编码规范
- 采用大驼峰命名法命名函数
- 局部变量和参数采用小驼峰命名法
- 所有控制语句都使用花括号包裹
- 严格校验函数返回值
- 使用第三方安全库函数
- 每个函数都有完整注释
- 每个函数非空非注释行数不超过50行
仓库
[GitHub](# 嵌入式总线通信协议库
项目概述
这是一个用于嵌入式系统的总线通信协议库,提供了多种常用通信协议的实现,包括UART、SPI、I2C、I3C、CAN、Modbus、SMBus、RS232和RS485。该项目采用模块化设计,每个协议独立为一个模块,便于集成和使用。
目录结构
base_buss/
├── 3rd_party/ # 第三方库
│ └── securelib/ # 安全库
├── src/ # 源代码目录
│ ├── uart/ # UART模块
│ ├── spi/ # SPI模块
│ ├── i2c/ # I2C模块
│ ├── i3c/ # I3C模块
│ ├── can/ # CAN模块
│ ├── modbus/ # Modbus模块
│ ├── smbus/ # SMBus模块
│ ├── rs232/ # RS232模块
│ ├── rs485/ # RS485模块
│ ├── main.c # 测试主函数
│ └── CMakeLists.txt # 源码根目录CMake配置
├── CMakeLists.txt # 项目根CMake配置
└── README.md # 项目说明文档
模块介绍
UART (通用异步收发传输器)
UART是一种异步串行通信协议,常用于微控制器与其它设备之间的短距离通信。
主要功能:
- 初始化UART外设
- 发送数据
- 接收数据
- 设置波特率
- 启用/禁用中断
API接口:
UartInit()- 初始化UARTUartSendData()- 发送数据UartReceiveData()- 接收数据UartSetBaudRate()- 设置波特率UartEnableInterrupts()- 启用中断UartDisableInterrupts()- 禁用中断
SPI (串行外设接口)
SPI是一种同步串行通信协议,支持全双工通信,常用于微控制器与传感器、存储器等外设的通信。
主要功能:
- 初始化SPI外设
- 全双工数据传输
- 单向发送数据
- 单向接收数据
- 设置时钟速度
- 设置主从模式
API接口:
SpiInit()- 初始化SPISpiTransfer()- 全双工传输SpiSendData()- 发送数据SpiReceiveData()- 接收数据SpiSetClockSpeed()- 设置时钟速度SpiSetMode()- 设置主从模式
I2C (Inter-Integrated Circuit)
I2C是一种多主机、多从机的串行通信协议,只需要两根线(SDA和SCL)即可实现设备间通信。
主要功能:
- 初始化I2C外设
- 向设备写入数据
- 从设备读取数据
- 设置时钟速度
- 检查设备是否存在
API接口:
I2cInit()- 初始化I2CI2cWriteData()- 写入数据I2cReadData()- 读取数据I2cSetClockSpeed()- 设置时钟速度I2cCheckDevice()- 检查设备
I3C (Improved Inter-Integrated Circuit)
I3C是I2C的改进版本,提供了更高的数据传输速率和更丰富的功能。
主要功能:
- 初始化I3C外设
- 向设备发送数据
- 从设备读取数据
- 设置时钟速度
- 检查设备是否存在
API接口:
I3cInit()- 初始化I3CI3cSendData()- 发送数据I3cReadData()- 读取数据I3cSetClockSpeed()- 设置时钟速度I3cCheckDevice()- 检查设备
CAN (Controller Area Network)
CAN是一种广泛应用于汽车和工业控制领域的串行通信协议,具有高可靠性和抗干扰能力。
主要功能:
- 初始化CAN外设
- 发送CAN消息
- 接收CAN消息
- 设置波特率
- 启用/禁用中断
API接口:
CanInit()- 初始化CANCanSendData()- 发送数据CanReceiveData()- 接收数据CanSetBaudRate()- 设置波特率CanEnableInterrupts()- 启用中断CanDisableInterrupts()- 禁用中断
Modbus
Modbus是一种串行通信协议,广泛应用于工业电子设备之间。
主要功能:
- 初始化Modbus通信
- 发送请求并接收响应
- 读取线圈状态
- 读取离散输入
- 读取保持寄存器
- 读取输入寄存器
- 写入单个线圈
- 写入单个寄存器
API接口:
ModbusInit()- 初始化ModbusModbusSendReceive()- 发送请求并接收响应ModbusReadCoils()- 读取线圈ModbusReadDiscreteInputs()- 读取离散输入ModbusReadHoldingRegisters()- 读取保持寄存器ModbusReadInputRegisters()- 读取输入寄存器ModbusWriteSingleCoil()- 写入单个线圈ModbusWriteSingleRegister()- 写入单个寄存器
SMBus (System Management Bus)
SMBus是基于I2C的两线制总线,主要用于系统管理和通信。
主要功能:
- 初始化SMBus外设
- 向设备发送数据
- 从设备读取数据
- 读写字节数据
- 设置时钟速度
- 检查设备是否存在
API接口:
SmBusInit()- 初始化SMBusSmBusSendData()- 发送数据SmBusReadData()- 读取数据SmBusReadByte()- 读取字节SmBusWriteByte()- 写入字节SmBusSetClockSpeed()- 设置时钟速度SmBusCheckDevice()- 检查设备
RS232
RS232是一种标准的串行通信协议,广泛用于计算机与外设之间的通信。
主要功能:
- 初始化RS232外设
- 发送数据
- 接收数据
- 设置波特率
- 启用/禁用中断
API接口:
Rs232Init()- 初始化RS232Rs232SendData()- 发送数据Rs232ReceiveData()- 接收数据Rs232SetBaudRate()- 设置波特率Rs232EnableInterrupts()- 启用中断Rs232DisableInterrupts()- 禁用中断
RS485
RS485是一种差分串行通信协议,支持多点通信,传输距离远,抗干扰能力强。
主要功能:
- 初始化RS485外设
- 发送数据
- 接收数据
- 设置波特率
- 启用发送/接收模式
API接口:
Rs485Init()- 初始化RS485Rs485SendData()- 发送数据Rs485ReceiveData()- 接收数据Rs485SetBaudRate()- 设置波特率Rs485EnableTransmit()- 启用发送模式Rs485EnableReceive()- 启用接收模式
硬件抽象层(HAL)
每个模块都采用了硬件抽象层设计,将硬件相关操作与协议逻辑分离。硬件相关函数位于xxx_hal.c和xxx_hal.h文件中,便于移植到不同的硬件平台。
编译构建
项目使用CMake构建系统,支持跨平台编译。
构建步骤
mkdir build
cd build
cmake ..
make
构建配置
- 支持Debug和Release两种构建模式
- 默认使用C99标准
- Debug模式启用调试信息和额外警告
- Release模式启用优化
使用示例
每个模块都提供了测试函数,可在main.c中找到使用示例。
编码规范
- 采用大驼峰命名法命名函数
- 局部变量和参数采用小驼峰命名法
- 所有控制语句都使用花括号包裹
- 严格校验函数返回值
- 使用第三方安全库函数
- 每个函数都有完整注释
- 每个函数非空非注释行数不超过50行