From d707fdd988527b727f145a0faa31e6f82368060e Mon Sep 17 00:00:00 2001 From: judsonupchurch Date: Sun, 13 Jul 2025 18:36:26 -0500 Subject: [PATCH] Created modbus_transport_uart for bridging the nanomodbus library with HAL --- Core/Src/modbus_transport_uart.c | 31 +++++++++++++++++++++++++++++++ lib/nanomodbus | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 Core/Src/modbus_transport_uart.c diff --git a/Core/Src/modbus_transport_uart.c b/Core/Src/modbus_transport_uart.c new file mode 100644 index 0000000..a9a5363 --- /dev/null +++ b/Core/Src/modbus_transport_uart.c @@ -0,0 +1,31 @@ +#include "nanomodbus.h" +#include "main.h" +#include "usart.h" // for &huart2 + +static uint8_t rx_buf[256]; +static uint8_t tx_buf[256]; + +// nanoMODBUS requires this structure: +mb_port_t modbus_port; + +// Read function (blocking or interrupt/DMA based) +int modbus_read(uint8_t *dest, uint16_t len, uint32_t timeout_ms) { + if (HAL_UART_Receive(&huart2, dest, len, timeout_ms) == HAL_OK) { + return len; + } + return -1; +} + +// Write function +int modbus_write(const uint8_t *src, uint16_t len, uint32_t timeout_ms) { + if (HAL_UART_Transmit(&huart2, (uint8_t*)src, len, timeout_ms) == HAL_OK) { + return len; + } + return -1; +} + +// Register your transport functions +void modbus_transport_init(void) { + modbus_port.read = modbus_read; + modbus_port.write = modbus_write; +} diff --git a/lib/nanomodbus b/lib/nanomodbus index 469b5e8..8780d6b 160000 --- a/lib/nanomodbus +++ b/lib/nanomodbus @@ -1 +1 @@ -Subproject commit 469b5e88319a303e1231890af06f2634b825eb27 +Subproject commit 8780d6b81f4943ae83fa5b0102402c6bd71e01a5