Modbus TCP and RTU, Master and Slave for STM32 using Cube HAL and FreeRTOS
TCP, USART and USB-CDC Modbus RTU Master and Slave library for STM32 microcontrollers based on Cube HAL and FreeRTOS.
Includes multiple examples for popular development boards including BluePill, NUCLEO-64, NUCLEO-144 and Discovery Boards (Cortex-M3/M4/M7).
This is a port of the Modbus library for Arduino: https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino
Video demo for STM32F4-discovery board and TouchGFX: https://youtu.be/XDCQvu0LirY
NEW
Script examples to test the library based on Pymodbus
NEW
TCP slave (server) multi-client with configurable auto-aging algorithm for management of TCP connections
Traditional Chinese: 繁體中文
├── LICENSE
├── README.md
├── Examples
├── ModbusBluepill --> STM32F103C8 USART Slave
├── ModbusBluepillUSB --> STM32F103C8 USART + USB-CDC Master and Slave
├── ModbusF103 --> NUCLEO-F103RB Modbus Master and Slave
├── ModbusF429 --> NUCLEO-F429ZI Modbus Slave
├── ModbusF429TCP --> NUCLEO-F429ZI Modbus TCP
├── ModbusF429DMA --> NUCLEO-F429ZI Modbus RTU DMA master and slave
├── ModbusL152DMA --> NUCLEO-L152RE Modbus RTU DMA slave
├── ModbusH743 --> NUCLEO-H743ZI Modbus Slave
├── ModbusH743TCP --> NUCLEO-H743ZI Modbus TCP
├── ModbusF303 --> NUCLEO-F303RE Modbus Slave
├── ModbusSTM32F4-discovery --> STM32F4-discovery TouchGFX + Modbus Master
├── ModbusWB55DMA --> P-NUCLEO-WB55 Modbus RTU DMA slave with RS485
├── ModbusG070 --> NUCLEO-G070RB Modbus Slave
├── ModbusF030 --> STM32F030RCT6 USART Slave
├── Script
├── *.ipynb --> various master and slave Jupyter notebooks for testing
├── MODBUS-LIB --> Library Folder
├── Inc
│ └── Modbus.h
├── Config
│ └── ModbusConfigTemplate.h --> Configuration Template
└── Src
├── Modbus.c
└── UARTCallback.c
Examples provided for STM32CubeIDE Version: 1.8.0 https://www.st.com/en/development-tools/stm32cubeide.html.
The standard interrupt mode for Modbus RTU USART is suitable for 115200 bps or lower baud rates. For Higher baud rates---tested up to 2 Mbps---it is recommended to use the DMA mode. Check the corresponding examples. It will require extra configurations for the DMA channels in the Cube HAL.
The USB-CDC example supports only the Bluepill development board. It has not been validated with other development boards. To use this example, you need to activate USB-CDC in your ModbusConfig.h file.
The TCP examples have been validated with NUCLEO F429ZI and H743ZI. To use these examples, you need to activate TCP in your ModbusConfig.h file.
The HAL implementation for LWIP TCP of the CubeMX generates code that might not work if the cable is not connected from the very beginning. This is a known issue that can be solved manually changing the generated code as detailed here: https://community.st.com/s/question/0D50X0000CDolzDSQR/ethernet-does-not-work-if-uc-starts-with-the-cable-disconnected
Check the TCP example for the NUCLEO F429, which includes the manual modifications.
Preemption priority
of USART interrupt to a lower priority (5 or a higher number for a standard configuration) than your FreeRTOS scheduler. This parameter is changed in the NVIC configuration pane.Inc
folder of MODBUS-LIB folderNote:
If your project uses the USART interrupt service for other purposes you have to modify the UARTCallback.c file accordinglyLinux/Windows: https://github.com/riptideio/pymodbus
Linux: https://launchpad.net/~js-reynaud/+archive/ubuntu/qmodbus
Windows: https://sourceforge.net/projects/qmodbus/
Linux: https://sourceforge.net/projects/pymodslave/
Windows: https://sourceforge.net/projects/modrssim2/