40#error Define MSG_SIZE_MAX (Maximum size of message). This is necessary to create buffer for UART.
48#define RS_Clear_Buff(_buff_) for(int i=0; i<MSG_SIZE_MAX;i++) _buff_[i] = NULL
51#define RS_Set_Free(_hRS_) _hRS_->f.RS_Busy = 0
52#define RS_Set_Busy(_hRS_) _hRS_->f.RS_Busy = 1
54#define RS_Set_RX_Flags(_hRS_) _hRS_->f.RX_Busy = 1; _hRS_->f.RX_Done = 0;
55#define RS_Set_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 1
58#define RS_Set_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 1; _hRS_->f.TX_Done = 0
60#define RS_Reset_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 0; _hRS_->f.RX_Continue = 0;
61#define RS_Reset_RX_Flags(_hRS_) RS_Reset_RX_Active_Flags(_hRS_); _hRS_->f.RX_Busy = 0; _hRS_->f.RX_Done = 0;
62#define RS_Reset_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 0; _hRS_->f.TX_Done = 0
64#define RS_Set_RX_End_Flag(_hRS_) _hRS_->f.RX_Done = 1;
65#define RS_Set_TX_End_Flag(_hRS_) _hRS_->f.TX_Done = 1
67#define RS_Set_RX_End(_hRS_) RS_Reset_RX_Flags(_hRS_); RS_Set_RX_End_Flag(_hRS_)
68#define RS_Set_TX_End(_hRS_) RS_Reset_TX_Flags(_hRS_); RS_Set_TX_End_Flag(_hRS_)
71#define RS_Clear_All(_hRS_) RS_Clear_Buff(_hRS_->pBufferPtr); RS_Reset_RX_Flags(_hRS_); RS_Reset_TX_Flags(_hRS_);
75#define RS_Is_RX_Busy(_hRS_) (_hRS_->f.RX_Busy == 1)
76#define RS_Is_TX_Busy(_hRS_) (_hRS_->f.TX_Busy == 1)
79#ifndef RS_USER_VARS_NUMB
80#define RS_USER_VARS_NUMB 0
84#define local_time() uwTick
96#ifndef RS_USER_VARS_NUMB
97#define RS_USER_VARS_NUMB 0
104#define TrackerTypeDef(num_user_vars) void *
106#define TrackerCnt_Ok(_cntstruct_)
108#define TrackerCnt_Err(_cntstruct_)
110#define TrackerCnt_Warn(_cntstruct_)
116#define printf_rs(...)
121#define printf_rs_err(...)
125#ifndef RS_TIM_Handler_ENTER
127#define RS_TIM_Handler_ENTER()
129#ifndef RS_TIM_Handler_EXIT
131#define RS_TIM_Handler_EXIT()
134#ifndef RS_UART_Handler_ENTER
136#define RS_UART_Handler_ENTER()
138#ifndef RS_UART_Handler_EXIT
140#define RS_UART_Handler_EXIT()
149#ifndef RS_EnableReceive
150#define RS_EnableReceive()
152#ifndef RS_EnableTransmit
153#define RS_EnableTransmit()
181#define RS_MASTER_MODE_START 0x3
#define RS_USER_VARS_NUMB
Количество переменных в TrackerTypeDef.
#define TrackerTypeDef(num_user_vars)
Тип структуры для счетчиков-переменных
RS_ModeTypeDef
Enums for RS Modes.
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Начать прием по прерываниям.
RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
Пользовательская функция для сбора сообщения в буфер UART.
RS_StatusTypeDef RS_Timeout_Stop(RS_HandleTypeDef *hRS)
Остановка таймаута приема.
RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)
Отменить прием/передачу RS/UART.
void RS_TIM_Handler(RS_HandleTypeDef *hRS)
Обработчик прерывания TIM.
RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Начать передачу по прерываниям.
RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Обработчик для начала передачи.
RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
Пользовательская функция для парса сообщения из буфера UART.
RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS)
UART TX Callback: коллбек после окончания передачи.
RS_StatusTypeDef
Enums for respond CMD about RS status.
RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Пользовательская функция для ответа на запрос по UART.
RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr)
Инициалазация структуры RS_HandleTypeDef.
void RS_UART_Handler(RS_HandleTypeDef *hRS)
Обработчик прерывания UART.
RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Обработчик для начала приема.
RS_AbortTypeDef
Enums for Abort modes.
RS_StatusTypeDef RS_Timeout_Start(RS_HandleTypeDef *hRS)
Запуск таймаута приема.
RS_StatusTypeDef RS_Timeout_Update(RS_HandleTypeDef *hRS)
Обновление (сброс) таймаута приема.
RS_HandleTypeDef hmodbus1
Default Handle for Modbus.
@ RS_MASTER_REQUEST
Мастер с ручным запросом
@ RS_SLAVE_ALWAYS_WAIT
Слейв в постоянном ожидании
@ ABORT_RS
Отменить любую работу UART в целом
@ ABORT_TX
Отменить передачу
@ ABORT_RX_TX
Отменить прием и передачу
Ядро Modbus протокола - определения и структуры
unsigned RX_Continue
0 - Продолжить принимать, 0 - Начать прием сначала
unsigned RX_Busy
1 - Режим приема активен, 0 - Прием не активен
unsigned RX_Done
1 - Прием закончен, 0 - Прием еще в процессе или не инициализирован
unsigned DataUpdated
1 - Данные были обновлены
unsigned EchoResponse
1 - Ответить эхом, 0 - Ответить своим сообщением
unsigned DeferredResponse
1 - Не начинать передачу в IT, 0 - Ответить в прерывании
unsigned TX_Done
1 - Передача закончена, 0 - Передача еще в процессе или не инициализирована
unsigned TX_Busy
1 - Режим передачи активен, 0 - Прием не активен
unsigned RS_Busy
1 - RS занят, 0 - RS свободен
unsigned MessageHandled
1 - Обработка запроса успешна, 0 - Обработка запроса в процессе или ошибка
unsigned RX_Ongoing
1 - Прием данных в активном состоянии, 0 - Ожидаем начало приема данных
Handle for RS communication.
uint8_t * pBufferPtr
Указатеь на буфер UART.
uint32_t lastPacketTick
Время последнего принятого пакета
int32_t RS_Message_Size
size of whole message, not only data
RS_MsgTypeDef * pMessagePtr
Указатель на структуру протокола
void(* pCallback)(void *, void *)
Указатель на коллбек: принят ответ в режиме мастер
RS_FlagsTypeDef f
Флаги для контроля приема/передачи
RS_ModeTypeDef sRS_Mode
Настройка: слейв/мастер RS_ModeTypeDef.
RS_StatusTypeDef RS_STATUS
Статус RS.
uint16_t sRS_Timeout
Настройка: Таймаут в тиках таймера
UART_HandleTypeDef * huart
Хендл UART.
TIM_HandleTypeDef * htim
Хендл TIM.
Structure for modbus messsage.