diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c
index 74c2933..95453a7 100644
--- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c
+++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c
@@ -737,15 +737,15 @@ void TIM_Call_IRQHandller(TIM_TypeDef* TIMx)
TIM6_DAC_IRQHandler();
else if (TIMx == TIM7)
TIM7_IRQHandler();
- else if ((TIMx == TIM8) || (TIMx == TIM13))
+ else if (((TIMx == TIM8) && (TIM8->SR & TIM_SR_UIF)) || (TIMx == TIM13))
TIM8_UP_TIM13_IRQHandler();
- else if ((TIMx == TIM1) || (TIMx == TIM9))
+ else if (((TIMx == TIM1) && 0) || (TIMx == TIM9))
TIM1_BRK_TIM9_IRQHandler();
- else if ((TIMx == TIM1) || (TIMx == TIM11))
+ else if (((TIMx == TIM1) && (TIM1->SR & (TIM_SR_CC1IF|TIM_SR_CC2IF | TIM_SR_CC3IF | TIM_SR_CC4IF))) || (TIMx == TIM11))
TIM1_TRG_COM_TIM11_IRQHandler();
- else if ((TIMx == TIM8) || (TIMx == TIM12))
+ else if (((TIMx == TIM8) && 0) || (TIMx == TIM12))
TIM8_BRK_TIM12_IRQHandler();
- else if ((TIMx == TIM8) || (TIMx == TIM14))
+ else if (((TIMx == TIM8) && (TIM8->SR & (TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF | TIM_SR_CC4IF))) || (TIMx == TIM14))
TIM8_TRG_COM_TIM14_IRQHandler();
SR_PROCESS(TIMx, SR);
diff --git a/MATLAB/app_wrapper/app_io.c b/MATLAB/app_wrapper/app_io.c
index 89def34..d9af256 100644
--- a/MATLAB/app_wrapper/app_io.c
+++ b/MATLAB/app_wrapper/app_io.c
@@ -11,12 +11,18 @@ float dbg[16];
void Write_UPP_Outputs(real_T* Buffer, int ind_port)
{
- int pwm1_pin = PIN_READ(PWM1);
- int pwm2_pin = PIN_READ(PWM2);
- int pwm3_pin = PIN_READ(PWM3);
- int pwm4_pin = PIN_READ(PWM4);
- int pwm5_pin = PIN_READ(PWM5);
- int pwm6_pin = PIN_READ(PWM6);
+ //int pwm1_pin = PIN_READ(PWM1);
+ //int pwm2_pin = PIN_READ(PWM2);
+ //int pwm3_pin = PIN_READ(PWM3);
+ //int pwm4_pin = PIN_READ(PWM4);
+ //int pwm5_pin = PIN_READ(PWM5);
+ //int pwm6_pin = PIN_READ(PWM6);
+ int pwm1_pin = (upp.hpwm.AllPhases[PHASE_A_POS].State == PWM_THYR_TIM_ACTIVE);
+ int pwm2_pin = (upp.hpwm.AllPhases[PHASE_A_NEG].State == PWM_THYR_TIM_ACTIVE);
+ int pwm3_pin = (upp.hpwm.AllPhases[PHASE_B_POS].State == PWM_THYR_TIM_ACTIVE);
+ int pwm4_pin = (upp.hpwm.AllPhases[PHASE_B_NEG].State == PWM_THYR_TIM_ACTIVE);
+ int pwm5_pin = (upp.hpwm.AllPhases[PHASE_C_POS].State == PWM_THYR_TIM_ACTIVE);
+ int pwm6_pin = (upp.hpwm.AllPhases[PHASE_C_NEG].State == PWM_THYR_TIM_ACTIVE);
int err = PIN_READ(RDO1);
int work = PIN_READ(RDO2);
int ready = PIN_READ(RDO3);
@@ -86,7 +92,7 @@ void Write_PowerMonitor(real_T* Buffer, int ind_port)
{ //20-21
WriteOutputArray(upp.pm.isr_cnt, ind_port, nn++);
- WriteOutputArray(upp.pm.slow_cnt, ind_port, nn++);
+ WriteOutputArray(upp.pm.slow_cnt%PM_SLOW_PERIOD_CNT, ind_port, nn++);
}
}
diff --git a/MATLAB/upp_r2023.slx b/MATLAB/upp_r2023.slx
index c6e9248..d3d073e 100644
Binary files a/MATLAB/upp_r2023.slx and b/MATLAB/upp_r2023.slx differ
diff --git a/UPP/AllLibs/MyLibs b/UPP/AllLibs/MyLibs
index 0fd9c78..c5a01c5 160000
--- a/UPP/AllLibs/MyLibs
+++ b/UPP/AllLibs/MyLibs
@@ -1 +1 @@
-Subproject commit 0fd9c78c32ed86a14026e72115f01ca000192464
+Subproject commit c5a01c56acd851843edc478bd65c7f276a9ac8e3
diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h
index aac2abc..33dee81 100644
--- a/UPP/Core/Configs/upp_config.h
+++ b/UPP/Core/Configs/upp_config.h
@@ -19,8 +19,8 @@
/* Дефайны для индексов */
/* Линейные напряжения */
-#define U_BA 0
-#define U_AC 1
+#define U_AB 0
+#define U_CA 1
#define U_BC 2
/* Токи фаз */
#define I_C 0
@@ -32,7 +32,7 @@
#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках
-#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП
+//#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП
#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В)
#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы
@@ -86,7 +86,7 @@
#define ANGLE_PID_KD_COEF_DEFAULT 0
/* Параметри мониторинга сети */
-#define PM_EXP_TAU_COEF_DEFAULT 0.05
+#define PM_EXP_TAU_COEF_DEFAULT 0.2
/* Параметры АЦП */
#define ADC_U_MAX_V_DEFAULT 1216.0
@@ -101,7 +101,7 @@
/* Параметры ШИМ для тиристоров */
#define PWM_THYR_FREQUENCY_HZ_DEFAULT 16000
#define PWM_THYR_DUTY_PERCENT_DEFAULT 0.5
-#define PWM_THYR_PULSE_NUMBER_DEFAULT 20
+#define PWM_THYR_PULSE_NUMBER_DEFAULT 10
/** //UPP_PARAMS_DEFAULT
* @}
diff --git a/UPP/Core/Inc/stm32f4xx_it.h b/UPP/Core/Inc/stm32f4xx_it.h
index a95542f..7148ff7 100644
--- a/UPP/Core/Inc/stm32f4xx_it.h
+++ b/UPP/Core/Inc/stm32f4xx_it.h
@@ -57,6 +57,7 @@ void PendSV_Handler(void);
void SysTick_Handler(void);
void TIM1_UP_TIM10_IRQHandler(void);
void TIM2_IRQHandler(void);
+void TIM8_UP_TIM13_IRQHandler(void);
void TIM8_TRG_COM_TIM14_IRQHandler(void);
void DMA2_Stream0_IRQHandler(void);
/* USER CODE BEGIN EFP */
diff --git a/UPP/Core/PowerMonitor/adc_tools.c b/UPP/Core/PowerMonitor/adc_tools.c
index a84dfc9..1d48798 100644
--- a/UPP/Core/PowerMonitor/adc_tools.c
+++ b/UPP/Core/PowerMonitor/adc_tools.c
@@ -156,14 +156,14 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
float *data = adc->Data;
// // Фильтрация от импульсных шумов для всех каналов
-// for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
-// {
-// if(Filter_isEnable(&adc->filter[i]))
-// {
-// // заменяем данные на отфильтрованные данные
-// data[i] = Filter_Process(&adc->filter[i], data[i]);
-// }
-// }
+ for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
+ {
+ if(Filter_isEnable(&adc->filter[i]))
+ {
+ // заменяем сырые данные на отфильтрованные данные
+ raw[i] = Filter_Process(&adc->filter[i], raw[i]);
+ }
+ }
// Перерасчеты Напряжений/Токов в единицы измерения
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
diff --git a/UPP/Core/PowerMonitor/adc_tools.h b/UPP/Core/PowerMonitor/adc_tools.h
index 1fd5db5..2367f97 100644
--- a/UPP/Core/PowerMonitor/adc_tools.h
+++ b/UPP/Core/PowerMonitor/adc_tools.h
@@ -53,7 +53,7 @@ static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
#define Filter_t FilterMedianInt_t
#define Filter_Init FilterMedianInt_Init
-#define Filter_Initializator 5
+#define Filter_Initializator 10, 2048
/**
* @brief Коэфициенты канала АЦП для пересчета в единицы измерения
diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c
index ed9a76c..8cc64b3 100644
--- a/UPP/Core/PowerMonitor/power_monitor.c
+++ b/UPP/Core/PowerMonitor/power_monitor.c
@@ -11,8 +11,8 @@
#include "adc.h"
#include "tim.h"
-#define U_BC_calc(_u1_, _u2_) (-((_u1_) + (_u2_)))
-#define I_B_calc(_i1_, _i2_) (-((_i1_) + (_i2_)))
+#define U_BC_calc(_uab_, _uca_) (-((_uab_) + (_uca_)))
+#define I_B_calc(_ia_, _ic_) (-((_ia_) + (_ic_)))
static void __SynchAvgFilters(PowerMonitor_t *hpm);
@@ -61,9 +61,9 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
return HAL_ERROR;
/* Инициализация каналов алгоритма перехода через ноль */
- if(ZC_ConfigChannel(&hpm->zc, U_BA, ZC_BOTH_EDGES) != HAL_OK)
+ if(ZC_ConfigChannel(&hpm->zc, U_AB, ZC_BOTH_EDGES) != HAL_OK)
return HAL_ERROR;
- if(ZC_ConfigChannel(&hpm->zc, U_AC, ZC_BOTH_EDGES) != HAL_OK)
+ if(ZC_ConfigChannel(&hpm->zc, U_CA, ZC_BOTH_EDGES) != HAL_OK)
return HAL_ERROR;
if(ZC_ConfigChannel(&hpm->zc, U_BC, ZC_BOTH_EDGES) != HAL_OK)
return HAL_ERROR;
@@ -96,7 +96,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
/* Инициализация среднего фильтра для частот */
for(int i = 0; i < 3; i++)
{
- if(FilterAverage_Init(&hpm->avg[AVG_FBA+i], MS_TO_SLOW_TICKS(PM_F_SLOW_PERIOD_MS), FILTER_MODE_DEFAULT))
+ if(FilterAverage_Init(&hpm->avg[AVG_FAB+i], MS_TO_SLOW_TICKS(PM_F_SLOW_PERIOD_MS), FILTER_MODE_DEFAULT))
return HAL_ERROR;
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
@@ -143,7 +143,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
meas->final.T[TEMP_2] = Filter_Process(&hpm->avg[AVG_TEMP2], t2);
/* Расчет третьей фазы */
- meas->slow.U[U_BC] = U_BC_calc(meas->slow.U[U_BA], meas->slow.U[U_AC]);
+ meas->slow.U[U_BC] = U_BC_calc(meas->slow.U[U_AB], meas->slow.U[U_CA]);
meas->slow.I[I_B] = I_B_calc(meas->slow.I[I_A], meas->slow.I[I_C]);
/* Расчет всякого для трех фаз отдельно */
@@ -156,13 +156,13 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
for(int i = 0; i < 3; i++)
{
/* Получение частоты фазы */
- meas->final.F[i] = Filter_Process(&hpm->avg[AVG_FBA+i], ZC_GetFrequency(&hpm->zc, i));
+ meas->final.F[i] = Filter_Process(&hpm->avg[AVG_FAB+i], ZC_GetFrequency(&hpm->zc, i));
meas->final.Offset[i] = ZC_GetOffset(&hpm->zc, i);
fmean += meas->final.F[i];
/* Средниее напряжение фазы */
uphase_mean = fabsf(meas->slow.U[i]);
- uphase_mean = Filter_Process(&hpm->exp[EXP_UBA+i], uphase_mean);
+ uphase_mean = Filter_Process(&hpm->exp[EXP_UAB+i], uphase_mean);
meas->final.U[i] = uphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */
/* Средний ток фазы */
@@ -188,7 +188,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
/* Расчет амплитуд трехфазной сети */
- float uamp = vector_abs_linear_calc(meas->slow.U[U_BA], meas->slow.U[U_AC])/SQRT2; /* SQRT2 - получить действующее */
+ float uamp = vector_abs_linear_calc(meas->slow.U[U_AB], meas->slow.U[U_CA])/SQRT2; /* SQRT2 - получить действующее */
float iamp = vector_abs_phase_calc(meas->slow.I[I_A], meas->slow.I[I_C])/SQRT2; /* SQRT2 - получить действующее */
meas->final.Uamp = Filter_Process(&hpm->exp[EXP_U], uamp);
meas->final.Iamp = Filter_Process(&hpm->exp[EXP_I], iamp);
@@ -215,9 +215,9 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
float u_base = u2f(PARAM_INTERNAL.nominal.U, 10);
float i_base = u2f(PARAM_INTERNAL.nominal.I, 10);
PowerMonitor_Measured_t *meas = &hpm->measured;
- meas->fast.U[U_BA] = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base;
- meas->fast.U[U_AC] = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base;
- meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_BA], meas->fast.U[U_AC]);
+ meas->fast.U[U_AB] = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base;
+ meas->fast.U[U_CA] = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base;
+ meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_AB], meas->fast.U[U_CA]);
meas->fast.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC]/i_base;
meas->fast.I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA]/i_base;
@@ -230,8 +230,8 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
//__SynchAvgFilters(hpm);
/* Average для медленной фильтрации */
- meas->slow.U[U_BA] = Filter_Process(&hpm->avg[AVG_UBA], meas->fast.U[U_BA]);
- meas->slow.U[U_AC] = Filter_Process(&hpm->avg[AVG_UAC], meas->fast.U[U_AC]);
+ meas->slow.U[U_AB] = Filter_Process(&hpm->avg[AVG_UAB], meas->fast.U[U_AB]);
+ meas->slow.U[U_CA] = Filter_Process(&hpm->avg[AVG_UCA], meas->fast.U[U_CA]);
meas->slow.I[I_C] = Filter_Process(&hpm->avg[AVG_IC], meas->fast.I[I_C]);
meas->slow.I[I_A] = Filter_Process(&hpm->avg[AVG_IA], meas->fast.I[I_A]);
diff --git a/UPP/Core/PowerMonitor/power_monitor.h b/UPP/Core/PowerMonitor/power_monitor.h
index b0a4872..09e90c4 100644
--- a/UPP/Core/PowerMonitor/power_monitor.h
+++ b/UPP/Core/PowerMonitor/power_monitor.h
@@ -15,8 +15,8 @@
/* Индексы экспоненциальных фильтров */
#define EXP_ALL 8
#define EXP_U 0
-#define EXP_UBA 1
-#define EXP_UAC 2
+#define EXP_UAB 1
+#define EXP_UCA 2
#define EXP_UBC 3
#define EXP_I 4
#define EXP_IC 5
@@ -24,14 +24,14 @@
#define EXP_IB 7
#define AVG_ALL 9
-#define AVG_UBA 0
-#define AVG_UAC 1
+#define AVG_UAB 0
+#define AVG_UCA 1
#define AVG_IC 2
#define AVG_IA 3
#define AVG_TEMP1 4
#define AVG_TEMP2 5
-#define AVG_FBA 6
-#define AVG_FAC 7
+#define AVG_FAB 6
+#define AVG_FCA 7
#define AVG_FBC 8
/**
diff --git a/UPP/Core/PowerMonitor/power_protect.c b/UPP/Core/PowerMonitor/power_protect.c
index 1f105ad..11ac38b 100644
--- a/UPP/Core/PowerMonitor/power_protect.c
+++ b/UPP/Core/PowerMonitor/power_protect.c
@@ -142,11 +142,11 @@ void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect, U
/*=============== ЗАЩИТЫ ПО ЧАСТОТЕ ==================*/
- if(measure->final.F[U_AC] > lFmax)
+ if(measure->final.F[U_CA] > lFmax)
{
ERR_PRIVATE.fac_max = 1;
}
- else if (measure->final.F[U_AC] < lFmin)
+ else if (measure->final.F[U_CA] < lFmin)
{
ERR_PRIVATE.fac_min = 1;
}
@@ -156,11 +156,11 @@ void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect, U
ERR_PRIVATE.fac_min = 0;
}
- if(measure->final.F[U_BA] > lFmax)
+ if(measure->final.F[U_AB] > lFmax)
{
ERR_PRIVATE.fba_max = 1;
}
- else if (measure->final.F[U_BA] < lFmin)
+ else if (measure->final.F[U_AB] < lFmin)
{
ERR_PRIVATE.fba_min = 1;
}
diff --git a/UPP/Core/Src/stm32f4xx_it.c b/UPP/Core/Src/stm32f4xx_it.c
index 974357c..368ee07 100644
--- a/UPP/Core/Src/stm32f4xx_it.c
+++ b/UPP/Core/Src/stm32f4xx_it.c
@@ -232,6 +232,20 @@ void TIM2_IRQHandler(void)
/* USER CODE END TIM2_IRQn 1 */
}
+/**
+ * @brief This function handles TIM8 update interrupt and TIM13 global interrupt.
+ */
+void TIM8_UP_TIM13_IRQHandler(void)
+{
+ /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */
+
+ /* USER CODE END TIM8_UP_TIM13_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim8);
+ /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */
+ UPP_PWM_Handle();
+ /* USER CODE END TIM8_UP_TIM13_IRQn 1 */
+}
+
/**
* @brief This function handles TIM8 trigger and commutation interrupts and TIM14 global interrupt.
*/
diff --git a/UPP/Core/Src/tim.c b/UPP/Core/Src/tim.c
index 1f5a7d0..9659878 100644
--- a/UPP/Core/Src/tim.c
+++ b/UPP/Core/Src/tim.c
@@ -461,6 +461,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM8_CLK_ENABLE();
/* TIM8 interrupt Init */
+ HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);
/* USER CODE BEGIN TIM8_MspInit 1 */
@@ -604,6 +606,7 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM8_CLK_DISABLE();
/* TIM8 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn);
HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn);
/* USER CODE BEGIN TIM8_MspDeInit 1 */
diff --git a/UPP/Core/UPP/pwm_thyristors.c b/UPP/Core/UPP/pwm_thyristors.c
index e5666e1..ca30e8f 100644
--- a/UPP/Core/UPP/pwm_thyristors.c
+++ b/UPP/Core/UPP/pwm_thyristors.c
@@ -367,6 +367,7 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm)
// после того как пачка импульсов прошла отключаем активный канал
if (hPhase->State == PWM_THYR_TIM_ACTIVE)
{
+ hPhase->State = PWM_THYR_TIM_WAIT;
if(hpwm->f.Running)
hpwm->f.Running--;
__PWM_SetOutputState(hPhase, PWM_DISABLE);
diff --git a/UPP/Core/UPP/pwm_thyristors.h b/UPP/Core/UPP/pwm_thyristors.h
index ee1075b..8a1ff6c 100644
--- a/UPP/Core/UPP/pwm_thyristors.h
+++ b/UPP/Core/UPP/pwm_thyristors.h
@@ -25,11 +25,11 @@
// Индексы для структур каналов @ref PWM_Handle_t
#define PHASE_A_POS 0
-#define PHASE_B_POS 1
-#define PHASE_C_POS 2
+#define PHASE_C_POS 1
+#define PHASE_B_POS 2
#define PHASE_A_NEG 3
-#define PHASE_B_NEG 4
-#define PHASE_C_NEG 5
+#define PHASE_C_NEG 4
+#define PHASE_B_NEG 5
#define PHASE_UNKNOWN 6
diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx
index 3504953..29b71b0 100644
--- a/UPP/MDK-ARM/UPP.uvoptx
+++ b/UPP/MDK-ARM/UPP.uvoptx
@@ -355,7 +355,7 @@
5
1
- hbt,0x0A
+ upp.pm.measured
6
@@ -501,7 +501,7 @@
0
1
- 0
+ 1
0
0
0
@@ -515,7 +515,7 @@
0
0
0
- 0
+ 1
0
0
0
diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx
index 8574a4d..70d41f4 100644
--- a/UPP/MDK-ARM/UPP.uvprojx
+++ b/UPP/MDK-ARM/UPP.uvprojx
@@ -17,8 +17,8 @@
STM32F427ZGTx
STMicroelectronics
- Keil.STM32F4xx_DFP.2.16.0
- http://www.keil.com/pack/
+ Keil.STM32F4xx_DFP.2.17.1
+ https://www.keil.com/pack/
IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ
@@ -1004,8 +1004,8 @@
STM32F417ZGTx
STMicroelectronics
- Keil.STM32F4xx_DFP.2.16.0
- http://www.keil.com/pack/
+ Keil.STM32F4xx_DFP.2.17.1
+ https://www.keil.com/pack/
IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc
index 5d60256..fd38e5f 100644
--- a/UPP/UPP.ioc
+++ b/UPP/UPP.ioc
@@ -163,6 +163,7 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
+NVIC.TIM8_UP_TIM13_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
NVIC.TimeBaseIP=TIM14
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false