You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.5 KiB

/*
* modbus.h
*
* Created on: Jul 3, 2025
* Author: shiyanlei
*/
#ifndef __MODBUS_SLAVE_H
#define __MODBUS_SLAVE_H
#include "stm32g4xx_hal.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 10
#define REGISTER_COUNT 12
extern uint16_t holdingRegisters[REGISTER_COUNT];
extern uint8_t RS485_1_RX;
extern uint8_t RS485_1_Host_Existed;
#define registerWritable_0 1
#define registerWritable_1 1
#define registerWritable_2 1
#define registerWritable_3 1
#define registerWritable_4 1
#define registerWritable_5 1
#define registerWritable_6 1
#define registerWritable_7 1
#define registerWritable_8 1
#define registerWritable_9 1
#define registerWritable_10 1
#define registerWritable_11 1
//holdingRegisters[0]= motor_cmd //0:stop 1:forward 2:reverse
//holdingRegisters[1]= HX711_A_F //int16_t 10g
//holdingRegisters[2]= HX711_K //uint16_t
//holdingRegisters[3]= HX711_D //int16_t 1g
//holdingRegisters[4]= HX711_B_F //int16_t 10g
extern void MB_WriteHoldingReg(uint8_t _addr,
uint16_t _reg, uint16_t _data);
/* 初始化Modbus从机 */
void Modbus_Init(void);
/* 处理Modbus消息 */
void Modbus_Process(void);
#endif /* __MODBUS_SLAVE_H */