Библиотека модбас для STM32
Go to file
2025-05-28 13:41:03 +03:00
Modbus +gitignore 2025-05-28 13:36:39 +03:00
STM32F103_Example +gitignore 2025-05-28 13:36:39 +03:00
.gitignore +gitignore 2025-05-28 13:36:39 +03:00
README.md +readme 2025-05-28 13:41:03 +03:00

Modbus: подключение и использование

Это вариант голого (bare) modbus, где вся инициализация скинута на CubeMX

Настройка

  1. Подключите обработчики прерываний 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);
    }
    
  2. Настройте 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
    
  3. Для инициализации Modbus добавьте:

    #include "rs_message.h"
    
    MODBUS_FirstInit();
    
  4. Настройка регистров и коилов

    В этом проекте структура данных 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 (в коилах только битовые поля)

  5. Для запуска Modbus вызовите:

    RS_Receive_IT(&hmodbus1, &MODBUS_MSG);