Compare commits

...

9 Commits

Author SHA1 Message Date
Razvalyaev
13ac8950fc исправлено неправильно считывание модбас настроек и окончательно добавлена микросекундняа задержки при прямом тесте диода 2025-02-25 10:14:57 +03:00
Coal56AB
b5f1bb72d7 Обновить README.md 2025-02-25 10:05:22 +03:00
Razvalyaev
38eb087efc - Обновлена таблица модбас
- дефайны и настройки нормально переименованы (A_POS, A_NEG, B_POS, B_NEG, TIME_FOR_FORWARD, TIME_FOR_REVERSE)
- Добавлена микросекундная задержка для прямого включения (прямое включение на заданное колво микросекунд)
- Кнопка переделана на подтягивание к нулю
2025-02-25 10:01:34 +03:00
Razvalyaev
a413b954a8 Доработан модбас:
- убран моментальный сброс коила StartTest
- убрана устаревшая замена команд ReadHoldRegs и ReadInRegs
2024-12-27 15:44:32 +03:00
Razvalyaev
d3c2b8a7b1 Добавлены линии EXTI для приема ответа. Пока при приеме просто тоглится третьи пины:
Выставляются ключи на одних пинах -> принимается ответ на вторых пинах (Response) -> тоглится третьи пины (Signal)
2024-12-27 09:06:16 +03:00
Razvalyaev
b47fe883ff Функции для работы с кнопками и диодами перенесены в модуль gpio_general 2024-12-25 09:41:14 +03:00
Razvalyaev
87849674ab просто удален мусор 2024-12-24 17:55:50 +03:00
Razvalyaev
a2bc323649 Сделана заготовка для Read Device Identification
И надо как-то переструктуризировать и оптимизировать модбас библиотеку
2024-12-24 16:38:42 +03:00
Razvalyaev
1830087d6e в мб дату добавлены дефолтные значения + minor fixes 2024-12-24 14:45:40 +03:00
25 changed files with 925 additions and 470 deletions

View File

@@ -8,10 +8,10 @@
Если включены оба, то будет тест скачка напряжения при переходе от прямого подлключения к обратному.
Можно переключать отдельные ключи по коилам №3-6:
- 3: `PhaseForwardHiTest` - включение и отключение ключа верхнего плеча фазы А (прямое включение)
- 4: `PhaseForwardLoTest` - включение и отключение ключа нижнего плеча фазы А (прямое включение)
- 5: `PhaseReverseHiTest` - включение и отключение ключа верхнего плеча фазы Б (обратное включение)
- 6: `PhaseReverseLoTest` - включение и отключение ключа нижнего плеча фазы Б (обратное включение)
- 3: `KeyForwardHiTest` - включение и отключение ключа верхнего плеча фазы А (прямое включение)
- 4: `KeyForwardLoTest` - включение и отключение ключа нижнего плеча фазы А (прямое включение)
- 5: `KeyReverseHiTest` - включение и отключение ключа верхнего плеча фазы Б (обратное включение)
- 6: `KeyReverseLoTest` - включение и отключение ключа нижнего плеча фазы Б (обратное включение)
Результаты измерений при разных включениях записываются в input регистры №0-1:
- 0: `ForwardVoltage` - измеренное напряжение при прямом включении
@@ -19,17 +19,18 @@
## Настройка таймингов
Тайминги выставляются в holding регистрах №0-4:
- 0: `TimeForForward` - время на которое диод включается в прямом направлении (только мс)
- 1: `TimeBeforeTest` - время которое выжидается перед началом тестирования (мс или мкс)
- 2: `TimeDeadtime` - время между переключениями фаз (мс или мкс)
- 3: `TimeBeforePeak` - время между включением АЦП и подключением обратного напряжения (мс или мкс)
- 4: `TimeBeforeDisconnect` - время на которое подключается обратное напряжение (мс или мкс)
- 0: `TimeForForward` - время на которое диод включается в прямом направлении (мс или мкс)
- 1: `TimeForReverse` - время на которое диод включается в обратном направлении (мс или мкс)
- 2: `TimeBeforeTest` - время которое выжидается перед началом тестирования (мс или мкс)
- 3: `TimeDeadtime` - время между переключениями фаз (мс или мкс)
- 4: `TimeBeforePeak` - время между включением АЦП и подключением обратного напряжения (мс или мкс)
В коилах №16-19, можно выставить флаги - включить миллисекундную задержку вместо микросекундной для соответствующего тайминга:
- 16: `msTimeBeforeTest_enable`
- 17: `msTimeDeadtime_enable`
- 18: `msTimeBeforePeak_enable`
- 19: `msTimeBeforeDisconnect_enable`
- 16: `msTimeForForward_enable`
- 17: `msTimeForReverse_enable`
- 18: `msTimeBeforeTest_enable`
- 19: `msTimeDeadtime_enable`
- 20: `msTimeBeforePeak_enable`
## Настройка АЦП
Настройки АЦП выставляются в holding регистрах №5-9:
@@ -47,7 +48,7 @@
## Тест в прямом подключении (`TESTER_TestDiode_Forward`)
- ожидается задержка, перед началом работы `ticks_before_test`
- включается АЦП в континуес режиме
- диод подключается в прямом направлении на заданное время `msticks_for_forward`.
- диод подключается в прямом направлении на заданное время `ticks_for_forward`.
- считывается АЦП и накапливаются заданное количество для расчета среднего. и так по кругу пока диод подключен
- после таймаута отключается напряжение и останавливается АЦП
@@ -57,19 +58,19 @@
- ожидается задержка, перед началом работы `ticks_before_test`
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком `ticks_before_peak`
- диод подключается в обратном направлении на заданное время `ticks_before_disconnect`, и отключается
- диод подключается в обратном направлении на заданное время `ticks_for_reverse`, и отключается
- после дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется скачок напряжение при обратном включении диода `htest->DiodeReversePeakVolt`.
## Тест перехода из прямого подключении в обратное (`TESTER_TestDiode_SwitchConnection`)
- ожидается задержка, перед началом работы `ticks_before_test`
- диод подключается в прямом направлении на заданное время `msticks_for_forward`
- диод подключается в прямом направлении на заданное время `ticks_for_forward`
- после истечения задержки сохраняется прямое напражение на диоде
- диод отключается от питания и выжидается мертвое время `ticks_deadtime`
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком `ticks_before_peak`
- диод подключается в обратном направлении на заданное время `ticks_before_disconnect`
- диод подключается в обратном направлении на заданное время `ticks_for_reverse`
- дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется напряжение прямого включения диода `htest->DiodeForwardVolt` и скачок при обратном `htest->DiodeReversePeakVolt`.

View File

@@ -57,6 +57,34 @@ void Error_Handler(void);
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
#define PhaseAHiResponse_Pin GPIO_PIN_3
#define PhaseAHiResponse_GPIO_Port GPIOA
#define PhaseAHiResponse_EXTI_IRQn EXTI3_IRQn
#define PhaseALoResponse_Pin GPIO_PIN_4
#define PhaseALoResponse_GPIO_Port GPIOA
#define PhaseALoResponse_EXTI_IRQn EXTI4_IRQn
#define PhaseBHiResponse_Pin GPIO_PIN_5
#define PhaseBHiResponse_GPIO_Port GPIOA
#define PhaseBHiResponse_EXTI_IRQn EXTI9_5_IRQn
#define PhaseBLoResponse_Pin GPIO_PIN_6
#define PhaseBLoResponse_GPIO_Port GPIOA
#define PhaseBLoResponse_EXTI_IRQn EXTI9_5_IRQn
#define PhaseAHi_Pin GPIO_PIN_0
#define PhaseAHi_GPIO_Port GPIOB
#define PhaseALo_Pin GPIO_PIN_1
#define PhaseALo_GPIO_Port GPIOB
#define PhaseBHi_Pin GPIO_PIN_10
#define PhaseBHi_GPIO_Port GPIOB
#define PhaseBLo_Pin GPIO_PIN_11
#define PhaseBLo_GPIO_Port GPIOB
#define PhaseAHiSignal_Pin GPIO_PIN_12
#define PhaseAHiSignal_GPIO_Port GPIOB
#define PhaseALoSignal_Pin GPIO_PIN_13
#define PhaseALoSignal_GPIO_Port GPIOB
#define PhaseBHiSignal_Pin GPIO_PIN_14
#define PhaseBHiSignal_GPIO_Port GPIOB
#define PhaseBLoSignal_Pin GPIO_PIN_15
#define PhaseBLoSignal_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */

View File

@@ -55,7 +55,10 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void EXTI3_IRQHandler(void);
void EXTI4_IRQHandler(void);
void DMA1_Channel1_IRQHandler(void);
void EXTI9_5_IRQHandler(void);
void TIM2_IRQHandler(void);
void TIM3_IRQHandler(void);
void USART1_IRQHandler(void);

View File

@@ -18,6 +18,14 @@
@{
*/
#define MODBUS_VENDOR_NAME "NIO-12"
#define MODBUS_PRODUCT_CODE "12345"
#define MODBUS_REVISION "Ver. 1.0"
#define MODBUS_VENDOR_URL "https://git.arktika.cyou/Andrey/Diod_Test"
#define MODBUS_PRODUCT_NAME "Diode Tester"
#define MODBUS_MODEL_NAME "STM32F103"
#define MODBUS_USER_APPLICATION_NAME "diode_tester"
//#define MODBUS_UART_NUMB 1 ///< Номер используемого UART, по нему выставляется дефайн USED_MB_UART = USARTx
#define MODBUS_SPEED 115200 ///< Скорость UART для модбас
//#define MODBUS_GPIOX GPIOA ///< Порт для UART RX/TX
@@ -43,78 +51,11 @@
* @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
* Поэтому чтобы считывать Input Regs - надо поменять их местами.
*/
#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
//#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
/////////////////////////////////////////////////////////////////////
/////////////////////////---CALC DEFINES---//////////////////////////
/* set USART_TypeDef for choosen numb of usart */
#if (MODBUS_UART_NUMB == 1)
#define USED_MODBUS_UART USART1
#define USE_USART1
#elif (MODBUS_UART_NUMB == 2)
#define USED_MODBUS_UART USART2
#define USE_USART2
#elif (MODBUS_UART_NUMB == 3)
#define USED_MODBUS_UART USART3
#define USE_USART3
#elif (MODBUS_UART_NUMB == 4)
#define USED_MODBUS_UART UART4
#define USE_UART4
#elif (MODBUS_UART_NUMB == 5)
#define USED_MODBUS_UART UART5
#define USE_UART6
#elif (MODBUS_UART_NUMB == 6)
#define USED_MODBUS_UART USART6
#define USE_USART6
#endif
#if (MODBUS_TIM_NUMB == 1)
#define USED_MODBUS_TIM TIM1
#define USE_TIM1
#elif (MODBUS_TIM_NUMB == 2)
#define USED_MODBUS_TIM TIM2
#define USE_TIM2
#elif (MODBUS_TIM_NUMB == 3)
#define USED_MODBUS_TIM TIM3
#define USE_TIM3
#elif (MODBUS_TIM_NUMB == 4)
#define USED_MODBUS_TIM TIM4
#define USE_TIM4
#elif (MODBUS_TIM_NUMB == 5)
#define USED_MODBUS_TIM TIM5
#define USE_TIM5
#elif (MODBUS_TIM_NUMB == 6)
#define USED_MODBUS_TIM TIM6
#define USE_TIM6
#elif (MODBUS_TIM_NUMB == 7)
#define USED_MODBUS_TIM TIM7
#define USE_TIM7
#elif (MODBUS_TIM_NUMB == 8)
#define USED_MODBUS_TIM TIM8
#define USE_TIM8
#elif (MODBUS_TIM_NUMB == 9)
#define USED_MODBUS_TIM TIM9
#define USE_TIM9
#elif (MODBUS_TIM_NUMB == 10)
#define USED_MODBUS_TIM TIM10
#define USE_TIM10
#elif (MODBUS_TIM_NUMB == 11)
#define USED_MODBUS_TIM TIM11
#define USE_TIM11
#elif (MODBUS_TIM_NUMB == 12)
#define USED_MODBUS_TIM TIM12
#define USE_TIM12
#elif (MODBUS_TIM_NUMB == 13)
#define USED_MODBUS_TIM TIM13
#define USE_TIM13
#elif (MODBUS_TIM_NUMB == 14)
#define USED_MODBUS_TIM TIM14
#define USE_TIM14
#endif
/** MODBUS_CONFIG
* @}
*/

View File

@@ -93,6 +93,7 @@ extern TIM_HandleTypeDef rs_htim;
RS_HandleTypeDef hmodbus1;
/* DEFINE REGISTERS/COILS */
MB_DeviceIdentificationTypeDef MB_INFO;
MB_DataStructureTypeDef MB_DATA;
RS_MsgTypeDef MODBUS_MSG;
@@ -109,6 +110,7 @@ uint32_t numb_scide = 10;
*/
void MODBUS_FirstInit(void)
{
MB_DevoceInentificationInit();
//-----------SETUP MODBUS-------------
// set up UART for modbus
#ifdef INCLUDE_GENERAL_PERIPH_LIBS
@@ -589,6 +591,54 @@ uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg)
return 1;
}
void MB_WriteObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj)
{
mbdata[(*ind)++] = obj->length;
for (int i = 0; i < obj->length; i++)
{
mbdata[(*ind)++] = obj->name[i];
}
}
/**
* @brief Proccess command Read Device Identification (43/14 - 0x2B/0E).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Single Register.
*/
uint8_t MB_Read_Device_Identification(RS_MsgTypeDef *modbus_msg)
{
char *mbdata = (char *)modbus_msg->DATA;
unsigned ind = 0;
switch(modbus_msg->DevId.ReadDevId)
{
case MB_BASIC_IDENTIFICATION:
mbdata[ind++] = 0x00;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorName);
mbdata[ind++] = 0x01;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductCode);
mbdata[ind++] = 0x02;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.Revision);
modbus_msg->DevId.NumbOfObj = 3;
break;
case MB_REGULAR_IDENTIFICATION:
mbdata[ind++] = 0x03;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorUrl);
mbdata[ind++] = 0x04;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductName);
mbdata[ind++] = 0x05;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ModelName);
mbdata[ind++] = 0x06;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.UserApplicationName);
modbus_msg->DevId.NumbOfObj = 4;
break;
default:
return 0;
}
modbus_msg->ByteCnt = ind;
return 1;
}
/**
* @brief Respond accord to received message.
@@ -661,6 +711,11 @@ RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_ms
}
break;
case MB_R_DEVICE_INFO:
hmodbus->f.MessageHandled = MB_Read_Device_Identification(hmodbus->pMessagePtr);
break;
/* unknown func code */
default: modbus_msg->Except_Code = 0x01; /* set exception code: illegal function */
}
@@ -715,28 +770,60 @@ RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *mo
if (modbus_msg->Func_Code < ERR_VALUES_START) // if no error occur
{
// set size of received data
if (modbus_msg->ByteCnt <= DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
modbus_uart_buff[ind++] = modbus_msg->ByteCnt;
else // otherwise return data_size err
// fill modbus header
if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // devide identification header
{
TrackerCnt_Err(hmodbus->rs_err);
return RS_COLLECT_MSG_ERR;
modbus_uart_buff[ind++] = modbus_msg->DevId.MEI_Type;
modbus_uart_buff[ind++] = modbus_msg->DevId.ReadDevId;
modbus_uart_buff[ind++] = modbus_msg->DevId.Conformity;
modbus_uart_buff[ind++] = modbus_msg->DevId.MoreFollows;
modbus_uart_buff[ind++] = modbus_msg->DevId.NextObjId;
modbus_uart_buff[ind++] = modbus_msg->DevId.NumbOfObj;
if (modbus_msg->ByteCnt > DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
{
TrackerCnt_Err(hmodbus->rs_err);
return RS_COLLECT_MSG_ERR;
}
//---------------DATA----------------
//-----------[data bytes]------------
uint8_t *tmp_data_addr = (uint8_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
{ // set data
modbus_uart_buff[ind++] = *tmp_data_addr;
tmp_data_addr++;
}
}
//---------------DATA----------------
//-----------[data bytes]------------
uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
{ // set data
if (i%2 == 0) // HI byte
modbus_uart_buff[ind++] = (*tmp_data_addr)>>8;
else // LO byte
{
modbus_uart_buff[ind++] = *tmp_data_addr;
tmp_data_addr++;
}
}
else // modbus data header
{
// set size of received data
if (modbus_msg->ByteCnt <= DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
modbus_uart_buff[ind++] = modbus_msg->ByteCnt;
else // otherwise return data_size err
{
TrackerCnt_Err(hmodbus->rs_err);
return RS_COLLECT_MSG_ERR;
}
//---------------DATA----------------
//-----------[data bytes]------------
uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
{ // set data
if (i%2 == 0) // HI byte
modbus_uart_buff[ind++] = (*tmp_data_addr)>>8;
else // LO byte
{
modbus_uart_buff[ind++] = *tmp_data_addr;
tmp_data_addr++;
}
}
}
}
else // if some error occur
{ // send expection code
@@ -776,9 +863,17 @@ RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modb
if(modbus_msg->MbAddr != hmodbus->ID)
return RS_SKIP;
// get dat or err response
// get func code
modbus_msg->Func_Code = modbus_uart_buff[ind++];
if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // if it device identification request
{
modbus_msg->DevId.MEI_Type = modbus_uart_buff[ind++];
modbus_msg->DevId.ReadDevId = modbus_uart_buff[ind++];
modbus_msg->DevId.NextObjId = modbus_uart_buff[ind++];
modbus_msg->ByteCnt = 0;
}
else // if its classic modbus request
{
// get address from CMD
modbus_msg->Addr = modbus_uart_buff[ind++] << 8;
modbus_msg->Addr |= modbus_uart_buff[ind++];
@@ -786,7 +881,7 @@ RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modb
// get address from CMD
modbus_msg->Qnt = modbus_uart_buff[ind++] << 8;
modbus_msg->Qnt |= modbus_uart_buff[ind++];
}
if(hmodbus->f.RX_Half == 0) // if all message received
{
//---------------DATA----------------
@@ -856,10 +951,12 @@ RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_
if(MB_RES == RS_SKIP) // if message not for us
return MB_RES; // return
if ((hmodbus->pMessagePtr->Func_Code & ~ERR_VALUES_START) < 0x0F)
{
hmodbus->pMessagePtr->ByteCnt = 0;
*rx_data_size = 1;
}
else
{
@@ -867,6 +964,13 @@ RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_
// +1 because that defines is size, not ind.
*rx_data_size = hmodbus->pMessagePtr->ByteCnt + 2;
}
if(hmodbus->pMessagePtr->Func_Code == MB_R_DEVICE_INFO)
{
*rx_data_size = 0;
}
hmodbus->RS_Message_Size = RX_FIRST_PART_SIZE + *rx_data_size; // size of whole message
return RS_OK;
}
@@ -875,21 +979,25 @@ RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_
//-------------------------------------------------------------------
void MB_DevoceInentificationInit(void)
{
MB_INFO.VendorName.name = MODBUS_VENDOR_NAME;
MB_INFO.ProductCode.name = MODBUS_PRODUCT_CODE;
MB_INFO.Revision.name = MODBUS_REVISION;
MB_INFO.VendorUrl.name = MODBUS_VENDOR_URL;
MB_INFO.ProductName.name = MODBUS_PRODUCT_NAME;
MB_INFO.ModelName.name = MODBUS_MODEL_NAME;
MB_INFO.UserApplicationName.name = MODBUS_USER_APPLICATION_NAME;
MB_INFO.VendorName.length = sizeof(MODBUS_VENDOR_NAME);
MB_INFO.ProductCode.length = sizeof(MODBUS_PRODUCT_CODE);
MB_INFO.Revision.length = sizeof(MODBUS_REVISION);
MB_INFO.VendorUrl.length = sizeof(MODBUS_VENDOR_URL);
MB_INFO.ProductName.length = sizeof(MODBUS_PRODUCT_NAME);
MB_INFO.ModelName.length = sizeof(MODBUS_MODEL_NAME);
MB_INFO.UserApplicationName.length = sizeof(MODBUS_USER_APPLICATION_NAME);
}
//-------------------------------------------------------------------
//-------------------------HANDLERS FUNCTION-------------------------
//void USART1_IRQHandler(void)
//{
// Trace_MB_UART_Enter();
// RS_UART_Handler(&hmodbus1);
// Trace_MB_UART_Exit();
//}
//void TIM1_UP_TIM10_IRQHandler(void)
//{
// Trace_MB_TIM_Enter();
// RS_TIM_Handler(&hmodbus1);
// Trace_MB_TIM_Exit();
//}
//-------------------------HANDLERS FUNCTION-------------------------
//-------------------------------------------------------------------

View File

@@ -54,11 +54,11 @@ first receive info part of message, than defines size of rest message*/
typedef enum //MB_ExceptionTypeDef
{
// reading
NO_ERRORS = 0x00, ///< no errors
ILLEGAL_FUNCTION = 0x01, ///< Принятый код функции не может быть обработан
ILLEGAL_DATA_ADDRESS = 0x02, ///< Адрес данных, указанный в запросе, недоступен
ILLEGAL_DATA_VALUE = 0x03, ///< Значение, содержащееся в поле данных запроса, является недопустимой величиной
SLAVE_DEVICE_FAILURE = 0x04, ///< Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие
NO_ERRORS = 0x00, ///< no errors
ILLEGAL_FUNCTION = 0x01, ///< Принятый код функции не может быть обработан
ILLEGAL_DATA_ADDRESS = 0x02, ///< Адрес данных, указанный в запросе, недоступен
ILLEGAL_DATA_VALUE = 0x03, ///< Значение, содержащееся в поле данных запроса, является недопустимой величиной
SLAVE_DEVICE_FAILURE = 0x04, ///< Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие
// ACKNOWLEDGE = 0x05, ///< idk
// SLAVE_DEVICE_BUSY = 0x06, ///< idk
// MEMORY_PARITY_ERROR = 0x08, ///< idk
@@ -70,41 +70,73 @@ typedef enum //MB_FunctonTypeDef
{
/* COMMANDS */
// reading
MB_R_COILS = 0x01, ///< Чтение битовых ячеек
MB_R_DISC_IN = 0x02, ///< Чтение дискретных входов
MB_R_COILS = 0x01, ///< Чтение битовых ячеек
MB_R_DISC_IN = 0x02, ///< Чтение дискретных входов
#ifndef MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
MB_R_HOLD_REGS = 0x03, ///< Чтение входных регистров
MB_R_IN_REGS = 0x04, ///< Чтение регистров хранения
MB_R_HOLD_REGS = 0x03, ///< Чтение входных регистров
MB_R_IN_REGS = 0x04, ///< Чтение регистров хранения
#else
MB_R_HOLD_REGS = 0x04, ///< Чтение входных регистров
MB_R_IN_REGS = 0x03, ///< Чтение регистров хранения
MB_R_HOLD_REGS = 0x04, ///< Чтение входных регистров
MB_R_IN_REGS = 0x03, ///< Чтение регистров хранения
#endif
// writting
MB_W_COIL = 0x05, ///< Запись битовой ячейки
MB_W_HOLD_REG = 0x06, ///< Запись одиночного регистра
MB_W_COILS = 0x0F, ///< Запись нескольких битовых ячеек
MB_W_HOLD_REGS = 0x10, ///< Запись нескольких регистров
MB_W_COIL = 0x05, ///< Запись битовой ячейки
MB_W_HOLD_REG = 0x06, ///< Запись одиночного регистра
MB_W_COILS = 0x0F, ///< Запись нескольких битовых ячеек
MB_W_HOLD_REGS = 0x10, ///< Запись нескольких регистров
MB_R_DEVICE_INFO = 0x2B, ///< Чтения информации об устройстве
/* ERRORS */
// error reading
MB_ERR_R_COILS = MB_R_COILS + ERR_VALUES_START, ///< Ошибка чтения битовых ячеек
MB_ERR_R_DISC_IN = MB_R_DISC_IN + ERR_VALUES_START, ///< Ошибка чтения дискретных входов
MB_ERR_R_IN_REGS = MB_R_IN_REGS + ERR_VALUES_START, ///< Ошибка чтения регистров хранения
MB_ERR_R_HOLD_REGS = MB_R_HOLD_REGS + ERR_VALUES_START, ///< Ошибка чтения входных регистров
MB_ERR_R_COILS = MB_R_COILS + ERR_VALUES_START, ///< Ошибка чтения битовых ячеек
MB_ERR_R_DISC_IN = MB_R_DISC_IN + ERR_VALUES_START, ///< Ошибка чтения дискретных входов
MB_ERR_R_IN_REGS = MB_R_IN_REGS + ERR_VALUES_START, ///< Ошибка чтения регистров хранения
MB_ERR_R_HOLD_REGS = MB_R_HOLD_REGS + ERR_VALUES_START, ///< Ошибка чтения входных регистров
// error writting
MB_ERR_W_COIL = MB_W_COIL + ERR_VALUES_START, ///< Ошибка записи битовой ячейки
MB_ERR_W_HOLD_REG = MB_W_HOLD_REG + ERR_VALUES_START, ///< Ошибка записи одиночного регистра
MB_ERR_W_COILS = MB_W_COILS + ERR_VALUES_START, ///< Ошибка записи нескольких битовых ячеек
MB_ERR_W_HOLD_REGS = MB_W_HOLD_REGS + ERR_VALUES_START, ///< Ошибка записи нескольких регистров
MB_ERR_W_COIL = MB_W_COIL + ERR_VALUES_START, ///< Ошибка записи битовой ячейки
MB_ERR_W_HOLD_REG = MB_W_HOLD_REG + ERR_VALUES_START, ///< Ошибка записи одиночного регистра
MB_ERR_W_COILS = MB_W_COILS + ERR_VALUES_START, ///< Ошибка записи нескольких битовых ячеек
MB_ERR_W_HOLD_REGS = MB_W_HOLD_REGS + ERR_VALUES_START, ///< Ошибка записи нескольких регистров
}MB_FunctonTypeDef;
/** @brief Structure for MEI func codes */
typedef enum //MB_FunctonTypeDef
{
MEI_DEVICE_IDENTIFICATION = 0x0E,
}MB_MEITypeDef;
/** @brief Structure for MEI func codes */
typedef enum //MB_FunctonTypeDef
{
MB_BASIC_IDENTIFICATION = 0x01,
MB_REGULAR_IDENTIFICATION = 0x02,
/* ERRORS */
MB_ERR_BASIC_IDENTIFICATION = MB_BASIC_IDENTIFICATION + ERR_VALUES_START,
MB_ERR_REGULAR_IDENTIFICATION = MB_REGULAR_IDENTIFICATION + ERR_VALUES_START,
}MB_ConformityTypeDef;
/** @brief Structure for decive identification message type */
typedef struct
{
MB_MEITypeDef MEI_Type; ///< MEI Type assigned number for Device Identification Interface
MB_ConformityTypeDef ReadDevId;
MB_ConformityTypeDef Conformity;
uint8_t MoreFollows; ///< in this library always a zero
uint8_t NextObjId;
uint8_t NumbOfObj;
}MB_DevIdMsgTypeDef;
/** @brief Structure for modbus messsage */
typedef struct // RS_MsgTypeDef
{
uint8_t MbAddr; ///< Modbus Slave Address
MB_FunctonTypeDef Func_Code; ///< Modbus Function Code
MB_DevIdMsgTypeDef DevId; ///< Read Device Identification Header struct
uint16_t Addr; ///< Modbus Address of data
uint16_t Qnt; ///< Quantity of modbus data
uint8_t ByteCnt; ///< Quantity of bytes of data in message to transmit/receive

View File

@@ -48,10 +48,10 @@ typedef struct //MB_DataInRegsTypeDef
typedef struct //MB_DataInRegsTypeDef
{
uint16_t TimeForForward;
uint16_t TimeForReverse;
uint16_t TimeBeforeTest;
uint16_t TimeDeadtime;
uint16_t TimeBeforePeak;
uint16_t TimeBeforeDisconnect;
uint16_t Adc_PulseWidth;
uint16_t Adc_PulseSign;
@@ -104,18 +104,19 @@ typedef struct //MB_DataCoilsTypeDef
unsigned ForwardTest:1;
unsigned ReverseTest:1;
unsigned StartTest:1;
unsigned PhaseForwardHiTest:1;
unsigned PhaseForwardLoTest:1;
unsigned PhaseReverseHiTest:1;
unsigned PhaseReverseLoTest:1;
unsigned KeyForwardHiTest:1;
unsigned KeyForwardLoTest:1;
unsigned KeyReverseHiTest:1;
unsigned KeyReverseLoTest:1;
unsigned reserved:9;
/* reg 2 - settings */
unsigned msTimeForForward_enable:1;
unsigned msTimeForReverse_enable:1;
unsigned msTimeBeforeTest_enable:1;
unsigned msTimeDeadtime_enable:1;
unsigned msTimeBeforePeak_enable:1;
unsigned msTimeBeforeDisconnect_enable:1;
unsigned reserved2:11;
}MB_DataCoilsTypeDef;
@@ -124,7 +125,7 @@ typedef struct //MB_DataCoilsTypeDef
#define C_CONTROL_QNT 7
#define C_SETTINGS_ADDR 16
#define C_SETTINGS_QNT 3
#define C_SETTINGS_QNT 5
/** MODBUS_DATA_COILS_DEFINES
* @}
@@ -148,40 +149,25 @@ typedef struct // tester modbus data
extern MB_DataStructureTypeDef MB_DATA;
typedef struct
{
unsigned length;
char *name;
}MB_DeviceObjectTypeDef;
typedef struct
{
MB_DeviceObjectTypeDef VendorName;
MB_DeviceObjectTypeDef ProductCode;
MB_DeviceObjectTypeDef Revision;
MB_DeviceObjectTypeDef VendorUrl;
MB_DeviceObjectTypeDef ProductName;
MB_DeviceObjectTypeDef ModelName;
MB_DeviceObjectTypeDef UserApplicationName;
}MB_DeviceIdentificationTypeDef;
void MB_DevoceInentificationInit(void);
#endif //_MODBUS_DATA_H_
/////////////////////////////////////////////////////////////
///////////////////////TEMP/OUTDATE/OTHER////////////////////
//typedef enum //MB_TESTERCommandsTypeDef
//{
// StandartMode = 0x00, ///< Стандартная работа
// Opros_TE_Disable = 0x01, ///< Запрет опроса ТЭ (активен только обмен с ЛСУ ЭС, ТЭ не контролируются)
//}MB_TESTERCommandsTypeDef;
///**
// * @brief Состояние МЗКТЭ
// */
//typedef enum //MB_TESTERErrStatusTypeDef
//{
// TESTER_OK = 0x0, ///< МЗКТЭ функционирует нормально. Идет опрос ТЭ.
// NonCritical_Err = 0x1, ///< Неисправность МЗКТЭ, при которой МЗКТЭ может выполнять свои основные функции (некоторые программные ошибки из @ref MB_TESTERTrackerTypeDef).
// Critical_Err = 0x2, ///< Неисправность МЗКТЭ, при которой выполнение основных функций не представляется возможным (ошибки 1-3 и некоторые программные ошибки из @ref MB_TESTERTrackerTypeDef)
//
//}MB_TESTERErrStatusTypeDef;
//typedef enum
//{
// TE_No_Err = 0x0, ///< Напряжения на всех ТЭ выше аварийных порогов, задаваемых уставками «Авария»
// TE_Err = 0x1, ///< Напряжение на одном или нескольких ТЭ достигло или ниже аварийного порога, задаваемого уставкой «Авария»
//}MB_TEErrActiveTypeDef;
//typedef enum
//{
// TE_No_Warn = 0x0, ///< Напряжения на всех ТЭ выше предупредительных порогов, задаваемых уставкой «Предупреждение»
// TE_Warn = 0x1, ///< Напряжение на одном или нескольких ТЭ достигло или ниже предупредительного порога, задаваемого уставкой «Предупреждение»
//}MB_TEWarnActiveTypeDef;
//typedef enum
//{
// OprosTE_Enable = 0x0, ///< Опрос ТЭ разрешен
// OprosTE_Disable = 0x1, ///< Опрос ТЭ запрещен (см. регистр хранения 170)
//}MB_OprosTETypeDef;
///////////////////////TEMP/OUTDATE/OTHER////////////////////

View File

@@ -388,18 +388,38 @@ RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS)
{ // First receive part of message, then define size of rest of message, and start receive it
hRS->f.RX_Half = 1;
//---------------FIND DATA SIZE-----------------
uint32_t NuRS_of_Rest_Bytes = 0;
uint32_t NuRS_of_Rest_Bytes = 0xFFFF;
RS_RES = RS_Define_Size_of_RX_Message(hRS, &NuRS_of_Rest_Bytes);
// if there is no bytes to receive OR we need to skip this message - restart receive
if ((NuRS_of_Rest_Bytes == 0) || (RS_RES == RS_SKIP))
// if we need to skip this message - restart receive
if(RS_RES == RS_SKIP || NuRS_of_Rest_Bytes == 0xFFFF)
{
TrackerCnt_Err(hRS->rs_err);
RS_Abort(hRS, ABORT_RX);
RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
return RS_RES;
}
// if there is no bytes to receive
if(NuRS_of_Rest_Bytes == 0)
{
hRS->f.RX_Half = 0;
//---------PROCESS DATA & ENDING RECEIVING--------
RS_Set_RX_End(hRS);
if(hRS->sRS_Timeout) // if timeout setted
HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout
// parse received data
RS_RES = RS_Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message
// RESPONSE
RS_RES = RS_Response(hRS, hRS->pMessagePtr);
return RS_RES;
}
//-------------START UART RECEIVE---------------
uart_res = HAL_UART_Receive_IT(hRS->huart, (hRS->pBufferPtr + RX_FIRST_PART_SIZE), NuRS_of_Rest_Bytes);

View File

@@ -0,0 +1,128 @@
/**
**************************************************************************
* @file general_gpio.c
* @brief Модуль для инициализации портов.
**************************************************************************
@verbatim
//-------------------Функции-------------------//
Functions: users
- GPIO_Clock_Enable Инициализация тактирования порта
@endverbatim
***************************************************************************/
#include "general_gpio.h"
//-------------------------------------------------------------------
//------------------------GPIO INIT FUNCTIONS------------------------
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
{
HAL_StatusTypeDef status = HAL_OK;
// choose port for enable clock
if (GPIOx==GPIOA)
__HAL_RCC_GPIOA_CLK_ENABLE();
else if (GPIOx==GPIOB)
__HAL_RCC_GPIOB_CLK_ENABLE();
else if (GPIOx==GPIOC)
__HAL_RCC_GPIOC_CLK_ENABLE();
#ifdef GPIOD
else if (GPIOx==GPIOD)
__HAL_RCC_GPIOD_CLK_ENABLE();
#endif
#ifdef GPIOE
else if (GPIOx==GPIOE)
__HAL_RCC_GPIOE_CLK_ENABLE();
#endif
else
status = HAL_ERROR;
return status;
}
//------------------------GPIO INIT FUNCTIONS------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//------------------------GPIO LED FUNCTIONS-------------------------
/**
* @brief Включить светодиод
*/
void GPIO_LED_On(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_ON;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
}
/**
* @brief Выключить светодиод
*/
void GPIO_LED_Off(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_OFF;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
}
/**
* @brief Активировать моргание светодиодом
*/
void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)
{
led->state = LED_IS_BLINKING;
led->LED_Period = period;
}
/**
* @brief Моргание светодиодом
*/
void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led)
{
if(led->state == LED_IS_BLINKING)
{
uint32_t tickcurrent = HAL_GetTick();
if((tickcurrent - led->tickprev) > led->LED_Period)
{
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
led->tickprev = tickcurrent;
}
}
}
//------------------------GPIO LED FUNCTIONS-------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//------------------------GPIO SW FUNCTIONS-------------------------
/**
* @brief Считать состоянии кнопки запуска
*/
uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *sw)
{
if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON)
{
sw->Sw_PrevState = 1;
if(sw->tickprev == 0)
sw->tickprev = HAL_GetTick();
if((HAL_GetTick() - sw->tickprev) > sw->Sw_FilterDelay)
{
if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON)
{
return 1;
}
else
{
sw->tickprev = 0;
return 0;
}
}
}
else
{
sw->Sw_PrevState = 0;
}
return 0;
}
//------------------------GPIO SW FUNCTIONS-------------------------
//-------------------------------------------------------------------

View File

@@ -0,0 +1,72 @@
/**
**************************************************************************
* @file general_gpio.h
* @brief Заголовочный файл для модуля инициализации портов.
*************************************************************************/
#ifndef __GPIO_GENERAL_H_
#define __GPIO_GENERAL_H_
#include "mylibs_defs.h"
#define SPI_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
(0))
#define TIM_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
(0))
typedef enum
{
LED_IS_OFF = 0,
LED_IS_ON = 1,
LED_IS_BLINKING = 2,
LED_IS_FADING = 3,
}GPIO_LEDStateTypeDef;
typedef struct
{
GPIO_LEDStateTypeDef state;
GPIO_TypeDef *LED_Port;
uint32_t LED_Pin;
uint32_t LED_Period;
uint32_t tickprev;
}GPIO_LEDTypeDef;
typedef struct
{
GPIO_TypeDef *Sw_Port;
uint32_t Sw_Pin;
uint32_t Sw_PrevState;
uint32_t Sw_FilterDelay;
uint32_t tickprev;
}GPIO_SwitchTypeDef;
/////////////////////////////////////////////////////////////////////
///////////////////////////---FUNCTIONS---///////////////////////////
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx);
/* Считать состоянии кнопки запуска */
uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *swstart);
/* Включить светодиод */
void GPIO_LED_On(GPIO_LEDTypeDef *led);
/* Выключить светодиод */
void GPIO_LED_Off(GPIO_LEDTypeDef *led);
/* Активировать моргание светодиодом */
void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period);
/* Моргание светодиодом */
void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led);
///////////////////////////---FUNCTIONS---///////////////////////////
#endif // __GPIO_GENERAL_H_

View File

@@ -64,6 +64,7 @@
#include "main.h"
#include "modbus_data.h"
#include "general_gpio.h"
/** @brief Struct for trackers for Measure */
/** @brief Struct for trackers for RS */

View File

@@ -54,7 +54,8 @@ void MX_GPIO_Init(void)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, PhaseAHi_Pin|PhaseALo_Pin|PhaseBHi_Pin|PhaseBLo_Pin
|PhaseAHiSignal_Pin|PhaseALoSignal_Pin|PhaseBHiSignal_Pin|PhaseBLoSignal_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PC13 */
GPIO_InitStruct.Pin = GPIO_PIN_13;
@@ -66,16 +67,34 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin : PC14 */
GPIO_InitStruct.Pin = GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 PB10 PB11 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;
/*Configure GPIO pins : PAPin PAPin PAPin PAPin */
GPIO_InitStruct.Pin = PhaseAHiResponse_Pin|PhaseALoResponse_Pin|PhaseBHiResponse_Pin|PhaseBLoResponse_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin PBPin PBPin
PBPin PBPin PBPin PBPin */
GPIO_InitStruct.Pin = PhaseAHi_Pin|PhaseALo_Pin|PhaseBHi_Pin|PhaseBLo_Pin
|PhaseAHiSignal_Pin|PhaseALoSignal_Pin|PhaseBHiSignal_Pin|PhaseBLoSignal_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
/* USER CODE BEGIN 2 */

View File

@@ -203,6 +203,42 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f1xx.s). */
/******************************************************************************/
/**
* @brief This function handles EXTI line3 interrupt.
*/
void EXTI3_IRQHandler(void)
{
/* USER CODE BEGIN EXTI3_IRQn 0 */
__disable_irq();
HAL_GPIO_TogglePin(PhaseAHiSignal_GPIO_Port, PhaseAHiSignal_Pin);
__enable_irq();
/* USER CODE END EXTI3_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(PhaseAHiResponse_Pin);
/* USER CODE BEGIN EXTI3_IRQn 1 */
/* USER CODE END EXTI3_IRQn 1 */
}
/**
* @brief This function handles EXTI line4 interrupt.
*/
void EXTI4_IRQHandler(void)
{
/* USER CODE BEGIN EXTI4_IRQn 0 */
__disable_irq();
HAL_GPIO_TogglePin(PhaseALoSignal_GPIO_Port, PhaseALoSignal_Pin);
__enable_irq();
/* USER CODE END EXTI4_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(PhaseALoResponse_Pin);
/* USER CODE BEGIN EXTI4_IRQn 1 */
/* USER CODE END EXTI4_IRQn 1 */
}
/**
* @brief This function handles DMA1 channel1 global interrupt.
*/
@@ -217,6 +253,28 @@ void DMA1_Channel1_IRQHandler(void)
/* USER CODE END DMA1_Channel1_IRQn 1 */
}
/**
* @brief This function handles EXTI line[9:5] interrupts.
*/
void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
__disable_irq();
if (__HAL_GPIO_EXTI_GET_IT(PhaseBHiResponse_Pin) != 0x00u)
HAL_GPIO_TogglePin(PhaseBHiSignal_GPIO_Port, PhaseBHiSignal_Pin);
if (__HAL_GPIO_EXTI_GET_IT(PhaseBLoResponse_Pin) != 0x00u)
HAL_GPIO_TogglePin(PhaseBLoSignal_GPIO_Port, PhaseBLoSignal_Pin);
__enable_irq();
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(PhaseBHiResponse_Pin);
HAL_GPIO_EXTI_IRQHandler(PhaseBLoResponse_Pin);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
/* USER CODE END EXTI9_5_IRQn 1 */
}
/**
* @brief This function handles TIM2 global interrupt.
*/

View File

@@ -86,7 +86,7 @@ void TESTER_ADC_UpdateSettings(TESTER_ADCTypeDef *adc, MB_DataStructureTypeDef *
adc->chAdc.s.expected_pulse_sign = mbdata->HoldRegs.Adc_PulseSign;
adc->chAdc.s.pulse_width = mbdata->HoldRegs.Adc_PulseWidth;
adc->chAdc.s.U_step = (float)mbdata->HoldRegs.Adc_U_Calibr/(adc->chAdc.s.ADC_calibr - adc->chAdc.s.ADC_zero);
adc->chAdc.s.U_step = ((float)mbdata->HoldRegs.Adc_U_Calibr/1000)/(adc->chAdc.s.ADC_calibr - adc->chAdc.s.ADC_zero);
}
HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)

View File

@@ -21,23 +21,31 @@
/**
* @brief Задержка (миллисекундная) для положительного напряжения ПО УМОЛЧАНИЮ
* @details Пока только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется
* @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_TEST_MS_DELAY
*/
#define DEF_MS_TIME_FOR_POSITIVE 2000
#define DEF_TIME_FOR_FORWARD 100
#define DEF_TIME_FOR_FORWARD_MS_DELAY 1 ///< включение миллисекундной задержки для @ref DEF_TIME_FOR_FORWARD по умолчанию
/**
* @brief Задержка для дедтайма ПО УМОЛЧАНИЮ
* @details Задержка миллисекундная или микросекундная @ref DEF_DEADTIME_MS_DELAY
* @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ
* @details Задержка миллисекундная или микросекундная @ref TIME_FOR_REVERSE_MS_DELAY
*/
#define DEF_DEADTIME 500
#define DEF_DEADTIME_MS_DELAY 0 ///< включение миллисекундной задержки для @ref DEF_DEADTIME по умолчанию
#define DEF_TIME_FOR_REVERSE 200
#define DEF_TIME_FOR_REVERSE_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_FOR_REVERSE
/**
* @brief Задержка перед началом тестирования ПО УМОЛЧАНИЮ
* @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_TEST_MS_DELAY
*/
#define DEF_TIME_BEFORE_TEST 500
#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию
#define DEF_TIME_BEFORE_TEST 500
#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию
/**
* @brief Задержка для дедтайма ПО УМОЛЧАНИЮ
* @details Задержка миллисекундная или микросекундная @ref DEF_DEADTIME_MS_DELAY
*/
#define DEF_DEADTIME 0
#define DEF_DEADTIME_MS_DELAY 0 ///< включение миллисекундной задержки для @ref DEF_DEADTIME по умолчанию
/**
* @brief Задержка между включением АЦП и предполагаемым скачком напряжения ПО УМОЛЧАНИЮ
@@ -47,15 +55,8 @@
* @note Но если миллисекундная, то скорее всего скачок не попадет в буфер АЦП.
* Поэтому желательно только микросекундная (@ref TIME_BEFORE_PEAK_MS_DELAY = 0)
*/
#define DEF_TIME_BEFORE_PEAK 5
#define DEF_TIME_BEFORE_PEAK_MS_DELAY 0 ///< включение миллисекундной задержки для @ref TIME_BEFORE_PEAK
/**
* @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ
* @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_DISCONNECT_MS_DELAY
*/
#define DEF_TIME_BEFORE_DISCONNECT 2000
#define DEF_TIME_BEFORE_DISCONNECT_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_DISCONNECT
#define DEF_TIME_BEFORE_PEAK 5
#define DEF_TIME_BEFORE_PEAK_MS_DELAY 0 ///< включение миллисекундной задержки для @ref TIME_BEFORE_PEAK
/** TESTER_SW_TIMINGS_CONFIG
* @}
@@ -85,8 +86,8 @@
/* Дефайны для кнопки */
/* Состояния нажатой и отжатой кнопки */
#define SW_ON 1 ///< Состояние нажатой кнопки
#define SW_OFF 0 ///< Состояние отжатой кнопки
#define SW_ON 0 ///< Состояние нажатой кнопки
#define SW_OFF 1 ///< Состояние отжатой кнопки
/* Пин кнопки при перенастройке надо также перенастроить через cube) */
#define SWITCH_START_Port GPIOC ///< Порт кнокпи старта (при перенастройке надо также перенастроить через cube)
@@ -106,7 +107,7 @@
@{
*/
//#define USE_HAL_GPIO_FUNCTIONS ///< По этому дефайну для переключения пинов будут использоваться HAL_GPIO функции
//#define RECONNECT_WITHOUT_DEADTIME ///< По этому дефайну дедтайм отключается. Если отключить и USE_HAL_GPIO_FUNCTIONS, то переключатся фазы будут почти синхронно (160 нс)
#define RECONNECT_WITHOUT_DEADTIME ///< По этому дефайну дедтайм отключается. Если отключить и USE_HAL_GPIO_FUNCTIONS, то переключатся фазы будут почти синхронно (160 нс)
/* Состояния ключей для подключения и откючения питания */
#define PHASE_CONNECT 1 ///< Ключ замкнут подключено в данном состоянии пина
@@ -114,16 +115,15 @@
/* Ключи для прямого включения диода */
/* (при перенастройке надо также перенастроить через cube) */
#define SWITCH_PHASE_FORWARD_Port GPIOB ///< Порт пина первого ключа для прямого включения диода
#define SWITCH_PHASE_FORWARD_HI_Pin GPIO_PIN_0 ///< Пин первого ключа для прямого включения диода
#define SWITCH_PHASE_FORWARD_LO_Pin GPIO_PIN_1 ///< Пин второго ключа для прямого включения диода
#define SWITCH_PHASES_Port GPIOB ///< Порт пина первого ключа для прямого включения диода
#define SWITCH_PHASE_A_POS_Pin GPIO_PIN_0 ///< Пин первого ключа для прямого включения диода
#define SWITCH_PHASE_B_NEG_Pin GPIO_PIN_1 ///< Пин второго ключа для прямого включения диода
/* Ключи для обратного включения диода */
/* (при перенастройке надо также перенастроить через cube) */
#define SWITCH_PHASE_REVERSE_Port GPIOB ///< Порт пина первого ключа для обратного включения диода
#define SWITCH_PHASE_REVERSE_HI_Pin GPIO_PIN_10 ///< Пин первого ключа для обратного включения диода
#define SWITCH_PHASE_REVERSE_LO_Pin GPIO_PIN_11 ///< Пин первого ключа для обратного включения диода
#define SWITCH_PHASE_A_NEG_Pin GPIO_PIN_10 ///< Пин первого ключа для обратного включения диода
#define SWITCH_PHASE_B_POS_Pin GPIO_PIN_11 ///< Пин первого ключа для обратного включения диода
/** TESTER_PHASE_SW_CONFIG
* @}
@@ -135,6 +135,8 @@
* @brief Конфигурации для АЦП
@{
*/
#define TESTER_ADC_PULSE_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
#define TESTER_ADC_PULSE_SIGN 0 ///< Полярность импульса 0 - положительная, 1 - отрицательая
#define ADC_BUFF_SIZE (200) ///< Размер буфера АЦП
#define ADC_DMA_BUFF_SIZE (ADC_BUFF_SIZE) ///< Размер буфера ДМА (1 канал)
@@ -145,7 +147,6 @@
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
#define TESTER_ADC_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
/** TESTER_ADC_CONFIG
* @}

View File

@@ -38,15 +38,22 @@ void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest)
TESTER_Connect_Phase(&htest->SwPhaseForward);
/* Прямое включение на определенное время */
uint32_t tickstart = HAL_GetTick();
HAL_StatusTypeDef res;
while(1)
if(htest->SwTimings.ticks_for_forward.msdelay)
{
/* Считывание АЦП пока таймаут истечет */
res = ADC_ReadContinuous(htest->adc, htest->continuous_buff_size, tickstart, htest->SwTimings.msticks_for_forward);
if(res != HAL_OK)
break;
uint32_t tickstart = HAL_GetTick();
HAL_StatusTypeDef res;
while(1)
{
/* Считывание АЦП пока таймаут истечет */
res = ADC_ReadContinuous(htest->adc, htest->continuous_buff_size, tickstart, htest->SwTimings.ticks_for_forward.ticks);
if(res != HAL_OK)
break;
}
}
else
{
TESTER_Delay(&htest->SwTimings.ticks_for_forward, &hmcstim);
}
/* Отключение питания от диода */
@@ -85,7 +92,7 @@ void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest)
TESTER_Connect_Phase(&htest->SwPhaseReverse);
/* Обратное включение на определенное время */
TESTER_Delay(&htest->SwTimings.ticks_before_disconnect, &hmcstim);
TESTER_Delay(&htest->SwTimings.ticks_for_reverse, &hmcstim);
/* Отключение питания от диода */
TESTER_Disconnect_AllPhases(&htest->SwPhaseReverse, &htest->SwPhaseForward);
@@ -118,7 +125,7 @@ void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest)
TESTER_Connect_Phase(&htest->SwPhaseForward);
/* Прямое включение на определенное время */
msDelay(htest->SwTimings.msticks_for_forward);
TESTER_Delay(&htest->SwTimings.ticks_for_forward, &hmcstim);
htest->DiodeForwardVolt = htest->adc->chAdc.U_Current;
TESTER_LED_TestingDiodeReverse(&htest->leds->LED1);
@@ -126,7 +133,7 @@ void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest)
TESTER_Reconnect_TwoPhases(&htest->SwPhaseForward, &htest->SwPhaseReverse, &htest->SwTimings.ticks_deadtime);
/* Обратное включение на определенное время */
TESTER_Delay(&htest->SwTimings.ticks_before_disconnect, &hmcstim);
TESTER_Delay(&htest->SwTimings.ticks_for_reverse, &hmcstim);
/* Отключение питания от диода */
TESTER_Disconnect_AllPhases(&htest->SwPhaseReverse, &htest->SwPhaseForward);

View File

@@ -71,11 +71,11 @@ typedef struct
*/
typedef struct
{
uint32_t msticks_for_forward; ///< миллисекундная задержка для положительного напряжения @ref TESTER_TestDiode_Forward
TESTER_TicksDelayTypeDef ticks_for_forward; ///< задержка для прямого включения @ref TESTER_TestDiode_Forward
TESTER_TicksDelayTypeDef ticks_for_reverse; ///< задержка для прямого включения @ref TESTER_TestDiode_Reverse
TESTER_TicksDelayTypeDef ticks_before_test; ///< задержка перед началом тестирования (мс или мкс)
TESTER_TicksDelayTypeDef ticks_deadtime; ///< задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (мс или мкс)
TESTER_TicksDelayTypeDef ticks_before_expected_peak; ///< задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (мс или мкс)
TESTER_TicksDelayTypeDef ticks_before_disconnect; ///< задержка перед выключением фаз (мс или мкс)
}TESTER_SwitchTimingsTypeDef;
/**

View File

@@ -4,108 +4,37 @@
/**
* @brief Инициализация структур интерфейса
*/
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds)
{
}
/**
* @brief Включить индикацию таймаута старта при активации теста
*/
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led)
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led)
{
TESTER_LED_Off(led);
GPIO_LED_Off(led);
}
/**
* @brief Включить индикацию прямого подключения диода
*/
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_FORWARD_DIODE_PERIOD;
GPIO_LED_Blink_Start(led, LED_FORWARD_DIODE_PERIOD);
}
/**
* @brief Включить индикацию обратного подключения диода
*/
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led)
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_REVERSE_DIODE_PERIOD;
GPIO_LED_Blink_Start(led, LED_REVERSE_DIODE_PERIOD);
}
/**
* @brief Выключить индикацию ожидания комманды
* @details Сделано через моргание, чтобы понимать, что системные тики работают
*/
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led)
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_BLINK_AS_ON;
}
/**
* @brief Считать состоянии кнопки запуска
*/
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart)
{
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
{
if(swstart->tickprev == 0)
swstart->tickprev = HAL_GetTick();
if((HAL_GetTick() - swstart->tickprev) > swstart->Sw_FilterDelay)
{
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
{
return 1;
}
else
{
swstart->tickprev = 0;
return 0;
}
}
}
return 0;
}
/**
* @brief Включить светодиод
*/
void TESTER_LED_On(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_ON;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
}
/**
* @brief Выключить светодиод
*/
void TESTER_LED_Off(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_OFF;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
}
/**
* @brief Активировать моргание светодиодом
*/
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
}
/**
* @brief Моргание светодиодом
*/
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led)
{
if(led->state == LED_IS_BLINKING)
{
uint32_t tickcurrent = HAL_GetTick();
if((tickcurrent - led->tickprev) > led->period)
{
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
led->tickprev = tickcurrent;
}
}
GPIO_LED_Blink_Start(led, LED_BLINK_AS_ON);
}

View File

@@ -14,64 +14,26 @@
#include "mylibs_include.h"
#include "rs_message.h"
typedef enum
{
LED_IS_OFF = 0,
LED_IS_ON = 1,
LED_IS_BLINKING = 2,
}TESTER_LEDStateTypeDef;
typedef struct
{
TESTER_LEDStateTypeDef state;
GPIO_TypeDef *LED_Port;
uint32_t LED_Pin;
uint32_t tickprev;
uint32_t period;
}TESTER_LEDTypeDef;
typedef struct
{
TESTER_LEDTypeDef LED1;
GPIO_LEDTypeDef LED1;
}TESTER_LEDsTypeDef;
typedef struct
{
GPIO_TypeDef *Sw_Port;
uint32_t Sw_Pin;
uint32_t Sw_PrevState;
uint32_t Sw_FilterDelay;
uint32_t tickprev;
}TESTER_SwitchStartTypeDef;
/* Инициализация структур интерфейса */
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds);
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds);
/* Включить индикацию таймаута старта при активации теста */
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led);
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led);
/* Включить индикацию прямого подключения диода */
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led);
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led);
/* Включить индикацию обратного подключения диода */
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led);
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led);
/* Выключить индикацию активного теста диодов */
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led);
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led);
/* Считать состоянии кнопки запуска */
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart);
/* Включить светодиод */
void TESTER_LED_On(TESTER_LEDTypeDef *led);
/* Выключить светодиод */
void TESTER_LED_Off(TESTER_LEDTypeDef *led);
/* Активировать моргание светодиодом */
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led);
/* Моргание светодиодом */
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led);
#endif //_TESTER_INTERFACE_FUNC_H_

View File

@@ -10,7 +10,7 @@ TESTER_ProjectTypeDef TESTER = {0};
void TESTER_Init(TESTER_ProjectTypeDef *tester)
{
TESTER_InterfaceInit(&tester->SwStart, &tester->leds);
tester->leds.LED1.period = 100;
GPIO_LED_Blink_Start(&tester->leds.LED1, 100);
tester->delay = 250;
tester->delay_en = 0;
@@ -34,9 +34,11 @@ void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
TESTER_UpdateSettings(tester->htest, tester->mbdata);
RS_Receive_IT(tester->hmodbus, &MODBUS_MSG);
tester->leds.LED1.period = LED_BLINK_AS_ON;
tester->f.flag_init_done = 1;
HAL_TIM_Base_Start(&hmcstim);
tester->f.flag_init_done = 1;
GPIO_LED_Blink_Start(&tester->leds.LED1, LED_BLINK_AS_ON);
}
@@ -52,13 +54,13 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
/* ПОДТЯГИВАНИЕ СОСТОЯНИЯ КЛЮЧЕЙ С МОДБАС */
TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseForward.SwHI_Pin,
tester->mbdata->Coils.PhaseForwardHiTest);
tester->mbdata->Coils.KeyForwardHiTest);
TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseForward.SwLO_Pin,
tester->mbdata->Coils.PhaseForwardLoTest);
tester->mbdata->Coils.KeyForwardLoTest);
TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseReverse.SwHI_Pin,
tester->mbdata->Coils.PhaseReverseHiTest);
tester->mbdata->Coils.KeyReverseHiTest);
TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseReverse.SwLO_Pin,
tester->mbdata->Coils.PhaseReverseLoTest);
tester->mbdata->Coils.KeyReverseLoTest);
@@ -75,6 +77,7 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
tester->func.test_diode_reverse = 0;
tester->f.flag_test_active = 0;
tester->mbdata->Coils.StartTest = 0;
}
/* ТЕСТ В ПРЯМОМ ВКЛЮЧЕНИИ */
@@ -90,6 +93,7 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
tester->func.test_diode_forward = 0;
tester->f.flag_test_active = 0;
tester->mbdata->Coils.StartTest = 0;
}
/* ТЕСТ ПЕРЕХОДА ИЗ ПРЯМОГО В ОБРАТНОЕ ВКЛЮЧЕНИЯ*/
if(tester->func.test_diode_switch_connection)
@@ -105,6 +109,7 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
tester->func.test_diode_switch_connection = 0;
tester->f.flag_test_active = 0;
tester->mbdata->Coils.StartTest = 0;
}
}
@@ -123,9 +128,8 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
tester->mode = *((TESTER_TestModeTypeDef *)&tester->mbdata->Coils) & 0x3;
/* если кнопка нажата или пришла соответствующая комманда модбас */
if(TESTER_ReadSwichStart(&tester->SwStart) || tester->mbdata->Coils.StartTest)
if(GPIO_Read_Swich(&tester->SwStart) || tester->mbdata->Coils.StartTest)
{
tester->mbdata->Coils.StartTest = 0;
/* Обновление настроек тестера */
TESTER_UpdateSettings(tester->htest, tester->mbdata);
switch(tester->mode)
@@ -148,7 +152,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
}
TESTER_LEDBlink_Handle(&tester->leds.LED1);
GPIO_LED_Blink_Handle(&tester->leds.LED1);
}
@@ -158,16 +162,17 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
*/
void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata)
{
htest->SwTimings.ticks_before_disconnect.ticks = mbdata->HoldRegs.TimeBeforeDisconnect;
htest->SwTimings.ticks_for_forward.ticks = mbdata->HoldRegs.TimeForForward;
htest->SwTimings.ticks_for_reverse.ticks = mbdata->HoldRegs.TimeForReverse;
htest->SwTimings.ticks_before_test.ticks = mbdata->HoldRegs.TimeBeforeTest;
htest->SwTimings.ticks_deadtime.ticks = mbdata->HoldRegs.TimeDeadtime;
htest->SwTimings.ticks_before_expected_peak.ticks = mbdata->HoldRegs.TimeBeforePeak;
htest->SwTimings.ticks_before_test.ticks = mbdata->HoldRegs.TimeBeforeTest;
htest->SwTimings.msticks_for_forward = mbdata->HoldRegs.TimeForForward;
htest->SwTimings.ticks_before_disconnect.msdelay = mbdata->Coils.msTimeBeforeDisconnect_enable;
htest->SwTimings.ticks_for_forward.msdelay = mbdata->Coils.msTimeForForward_enable;
htest->SwTimings.ticks_for_reverse.msdelay = mbdata->Coils.msTimeForReverse_enable;
htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeBeforeTest_enable;
htest->SwTimings.ticks_deadtime.msdelay = mbdata->Coils.msTimeDeadtime_enable;
htest->SwTimings.ticks_before_expected_peak.msdelay = mbdata->Coils.msTimeBeforePeak_enable;
htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeBeforeTest_enable;
TESTER_ADC_UpdateSettings(htest->adc, mbdata);
}
@@ -181,15 +186,15 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
tester->mbdata->Coils.ForwardTest = 1;
tester->mbdata->Coils.ReverseTest = 1;
/* Настройка пинов для прямого включения */
tester->htest->SwPhaseReverse.SW_Port = SWITCH_PHASE_REVERSE_Port;
tester->htest->SwPhaseReverse.SwHI_Pin = SWITCH_PHASE_REVERSE_HI_Pin;
tester->htest->SwPhaseReverse.SwLO_Pin = SWITCH_PHASE_REVERSE_LO_Pin;
/* Настройка пинов для обратного включения */
tester->htest->SwPhaseForward.SW_Port = SWITCH_PHASE_FORWARD_Port;
tester->htest->SwPhaseForward.SwHI_Pin = SWITCH_PHASE_FORWARD_HI_Pin;
tester->htest->SwPhaseForward.SwLO_Pin = SWITCH_PHASE_FORWARD_LO_Pin;
tester->htest->SwPhaseForward.SW_Port = SWITCH_PHASES_Port;
tester->htest->SwPhaseForward.SwHI_Pin = SWITCH_PHASE_A_POS_Pin;
tester->htest->SwPhaseForward.SwLO_Pin = SWITCH_PHASE_B_NEG_Pin;
/* Настройка пинов для прямого включения */
tester->htest->SwPhaseReverse.SW_Port = SWITCH_PHASES_Port;
tester->htest->SwPhaseReverse.SwHI_Pin = SWITCH_PHASE_B_POS_Pin;
tester->htest->SwPhaseReverse.SwLO_Pin = SWITCH_PHASE_A_NEG_Pin;
/* Настройка пинов для кнопки старта */
@@ -199,15 +204,17 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
/* Настройка пинов для светодиода*/
tester->leds.LED1.LED_Port = LED1_Port;
tester->leds.LED1.LED_Pin = LED1_Pin;
tester->leds.LED1.period = LED_BLINK_AS_ON;
tester->leds.LED1.LED_Pin = LED1_Pin;
/* Настройка таймингов по умолчанию для тестирования */
tester->mbdata->HoldRegs.TimeForForward = DEF_MS_TIME_FOR_POSITIVE;
tester->mbdata->HoldRegs.TimeBeforeTest = DEF_TIME_BEFORE_TEST;
tester->mbdata->Coils.msTimeBeforeTest_enable = DEF_TIME_BEFORE_TEST_MS_DELAY;
tester->mbdata->HoldRegs.TimeBeforeDisconnect = DEF_TIME_BEFORE_DISCONNECT;
tester->mbdata->Coils.msTimeBeforeDisconnect_enable = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY;
tester->mbdata->HoldRegs.TimeForReverse = DEF_TIME_FOR_REVERSE;
tester->mbdata->Coils.msTimeForReverse_enable = DEF_TIME_FOR_REVERSE_MS_DELAY;
tester->mbdata->HoldRegs.TimeForForward = DEF_TIME_FOR_FORWARD;
tester->mbdata->Coils.msTimeForForward_enable = DEF_TIME_FOR_FORWARD_MS_DELAY;
tester->mbdata->HoldRegs.TimeDeadtime = DEF_DEADTIME;
tester->mbdata->Coils.msTimeDeadtime_enable = DEF_DEADTIME_MS_DELAY;
@@ -215,12 +222,9 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
tester->mbdata->HoldRegs.TimeBeforePeak = DEF_TIME_BEFORE_PEAK;
tester->mbdata->Coils.msTimeBeforePeak_enable = DEF_TIME_BEFORE_PEAK_MS_DELAY;
tester->mbdata->HoldRegs.TimeBeforeTest = DEF_TIME_BEFORE_TEST;
tester->mbdata->Coils.msTimeBeforeTest_enable = DEF_TIME_BEFORE_TEST_MS_DELAY;
/* Настройка АЦП */
tester->mbdata->HoldRegs.Adc_PulseWidth = TESTER_ADC_PULES_EXPETCED_WIDTH;
tester->mbdata->HoldRegs.Adc_PulseWidth = TESTER_ADC_PULSE_EXPETCED_WIDTH;
tester->mbdata->HoldRegs.Adc_CalibrValue = ADC_VALUE_CALIBR;
tester->mbdata->HoldRegs.Adc_ZeroValue = ADC_VALUE_ZERO;
tester->mbdata->HoldRegs.Adc_U_Calibr = ADC_U_CALIBR;

View File

@@ -59,7 +59,7 @@ typedef struct
MB_DataStructureTypeDef *mbdata;
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
GPIO_SwitchTypeDef SwStart; ///< структура кнопки старта
TESTER_LEDsTypeDef leds; ///< структура светодиодов

View File

@@ -145,10 +145,27 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U53FF72064980555724221187 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
<Name>-U005600373433510237363934 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>87</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134244302</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\Core\Tester_main\tester_main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\diode_tester\../Core/Tester_main/tester_main.c\87</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
@@ -180,6 +197,26 @@
<WinNumber>1</WinNumber>
<ItemText>tester-&gt;mbdata-&gt;Coils</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>RS_Buffer</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>hmodbus1,0x0A</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>MB_DATA,0x0A</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>\\diode_tester\../Core/Interfaces/modbus.c\MB_DATA.HoldRegs.TimeForForward</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
<Ww>
@@ -217,6 +254,26 @@
<WinNumber>2</WinNumber>
<ItemText>\\diode_tester\../Core/Tester_main/tester_main.c\TESTER</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>2</WinNumber>
<ItemText>MB_INFO</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>2</WinNumber>
<ItemText>RS_Buffer</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>2</WinNumber>
<ItemText>*ind</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>2</WinNumber>
<ItemText>&amp;ind</ItemText>
</Ww>
</WatchWindow2>
<Tracepoint>
<THDelay>0</THDelay>
@@ -241,7 +298,7 @@
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<aSer4>1</aSer4>
<StkLoc>1</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
@@ -262,28 +319,16 @@
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\ADC1</Name>
<WinId>35903</WinId>
</Entry>
<Entry>
<Name>System Viewer\AFIO</Name>
<WinId>35905</WinId>
</Entry>
<Entry>
<Name>System Viewer\DMA1</Name>
<WinId>35902</WinId>
</Entry>
<Entry>
<Name>System Viewer\GPIOA</Name>
<Name>System Viewer\GPIOB</Name>
<WinId>35904</WinId>
</Entry>
<Entry>
<Name>System Viewer\GPIOB</Name>
<WinId>35901</WinId>
<Name>System Viewer\TIM2</Name>
<WinId>35899</WinId>
</Entry>
<Entry>
<Name>System Viewer\USART1</Name>
<WinId>35900</WinId>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
@@ -350,6 +395,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Inc\main.h</PathWithFileName>
<FilenameWithoutPath>main.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@@ -360,7 +417,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -372,7 +429,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileNumber>7</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -384,7 +441,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -396,7 +453,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileNumber>9</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -408,7 +465,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -420,7 +477,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -432,7 +489,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -444,7 +501,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -464,7 +521,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -476,7 +533,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -488,7 +545,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -500,7 +557,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -512,7 +569,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -524,7 +581,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -536,7 +593,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -550,13 +607,13 @@
<Group>
<GroupName>MyLibs</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>21</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -568,7 +625,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>22</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -580,7 +637,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>23</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -592,7 +649,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>24</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -602,6 +659,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\MyLibs\general_gpio.c</PathWithFileName>
<FilenameWithoutPath>general_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\MyLibs\general_gpio.h</PathWithFileName>
<FilenameWithoutPath>general_gpio.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@@ -612,7 +693,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>27</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -632,7 +713,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -644,7 +725,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -656,7 +737,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -668,7 +749,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -680,7 +761,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -692,7 +773,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -704,7 +785,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -716,7 +797,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -736,7 +817,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -748,7 +829,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -760,7 +841,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -772,7 +853,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -784,7 +865,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -796,7 +877,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -808,7 +889,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -820,7 +901,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -832,7 +913,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -844,7 +925,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -856,7 +937,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -868,7 +949,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -880,7 +961,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -892,7 +973,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -904,7 +985,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -916,7 +997,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -936,7 +1017,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -405,6 +405,11 @@
<FileType>5</FileType>
<FilePath>..\Core\MyLibs\mylibs_include.h</FilePath>
</File>
<File>
<FileName>main.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Inc\main.h</FilePath>
</File>
</Files>
</Group>
<Group>
@@ -515,6 +520,16 @@
<FileType>5</FileType>
<FilePath>..\Core\MyLibs\trackers.h</FilePath>
</File>
<File>
<FileName>general_gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\MyLibs\general_gpio.c</FilePath>
</File>
<File>
<FileName>general_gpio.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\MyLibs\general_gpio.h</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@@ -39,21 +39,29 @@ Mcu.Name=STM32F103C(4-6)Tx
Mcu.Package=LQFP48
Mcu.Pin0=PC13-TAMPER-RTC
Mcu.Pin1=PC14-OSC32_IN
Mcu.Pin10=PA10
Mcu.Pin11=PA13
Mcu.Pin12=PA14
Mcu.Pin13=VP_SYS_VS_Systick
Mcu.Pin14=VP_TIM2_VS_ClockSourceINT
Mcu.Pin15=VP_TIM3_VS_ClockSourceINT
Mcu.Pin10=PB1
Mcu.Pin11=PB10
Mcu.Pin12=PB11
Mcu.Pin13=PB12
Mcu.Pin14=PB13
Mcu.Pin15=PB14
Mcu.Pin16=PB15
Mcu.Pin17=PA9
Mcu.Pin18=PA10
Mcu.Pin19=PA13
Mcu.Pin2=PD0-OSC_IN
Mcu.Pin20=PA14
Mcu.Pin21=VP_SYS_VS_Systick
Mcu.Pin22=VP_TIM2_VS_ClockSourceINT
Mcu.Pin23=VP_TIM3_VS_ClockSourceINT
Mcu.Pin3=PD1-OSC_OUT
Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PB0
Mcu.Pin6=PB1
Mcu.Pin7=PB10
Mcu.Pin8=PB11
Mcu.Pin9=PA9
Mcu.PinsNb=16
Mcu.Pin5=PA3
Mcu.Pin6=PA4
Mcu.Pin7=PA5
Mcu.Pin8=PA6
Mcu.Pin9=PB0
Mcu.PinsNb=24
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F103C6Tx
@@ -62,6 +70,9 @@ MxDb.Version=DB.6.0.121
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.EXTI3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI4_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
@@ -81,16 +92,56 @@ PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA3.GPIOParameters=GPIO_Label
PA3.GPIO_Label=PhaseAHiResponse
PA3.Locked=true
PA3.Signal=GPXTI3
PA4.GPIOParameters=GPIO_Label
PA4.GPIO_Label=PhaseALoResponse
PA4.Locked=true
PA4.Signal=GPXTI4
PA5.GPIOParameters=GPIO_Label
PA5.GPIO_Label=PhaseBHiResponse
PA5.Locked=true
PA5.Signal=GPXTI5
PA6.GPIOParameters=GPIO_Label
PA6.GPIO_Label=PhaseBLoResponse
PA6.Locked=true
PA6.Signal=GPXTI6
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB0.GPIOParameters=GPIO_Label
PB0.GPIO_Label=PhaseAHi
PB0.Locked=true
PB0.Signal=GPIO_Output
PB1.GPIOParameters=GPIO_Label
PB1.GPIO_Label=PhaseALo
PB1.Locked=true
PB1.Signal=GPIO_Output
PB10.GPIOParameters=GPIO_Label
PB10.GPIO_Label=PhaseBHi
PB10.Locked=true
PB10.Signal=GPIO_Output
PB11.GPIOParameters=GPIO_Label
PB11.GPIO_Label=PhaseBLo
PB11.Locked=true
PB11.Signal=GPIO_Output
PB12.GPIOParameters=GPIO_Label
PB12.GPIO_Label=PhaseAHiSignal
PB12.Locked=true
PB12.Signal=GPIO_Output
PB13.GPIOParameters=GPIO_Label
PB13.GPIO_Label=PhaseALoSignal
PB13.Locked=true
PB13.Signal=GPIO_Output
PB14.GPIOParameters=GPIO_Label
PB14.GPIO_Label=PhaseBHiSignal
PB14.Locked=true
PB14.Signal=GPIO_Output
PB15.GPIOParameters=GPIO_Label
PB15.GPIO_Label=PhaseBLoSignal
PB15.Locked=true
PB15.Signal=GPIO_Output
PC13-TAMPER-RTC.Locked=true
PC13-TAMPER-RTC.Signal=GPIO_Output
PC14-OSC32_IN.GPIOParameters=GPIO_PuPd
@@ -157,6 +208,14 @@ RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=8000000
SH.ADCx_IN0.0=ADC1_IN0,IN0
SH.ADCx_IN0.ConfNb=1
SH.GPXTI3.0=GPIO_EXTI3
SH.GPXTI3.ConfNb=1
SH.GPXTI4.0=GPIO_EXTI4
SH.GPXTI4.ConfNb=1
SH.GPXTI5.0=GPIO_EXTI5
SH.GPXTI5.ConfNb=1
SH.GPXTI6.0=GPIO_EXTI6
SH.GPXTI6.ConfNb=1
TIM3.IPParameters=Period,Prescaler,TIM_MasterOutputTrigger
TIM3.Period=65535
TIM3.Prescaler=72-1

Binary file not shown.