diff options
| -rw-r--r-- | examples/stm32/main.c | 25 | ||||
| -rw-r--r-- | src/modbus.h | 5 |
2 files changed, 27 insertions, 3 deletions
diff --git a/examples/stm32/main.c b/examples/stm32/main.c index e202ae5..7f63529 100644 --- a/examples/stm32/main.c +++ b/examples/stm32/main.c @@ -3,16 +3,35 @@ /* If using CubeMX, the HAL library files will be automatically placed in the correct location. The examples were tested with the Makefile option in CubeMX. */ /* If you are not using CubeMX to initialize the project, you are on your own */ -/* In order to run the example, you will need to copy the superloop code as well as the external function initializations from this file */ +/* In order to run the example, you will need to copy the device initialization, superloop code as well as the external function initializations from this file */ /* Function initialization for the STM32 HAL Library */ /* Since this library was orignally written to work with the STM32 HAL/LL API, the UART functions match perfectly and can be directly mapped to the Modbus library functions */ - +MB_StatusTypeDef (*MB_UART_Tx)(void*, uint16_t*, uint8_t*, uint8_t*) = &HAL_UART_Transmit; +MB_StatusTypeDef (*MB_UART_Rx)(void*, uint16_t*, uint8_t*, uint8_t*) = &HAL_UART_Receive; int main() { + /* Single modbus device node */ + modbus_slave_device modbus_dev_single; + /* Multiple modbus device nodes.. after all what is the point of using Modbus in a single point-to-point connection? */ + /* Not illustrated beyond the definition, but should be clear enough */ + modbus_slave_device modbus_dev_multiple[10]; + + /* Set the slave ID to 1 */ + modbus_dev_single.slave_id = 1; + /* Attach the UART device on the STM32 to this node */ + modbus_dev_single.modbus_uart = &huart1; + /* Continuously read the 30001 input register */ + uint16_t register = 30001; + while (1) { - + MB_StatusTypeDef status = ReadInputRegisters(modbus_dev_single, register, 1); + if (status == MB_OK) { + /* Do something with data in the response buffer */ + /* ... */ + ClearResponseBuffer(&modbus_dev_single); + } } return 1; } diff --git a/src/modbus.h b/src/modbus.h index 48f7bb5..f556c0b 100644 --- a/src/modbus.h +++ b/src/modbus.h @@ -39,6 +39,11 @@ typedef enum { extern MB_StatusTypeDef (*MB_UART_Tx)(void*, uint16_t*, uint8_t*, uint8_t*); extern MB_StatusTypeDef (*MB_UART_Rx)(void*, uint16_t*, uint8_t*, uint8_t*); + +MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device, + uint16_t rw_addr, int read_num, + uint16_t write_value); + MB_StatusTypeDef ReadHoldingRegisters(modbus_slave_device *device, uint16_t reg_addr, int read_num); |
