diff --git a/examples/stm32/Core/Src/main.c b/examples/stm32/Core/Src/main.c index 728f708..bb88f94 100644 --- a/examples/stm32/Core/Src/main.c +++ b/examples/stm32/Core/Src/main.c @@ -21,7 +21,7 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include "nanomodbus_stm32.h" +#include "nanomodbus_port.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -46,12 +46,11 @@ DMA_HandleTypeDef hdma_usart1_tx; /* USER CODE BEGIN PV */ nmbs_t nmbs; -nmbs_server_t nmbs_servers[] = { - { +nmbs_server_t nmbs_server = +{ .id = 0x01, .coils = {0,}, .regs = {0,}, - }, }; /* USER CODE END PV */ @@ -102,7 +101,7 @@ int main(void) MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ - nanomodbus_server_init(&nmbs, nmbs_servers, sizeof(nmbs_servers)/sizeof(*nmbs_servers)); + nmbs_server_init(&nmbs, &nmbs_server); /* USER CODE END 2 */ diff --git a/examples/stm32/nanomodbus_port.c b/examples/stm32/nanomodbus_port.c index 677bbdd..d855f33 100644 --- a/examples/stm32/nanomodbus_port.c +++ b/examples/stm32/nanomodbus_port.c @@ -21,8 +21,7 @@ static ringBuf rb; static void ringbuf_init(ringBuf* rb, void (*overflow_callback)(struct tRingBuf* rq)); static void ringbuf_overflow_error(ringBuf* rb); -static nmbs_server_t* servers; -static uint8_t server_num; +static nmbs_server_t* server; static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg); static nmbs_error server_read_holding_registers(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id, void* arg); @@ -31,7 +30,7 @@ static nmbs_error server_write_multiple_coils(uint16_t address, uint16_t quantit static nmbs_error server_write_single_register(uint16_t address, uint16_t value, uint8_t unit_id, void* arg); static nmbs_error server_write_multiple_registers(uint16_t address, uint16_t quantity, const uint16_t* registers, uint8_t unit_id, void* arg); -nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t _server_num) +nmbs_error nmbs_server_init(nmbs_t* nmbs, nmbs_server_t* _server) { ringbuf_init(&rb, ringbuf_overflow_error); @@ -43,6 +42,8 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t conf.read = read_serial; conf.write = write_serial; + server = _server; + nmbs_callbacks_create(&cb); cb.read_coils = server_read_coils; cb.read_holding_registers = server_read_holding_registers; @@ -51,18 +52,13 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t cb.write_single_register = server_write_single_register; cb.write_multiple_registers = server_write_multiple_registers; - servers = _servers; - server_num = _server_num; - for(size_t i = 0; i < server_num; i++) + nmbs_error status = nmbs_server_create(nmbs, server->id, &conf, &cb); + if(status != NMBS_ERROR_NONE) { - nmbs_error status = nmbs_server_create(nmbs, servers[i].id, &conf, &cb); - if(status != NMBS_ERROR_NONE) - { - return status; - } + return status; } - + nmbs_set_byte_timeout(nmbs, 100); nmbs_set_read_timeout(nmbs, 1000); @@ -72,14 +68,15 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t static nmbs_server_t* get_server(uint8_t id) { - for(size_t i = 0; i < server_num; i++) + if(id == server->id) { - if(servers[i].id == id) - { - return &servers[i]; - } + return server; } - return (nmbs_server_t*)(NULL); + else + { + return NULL; + } + } static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg) diff --git a/examples/stm32/nanomodbus_port.h b/examples/stm32/nanomodbus_port.h index 1f6fe77..eda24a0 100644 --- a/examples/stm32/nanomodbus_port.h +++ b/examples/stm32/nanomodbus_port.h @@ -25,7 +25,7 @@ typedef struct tNmbsServer{ uint16_t regs[REG_BUF_SIZE]; }nmbs_server_t; -nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* servers, uint8_t server_num); +nmbs_error nmbs_server_init(nmbs_t* nmbs, nmbs_server_t* server); extern UART_HandleTypeDef NANOMB_UART; diff --git a/examples/stm32/readme.md b/examples/stm32/readme.md index e41bcf9..fb8a3ec 100644 --- a/examples/stm32/readme.md +++ b/examples/stm32/readme.md @@ -7,6 +7,8 @@ - Blackpill board - STM32F401CCUx - USART1 with DMA + - PA9 : TX1 + - PA10 : RX1 ## Toolchain and environment