30extern void RS_UART_Init(
void);
31extern void RS_UART_DeInit(UART_HandleTypeDef *huart);
32extern void RS_TIM_Init(
void);
33extern void RS_TIM_DeInit(TIM_HandleTypeDef *htim);
46 HAL_StatusTypeDef uart_res = 0;
50 if( RS_Is_RX_Busy(hRS) )
63 __HAL_UART_ENABLE_IT(hRS->
huart, UART_IT_IDLE);
68 if(uart_res != HAL_OK)
94 HAL_StatusTypeDef uart_res = 0;
98 if( RS_Is_TX_Busy(hRS) )
117 RS_Set_TX_Flags(hRS);
128 if(uart_res != HAL_OK)
195 HAL_StatusTypeDef uart_res = 0;
203 uart_res = HAL_UART_AbortReceive(hRS->
huart);
204 RS_Reset_RX_Flags(hRS);
209 uart_res = HAL_UART_AbortTransmit(hRS->
huart);
210 RS_Reset_TX_Flags(hRS);
215 uart_res = HAL_UART_Abort(hRS->
huart);
252 RS_Set_Free(hRS); RS_RES = RS_OK;
break;
303 HAL_StatusTypeDef uart_res = 0;
322 if(hRS->
huart == NULL)
329 if(__HAL_UART_GET_FLAG(hRS->
huart, UART_FLAG_IDLE) && __HAL_UART_GET_IT_SOURCE(hRS->
huart, UART_IT_IDLE))
331 __HAL_UART_CLEAR_IDLEFLAG(hRS->
huart);
333 HAL_UART_IRQHandler(hRS->
huart);
346 HAL_UART_AbortReceive(hRS->
huart);
384 HAL_UART_IRQHandler(hRS->
huart);
390 if(hRS->
huart->ErrorCode == 0)
394 if((hRS->
huart->RxXferCount+1 == hRS->
huart->RxXferSize) && RS_Is_RX_Busy(hRS))
403 if ((hRS->
huart->TxXferCount == 0U) && RS_Is_TX_Busy(hRS) &&
404 hRS->
huart->gState != HAL_UART_STATE_BUSY_TX)
412 if (hRS->
huart->ErrorCode & HAL_UART_ERROR_ORE)
435 if(hRS->
htim == NULL)
441 HAL_TIM_IRQHandler(hRS->
htim);
475 hRS->
htim->Instance->CNT = 0;
479 HAL_TIM_Base_Start_IT(hRS->
htim);
480 RS_Set_RX_Active_Flags(hRS);
497 HAL_TIM_Base_Stop_IT(hRS->
htim);
498 hRS->
htim->Instance->CNT = 0;
499 __HAL_TIM_CLEAR_IT(hRS->
htim, TIM_IT_UPDATE);
513 hRS->
htim->Instance->CNT = 0;
void MB_Diagnostics_CharacterOverrunCnt(void)
Увеличивает счетчик переполнения символов
#define MSG_SIZE_MAX
Size of buffer: max size of whole message.
#define TrackerCnt_Ok(_cntstruct_)
Инкрементировать переменную - успешных событий
#define printf_rs(...)
Printf обычных событий RS/UART/TIM.
#define TrackerCnt_Err(_cntstruct_)
Инкрементировать переменную - ошибок
#define printf_rs_err(...)
Printf ошибок RS/UART/TIM.
#define RS_UART_Handler_ENTER()
Действия при заходе в прерывания UART.
#define RS_TIM_Handler_EXIT()
Действия при выходе из прерывания таймера
#define RS_TIM_Handler_ENTER()
Действия при заходе в прерывания таймера
#define RS_UART_Handler_EXIT()
Действия при выходе из прерывания UART.
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Начать прием по прерываниям.
__weak 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)
Обработчик для начала передачи.
__weak 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.
__weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
Пользовательская функция для ответа на запрос по UART.
#define RS_MASTER_MODE_START
Начало режимов мастера (до него - режим слейв)
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)
Обновление (сброс) таймаута приема.
#define RS_EnableReceive()
Функция изменения направления передачи на ПРИЕМ для RS-485.
#define RS_EnableTransmit()
Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485.
@ RS_MASTER_REQUEST
Мастер с ручным запросом
@ RS_SLAVE_ALWAYS_WAIT
Слейв в постоянном ожидании
@ ABORT_RS
Отменить любую работу UART в целом
@ ABORT_TX
Отменить передачу
Диагностика устройства Modbus.
Библиотека обмена сообщениями по RS-интерфейсу
unsigned RX_Continue
0 - Продолжить принимать, 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.
uint8_t MbAddr
Modbus Slave Address.