# ModbusSlave从机C代码 **Repository Path**: guanmingweiabc/modbus-slave---c-code ## Basic Information - **Project Name**: ModbusSlave从机C代码 - **Description**: 支持01 02 03 04 05 06 10 15功能码 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-31 - **Last Updated**: 2023-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ModbusSlave从机C代码 #### 介绍 支持01 02 03 04 05 06 10 15功能码,支持01 02 03 04 06 0C错误码 #### 软件架构 无 #### 安装教程 1. 声明一个modbusSlave结构体对象 如 ModbusSlaveObj_t ModbusSlaveObj; 2. 调用void MsInit()进行初始化操作 3. 调用void MsConfigureRegister()进行相关寄存器的初始化操作,用到哪个功能码就注册哪个寄存器 4. 在串口中断中调用void MsSerialRead(ModbusSlaveObj_t * pObj,unsigned char *buff,int length)函数,该函数可接受1个以上字节 5. 调用void MsTimeout()函数,该函数处理3.5个字符长度的接收超时 6. 调用void MsProcess()函数,该函数负责解析主机发来的mod不是命令 #### 使用说明 ``` #include "modbusSlave.h" ModbusSlaveObj_t ModbusSlaveObj; //从机对象 #define MODBUS_SLAVE_ADDR 1 //从机地址 #define MODBUS_SLAVE_TIMEOUT 5 //超时时间,设定为5ms short MotorData[30]; //声明一个寄存器 //串口写入 void SerialWrite(unsigned char *buff,int length) { HAL_UART_Transmit(&huart1,buff,length,2000); } //从机初始化化 void ModbusSlaveInit(void) { MsInit(&ModbusSlaveObj,MODBUS_SLAVE_ADDR,MODBUS_SLAVE_TIMEOUT,SerialWrite); //电机参数给03和10两个功能码使用 MsConfigureRegister(&ModbusSlaveObj,0x03,MotorData,30); MsConfigureRegister(&ModbusSlaveObj,0x10,MotorData,30); } //串口接收 void USART1_IRQHandler(void) { uint8_t ch; if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)) { ch = USART1->DR; __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE); MsSerialRead(&ModbusSlaveObj,&ch,1); } } //1ms中断处理 void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ extern ModbusSlaveObj_t ModbusSlaveObj; /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ _1Ms_Handler(); //modbus超时处理 MsTimeout(&ModbusSlaveObj); /* USER CODE END SysTick_IRQn 1 */ } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)