# Modbus: подключение и использование Это вариант голого (bare) modbus, где вся инициализация скинута на CubeMX ## Настройка 1. Подключите обработчики прерываний **UART** и **TIM** в свои IRQ обработчики после HAL-обработчиков: ```c #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); } ``` 2. Настройте `modbus_config.h`: ```c // 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 ``` 3. Для инициализации Modbus добавьте: ```c #include "rs_message.h" MODBUS_FirstInit(); ``` 4. Настройка регистров и коилов Все данные объединены в общую структуру устройства `MB_DataStructureTypeDef`, которая содержит: - Входные регистры (`InRegs`) - 16-битные регистры только для чтения - Коилы (`Coils`) - 1-битовые коилы для чтения/записи - Регистры хранения (`HoldRegs`) - 16-битные регистры для чтения/записи Пример настройки `Input Registers`: ```c 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` (в коилах только желательно использовать битовые поля) 5. Для запуска Modbus вызовите: ```c RS_Receive_IT(&hmodbus1, &MODBUS_MSG); ```