-
released this
2026-07-08 15:37:01 +03:00 | 0 commits to CAN_Protocol since this releaseОписание релиза
В данном релизе реализованы две ключевые новинки, значительно повышающие удобство и гибкость работы с CAN-сообщениями:
1. Реализована функция отправки сообщений по CAN
Обновлена функция PROTOCAN_SEND, которая позволяет отправлять сообщения различных типов, оптимизируя процесс формирования и передачи данных.
PROTOCAN_StatusTypeDef PROTOCAN_SEND(ProtoCanId_t id, ProtoCanData_t data);Аргументы:
- id — структура типа ProtoCanId_t, должна быть предварительно заполнена пользователем. В обязательном порядке необходимо задать:
MsgType — тип сообщения из ProtoCanMsgType.
Route — обязательно установить в PROTOCAN_ROUTE_FROM_DEVICE.
DeviceType и DeviceID — заполнить согласно текущим определениям CURRENT_TYPE_DEVICE и CURRENT_ID_DEVICE.- data — структура типа ProtoCanData_t, должна содержать актуальные данные в зависимости от типа сообщения.
Структура ProtoCanId_t:
Имеет поля: MsgBody, MsgType, DeviceID, DeviceType, Route, Priority.
Используется для формирования идентификатора сообщения.Структура ProtoCanData_t:
В зависимости от MsgType, заполняется одна из вложенных структур:
CoreData — для типов BROADCAST, DISCRETE, ANALOG.
GeneralAddressSpaceData — для типа GENERAL_ADDRESS_SPACE.
ModbusData — для типов Modbus (COIL, DISCRETE, HOLDING, INPUT).
ErrorData — для типа ERROR.2. Расширены возможности приёма CAN сообщений
Добавлены три варианта приёма сообщений:
- void PROTOCAN_LoopProcessRxMsgs(void); — бесконечный цикл обработки входящих сообщений. Позволяет непрерывно получать и обрабатывать сообщения, вызывая внутренние функции обработки по типу.
- PROTOCAN_StatusTypeDef PROTOCAN_ProcessAllRxMsgs(void); — обработка всех доступных сообщений за один вызов. Подходит для обработки очереди сообщений, пока есть новые.
- PROTOCAN_StatusTypeDef PROTOCAN_ProcessSingleRxMsg(void); — обработка одного доступного сообщения. Удобна в ситуациях, когда необходимо поэлементное или пошаговое получение данных.
Downloads
-
released this
2026-06-01 15:20:58 +03:00 | 5 commits to CAN_Protocol since this releaseОписание релиза
В рамках этого релиза добавлена возможность отправки сообщений по протоколу с помощью функции:
PROTOCAN_StatusTypeDef PROTOCAN_SEND(ProtoCanId_t id, ProtoCanData_t data);Основные изменения
Отправка по ProtoCan
Добавлена функция PROTOCAN_SEND, которая позволяет отправлять сообщения по протоколу ProtoCan. Пока что поддерживается только сообщения с типом:
PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACEProtoCanId_t
Для подготовки сообщения необходимо заполнить структуру ProtoCanId_t, указав:
- MsgType — значение PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE
- Route — должно быть PROTOCAN_ROUTE_FROM_DEVICE
- DeviceType и DeviceID — заполнить согласно текущим определениям
CURRENT_TYPE_DEVICEиCURRENT_ID_DEVICE. - Остальные поля идентификатора заполняются по необходимости.
ProtoCanData_t
Передача данных осуществляется через структуру ProtoCanData_t, которая содержит вложенные структуры с полями, необходимыми для отправки сообщений конкретных типов.
ЗаPROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACEотвечает структураGeneralAddressSpaceDataс следующими полями:- uint16_t RegStartAdr — Начальный адрес регистров.
- uint16_t *Data — Указатель на массив данных.
- unsigned RegCount — Количество регистров.
Массив Data может содержать любое количество регистров, а функция сама сформирует пакеты, необходимые для передачи.
Downloads
-
released this
2026-05-29 13:48:42 +03:00 | 7 commits to CAN_Protocol since this releaseОписание релиза
Это предварительный релиз библиотеки для работы по новому протоколу CAN.
Протокол.Основной функционал
- Инициализация библиотеки и периферийных устройств
- Обработка сообщений по CAN в бесконечном цикле
- Возможность переопределения обработчиков для различных типов сообщений
Использование
Инициализация
После инициализации периферии и запуска CAN необходимо вызвать функцию инициализации.
Функция:
PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_HandleTypeDef *tmp_hrtc, TIM_HandleTypeDef *tmp_tim)Параметры:
- tmp_hcan — указатель на используемый hcan.
- tmp_hrtc — указатель на используемый hrtc.
- tmp_tim — указатель на используемый htim (Допустим NULL, если в проекте не используются Tim Register Callback)
Приём сообщений по CAN при использовании Can Register Callback происходит в функции ProtoCanRxFifo0MsgPendingCallback. Если Can Register Callback не используется, то необходимо самостоятельно вызывать функцию в стандартном Callback приёма сообщения.
Указанный таймер используется для отслеживания времени перед передачей пульса устройства по CAN. В случае, если пользователь не использует Tim Register Callback, то для отправки пульса необходимо самостоятельно вызывать функцию ProtoCanPulseCallback в HAL_TIM_PeriodElapsedCallback любого, выбранного пользователем для пульсации, таймера.
При использовании Register Callback рекомендуется проверить в отладке корректность инициализации.
Запуск основного цикла обработки
Чтобы начать обработку входящих сообщений, вызовите:
PROTOCAN_LOOP();
Это — бесконечный цикл, в рамках которого обрабатываются входящие сообщения по CAN.Обработка сообщений
Внутри цикла вызываются __weak функции, которые можно переопределять для обработки различных типов сообщений:
Функция Назначение ProtoCanMsgToBroadcastStatus Обработка запроса статуса по широковещательной рассылке ProtoCanMsgToBroadcastOnOff Включение/выключение пульса ProtoCanMsgToBroadcastRestart Перезапуск системы ProtoCanMsgToBroadcastRtcSetup Настройка RTC через CAN ProtoCanMsgToDiscreteAccident Обработка запроса аварийных сообщений ProtoCanMsgToDiscreteWarning Обработка запроса предупреждающих сообщений ProtoCanMsgToDiscreteControlSignals Обработка запроса управляющих сигналов ProtoCanMsgToDiscreteFlags Обработка запроса флагов ProtoCanMsgToDiscreteReset Обработка запроса перезапуска устройства ProtoCanMsgToDiscreteChangeMode Обработка запроса изменение режима работы ProtoCanMsgToDiscreteRequestListOfParameters Обработка запроса параметров системы ProtoCanMsgToAnalogUniversal Обработка универсального запроса ProtoCanMsgToAnalogUSTAVKI Обработка запроса уставок ProtoCanMsgToAnalogUSens Обработка запроса данных датчиков напряжения ProtoCanMsgToAnalogISens Обработка запроса данных датчиков тока ProtoCanMsgToAnalogTSens Обработка запроса данных датчиков температуры ProtoCanMsgToModbusCoil Обработка Modbus Coil ProtoCanMsgToModbusDiscrete Обработка Modbus Discrete ProtoCanMsgToModbusHolding Обработка Modbus Holding ProtoCanMsgToModbusInput Обработка Modbus Input Downloads
-
released this
2026-03-31 12:40:54 +03:00 | 9 commits to CAN_Protocol since this releaseОписание релиза
Это предварительный релиз библиотеки для работы по новому протоколу CAN.
Протокол.Основной функционал
- Инициализация библиотеки и периферийных устройств
- Обработка сообщений по CAN в бесконечном цикле
- Возможность переопределения обработчиков для различных типов сообщений
Использование
Инициализация
После инициализации периферии и запуска CAN необходимо вызвать функцию инициализации.
Функция:
PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_HandleTypeDef *tmp_hrtc, TIM_HandleTypeDef *tmp_tim)Параметры:
- tmp_hcan — указатель на используемый hcan.
- tmp_hrtc — указатель на используемый hrtc.
- tmp_tim — указатель на используемый htim (Допустим NULL, если в проекте не используются Tim Register Callback)
Приём сообщений по CAN при использовании Can Register Callback происходит в функции ProtoCanRxFifo0MsgPendingCallback. Если Can Register Callback не используется, то необходимо самостоятельно вызывать функцию в стандартном Callback приёма сообщения.
Указанный таймер используется для отслеживания времени перед передачей пульса устройства по CAN. В случае, если пользователь не использует Tim Register Callback, то для отправки пульса необходимо самостоятельно вызывать функцию ProtoCanPulseCallback в HAL_TIM_PeriodElapsedCallback любого, выбранного пользователем для пульсации, таймера.
Запуск основного цикла обработки
Чтобы начать обработку входящих сообщений, вызовите:
PROTOCAN_LOOP();
Это — бесконечный цикл, в рамках которого обрабатываются входящие сообщения по CAN.Обработка сообщений
Внутри цикла вызываются __weak функции, которые можно переопределять для обработки различных типов сообщений:
Функция Назначение ProtoCanMsgToBroadcastStatus Обработка запроса статуса по широковещательной рассылке ProtoCanMsgToBroadcastOnOff Включение/выключение пульса ProtoCanMsgToBroadcastRestart Перезапуск системы ProtoCanMsgToBroadcastRtcSetup Настройка RTC через CAN ProtoCanMsgToDiscreteAccident Обработка запроса аварийных сообщений ProtoCanMsgToDiscreteWarning Обработка запроса предупреждающих сообщений ProtoCanMsgToDiscreteControlSignals Обработка запроса управляющих сигналов ProtoCanMsgToDiscreteFlags Обработка запроса флагов ProtoCanMsgToDiscreteReset Обработка запроса перезапуска устройства ProtoCanMsgToDiscreteChangeMode Обработка запроса изменение режима работы ProtoCanMsgToDiscreteRequestListOfParameters Обработка запроса параметров системы ProtoCanMsgToAnalogUniversal Обработка универсального запроса ProtoCanMsgToAnalogUSTAVKI Обработка запроса уставок ProtoCanMsgToAnalogUSens Обработка запроса данных датчиков напряжения ProtoCanMsgToAnalogISens Обработка запроса данных датчиков тока ProtoCanMsgToAnalogTSens Обработка запроса данных датчиков температуры ProtoCanMsgToModbusCoil Обработка Modbus Coil ProtoCanMsgToModbusDiscrete Обработка Modbus Discrete ProtoCanMsgToModbusHolding Обработка Modbus Holding ProtoCanMsgToModbusInput Обработка Modbus Input Downloads