0.2.2 doxygen update
This commit is contained in:
38
Src/modbus.c
38
Src/modbus.c
@@ -9,16 +9,16 @@
|
||||
@section Функции и макросы
|
||||
|
||||
### Инициализация:
|
||||
- MODBUS_FirstInit() — Инициализация модуля Modbus.
|
||||
- MODBUS_Config() — Инициализация модуля Modbus.
|
||||
- MODBUS_FirstInit() — Инициализация Modbus (подключение UART, TIM)
|
||||
- MODBUS_Config() — Конфигурацмя Modbus (ID, Timeout).
|
||||
- MODBUS_SlaveStart() — Запуск Modbus как Slave.
|
||||
|
||||
### Функции для Modbus
|
||||
- MB_Slave_Response()
|
||||
- MB_Slave_Collect_Message()
|
||||
- MB_Slave_Parse_Message()
|
||||
- MB_Master_Collect_Message()
|
||||
- MB_Master_Parse_Message()
|
||||
- MB_Slave_Response() — Ответ на запрос
|
||||
- MB_Slave_Collect_Message() — Сбор сообщения в режиме слейва.
|
||||
- MB_Slave_Parse_Message() — Парс сообщения в режиме слейва.
|
||||
- MB_Master_Collect_Message() — Сбор сообщения в режиме мастера
|
||||
- MB_Master_Parse_Message() — Парс сообщения в режиме мастера
|
||||
|
||||
### Функции для работы с RS (UART):
|
||||
- RS_Parse_Message() / RS_Collect_Message() — Парсинг и сборка сообщения.
|
||||
@@ -50,7 +50,6 @@ HAL_StatusTypeDef MODBUS_FirstInit(RS_HandleTypeDef *hmodbus, UART_HandleTypeDef
|
||||
return HAL_ERROR;
|
||||
}
|
||||
MB_DeviceInentificationInit();
|
||||
MB_DiagnosticsInit();
|
||||
//-----------SETUP MODBUS-------------
|
||||
// set up modbus: MB_RX_Size_NotConst and Timeout enable
|
||||
hmodbus->ID = MODBUS_DEVICE_ID;
|
||||
@@ -116,6 +115,9 @@ HAL_StatusTypeDef MODBUS_SlaveStart(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *mo
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
MB_DiagnosticsInit();
|
||||
|
||||
if(modbus_msg)
|
||||
hmodbus->RS_STATUS = RS_Receive_IT(hmodbus, modbus_msg);
|
||||
else
|
||||
@@ -228,7 +230,6 @@ static RS_StatusTypeDef MB_Slave_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeD
|
||||
/* unknown func code */
|
||||
default:
|
||||
modbus_msg->Except_Code = 0x01; /* set exception code: illegal function */
|
||||
MB_Diagnostics_SlaveNAKCnt();
|
||||
}
|
||||
|
||||
|
||||
@@ -245,7 +246,7 @@ static RS_StatusTypeDef MB_Slave_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeD
|
||||
{
|
||||
MB_Diagnostics_ExceptionErrorCnt();
|
||||
TrackerCnt_Warn(hmodbus->rs_err);
|
||||
modbus_msg->Func_Code |= ERR_VALUES_START;
|
||||
modbus_msg->Func_Code |= ERR_VALUES_START;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -488,9 +489,9 @@ static RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_Msg
|
||||
}
|
||||
|
||||
if((hmodbus->pMessagePtr->Func_Code == 0x0F) || (hmodbus->pMessagePtr->Func_Code == 0x10))
|
||||
hmodbus->pMessagePtr->ByteCnt = modbus_uart_buff[ind++];
|
||||
else
|
||||
hmodbus->pMessagePtr->ByteCnt = 0;
|
||||
hmodbus->pMessagePtr->ByteCnt = modbus_uart_buff[ind++];
|
||||
else
|
||||
hmodbus->pMessagePtr->ByteCnt = 0;
|
||||
|
||||
expected_size = MB_Define_Size_of_Function(hmodbus, modbus_msg);
|
||||
// если размер меньше ожидаемого - продолжаем принимать
|
||||
@@ -544,16 +545,7 @@ static RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_Msg
|
||||
MB_Diagnostics_CommunicationErrorCnt();
|
||||
TrackerCnt_Err(hmodbus->rs_err);
|
||||
modbus_msg->Func_Code |= ERR_VALUES_START;
|
||||
}
|
||||
// hmodbus->MB_RESPONSE = MB_CRC_ERR; // set func code - error about wrong crc
|
||||
|
||||
// check is buffer empty
|
||||
check_empty_buff = 0;
|
||||
for(int i=0; i<ind;i++)
|
||||
check_empty_buff += modbus_uart_buff[i];
|
||||
// if(check_empty_buff == 0)
|
||||
// hmodbus->MB_RESPONSE = MB_EMPTY_MSG; //
|
||||
|
||||
}
|
||||
|
||||
return RS_OK;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#ifdef MODBUS_ENABLE_COILS
|
||||
|
||||
/**
|
||||
* @brief Set or Reset Coil at its global address.
|
||||
* @brief Выставить/сбросить коил по глобальному адресу.
|
||||
* @param Addr Адрес коила.
|
||||
* @param WriteVal Что записать в коил: 0 или 1.
|
||||
* @return ExceptionCode Код исключения если коила по адресу не существует, и NO_ERRORS если все ок.
|
||||
@@ -55,7 +55,7 @@ MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteV
|
||||
|
||||
|
||||
/**
|
||||
* @brief Read Coil at its global address.
|
||||
* @brief Считать коил по глобальному адресу.
|
||||
* @param Addr Адрес коила.
|
||||
* @param Exception Указатель на переменную для кода исключения, в случа неудачи при чтении.
|
||||
* @return uint16_t Возвращает весь регистр с маской на запрошенном коиле.
|
||||
@@ -86,8 +86,8 @@ uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Proccess command Read Coils (01 - 0x01).
|
||||
/**
|
||||
* @brief Обработать функцию Read Coils (01 - 0x01).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Read Coils.
|
||||
@@ -140,7 +140,7 @@ uint8_t MB_Proccess_Read_Coils(RS_MsgTypeDef *modbus_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Proccess command Write Single Coils (05 - 0x05).
|
||||
* @brief Обработать функцию Write Single Coils (05 - 0x05).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Write Single Coils.
|
||||
@@ -171,7 +171,7 @@ uint8_t MB_Proccess_Write_Single_Coil(RS_MsgTypeDef *modbus_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Proccess command Write Multiple Coils (15 - 0x0F).
|
||||
* @brief Обработать функцию Write Multiple Coils (15 - 0x0F).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Write Multiple Coils.
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATORS
|
||||
|
||||
MB_DeviceIdentificationTypeDef MB_DEVID; ///< Device Identificatino=
|
||||
MB_DeviceIdentificationTypeDef MB_DEVID; ///< Глобальная структура идентификаторов устройства
|
||||
|
||||
|
||||
/**
|
||||
* @brief Write Object of Device Identification to MessageData
|
||||
* @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
|
||||
* @return obj Объект для записи.
|
||||
*/
|
||||
* @brief Записать Один Объект Идентификатора в массив данных
|
||||
* @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
|
||||
* @return obj Объект для записи.
|
||||
*/
|
||||
void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj)
|
||||
{
|
||||
mbdata[(*ind)++] = obj->length;
|
||||
@@ -37,10 +37,10 @@ void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectT
|
||||
|
||||
|
||||
/**
|
||||
* @brief Write Object of Device Identification to MessageData
|
||||
* @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
|
||||
* @return obj Объект для записи.
|
||||
*/
|
||||
* @brief Записать Массив Объектов Идентификатора в массив данных
|
||||
* @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
|
||||
* @return obj Объект для записи.
|
||||
*/
|
||||
void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj)
|
||||
{
|
||||
MB_DeviceObjectTypeDef *obj = (MB_DeviceObjectTypeDef *)&MB_DEVID;
|
||||
@@ -88,7 +88,7 @@ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj)
|
||||
|
||||
|
||||
/**
|
||||
* @brief Proccess command Read Device Identification (43/14 - 0x2B/0E).
|
||||
* @brief Обработать функцию Read Device Identification (43/14 - 0x2B/0E).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Write Single Register.
|
||||
@@ -144,8 +144,9 @@ uint8_t MB_Proccess_Read_Device_Identification(RS_MsgTypeDef *modbus_msg)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Инициализация идентификаторов.
|
||||
*/
|
||||
void MB_DeviceInentificationInit(void)
|
||||
{
|
||||
MB_ObjectInit(&MB_DEVID.VendorName, MODBUS_VENDOR_NAME);
|
||||
|
||||
@@ -13,17 +13,16 @@
|
||||
#include "modbus_diag.h"
|
||||
|
||||
#ifdef MODBUS_ENABLE_DIAGNOSTICS
|
||||
// Глобальная структура диагностики
|
||||
MB_DiagnosticsInfoTypeDef MB_DIAG = {0};
|
||||
|
||||
MB_DiagnosticsInfoTypeDef MB_DIAG = {0}; ///< Глобальная структура диагностики
|
||||
|
||||
/**
|
||||
* @brief Инициализация диагностических счетчиков
|
||||
* @brief Инициализация диагностических счетчиков
|
||||
*/
|
||||
void MB_DiagnosticsInit(void)
|
||||
{
|
||||
MB_DIAG.DiagnosticRegister = 0;
|
||||
MB_DIAG.DeviceMode = MODBUS_NORMAL_MODE;
|
||||
MB_DIAG.AsciiDelimiter = '\n'; // LF по умолчанию
|
||||
|
||||
// Инициализация счетчиков
|
||||
MB_DIAG.Counters.BusMessage = 0;
|
||||
@@ -68,7 +67,7 @@ int MB_Diagnostics_GetBit(int bit_num)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Обработка команды диагностики (0x08)
|
||||
* @brief Обработать функцию Diagnostics (Serial Line only) (0x08)
|
||||
* @param modbus_msg Указатель на структуру сообщения modbus
|
||||
* @return fMessageHandled Статус обработки команды
|
||||
*/
|
||||
@@ -218,7 +217,7 @@ void MB_Diagnostics_BusMessageCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик ошибок связи
|
||||
* @brief Увеличивает счетчик ошибок связи
|
||||
*/
|
||||
void MB_Diagnostics_CommunicationErrorCnt(void)
|
||||
{
|
||||
@@ -227,7 +226,7 @@ void MB_Diagnostics_CommunicationErrorCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик исключений
|
||||
* @brief Увеличивает счетчик исключений
|
||||
*/
|
||||
void MB_Diagnostics_ExceptionErrorCnt(void)
|
||||
{
|
||||
@@ -236,7 +235,7 @@ void MB_Diagnostics_ExceptionErrorCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик переполнения символов
|
||||
* @brief Увеличивает счетчик переполнения символов
|
||||
*/
|
||||
void MB_Diagnostics_CharacterOverrunCnt(void)
|
||||
{
|
||||
@@ -249,7 +248,7 @@ void MB_Diagnostics_CharacterOverrunCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик отсутствия ответов
|
||||
* @brief Увеличивает счетчик отсутствия ответов
|
||||
*/
|
||||
void MB_Diagnostics_SlaveMessageCnt(void)
|
||||
{
|
||||
@@ -258,7 +257,7 @@ void MB_Diagnostics_SlaveMessageCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик отсутствия ответов
|
||||
* @brief Увеличивает счетчик отсутствия ответов
|
||||
*/
|
||||
void MB_Diagnostics_SlaveNoResponseCnt(void)
|
||||
{
|
||||
@@ -267,7 +266,7 @@ void MB_Diagnostics_SlaveNoResponseCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик NAK ответов
|
||||
* @brief Увеличивает счетчик NAK ответов
|
||||
*/
|
||||
void MB_Diagnostics_SlaveNAKCnt(void)
|
||||
{
|
||||
@@ -276,7 +275,7 @@ void MB_Diagnostics_SlaveNAKCnt(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Увеличивает счетчик занятости устройства
|
||||
* @brief Увеличивает счетчик занятости устройства
|
||||
*/
|
||||
void MB_Diagnostics_SlaveBusyCnt(void)
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* @brief Proccess command Read Holding Registers (03 - 0x03).
|
||||
* @brief Обработать функцию Read Holding Registers (03 - 0x03).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Read Holding Registers.
|
||||
@@ -53,7 +53,7 @@ uint8_t MB_Proccess_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Proccess command Write Single Register (06 - 0x06).
|
||||
* @brief Обработать функцию Write Single Register (06 - 0x06).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Write Single Register.
|
||||
@@ -72,7 +72,7 @@ uint8_t MB_Proccess_Write_Single_Reg(RS_MsgTypeDef *modbus_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Proccess command Write Multiple Registers (16 - 0x10).
|
||||
* @brief Обработать функцию Write Multiple Registers (16 - 0x10).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Write Multiple Registers.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#ifdef MODBUS_ENABLE_INPUTS
|
||||
|
||||
/**
|
||||
* @brief Proccess command Read Input Registers (04 - 0x04).
|
||||
* @brief Обработать функцию Read Input Registers (04 - 0x04).
|
||||
* @param modbus_msg Указатель на структуру собщения modbus.
|
||||
* @return fMessageHandled Статус о результате обработки комманды.
|
||||
* @details Обработка команды Read Input Registers.
|
||||
|
||||
@@ -35,7 +35,7 @@ extern void RS_TIM_DeInit(TIM_HandleTypeDef *htim);
|
||||
//-------------------------------------------------------------------
|
||||
//-------------------------GENERAL FUNCTIONS-------------------------
|
||||
/**
|
||||
* @brief Start receive IT.
|
||||
* @brief Начать прием по прерываниям.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @return RS_RES Статус о состоянии RS после инициализации приема.
|
||||
@@ -61,7 +61,7 @@ RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
|
||||
|
||||
// start receiving
|
||||
__HAL_UART_ENABLE_IT(hRS->huart, UART_IT_IDLE);
|
||||
uart_res = HAL_UART_Receive_IT(hRS->huart, &hRS->pBufferPtr[hRS->RS_Message_Size], MSG_SIZE_MAX); // receive until ByteCnt+1 byte,
|
||||
uart_res = HAL_UART_Receive_IT(hRS->huart, &hRS->pBufferPtr[hRS->RS_Message_Size], MSG_SIZE_MAX); // receive until ByteCnt+1 byte,
|
||||
// then in Callback restart receive for rest bytes
|
||||
|
||||
// if receive isnt started - abort RS
|
||||
@@ -83,7 +83,7 @@ RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start transmit IT.
|
||||
* @brief Начать передачу по прерываниям.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @return RS_RES Статус о состоянии RS после инициализации передачи.
|
||||
@@ -112,7 +112,6 @@ RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
|
||||
|
||||
//----------INITIALIZE TRANSMIT-------------
|
||||
RS_EnableTransmit();
|
||||
// for(int i = 0; i < hRS->sRS_Timeout; i++);
|
||||
|
||||
RS_Set_Busy(hRS); // set RS busy
|
||||
RS_Set_TX_Flags(hRS); // initialize flags for transmit IT
|
||||
@@ -146,7 +145,7 @@ RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initialize UART and handle RS stucture.
|
||||
* @brief Инициалазация структуры @ref RS_HandleTypeDef.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param suart Указатель на структуру с настройками UART.
|
||||
* @param stim Указатель на структуру с настройками таймера.
|
||||
@@ -183,7 +182,7 @@ RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_H
|
||||
|
||||
|
||||
/**
|
||||
* @brief Abort RS/UART.
|
||||
* @brief Отменить прием/передачу RS/UART.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param AbortMode Выбор, что надо отменить.
|
||||
- ABORT_TX: Отмена передачи по ЮАРТ, с очищением флагов TX,
|
||||
@@ -238,7 +237,7 @@ RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)
|
||||
//-------------------------------------------------------------------
|
||||
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
|
||||
/**
|
||||
* @brief Handle for starting receive.
|
||||
* @brief Обработчик для начала приема.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @return RS_RES Статус о состоянии RS после инициализации приема или окончания общения.
|
||||
@@ -264,7 +263,7 @@ RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *R
|
||||
return RS_RES;
|
||||
}
|
||||
/**
|
||||
* @brief Handle for starting transmit.
|
||||
* @brief Обработчик для начала передачи.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @return RS_RES Статус о состоянии RS после инициализации передачи.
|
||||
@@ -295,7 +294,7 @@ RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART TX Callback: define behaviour after transmiting message.
|
||||
* @brief UART TX Callback: коллбек после окончания передачи.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @return RS_RES Статус о состоянии RS после обработки приема.
|
||||
* @note Определяет поведение RS после передачи сообщения.
|
||||
@@ -307,24 +306,18 @@ RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS)
|
||||
|
||||
//--------------ENDING TRANSMITTING-------------
|
||||
RS_Set_TX_End(hRS);
|
||||
RS_EnableReceive();
|
||||
// for(int i = 0; i < hRS->sRS_Timeout; i++);
|
||||
|
||||
//-----------START RECEIVING or END RS----------
|
||||
RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
|
||||
|
||||
// if(RS_RES != RS_OK)
|
||||
// {
|
||||
// __NOP();
|
||||
// }
|
||||
return RS_RES;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handler for UART.
|
||||
* @brief Обработчик прерывания UART.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @note Обрабатывает ошибки если есть и вызывает RS Коллбеки.
|
||||
* Добавить вызов этой функции в UARTx_IRQHandler() после HAL_UART_IRQHandler().
|
||||
* Добавить вызов этой функции в UARTx_IRQHandler() ВМЕСТО HAL_UART_IRQHandler().
|
||||
*/
|
||||
void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
{
|
||||
@@ -332,7 +325,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//-------------CHECK IDLE FLAG FIRST-------------
|
||||
//-------------CHECK IDLE FLAG FIRST-------------
|
||||
/* Проверяем флаг IDLE в первую очередь - это гарантирует обработку только после idle */
|
||||
if(__HAL_UART_GET_FLAG(hRS->huart, UART_FLAG_IDLE) && __HAL_UART_GET_IT_SOURCE(hRS->huart, UART_IT_IDLE))
|
||||
{
|
||||
@@ -365,7 +358,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
if(hRS->htim)
|
||||
{
|
||||
// Останавливаем таймаут
|
||||
if(hRS->sRS_Timeout)
|
||||
if(hRS->sRS_Timeout)
|
||||
HAL_TIM_Base_Stop_IT(hRS->htim);
|
||||
}
|
||||
hRS->lastPacketTick = uwTick;
|
||||
@@ -431,10 +424,10 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
|
||||
|
||||
/**
|
||||
* @brief Handler for TIM.
|
||||
* @brief Обработчик прерывания TIM.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @note Попадание сюда = таймаут и перезапуск RS приема
|
||||
* Добавить вызов этой функции в TIMx_IRQHandler() после HAL_TIM_IRQHandler().
|
||||
* Добавить вызов этой функции в TIMx_IRQHandler() ВМЕСТО HAL_TIM_IRQHandler().
|
||||
*/
|
||||
void RS_TIM_Handler(RS_HandleTypeDef *hRS)
|
||||
{
|
||||
@@ -444,10 +437,10 @@ void RS_TIM_Handler(RS_HandleTypeDef *hRS)
|
||||
}
|
||||
HAL_TIM_IRQHandler(hRS->htim);
|
||||
|
||||
RS_Abort(hRS, ABORT_RS);
|
||||
RS_Abort(hRS, ABORT_RS);
|
||||
|
||||
if(hRS->pMessagePtr->MbAddr == hRS->ID) // ошибка если таймаут по нашему сообщению
|
||||
TrackerCnt_Err(hRS->rs_err);
|
||||
if(hRS->pMessagePtr->MbAddr == hRS->ID) // ошибка если таймаут по нашему сообщению
|
||||
TrackerCnt_Err(hRS->rs_err);
|
||||
|
||||
RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
|
||||
}
|
||||
@@ -472,7 +465,7 @@ __weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Собрать сообщение в буфер UART.
|
||||
* @brief Пользовательская функция для сбора сообщения в буфер UART.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @param msg_uart_buff Указатель на буффер UART.
|
||||
@@ -486,7 +479,7 @@ __weak RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Разпарсить сообщение из буфера UART.
|
||||
* @brief Пользовательская функция для парса сообщения из буфера UART.
|
||||
* @param hRS Указатель на хендлер RS.
|
||||
* @param RS_msg Указатель на структуру сообщения.
|
||||
* @param msg_uart_buff Указатель на буффер UART.
|
||||
|
||||
Reference in New Issue
Block a user