52de3f9c08393c2d2bc0d01f72b99c2073883d00
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(); -
Настройка регистров и коилов
Все данные объединены в общую структуру устройства
MB_DataStructureTypeDef, которая содержит:- Входные регистры (
InRegs) - 16-битные регистры только для чтения - Коилы (
Coils) - 1-битовые коилы для чтения/записи - Регистры хранения (
HoldRegs) - 16-битные регистры для чтения/записи
Пример настройки
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);
Description
Languages
C
100%