Modbus | ||
STM32F103_Example | ||
.gitignore | ||
README.md |
Modbus: подключение и использование
Это вариант голого (bare) modbus, где вся инициализация скинута на CubeMX
Настройка
-
Подключите обработчики прерываний UART и TIM в свои IRQ обработчики после HAL-обработчиков:
#include "rs_message.h" void USARTx_IRQHandler(void) { HAL_UART_IRQHandler(&huart); RS_UART_Handler(&modbus1); } void TIMx_IRQHandler(void) { HAL_TIM_IRQHandler(&htim); RS_TIM_Handler(&modbus1); }
-
Настройте
modbus_config.h
:// MODBUS PARAMS #define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства #define MODBUS_TIMEOUT 5000 ///< максимальнйы тайтаут MB в тиках таймера // PERIPH FUNCTIONS AND HANDLERS #define RS_UART_Init MX_USART1_UART_Init #define RS_UART_DeInit HAL_UART_MspDeInit #define RS_TIM_Init MX_TIM3_Init #define RS_TIM_DeInit HAL_TIM_Base_MspDeInit #define rs_huart huart1 #define rs_htim htim3
-
Для инициализации Modbus добавьте:
#include "rs_message.h" MODBUS_FirstInit();
-
Настройка регистров и коилов
В этом проекте структура данных Modbus организована в три основных типа элементов: входные регистры (
Input Registers
- только чтение), регистры хранения (Holding Registers
- чтение и запись) и коилы (Coils
- отдельные биты, чтение и запись). Каждый тип данных структурирован как отдельный набор с определенными адресами и размерностями.Все три типа данных объединены в общую структуру устройства
MB_DataStructureTypeDef
, которая содержит:- Входные регистры (
InRegs
) - Коилы (
Coils
) - Регистры хранения (
HoldRegs
)
Пример настройки
Input Registers
:typedef struct //MB_DataInRegsTypeDef { uint16_t ForwardVoltage; uint16_t ReversePeakVoltage; }MB_DataInRegsTypeDef; // DEFINES FOR INPUT REGISTERS ARRAYS #define R_INPUT_ADDR 0 // начальный адресс инпут регистров #define R_INPUT_QNT 2 // количество инпут регистров
Аналогично с
Hodling Registers
иCoils
(в коилах только битовые поля) - Входные регистры (
-
Для запуска Modbus вызовите:
RS_Receive_IT(&hmodbus1, &MODBUS_MSG);