#ifndef __MODBUS_SLAVE_H #define __MODBUS_SLAVE_H #include "stm32g4xx_hal.h" #include #include #include "com.h" /* Modbus 相关参数 */ #define MODBUS_SLAVE_ADDRESS 0x34 #define MODBUS_FUNCTION_CODE_03 0x03 #define MODBUS_FUNCTION_CODE_06 0x06 #define MODBUS_FUNCTION_CODE_10 0x10 #define MODBUS_BUFFER_SIZE 256 #define MODBUS_TIMEOUT_MS 2 #define MODBUS_CRC_OFF 0 /* ==1 关闭CRC校验 */ /* 寄存器相关参数 */ #define REGISTER_START_ADDRESS 0x0000 #define REGISTER_COUNT 12 /* 全局变量声明 */ extern uint16_t holdingRegisters[REGISTER_COUNT]; extern uint8_t RS485_1_RX; extern uint8_t RS485_1_Host_Existed; extern char dmk_read_state; /* TComCtrl 回调 — 注册到 RS485_1,由 rd_ComRead 自动调用 */ int Modbus_Slave_Check(char *_pBuffer, uint32_t _iSize); void Modbus_Slave_Decode(const char *_pBuffer, uint32_t _iSize); /* Modbus 主机接口 */ void Modbus_Master_Init(TComCtrl *ptRS485); void MB_WriteHoldingReg(uint8_t _addr, uint16_t _reg, uint16_t _data); void calculate_dmk(void); /* CRC 计算 */ uint16_t CalculateCRC(uint8_t *data, uint8_t length); #endif /* __MODBUS_SLAVE_H */