Compare commits
3 Commits
297cf9802e
...
b61a11b4fe
| Author | SHA1 | Date | |
|---|---|---|---|
| b61a11b4fe | |||
| 5d8dc1183b | |||
| e1d6f1139d |
2
.gitignore
vendored
2
.gitignore
vendored
@ -62,3 +62,5 @@ JLinkLog.txt
|
|||||||
/MATLAB/MCU.lib
|
/MATLAB/MCU.lib
|
||||||
/MATLAB/MCU.mexw64.manifest
|
/MATLAB/MCU.mexw64.manifest
|
||||||
/MATLAB/upp_r2023.slx.autosave
|
/MATLAB/upp_r2023.slx.autosave
|
||||||
|
/UPP/MDK-ARM/DebugConfig/
|
||||||
|
/UPP/MDK-ARM/Debug_F417
|
||||||
|
|||||||
@ -421,6 +421,7 @@ void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState Pin
|
|||||||
{
|
{
|
||||||
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
|
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
|
||||||
}
|
}
|
||||||
|
__GPIO_BSRR_Sim(GPIOx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -442,6 +443,7 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
|
|||||||
|
|
||||||
/* Set selected pins that were at low level, and reset ones that were high */
|
/* Set selected pins that were at low level, and reset ones that were high */
|
||||||
GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
|
GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
|
||||||
|
__GPIO_BSRR_Sim(GPIOx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -16,6 +16,18 @@ void Simulate_GPIO_BSRR(void)
|
|||||||
#ifdef GPIOD
|
#ifdef GPIOD
|
||||||
__GPIO_BSRR_Sim(GPIOD);
|
__GPIO_BSRR_Sim(GPIOD);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef GPIOE
|
||||||
|
__GPIO_BSRR_Sim(GPIOE);
|
||||||
|
#endif
|
||||||
|
#ifdef GPIOF
|
||||||
|
__GPIO_BSRR_Sim(GPIOF);
|
||||||
|
#endif
|
||||||
|
#ifdef GPIOG
|
||||||
|
__GPIO_BSRR_Sim(GPIOG);
|
||||||
|
#endif
|
||||||
|
#ifdef GPIOH
|
||||||
|
__GPIO_BSRR_Sim(GPIOH);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,7 @@ void Simulate_Periph_Sim(void)
|
|||||||
{
|
{
|
||||||
Simulate_TIMs();
|
Simulate_TIMs();
|
||||||
Simulate_ADCs();
|
Simulate_ADCs();
|
||||||
|
Simulate_GPIO_BSRR();
|
||||||
}
|
}
|
||||||
|
|
||||||
// MCU PERIPH DEINIT
|
// MCU PERIPH DEINIT
|
||||||
|
|||||||
@ -37,9 +37,10 @@ const int inOffsets[IN_PORT_NUMB] = {
|
|||||||
*/
|
*/
|
||||||
const int outLengths[OUT_PORT_NUMB] = {
|
const int outLengths[OUT_PORT_NUMB] = {
|
||||||
THYR_PORT_1_WIDTH,
|
THYR_PORT_1_WIDTH,
|
||||||
PM_PORT_2_WIDTH,
|
DO_PORT_2_WIDTH,
|
||||||
ANGLE_PORT_3_WIDTH,
|
PM_PORT_3_WIDTH,
|
||||||
OUT_PORT_4_WIDTH
|
ANGLE_PORT_4_WIDTH,
|
||||||
|
OUT_PORT_5_WIDTH
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Таблица смещений в выходном массиве OUT
|
* @brief Таблица смещений в выходном массиве OUT
|
||||||
@ -48,7 +49,8 @@ const int outOffsets[OUT_PORT_NUMB] = {
|
|||||||
OFFSET_OUT_ARRAY_1,
|
OFFSET_OUT_ARRAY_1,
|
||||||
OFFSET_OUT_ARRAY_2,
|
OFFSET_OUT_ARRAY_2,
|
||||||
OFFSET_OUT_ARRAY_3,
|
OFFSET_OUT_ARRAY_3,
|
||||||
OFFSET_OUT_ARRAY_4
|
OFFSET_OUT_ARRAY_4,
|
||||||
|
OFFSET_OUT_ARRAY_5
|
||||||
};
|
};
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|||||||
@ -57,11 +57,12 @@
|
|||||||
#define ADC_PORT_1_WIDTH 6
|
#define ADC_PORT_1_WIDTH 6
|
||||||
#define IN_PORT_2_WIDTH 16
|
#define IN_PORT_2_WIDTH 16
|
||||||
|
|
||||||
#define OUT_PORT_NUMB 4
|
#define OUT_PORT_NUMB 5
|
||||||
#define THYR_PORT_1_WIDTH 6
|
#define THYR_PORT_1_WIDTH 6
|
||||||
#define PM_PORT_2_WIDTH 32
|
#define DO_PORT_2_WIDTH 3
|
||||||
#define ANGLE_PORT_3_WIDTH 16
|
#define PM_PORT_3_WIDTH 32
|
||||||
#define OUT_PORT_4_WIDTH 16
|
#define ANGLE_PORT_4_WIDTH 16
|
||||||
|
#define OUT_PORT_5_WIDTH 16
|
||||||
|
|
||||||
// INPUT/OUTPUTS PARAMS END
|
// INPUT/OUTPUTS PARAMS END
|
||||||
/** WRAPPER_CONF
|
/** WRAPPER_CONF
|
||||||
@ -100,13 +101,14 @@
|
|||||||
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
||||||
|
|
||||||
/// === Полный размер буфера ===
|
/// === Полный размер буфера ===
|
||||||
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + PM_PORT_2_WIDTH + ANGLE_PORT_3_WIDTH + OUT_PORT_4_WIDTH)
|
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + DO_PORT_2_WIDTH + PM_PORT_3_WIDTH + ANGLE_PORT_4_WIDTH + OUT_PORT_5_WIDTH)
|
||||||
|
|
||||||
/// === Смещения массивов (внутри общего буфера) ===
|
/// === Смещения массивов (внутри общего буфера) ===
|
||||||
#define OFFSET_OUT_ARRAY_1 0
|
#define OFFSET_OUT_ARRAY_1 0
|
||||||
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
||||||
#define OFFSET_OUT_ARRAY_3 (OFFSET_OUT_ARRAY_2 + PM_PORT_2_WIDTH)
|
#define OFFSET_OUT_ARRAY_3 (OFFSET_OUT_ARRAY_2 + DO_PORT_2_WIDTH)
|
||||||
#define OFFSET_OUT_ARRAY_4 (OFFSET_OUT_ARRAY_3 + ANGLE_PORT_3_WIDTH)
|
#define OFFSET_OUT_ARRAY_4 (OFFSET_OUT_ARRAY_3 + PM_PORT_3_WIDTH)
|
||||||
|
#define OFFSET_OUT_ARRAY_5 (OFFSET_OUT_ARRAY_4 + ANGLE_PORT_4_WIDTH)
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,7 @@ void app_init(void) {
|
|||||||
UPP_SetDefault(1, 1);
|
UPP_SetDefault(1, 1);
|
||||||
UPP_Init();
|
UPP_Init();
|
||||||
UPP_PreWhile();
|
UPP_PreWhile();
|
||||||
|
UPP_DO.CEN(DISABLE);
|
||||||
|
|
||||||
// USER APP INIT END
|
// USER APP INIT END
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ float dbg[16];
|
|||||||
extern float iref_dbg;
|
extern float iref_dbg;
|
||||||
#define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0
|
#define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0
|
||||||
|
|
||||||
void Write_Thyristors(real_T* Buffer, int ind_port)
|
void Write_UPP_Outputs(real_T* Buffer, int ind_port)
|
||||||
{
|
{
|
||||||
int pwm1_pin = PIN_READ(PWM1);
|
int pwm1_pin = PIN_READ(PWM1);
|
||||||
int pwm2_pin = PIN_READ(PWM2);
|
int pwm2_pin = PIN_READ(PWM2);
|
||||||
@ -18,14 +18,39 @@ void Write_Thyristors(real_T* Buffer, int ind_port)
|
|||||||
int pwm4_pin = PIN_READ(PWM4);
|
int pwm4_pin = PIN_READ(PWM4);
|
||||||
int pwm5_pin = PIN_READ(PWM5);
|
int pwm5_pin = PIN_READ(PWM5);
|
||||||
int pwm6_pin = PIN_READ(PWM6);
|
int pwm6_pin = PIN_READ(PWM6);
|
||||||
|
int err = PIN_READ(RDO1);
|
||||||
|
int work = PIN_READ(RDO2);
|
||||||
|
int ready = PIN_READ(RDO3);
|
||||||
|
|
||||||
|
if (CEN_GPIO_Port->ODR & CEN_Pin)
|
||||||
|
{
|
||||||
|
WriteOutputArray(0, ind_port, 0);
|
||||||
|
WriteOutputArray(0, ind_port, 1);
|
||||||
|
WriteOutputArray(0, ind_port, 2);
|
||||||
|
WriteOutputArray(0, ind_port, 3);
|
||||||
|
WriteOutputArray(0, ind_port, 4);
|
||||||
|
WriteOutputArray(0, ind_port, 5);
|
||||||
|
|
||||||
|
|
||||||
|
WriteOutputArray(0, ind_port+1, 0);
|
||||||
|
WriteOutputArray(0, ind_port+1, 1);
|
||||||
|
WriteOutputArray(0, ind_port+1, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
WriteOutputArray(pwm1_pin, ind_port, 0);
|
WriteOutputArray(pwm1_pin, ind_port, 0);
|
||||||
WriteOutputArray(pwm2_pin, ind_port, 1);
|
WriteOutputArray(pwm2_pin, ind_port, 1);
|
||||||
WriteOutputArray(pwm3_pin, ind_port, 2);
|
WriteOutputArray(pwm3_pin, ind_port, 2);
|
||||||
WriteOutputArray(pwm4_pin, ind_port, 3);
|
WriteOutputArray(pwm4_pin, ind_port, 3);
|
||||||
WriteOutputArray(pwm5_pin, ind_port, 4);
|
WriteOutputArray(pwm5_pin, ind_port, 4);
|
||||||
WriteOutputArray(pwm6_pin, ind_port, 5);
|
WriteOutputArray(pwm6_pin, ind_port, 5);
|
||||||
|
|
||||||
|
WriteOutputArray(ready, ind_port+1, 0);
|
||||||
|
WriteOutputArray(work, ind_port+1, 1);
|
||||||
|
WriteOutputArray(err, ind_port+1, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Write_PowerMonitor(real_T* Buffer, int ind_port)
|
void Write_PowerMonitor(real_T* Buffer, int ind_port)
|
||||||
@ -66,14 +91,14 @@ void Write_AngleControl(real_T* Buffer, int ind_port)
|
|||||||
{
|
{
|
||||||
int nn = 0;
|
int nn = 0;
|
||||||
|
|
||||||
WriteOutputArray(iref_dbg, ind_port, nn++);
|
WriteOutputArray(upp.hangle.Iref, ind_port, nn++);
|
||||||
WriteOutputArray(upp.pm.measured.final.Iamp, ind_port, nn++);
|
WriteOutputArray(upp.pm.measured.final.Iamp, ind_port, nn++);
|
||||||
WriteOutputArray(upp.hangle.alpha, ind_port, nn++);
|
WriteOutputArray(upp.hangle.alpha, ind_port, nn++);
|
||||||
|
|
||||||
|
|
||||||
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
|
||||||
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
|
||||||
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +123,10 @@ void app_readInputs(const real_T* Buffer) {
|
|||||||
MB_INTERNAL.param.angle.PID_Kp = ReadInputArray(1, 4) * 10000;
|
MB_INTERNAL.param.angle.PID_Kp = ReadInputArray(1, 4) * 10000;
|
||||||
MB_INTERNAL.param.angle.PID_Ki = ReadInputArray(1, 5) * 10000;
|
MB_INTERNAL.param.angle.PID_Ki = ReadInputArray(1, 5) * 10000;
|
||||||
MB_INTERNAL.param.angle.PID_Kd = ReadInputArray(1, 6) * 10000;
|
MB_INTERNAL.param.angle.PID_Kd = ReadInputArray(1, 6) * 10000;
|
||||||
|
MB_INTERNAL.param.angle.PID_ExpAlpha = ReadInputArray(1, 7) * 65535;
|
||||||
|
|
||||||
|
MB_INTERNAL.param.nominal.U = ReadInputArray(1, 8) * 10000;
|
||||||
|
MB_INTERNAL.param.nominal.I = ReadInputArray(1, 9) * 65535;
|
||||||
// USER APP INPUT END
|
// USER APP INPUT END
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,11 +137,11 @@ void app_readInputs(const real_T* Buffer) {
|
|||||||
*/
|
*/
|
||||||
void app_writeOutputBuffer(real_T* Buffer) {
|
void app_writeOutputBuffer(real_T* Buffer) {
|
||||||
// USER APP OUTPUT START
|
// USER APP OUTPUT START
|
||||||
Write_Thyristors(Buffer, 0);
|
Write_UPP_Outputs(Buffer, 0);
|
||||||
|
|
||||||
Write_PowerMonitor(Buffer, 1);
|
Write_PowerMonitor(Buffer, 2);
|
||||||
|
|
||||||
Write_AngleControl(Buffer, 2);
|
Write_AngleControl(Buffer, 3);
|
||||||
|
|
||||||
int nn = 0;
|
int nn = 0;
|
||||||
//WriteOutputArray(upp.hangle.htim->Instance->CNT, 2, nn++);
|
//WriteOutputArray(upp.hangle.htim->Instance->CNT, 2, nn++);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
clear all
|
clear all
|
||||||
|
|
||||||
Ts = 5e-6;
|
Ts = 5e-6;
|
||||||
Vnom = 690;
|
Vnom = 400;
|
||||||
Fnom = 50;
|
Fnom = 50;
|
||||||
|
|
||||||
Temperature1 = 2.22; % 20 градусов
|
Temperature1 = 2.22; % 20 градусов
|
||||||
|
|||||||
Binary file not shown.
@ -1 +1 @@
|
|||||||
Subproject commit 272642b310043355b0af95e0410afbbcb74d17b7
|
Subproject commit 2344926f92f837703ae7a6d484daf6ca3210472a
|
||||||
@ -20,6 +20,7 @@
|
|||||||
#ifndef _MODBUS_CONFIG_H_
|
#ifndef _MODBUS_CONFIG_H_
|
||||||
#define _MODBUS_CONFIG_H_
|
#define _MODBUS_CONFIG_H_
|
||||||
#include "upp_defs.h"
|
#include "upp_defs.h"
|
||||||
|
#include "upp_io.h"
|
||||||
|
|
||||||
// Общие параметры
|
// Общие параметры
|
||||||
#define MODBUS_DEVICE_ID 1 ///< Адрес устройства в сети Modbus
|
#define MODBUS_DEVICE_ID 1 ///< Адрес устройства в сети Modbus
|
||||||
@ -40,8 +41,8 @@
|
|||||||
// Периферия (опционально)
|
// Периферия (опционально)
|
||||||
//#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
|
//#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
|
||||||
//#define mb_htim htim3 ///< Удобный дефайн для модбасовского таймера
|
//#define mb_htim htim3 ///< Удобный дефайн для модбасовского таймера
|
||||||
//#define RS_EnableReceive() ///< Функция изменения направления передачи на ПРИЕМ для RS-485
|
#define RS_EnableReceive() UPP_UART1_SetDirection(GPIO_PIN_RESET) ///< Функция изменения направления передачи на ПРИЕМ для RS-485
|
||||||
//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
|
#define RS_EnableTransmit() UPP_UART1_SetDirection(GPIO_PIN_RESET) ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
|
||||||
|
|
||||||
|
|
||||||
// Модули modbus
|
// Модули modbus
|
||||||
|
|||||||
@ -99,9 +99,10 @@
|
|||||||
#define BENCH_TIME_ENABLE ///< Включить бенч времени
|
#define BENCH_TIME_ENABLE ///< Включить бенч времени
|
||||||
#define BENCH_TIME_MAX_CHANNELS 5 ///< Максимальное количество каналов измерения
|
#define BENCH_TIME_MAX_CHANNELS 5 ///< Максимальное количество каналов измерения
|
||||||
|
|
||||||
#define BT_ADC 0
|
#define BT_SLOWCALC 0
|
||||||
#define BT_PWM 1
|
#define BT_ADC 1
|
||||||
#define BT_SYSTICK 2
|
#define BT_PWM 2
|
||||||
|
#define BT_SYSTICK 3
|
||||||
/** GEN_CONFIG
|
/** GEN_CONFIG
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
#define NOM_U_DEVIATION_PLUS_PERCENT_DEFAULT 6
|
#define NOM_U_DEVIATION_PLUS_PERCENT_DEFAULT 6
|
||||||
#define NOM_U_DEVIATION_MINUS_PERCENT_DEFAULT 10
|
#define NOM_U_DEVIATION_MINUS_PERCENT_DEFAULT 10
|
||||||
#define NOM_F_HZ_DEFAULT 50
|
#define NOM_F_HZ_DEFAULT 50
|
||||||
#define NOM_F_DEVIATION_PLUS_PERCENT_DEFAULT 5
|
#define NOM_F_DEVIATION_PLUS_PERCENT_DEFAULT 10
|
||||||
#define NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT 5
|
#define NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT 10
|
||||||
#define NOM_I_A_DEFAULT 5
|
#define NOM_I_A_DEFAULT 5
|
||||||
|
|
||||||
/* Параметры ПУИ */
|
/* Параметры ПУИ */
|
||||||
@ -66,8 +66,19 @@
|
|||||||
#define PUI_Tdelay_SECONDS_DEFAULT 30
|
#define PUI_Tdelay_SECONDS_DEFAULT 30
|
||||||
#define PUI_Interlace_EN_DEFAULT 5000
|
#define PUI_Interlace_EN_DEFAULT 5000
|
||||||
|
|
||||||
/* Дефолтное коливчество тиков для задержки выставления ошибки */
|
/* Время задержки перед выставлением ошибки */
|
||||||
#define ERRORS_DELAY_TICKS_DEFAULT 10
|
#define ERRORS_DELAY_MS_UAMP_ERR 1500 // todo
|
||||||
|
#define ERRORS_DELAY_MS_F_ERR 5000
|
||||||
|
#define ERRORS_DELAY_MS_DEFAULT 0.1f
|
||||||
|
|
||||||
|
|
||||||
|
/* Параметры регулятора угла */
|
||||||
|
#define ANGLE_MAX_PERCENT_DEFAULT 0.8
|
||||||
|
#define ANGLE_MIN_PERCENT_DEFAULT 0.1
|
||||||
|
#define ANGLE_PID_KP_COEF_DEFAULT 1.0
|
||||||
|
#define ANGLE_PID_KI_COEF_DEFAULT 0.1
|
||||||
|
#define ANGLE_PID_KD_COEF_DEFAULT 0
|
||||||
|
#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.01
|
||||||
|
|
||||||
/* Параметри мониторинга сети */
|
/* Параметри мониторинга сети */
|
||||||
#define PM_EXP_ALPHA_COEF_DEFAULT 0.01
|
#define PM_EXP_ALPHA_COEF_DEFAULT 0.01
|
||||||
@ -98,14 +109,9 @@
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#if defined(STM32F417xx)
|
|
||||||
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Периоды вызова всякого */
|
/* Периоды вызова всякого */
|
||||||
#define PM_ADC_PERIOD_US 10 ///< Период опроса АЦП в мкс
|
#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс
|
||||||
#define PM_SLOW_PERIOD_CNT 50 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US
|
#define PM_SLOW_PERIOD_CNT 25 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US
|
||||||
#define PM_TEMP_SLOW_PERIOD_CNT 200 ///< Период обновления датчиков температуры в тиках @ref PM_SLOW_PERIOD_CNT
|
#define PM_TEMP_SLOW_PERIOD_CNT 200 ///< Период обновления датчиков температуры в тиках @ref PM_SLOW_PERIOD_CNT
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +121,25 @@
|
|||||||
#define PWM_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы)
|
#define PWM_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы)
|
||||||
#define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
#define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ======
|
||||||
|
#if defined(STM32F417xx)
|
||||||
|
#undef ADC_TIM8_FREQ_MZH
|
||||||
|
#undef PWM_TIM1_FREQ_MHZ
|
||||||
|
#undef PWM_TIM3_FREQ_MHZ
|
||||||
|
#undef ANGLE_TIM2_FREQ_MHZ
|
||||||
|
|
||||||
|
// У 417 меньше частота поэтому меняем прескалер
|
||||||
|
#define ADC_TIM8_FREQ_MZH 168 ///< Частота тиков таймера АЦП
|
||||||
|
#define PWM_TIM1_FREQ_MHZ 168 ///< Частота тиков таймера ШИМ (1-4 каналы)
|
||||||
|
#define PWM_TIM3_FREQ_MHZ 84 ///< Частота тиков таймера ШИМ (5-6 каналы)
|
||||||
|
#define ANGLE_TIM2_FREQ_MHZ 84 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
||||||
|
|
||||||
|
#define HAL_PWREx_EnableOverDrive() HAL_ERROR
|
||||||
|
#endif
|
||||||
/** //UPP_COMPILED_PARAMS
|
/** //UPP_COMPILED_PARAMS
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -152,8 +152,16 @@ typedef struct {
|
|||||||
#define PM_SLOW_PERIOD_US (PM_ADC_PERIOD_US*PM_SLOW_PERIOD_CNT)
|
#define PM_SLOW_PERIOD_US (PM_ADC_PERIOD_US*PM_SLOW_PERIOD_CNT)
|
||||||
#define ANGLE_PERIOD_MS(_freq_) (((float)1/(_freq_*2))*1000)
|
#define ANGLE_PERIOD_MS(_freq_) (((float)1/(_freq_*2))*1000)
|
||||||
|
|
||||||
|
#define US_TO_SLOW_TICKS(_us_) ((_us_)/PM_SLOW_PERIOD_US)
|
||||||
|
#define MS_TO_SLOW_TICKS(_ms_) US_TO_SLOW_TICKS((_ms_)*1000)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define PARAM_INTERNAL MB_INTERNAL.param
|
#define PARAM_INTERNAL MB_INTERNAL.param
|
||||||
#define PARAM_PUI MB_DATA.HoldRegs.pui_params
|
#define PARAM_PUI MB_DATA.HoldRegs.pui_params
|
||||||
|
#define ERR_PUI errors.pui.err
|
||||||
|
#define ERR_PRIVATE errors.prvt.f.err
|
||||||
|
#define ERR_PRIVATE_CNT errors.prvt.cnt
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Состояния полуволны
|
* @brief Состояния полуволны
|
||||||
|
|||||||
@ -31,8 +31,11 @@ extern "C" {
|
|||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
/* Общее по УПП */
|
||||||
#include "upp_defs.h"
|
#include "upp_defs.h"
|
||||||
|
#include "upp_io.h"
|
||||||
#include "upp_errors.h"
|
#include "upp_errors.h"
|
||||||
|
/* Общие библиотеки */
|
||||||
#include "mylibs_include.h"
|
#include "mylibs_include.h"
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
@ -172,6 +175,7 @@ void Error_Handler(void);
|
|||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
extern TIM_HandleTypeDef ustim;
|
extern TIM_HandleTypeDef ustim;
|
||||||
|
void SystemClock_Config_STM32F417(void);
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -100,8 +100,12 @@ HAL_StatusTypeDef ADC_Start(ADC_Periodic_t *adc, float PeriodUs)
|
|||||||
if(PeriodUs == 0)
|
if(PeriodUs == 0)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
// Остановить перед перенастройкой
|
||||||
|
HAL_TIM_Base_Stop(adc->htim);
|
||||||
|
|
||||||
// Запускаем таймер который будет запускать опрос АЦП с заданным периодом
|
// Запускаем таймер который будет запускать опрос АЦП с заданным периодом
|
||||||
__HAL_TIM_SET_AUTORELOAD(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM8_FREQ_MZH));
|
__HAL_TIM_SET_AUTORELOAD(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM8_FREQ_MZH));
|
||||||
|
|
||||||
res = HAL_TIM_Base_Start(adc->htim);
|
res = HAL_TIM_Base_Start(adc->htim);
|
||||||
if(res != HAL_OK)
|
if(res != HAL_OK)
|
||||||
{
|
{
|
||||||
@ -151,29 +155,27 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
|
|||||||
uint16_t *raw = adc->RawData;
|
uint16_t *raw = adc->RawData;
|
||||||
float *data = adc->Data;
|
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_REGULAR_CHANNELS; i++)
|
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
ADC_Coefs_t *coefs = &adc->Coefs[i];
|
ADC_Coefs_t *coefs = &adc->Coefs[i];
|
||||||
data[i] = ((float)(raw[i])-coefs->lZero) * coefs->vMax / (coefs->lMax-coefs->lZero);
|
data[i] = ((float)(raw[i])-coefs->lZero) * coefs->vMax / (coefs->lMax-coefs->lZero);
|
||||||
// ADC_UpdateStatistics(adc, i, ADC_LEVEL_AC);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Фильтрация от шумов для всех каналов
|
|
||||||
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 = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++)
|
for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
data[i] = Filter_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]);
|
data[i] = Filter_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]);
|
||||||
// ADC_UpdateStatistics(adc, i, ADC_LEVEL_BASE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Filter_isDataReady(&adc->filter[0]))
|
if(Filter_isDataReady(&adc->filter[0]))
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
static const float adc_temp_vals[] = ADC_TEMPERATURES;
|
static const float adc_temp_vals[] = ADC_TEMPERATURES;
|
||||||
static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
|
static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
|
||||||
|
|
||||||
#define Filter_t FilterMedian_t
|
#define Filter_t FilterMedianInt_t
|
||||||
#define Filter_Init FilterMedian_Init
|
#define Filter_Init FilterMedianInt_Init
|
||||||
#define Filter_Initializator 5
|
#define Filter_Initializator 5
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -141,6 +141,9 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
float fmean = 0; // средняя частота по трем фазам
|
float fmean = 0; // средняя частота по трем фазам
|
||||||
float iphase_mean = 0; // средний ток каждой фазы
|
float iphase_mean = 0; // средний ток каждой фазы
|
||||||
float uphase_mean = 0; // среднее напряжение каждой фазы
|
float uphase_mean = 0; // среднее напряжение каждой фазы
|
||||||
|
|
||||||
|
float u_base = to_float(PARAM_INTERNAL.nominal.U, 10); // Дополнительно посчитаем значения в реалдьных Вольтах
|
||||||
|
float i_base = to_float(PARAM_INTERNAL.nominal.I, 10); // Дополнительно посчитаем значения в реалдьных Амперах
|
||||||
for(int i = 0; i < 3; i++)
|
for(int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
/* Получение частоты фазы */
|
/* Получение частоты фазы */
|
||||||
@ -154,6 +157,10 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
/* Средний ток фазы */
|
/* Средний ток фазы */
|
||||||
iphase_mean = fabsf(meas->slow.I[i]);
|
iphase_mean = fabsf(meas->slow.I[i]);
|
||||||
meas->final.I[i] = Filter_Process(&hpm->exp[EXP_IC+i], iphase_mean);
|
meas->final.I[i] = Filter_Process(&hpm->exp[EXP_IC+i], iphase_mean);
|
||||||
|
|
||||||
|
/* Реальные единицы измерения (Вольты/Амперы) */
|
||||||
|
meas->real.I[i] = meas->slow.I[i]*i_base;
|
||||||
|
meas->real.U[i] = meas->slow.U[i]*u_base;
|
||||||
}
|
}
|
||||||
/* Получение средней частоты по трем фазам */
|
/* Получение средней частоты по трем фазам */
|
||||||
|
|
||||||
@ -166,6 +173,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
meas->final.Uamp = Filter_Process(&hpm->exp[EXP_U], uamp);
|
meas->final.Uamp = Filter_Process(&hpm->exp[EXP_U], uamp);
|
||||||
meas->final.Iamp = Filter_Process(&hpm->exp[EXP_I], iamp);
|
meas->final.Iamp = Filter_Process(&hpm->exp[EXP_I], iamp);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -182,28 +190,25 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
|
|||||||
/* Считываем АЦП с пересчетами и медианой фильтрацией от выбросов */
|
/* Считываем АЦП с пересчетами и медианой фильтрацией от выбросов */
|
||||||
ADC_Handle(&hpm->adc);
|
ADC_Handle(&hpm->adc);
|
||||||
|
|
||||||
/* Заполняем величины Напряжений/Токов */
|
/* Заполняем Напряжения/Токи в о.е. */
|
||||||
|
float u_base = to_float(PARAM_INTERNAL.nominal.U, 10);
|
||||||
|
float i_base = to_float(PARAM_INTERNAL.nominal.I, 10);
|
||||||
PowerMonitor_Measured_t *meas = &hpm->measured;
|
PowerMonitor_Measured_t *meas = &hpm->measured;
|
||||||
meas->real.U[U_BA] = hpm->adc.Data[ADC_CHANNEL_UBA];
|
meas->fast.U[U_BA] = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base;
|
||||||
meas->real.U[U_AC] = hpm->adc.Data[ADC_CHANNEL_UAC];
|
meas->fast.U[U_AC] = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base;
|
||||||
meas->real.U[U_BC] = U_BC_calc(meas->real.U[U_BA], meas->real.U[U_AC]);
|
meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_BA], meas->fast.U[U_AC]);
|
||||||
|
|
||||||
meas->real.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC];
|
meas->fast.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC]/i_base;
|
||||||
meas->real.I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA];
|
meas->fast.I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA]/i_base;
|
||||||
meas->real.I[I_B] = I_B_calc(meas->real.I[I_A], meas->real.I[I_C]);
|
meas->fast.I[I_B] = I_B_calc(meas->fast.I[I_A], meas->fast.I[I_C]);
|
||||||
|
|
||||||
/* Преобразуем в относительные единицы (о.е.) */
|
/* Преобразуем в относительные единицы (о.е.) */
|
||||||
for(int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
meas->fast.U[i] = 10*meas->real.U[i]/PARAM_INTERNAL.nominal.U;
|
|
||||||
meas->fast.I[i] = 10*meas->real.I[i]/PARAM_INTERNAL.nominal.I;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ищем переход через ноль */
|
/* Ищем переход через ноль */
|
||||||
ZC_ProcessAllChannels(&hpm->zc, meas->fast.U, usTick);
|
ZC_ProcessAllChannels(&hpm->zc, meas->fast.U, usTick);
|
||||||
|
|
||||||
/* Вообще фильтры должны рабтоать синхронно, но на всякий синхронизация */
|
/* Вообще фильтры должны рабтоать синхронно, но на всякий синхронизация */
|
||||||
__SynchAvgFilters(hpm);
|
//__SynchAvgFilters(hpm);
|
||||||
|
|
||||||
/* Average для медленной фильтрации */
|
/* Average для медленной фильтрации */
|
||||||
meas->slow.U[U_BA] = Filter_Process(&hpm->avg[ADC_CHANNEL_UBA], meas->fast.U[U_BA]);
|
meas->slow.U[U_BA] = Filter_Process(&hpm->avg[ADC_CHANNEL_UBA], meas->fast.U[U_BA]);
|
||||||
@ -225,8 +230,8 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
|
|||||||
}
|
}
|
||||||
else // если уже запущена - ставим overrun slow calc
|
else // если уже запущена - ставим overrun slow calc
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.slow_calc_overrun = 1;
|
ERR_PRIVATE.overrun_slow_calc = 1;
|
||||||
errors.prvt.cnt.slow_calc_overrun++;
|
ERR_PRIVATE_CNT.overrun_slow_calc++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
unsigned inIsr:1; ///< Флаг что мы в прерывании
|
||||||
unsigned runSlow:1; ///< Запустить медленный алгоритм в while(1)
|
unsigned runSlow:1; ///< Запустить медленный алгоритм в while(1)
|
||||||
|
|
||||||
unsigned isU:1; ///< Есть ли напряжение
|
unsigned isU:1; ///< Есть ли напряжение
|
||||||
|
|||||||
@ -24,30 +24,30 @@ int Protect_Voltages(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect
|
|||||||
/* Общее напряжение */
|
/* Общее напряжение */
|
||||||
if(measure->final.Uamp > lUmax)
|
if(measure->final.Uamp > lUmax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.uamp_max = 1;
|
ERR_PRIVATE.uamp_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.Uamp < lUmin)
|
else if (measure->final.Uamp < lUmin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.uamp_min = 1;
|
ERR_PRIVATE.uamp_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.uamp_max = 0;
|
ERR_PRIVATE.uamp_max = 0;
|
||||||
errors.prvt.f.err.uamp_min = 0;
|
ERR_PRIVATE.uamp_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Последовательность фаз */
|
/* Последовательность фаз */
|
||||||
int realPhaseSequence = 0;
|
int realPhaseSequence = 0;
|
||||||
if(realPhaseSequence != lPhaseSequence)
|
if(realPhaseSequence != lPhaseSequence)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.interlance = 1;
|
ERR_PRIVATE.interlance = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.interlance = 0;
|
ERR_PRIVATE.interlance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (errors.prvt.f.err.uamp_min == 0);
|
return (ERR_PRIVATE.uamp_min == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,62 +65,62 @@ int Protect_Currents(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect
|
|||||||
/* Общий ток */
|
/* Общий ток */
|
||||||
if(measure->final.Iamp > lImax)
|
if(measure->final.Iamp > lImax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.iamp_max = 1;
|
ERR_PRIVATE.iamp_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.Iamp < lImin)
|
else if (measure->final.Iamp < lImin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.iamp_min = 1;
|
ERR_PRIVATE.iamp_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.iamp_max = 0;
|
ERR_PRIVATE.iamp_max = 0;
|
||||||
errors.prvt.f.err.iamp_min = 0;
|
ERR_PRIVATE.iamp_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ток по фазам */
|
/* Ток по фазам */
|
||||||
if(measure->final.I[I_A] > lImax)
|
if(measure->final.I[I_A] > lImax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ia_max = 1;
|
ERR_PRIVATE.ia_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.I[I_A] < lImin)
|
else if (measure->final.I[I_A] < lImin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ia_min = 1;
|
ERR_PRIVATE.ia_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ia_max = 0;
|
ERR_PRIVATE.ia_max = 0;
|
||||||
errors.prvt.f.err.ia_min = 0;
|
ERR_PRIVATE.ia_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(measure->final.I[I_B] > lImax)
|
if(measure->final.I[I_B] > lImax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ib_max = 1;
|
ERR_PRIVATE.ib_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.I[I_B] < lImin)
|
else if (measure->final.I[I_B] < lImin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ib_min = 1;
|
ERR_PRIVATE.ib_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ib_max = 0;
|
ERR_PRIVATE.ib_max = 0;
|
||||||
errors.prvt.f.err.ib_min = 0;
|
ERR_PRIVATE.ib_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(measure->final.I[I_C] > lImax)
|
if(measure->final.I[I_C] > lImax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ic_max = 1;
|
ERR_PRIVATE.ic_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.I[I_C] < lImin)
|
else if (measure->final.I[I_C] < lImin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ic_min = 1;
|
ERR_PRIVATE.ic_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.ic_max = 0;
|
ERR_PRIVATE.ic_max = 0;
|
||||||
errors.prvt.f.err.ic_min = 0;
|
ERR_PRIVATE.ic_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (errors.prvt.f.err.iamp_min == 0);
|
return (ERR_PRIVATE.iamp_min == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -134,8 +134,8 @@ void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect, U
|
|||||||
{
|
{
|
||||||
/* Переводим внутренние уставки в удобный вид */
|
/* Переводим внутренние уставки в удобный вид */
|
||||||
float lFnom = to_float(PARAM_INTERNAL.nominal.F, 100);
|
float lFnom = to_float(PARAM_INTERNAL.nominal.F, 100);
|
||||||
float lFmin = lFnom - lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_minus, 100);
|
float lFmin = lFnom - lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_minus, 10000);
|
||||||
float lFmax = lFnom + lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_plus, 100);
|
float lFmax = lFnom + lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_plus, 10000);
|
||||||
|
|
||||||
float lTwarn = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100);
|
float lTwarn = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100);
|
||||||
float lTerr = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100);
|
float lTerr = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100);
|
||||||
@ -144,44 +144,44 @@ 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_AC] > lFmax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fac_max = 1;
|
ERR_PRIVATE.fac_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.F[U_AC] < lFmin)
|
else if (measure->final.F[U_AC] < lFmin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fac_min = 1;
|
ERR_PRIVATE.fac_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fac_max = 0;
|
ERR_PRIVATE.fac_max = 0;
|
||||||
errors.prvt.f.err.fac_min = 0;
|
ERR_PRIVATE.fac_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(measure->final.F[U_BA] > lFmax)
|
if(measure->final.F[U_BA] > lFmax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fba_max = 1;
|
ERR_PRIVATE.fba_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.F[U_BA] < lFmin)
|
else if (measure->final.F[U_BA] < lFmin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fba_min = 1;
|
ERR_PRIVATE.fba_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fba_max = 0;
|
ERR_PRIVATE.fba_max = 0;
|
||||||
errors.prvt.f.err.fba_min = 0;
|
ERR_PRIVATE.fba_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(measure->final.F[U_BC] > lFmax)
|
if(measure->final.F[U_BC] > lFmax)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fbc_max = 1;
|
ERR_PRIVATE.fbc_max = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.F[U_BC] < lFmin)
|
else if (measure->final.F[U_BC] < lFmin)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fbc_min = 1;
|
ERR_PRIVATE.fbc_min = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.fbc_max = 0;
|
ERR_PRIVATE.fbc_max = 0;
|
||||||
errors.prvt.f.err.fbc_min = 0;
|
ERR_PRIVATE.fbc_min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -189,15 +189,15 @@ void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect, U
|
|||||||
/*=============== ЗАЩИТЫ ПО ТЕМПЕРАТУРЕ ==================*/
|
/*=============== ЗАЩИТЫ ПО ТЕМПЕРАТУРЕ ==================*/
|
||||||
if(measure->final.T[TEMP_1] > lTerr)
|
if(measure->final.T[TEMP_1] > lTerr)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.temp_err = 1;
|
ERR_PRIVATE.temp_err = 1;
|
||||||
}
|
}
|
||||||
else if (measure->final.T[TEMP_1] > lTwarn)
|
else if (measure->final.T[TEMP_1] > lTwarn)
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.temp_warn = 1;
|
ERR_PRIVATE.temp_warn = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.prvt.f.err.temp_err = 0;
|
ERR_PRIVATE.temp_err = 0;
|
||||||
errors.prvt.f.err.temp_warn = 0;
|
ERR_PRIVATE.temp_warn = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
55
UPP/Core/Src/DBG_stm32f417_support.c
Normal file
55
UPP/Core/Src/DBG_stm32f417_support.c
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file DBG_stm32f417_support.c
|
||||||
|
* @brief Модуль для запуска кода на STM32F417
|
||||||
|
******************************************************************************
|
||||||
|
* @details
|
||||||
|
******************************************************************************/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config_STM32F417(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
|
||||||
|
/** Configure the main internal regulator output voltage
|
||||||
|
*/
|
||||||
|
__HAL_RCC_PWR_CLK_ENABLE();
|
||||||
|
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
||||||
|
RCC_OscInitStruct.PLL.PLLM = 8;
|
||||||
|
RCC_OscInitStruct.PLL.PLLN = 168;
|
||||||
|
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLQ = 4;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -53,7 +53,7 @@ void MX_ADC3_Init(void)
|
|||||||
hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T8_TRGO;
|
hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T8_TRGO;
|
||||||
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
hadc3.Init.NbrOfConversion = 6;
|
hadc3.Init.NbrOfConversion = 6;
|
||||||
hadc3.Init.DMAContinuousRequests = DISABLE;
|
hadc3.Init.DMAContinuousRequests = ENABLE;
|
||||||
hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
|
hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
|
||||||
if (HAL_ADC_Init(&hadc3) != HAL_OK)
|
if (HAL_ADC_Init(&hadc3) != HAL_OK)
|
||||||
{
|
{
|
||||||
@ -162,7 +162,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
|
|||||||
hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
|
hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||||
hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||||
hdma_adc3.Init.Mode = DMA_NORMAL;
|
hdma_adc3.Init.Mode = DMA_CIRCULAR;
|
||||||
hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
|
hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
||||||
if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
|
if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
|
||||||
|
|||||||
@ -72,7 +72,14 @@ int main(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
__HAL_FREEZE_IWDG_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM1_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM2_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM3_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM5_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM8_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM11_DBGMCU();
|
||||||
|
__HAL_FREEZE_TIM12_DBGMCU();
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
/* MCU Configuration--------------------------------------------------------*/
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
@ -83,13 +90,16 @@ int main(void)
|
|||||||
/* USER CODE BEGIN Init */
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
#ifndef MATLAB
|
#ifndef MATLAB
|
||||||
|
#if defined(STM32F427xx)
|
||||||
/* USER CODE END Init */
|
/* USER CODE END Init */
|
||||||
|
|
||||||
/* Configure the system clock */
|
/* Configure the system clock */
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
/* USER CODE BEGIN SysInit */
|
/* USER CODE BEGIN SysInit */
|
||||||
|
#elif defined(STM32F417xx)
|
||||||
|
SystemClock_Config_STM32F417();
|
||||||
|
#endif
|
||||||
/* USER CODE END SysInit */
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
@ -109,6 +119,12 @@ int main(void)
|
|||||||
MX_TIM5_Init();
|
MX_TIM5_Init();
|
||||||
MX_TIM2_Init();
|
MX_TIM2_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
#if defined(STM32F417xx)
|
||||||
|
// У 417 меньше частота поэтому меняем прескалер
|
||||||
|
__HAL_TIM_SET_PRESCALER(&ustim, 84-1);
|
||||||
|
// И т.к. нет епромки выставляем дефолтные
|
||||||
|
UPP_SetDefault(1, 1);
|
||||||
|
#endif
|
||||||
#else //MATLAB
|
#else //MATLAB
|
||||||
#endif //MATLAB
|
#endif //MATLAB
|
||||||
UPP_Init();
|
UPP_Init();
|
||||||
|
|||||||
@ -244,7 +244,6 @@ void TIM8_TRG_COM_TIM14_IRQHandler(void)
|
|||||||
HAL_TIM_IRQHandler(&htim14);
|
HAL_TIM_IRQHandler(&htim14);
|
||||||
/* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 1 */
|
/* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 1 */
|
||||||
#endif
|
#endif
|
||||||
UPP_Tick();
|
|
||||||
/* USER CODE END TIM8_TRG_COM_TIM14_IRQn 1 */
|
/* USER CODE END TIM8_TRG_COM_TIM14_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,8 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle)
|
|||||||
float kp = to_float(PARAM_INTERNAL.angle.PID_Kp, 10000);
|
float kp = to_float(PARAM_INTERNAL.angle.PID_Kp, 10000);
|
||||||
float ki = to_float(PARAM_INTERNAL.angle.PID_Ki, 10000);
|
float ki = to_float(PARAM_INTERNAL.angle.PID_Ki, 10000);
|
||||||
float kd = to_float(PARAM_INTERNAL.angle.PID_Kd, 10000);
|
float kd = to_float(PARAM_INTERNAL.angle.PID_Kd, 10000);
|
||||||
Angle_PID_Init(hangle, kp, ki, kd);
|
float ref_alpha = to_float(PARAM_INTERNAL.angle.PID_ExpAlpha, 65535);
|
||||||
|
Angle_PID_Init(hangle, kp, ki, kd, ref_alpha);
|
||||||
|
|
||||||
// Инициализация каналов
|
// Инициализация каналов
|
||||||
HAL_TIM_OC_Start_IT(hangle->htim, ANGLE_CHANNEL_1);
|
HAL_TIM_OC_Start_IT(hangle->htim, ANGLE_CHANNEL_1);
|
||||||
@ -53,15 +54,21 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle)
|
|||||||
* @param hangle Указатель на таймер
|
* @param hangle Указатель на таймер
|
||||||
* @param kp, ki kd Коэффициенты регулятора
|
* @param kp, ki kd Коэффициенты регулятора
|
||||||
*/
|
*/
|
||||||
void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd)
|
void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd, float alpha)
|
||||||
{
|
{
|
||||||
if(assert_upp(hangle))
|
if(assert_upp(hangle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Сам ПИД регулятор
|
||||||
hangle->pid.Kp = kp;
|
hangle->pid.Kp = kp;
|
||||||
hangle->pid.Ki = ki;
|
hangle->pid.Ki = ki;
|
||||||
hangle->pid.Kd = kd;
|
hangle->pid.Kd = kd;
|
||||||
arm_pid_init_f32(&hangle->pid, 1);
|
arm_pid_init_f32(&hangle->pid, 1);
|
||||||
|
|
||||||
|
// Сглаживающий фильтр для задания ПИД регулятора
|
||||||
|
FilterExp_Init(&hangle->refFilter, alpha);
|
||||||
|
Filter_Start(&hangle->refFilter);
|
||||||
|
Filter_Process(&hangle->refFilter, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,8 +82,10 @@ void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement)
|
|||||||
if(assert_upp(hangle))
|
if(assert_upp(hangle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
hangle->Iref = Filter_Process(&hangle->refFilter, setpoint);
|
||||||
|
|
||||||
/* Ошибка регулирования = уставка - измеренное */
|
/* Ошибка регулирования = уставка - измеренное */
|
||||||
float err = setpoint - measurement;
|
float err = hangle->Iref - measurement;
|
||||||
|
|
||||||
/* ПИД регулирование */
|
/* ПИД регулирование */
|
||||||
float open_control = arm_pid_f32(&hangle->pid, err); // 0 - открыть максимально поздно, 1 - открыть макситмально рано
|
float open_control = arm_pid_f32(&hangle->pid, err); // 0 - открыть максимально поздно, 1 - открыть макситмально рано
|
||||||
|
|||||||
@ -26,10 +26,11 @@ typedef struct
|
|||||||
TIM_HandleTypeDef *htim; ///< Указатель на таймер для расчета угла
|
TIM_HandleTypeDef *htim; ///< Указатель на таймер для расчета угла
|
||||||
Angle_Config_t Config; ///< Конфигурации алгоритма расчета угла открытия тиристоров
|
Angle_Config_t Config; ///< Конфигурации алгоритма расчета угла открытия тиристоров
|
||||||
|
|
||||||
//float alpha_degree; ///< текущий угол открытия в градусах [0..180]
|
float Iref; ///< текущее задание тока в о.е. [0..1]
|
||||||
float alpha; ///< текущий угол открытия в процентах от периода [0..1]
|
float alpha; ///< текущий угол открытия в о.е. [0..1] (% от периода)
|
||||||
|
|
||||||
arm_pid_instance_f32 pid; ///< ПИД регулятор для управления углом
|
arm_pid_instance_f32 pid; ///< ПИД регулятор для управления углом
|
||||||
|
FilterExp_t refFilter; ///< Фильтр для плавного нарастания регулирования
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
unsigned Initialized : 1; ///< Структура инициализирована
|
unsigned Initialized : 1; ///< Структура инициализирована
|
||||||
@ -42,7 +43,7 @@ typedef struct
|
|||||||
/* Инициализация Таймера для рассчета угла открытия. */
|
/* Инициализация Таймера для рассчета угла открытия. */
|
||||||
HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle);
|
HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle);
|
||||||
/* Инициализация ПИД регулятора. */
|
/* Инициализация ПИД регулятора. */
|
||||||
void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd);
|
void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd, float alpha);
|
||||||
|
|
||||||
// ====== УПРАВЛЕНИЕ ==========
|
// ====== УПРАВЛЕНИЕ ==========
|
||||||
/* Управление углом через ПИД регулятор */
|
/* Управление углом через ПИД регулятор */
|
||||||
|
|||||||
@ -4,6 +4,12 @@
|
|||||||
* @brief Формирование ошибок в ПУИ
|
* @brief Формирование ошибок в ПУИ
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @details
|
* @details
|
||||||
|
Общая логика:
|
||||||
|
В программе выставляются всякие внутренние флаги ошибок: ERR_PRIVATE
|
||||||
|
В этом модуле смотрятся какие флаги выставились и переносят эти флаги
|
||||||
|
в структуру ошибок ПУИ ERR_PUI.
|
||||||
|
|
||||||
|
Также реализована защита от дребезга и в целом задержка на выставление ошибок.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "upp_main.h" // УПП
|
#include "upp_main.h" // УПП
|
||||||
#include "upp_errors.h" // всё остальное по работе с УПП
|
#include "upp_errors.h" // всё остальное по работе с УПП
|
||||||
@ -21,6 +27,7 @@ void UPP_Errors_Other(void);
|
|||||||
|
|
||||||
void UPP_Errors_Handle(void)
|
void UPP_Errors_Handle(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/*====== Программные ошибки ======*/
|
/*====== Программные ошибки ======*/
|
||||||
UPP_Errors_Program();
|
UPP_Errors_Program();
|
||||||
/*====== Ошибки питания плат ======*/
|
/*====== Ошибки питания плат ======*/
|
||||||
@ -62,50 +69,50 @@ void UPP_Errors_Ranges(void)
|
|||||||
static int TMaxCnt = 0;
|
static int TMaxCnt = 0;
|
||||||
|
|
||||||
/* Напряжения */
|
/* Напряжения */
|
||||||
errors.pui.err.OverVoltage = setError(errors.prvt.f.err.uamp_max,
|
ERR_PUI.OverVoltage = setError(ERR_PRIVATE.uamp_max,
|
||||||
errors.pui.err.OverVoltage,
|
ERR_PUI.OverVoltage,
|
||||||
&UMaxCnt,
|
&UMaxCnt,
|
||||||
ticksTiMax);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_UAMP_ERR));
|
||||||
errors.pui.err.UnderVoltage = setError(errors.prvt.f.err.uamp_min,
|
ERR_PUI.UnderVoltage = setError(ERR_PRIVATE.uamp_min,
|
||||||
errors.pui.err.UnderVoltage,
|
ERR_PUI.UnderVoltage,
|
||||||
&UMinCnt,
|
&UMinCnt,
|
||||||
ticksTiMax);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_UAMP_ERR));
|
||||||
|
|
||||||
|
|
||||||
/* Токи */
|
/* Токи */
|
||||||
int i_max = ( errors.prvt.f.err.iamp_max ||
|
int i_max = ( ERR_PRIVATE.iamp_max ||
|
||||||
errors.prvt.f.err.ia_max ||
|
ERR_PRIVATE.ia_max ||
|
||||||
errors.prvt.f.err.ib_max ||
|
ERR_PRIVATE.ib_max ||
|
||||||
errors.prvt.f.err.ic_max);
|
ERR_PRIVATE.ic_max);
|
||||||
errors.pui.err.OverCurrent = setError(i_max,
|
ERR_PUI.OverCurrent = setError(i_max,
|
||||||
errors.pui.err.OverCurrent,
|
ERR_PUI.OverCurrent,
|
||||||
&IMaxCnt,
|
&IMaxCnt,
|
||||||
ticksTiMax);
|
ticksTiMax);
|
||||||
|
|
||||||
|
|
||||||
/* Частота */
|
/* Частота */
|
||||||
int f_max = ( errors.prvt.f.err.fac_max ||
|
int f_max = ( ERR_PRIVATE.fac_max ||
|
||||||
errors.prvt.f.err.fba_max ||
|
ERR_PRIVATE.fba_max ||
|
||||||
errors.prvt.f.err.fbc_max);
|
ERR_PRIVATE.fbc_max);
|
||||||
int f_min = ( errors.prvt.f.err.fac_max ||
|
int f_min = ( ERR_PRIVATE.fac_min ||
|
||||||
errors.prvt.f.err.fba_max ||
|
ERR_PRIVATE.fba_min ||
|
||||||
errors.prvt.f.err.fbc_max);
|
ERR_PRIVATE.fbc_min);
|
||||||
errors.pui.err.OverFrequency = setError(f_max,
|
ERR_PUI.OverFrequency = setError(f_max,
|
||||||
errors.pui.err.OverFrequency,
|
ERR_PUI.OverFrequency,
|
||||||
&FMaxCnt,
|
&FMaxCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_F_ERR));
|
||||||
|
|
||||||
errors.pui.err.UnderFrequency = setError( f_min,
|
ERR_PUI.UnderFrequency = setError( f_min,
|
||||||
errors.pui.err.UnderFrequency,
|
ERR_PUI.UnderFrequency,
|
||||||
&FMinCnt,
|
&FMinCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_F_ERR));
|
||||||
|
|
||||||
|
|
||||||
/* Температуры */
|
/* Температуры */
|
||||||
errors.pui.err.OverTemperature = setError(errors.prvt.f.err.temp_err,
|
ERR_PUI.OverTemperature = setError(ERR_PRIVATE.temp_err,
|
||||||
errors.pui.err.OverTemperature,
|
ERR_PUI.OverTemperature,
|
||||||
&TMaxCnt,
|
&TMaxCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPP_Errors_LossPhase(void)
|
void UPP_Errors_LossPhase(void)
|
||||||
@ -116,39 +123,39 @@ void UPP_Errors_LossPhase(void)
|
|||||||
static int LossPhaseBCnt = 0;
|
static int LossPhaseBCnt = 0;
|
||||||
static int LossPhaseCCnt = 0;
|
static int LossPhaseCCnt = 0;
|
||||||
|
|
||||||
int loss_phases_all = ( errors.prvt.f.err.ia_min &&
|
int loss_phases_all = ( ERR_PRIVATE.ia_min &&
|
||||||
errors.prvt.f.err.ib_min &&
|
ERR_PRIVATE.ib_min &&
|
||||||
errors.prvt.f.err.ic_min );
|
ERR_PRIVATE.ic_min );
|
||||||
|
|
||||||
errors.pui.err.LossPhaseAll = setError( loss_phases_all,
|
ERR_PUI.LossPhaseAll = setError( loss_phases_all,
|
||||||
errors.pui.err.LossPhaseAll,
|
ERR_PUI.LossPhaseAll,
|
||||||
&LossPhaseAllCnt,
|
&LossPhaseAllCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
|
|
||||||
/* Если хотя бы одна фаза есть проверяем фазы отдельно */
|
/* Если хотя бы одна фаза есть проверяем фазы отдельно */
|
||||||
if(!errors.pui.err.LossPhaseAll)
|
if(!ERR_PUI.LossPhaseAll)
|
||||||
{
|
{
|
||||||
errors.pui.err.LossPhaseA = setError( errors.prvt.f.err.ia_min,
|
ERR_PUI.LossPhaseA = setError( ERR_PRIVATE.ia_min,
|
||||||
errors.pui.err.LossPhaseA,
|
ERR_PUI.LossPhaseA,
|
||||||
&LossPhaseACnt,
|
&LossPhaseACnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
|
|
||||||
errors.pui.err.LossPhaseB = setError( errors.prvt.f.err.ib_min,
|
ERR_PUI.LossPhaseB = setError( ERR_PRIVATE.ib_min,
|
||||||
errors.pui.err.LossPhaseB,
|
ERR_PUI.LossPhaseB,
|
||||||
&LossPhaseBCnt,
|
&LossPhaseBCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
|
|
||||||
errors.pui.err.LossPhaseC = setError( errors.prvt.f.err.ic_min,
|
ERR_PUI.LossPhaseC = setError( ERR_PRIVATE.ic_min,
|
||||||
errors.pui.err.LossPhaseC,
|
ERR_PUI.LossPhaseC,
|
||||||
&LossPhaseCCnt,
|
&LossPhaseCCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
}
|
}
|
||||||
/* Если всех фаз нет, то отдельные не смотрим */
|
/* Если всех фаз нет, то отдельные не смотрим */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors.pui.err.LossPhaseA = 0;
|
ERR_PUI.LossPhaseA = 0;
|
||||||
errors.pui.err.LossPhaseB = 0;
|
ERR_PUI.LossPhaseB = 0;
|
||||||
errors.pui.err.LossPhaseC = 0;
|
ERR_PUI.LossPhaseC = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,15 +163,15 @@ void UPP_Errors_Other(void)
|
|||||||
{
|
{
|
||||||
static int InterlaceCnt = 0;
|
static int InterlaceCnt = 0;
|
||||||
|
|
||||||
if(errors.prvt.f.err.longstart)
|
if(ERR_PRIVATE.longstart)
|
||||||
errors.pui.err.LongStart = 1;
|
ERR_PUI.LongStart = 1;
|
||||||
else
|
else
|
||||||
errors.pui.err.LongStart = 0;
|
ERR_PUI.LongStart = 0;
|
||||||
|
|
||||||
errors.pui.err.Interlace = setError(errors.prvt.f.err.interlance,
|
ERR_PUI.Interlace = setError(ERR_PRIVATE.interlance,
|
||||||
errors.pui.err.Interlace,
|
ERR_PUI.Interlace,
|
||||||
&InterlaceCnt,
|
&InterlaceCnt,
|
||||||
ERRORS_DELAY_TICKS_DEFAULT);
|
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
|
||||||
//Interlance
|
//Interlance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -138,7 +138,8 @@ typedef struct
|
|||||||
unsigned longstart:1;
|
unsigned longstart:1;
|
||||||
unsigned interlance:3;
|
unsigned interlance:3;
|
||||||
|
|
||||||
unsigned slow_calc_overrun:1;
|
unsigned overrun_slow_calc:1;
|
||||||
|
unsigned overrun_fast_calc:1;
|
||||||
}err;
|
}err;
|
||||||
}f;
|
}f;
|
||||||
|
|
||||||
@ -147,7 +148,8 @@ typedef struct
|
|||||||
uint16_t adc_reinit_err;
|
uint16_t adc_reinit_err;
|
||||||
uint16_t zc_reinit_err;
|
uint16_t zc_reinit_err;
|
||||||
uint16_t pwm_reinit_err;
|
uint16_t pwm_reinit_err;
|
||||||
uint16_t slow_calc_overrun;
|
uint16_t overrun_slow_calc;
|
||||||
|
uint16_t overrun_fast_calc;
|
||||||
}cnt;
|
}cnt;
|
||||||
|
|
||||||
}prvt; ///< Приватные ошибки, не идущие напрямую в ПУИ
|
}prvt; ///< Приватные ошибки, не идущие напрямую в ПУИ
|
||||||
|
|||||||
@ -7,62 +7,131 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "upp_io.h"
|
#include "upp_io.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
UPP_LEDs_t UPP_LEDS;
|
||||||
UPP_DiscreteInputs_t UPP_DIN;
|
UPP_DiscreteInputs_t UPP_DIN;
|
||||||
UPP_DiscreteOutputs_t UPP_DO;
|
UPP_DiscreteOutputs_t UPP_DO;
|
||||||
|
|
||||||
|
static void UPP_CEN_Write(int state);
|
||||||
|
static void UPP_RDO1_Write(int state);
|
||||||
|
static void UPP_RDO2_Write(int state);
|
||||||
|
static void UPP_RDO3_Write(int state);
|
||||||
|
static void UPP_RDO4_Write(int state);
|
||||||
|
static void UPP_DO1_Write(int state);
|
||||||
|
static void UPP_DO2_Write(int state);
|
||||||
|
static void UPP_DO3_Write(int state);
|
||||||
|
static void UPP_DO4_Write(int state);
|
||||||
|
static void UPP_DO5_Write(int state);
|
||||||
|
|
||||||
void UPP_CEN_Write(int state)
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Инициализация дискретных входов/выходов УПП
|
||||||
|
*/
|
||||||
|
void UPP_IO_Init(void)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(CEN_GPIO_Port, CEN_Pin, state);
|
/* Дискретне выходы */
|
||||||
|
UPP_DO.CEN = &UPP_CEN_Write;
|
||||||
|
UPP_DO.Ready = &UPP_RDO3_Write;
|
||||||
|
UPP_DO.Work = &UPP_RDO2_Write;
|
||||||
|
UPP_DO.Error = &UPP_RDO1_Write;
|
||||||
|
UPP_DO.RDO4 = &UPP_RDO4_Write;
|
||||||
|
UPP_DO.DO1 = &UPP_DO1_Write;
|
||||||
|
UPP_DO.DO2 = &UPP_DO2_Write;
|
||||||
|
UPP_DO.DO3 = &UPP_DO3_Write;
|
||||||
|
UPP_DO.DO4 = &UPP_DO4_Write;
|
||||||
|
UPP_DO.DO5 = &UPP_DO5_Write;
|
||||||
|
|
||||||
|
|
||||||
|
/* Дискретные входы */
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.Pusk, DIN1_GPIO_Port, DIN1_Pin, 0);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.MestDist, DIN2_GPIO_Port, DIN2_Pin, 0);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.DIN3, DIN3_GPIO_Port, DIN3_Pin, 0);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.err_24Vdio, ERR_24VDIO_GPIO_Port, ERR_24VDIO_Pin, 1);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.err_24V, ERR_24V_GPIO_Port, ERR_24V_Pin, 1);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.err_5Vsi, ERR_5VSI_GPIO_Port, ERR_5VSI_Pin, 0);
|
||||||
|
|
||||||
|
/* Дискретные входы платы УМ */
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.err_5Vd, UM_ERR_5VD_GPIO_Port, UM_ERR_5VD_Pin, 0);
|
||||||
|
GPIO_Switch_Init(&UPP_DIN.err_Va, UM_ERR_VA_GPIO_Port, UM_ERR_VA_Pin, 1);
|
||||||
|
|
||||||
|
/* Светодиоды платы УМ */
|
||||||
|
GPIO_LED_Init(&UPP_LEDS.green1, UM_LED_GREEN1_GPIO_Port, UM_LED_GREEN1_Pin, 0);
|
||||||
|
GPIO_LED_Init(&UPP_LEDS.green2, UM_LED_GREEN2_GPIO_Port, UM_LED_GREEN2_Pin, 0);
|
||||||
|
GPIO_LED_Init(&UPP_LEDS.red, UM_LED_RED_GPIO_Port, UM_LED_RED_Pin, 0);
|
||||||
|
|
||||||
|
|
||||||
|
/* Очищаем выходы */
|
||||||
|
UPP_DO.CEN(DISABLE);
|
||||||
|
UPP_DO.Error(DISABLE);
|
||||||
|
UPP_DO.Work(DISABLE);
|
||||||
|
UPP_DO.Ready(DISABLE);
|
||||||
|
UPP_DO.RDO4(DISABLE);
|
||||||
|
UPP_DO.DO1(DISABLE);
|
||||||
|
UPP_DO.DO2(DISABLE);
|
||||||
|
UPP_DO.DO3(DISABLE);
|
||||||
|
UPP_DO.DO4(DISABLE);
|
||||||
|
UPP_DO.DO5(DISABLE);
|
||||||
|
GPIO_LED_Off(&UPP_LEDS.green1);
|
||||||
|
GPIO_LED_Off(&UPP_LEDS.green2);
|
||||||
|
GPIO_LED_Off(&UPP_LEDS.red);
|
||||||
|
|
||||||
}
|
}
|
||||||
void UPP_RDO1_Write(int state)
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Выставить направление UART1 (STM USART2)
|
||||||
|
*/
|
||||||
|
void UPP_UART1_SetDirection(int state)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(SCIDE1_GPIO_Port, SCIDE1_Pin, state);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @brief Выставить направление UART2 (STM USART5)
|
||||||
|
*/
|
||||||
|
void UPP_UART2_SetDirection(int state)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(SCIDE2_GPIO_Port, SCIDE2_Pin, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void UPP_CEN_Write(int state)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(CEN_GPIO_Port, CEN_Pin, !state);
|
||||||
|
}
|
||||||
|
static void UPP_RDO1_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(RDO1_GPIO_Port, RDO1_Pin, state);
|
HAL_GPIO_WritePin(RDO1_GPIO_Port, RDO1_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_RDO2_Write(int state)
|
static void UPP_RDO2_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(RDO2_GPIO_Port, RDO2_Pin, state);
|
HAL_GPIO_WritePin(RDO2_GPIO_Port, RDO2_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_RDO3_Write(int state)
|
static void UPP_RDO3_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(RDO3_GPIO_Port, RDO3_Pin, state);
|
HAL_GPIO_WritePin(RDO3_GPIO_Port, RDO3_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_RDO4_Write(int state)
|
static void UPP_RDO4_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(RDO4_GPIO_Port, RDO4_Pin, state);
|
HAL_GPIO_WritePin(RDO4_GPIO_Port, RDO4_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_DO1_Write(int state)
|
static void UPP_DO1_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(DO1_GPIO_Port, DO1_Pin, state);
|
HAL_GPIO_WritePin(DO1_GPIO_Port, DO1_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_DO2_Write(int state)
|
static void UPP_DO2_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(DO2_GPIO_Port, DO2_Pin, state);
|
HAL_GPIO_WritePin(DO2_GPIO_Port, DO2_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_DO3_Write(int state)
|
static void UPP_DO3_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(DO3_GPIO_Port, DO3_Pin, state);
|
HAL_GPIO_WritePin(DO3_GPIO_Port, DO3_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_DO4_Write(int state)
|
static void UPP_DO4_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(DO4_GPIO_Port, DO4_Pin, state);
|
HAL_GPIO_WritePin(DO4_GPIO_Port, DO4_Pin, state);
|
||||||
}
|
}
|
||||||
void UPP_DO5_Write(int state)
|
static void UPP_DO5_Write(int state)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(DO5_GPIO_Port, DO5_Pin, state);
|
HAL_GPIO_WritePin(DO5_GPIO_Port, DO5_Pin, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void UPP_Connect_Discrete(void)
|
|
||||||
{
|
|
||||||
UPP_DO.CEN = &UPP_CEN_Write;
|
|
||||||
UPP_DO.RDO_Error = &UPP_RDO1_Write;
|
|
||||||
UPP_DO.RDO_Work = &UPP_RDO2_Write;
|
|
||||||
UPP_DO.RDO_Ready = &UPP_RDO3_Write;
|
|
||||||
UPP_DO.RDO4_Reserved = &UPP_RDO4_Write;
|
|
||||||
UPP_DO.DO1_Reserved = &UPP_DO1_Write;
|
|
||||||
UPP_DO.DO2_Reserved = &UPP_DO2_Write;
|
|
||||||
UPP_DO.DO3_Reserved = &UPP_DO3_Write;
|
|
||||||
UPP_DO.DO4_Reserved = &UPP_DO4_Write;
|
|
||||||
UPP_DO.DO5_Reserved = &UPP_DO5_Write;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -6,10 +6,12 @@
|
|||||||
* @details
|
* @details
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef _UPP_ERRORS_H
|
#ifndef _UPP_IO_H
|
||||||
#define _UPP_ERRORS_H
|
#define _UPP_IO_H
|
||||||
#include "mylibs_include.h"
|
#include "mylibs_include.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
/* Отладочные светодиоды */
|
/* Отладочные светодиоды */
|
||||||
@ -21,13 +23,15 @@ extern UPP_LEDs_t UPP_LEDS;
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
GPIO_SwitchTypeDef in1;
|
GPIO_SwitchTypeDef Pusk; ///< Команда «ПУСК»
|
||||||
GPIO_SwitchTypeDef in2;
|
GPIO_SwitchTypeDef MestDist; ///< Мест/дист управление
|
||||||
GPIO_SwitchTypeDef in3;
|
GPIO_SwitchTypeDef DIN3; ///< Резерв
|
||||||
|
|
||||||
GPIO_SwitchTypeDef err_24V;
|
GPIO_SwitchTypeDef err_24Vdio;///< Сигнал ошибки источника питания цифровых входов/выходов
|
||||||
GPIO_SwitchTypeDef err_5Vd;
|
GPIO_SwitchTypeDef err_24V; ///< Сигнал ошибки основного источника питания 24В
|
||||||
GPIO_SwitchTypeDef err_5Vsi;
|
GPIO_SwitchTypeDef err_5Vsi; ///< Сигнал ошибки источника питания цифровых интерфейсов
|
||||||
|
GPIO_SwitchTypeDef err_5Vd; ///< Вход сигнала неисправности цифрового источника питания 5В(+5Vd) микроконтроллера и микросхем ввода-вывода (5 В).
|
||||||
|
GPIO_SwitchTypeDef err_Va; ///< Вход обобщенного сигнала неисправности аналоговых источников питания +3,3В(+3Va), 5В(+5Vа), +15В(+15Va).
|
||||||
}UPP_DiscreteInputs_t;
|
}UPP_DiscreteInputs_t;
|
||||||
extern UPP_DiscreteInputs_t UPP_DIN;
|
extern UPP_DiscreteInputs_t UPP_DIN;
|
||||||
|
|
||||||
@ -35,17 +39,25 @@ typedef struct
|
|||||||
{
|
{
|
||||||
void (*CEN)(int state);
|
void (*CEN)(int state);
|
||||||
|
|
||||||
void (*RDO_Error)(int state);
|
void (*Error)(int state);
|
||||||
void (*RDO_Work)(int state);
|
void (*Work)(int state);
|
||||||
void (*RDO_Ready)(int state);
|
void (*Ready)(int state);
|
||||||
void (*RDO4_Reserved)(int state);
|
void (*RDO4)(int state);
|
||||||
|
|
||||||
|
|
||||||
void (*DO1_Reserved)(int state);
|
void (*DO1)(int state);
|
||||||
void (*DO2_Reserved)(int state);
|
void (*DO2)(int state);
|
||||||
void (*DO3_Reserved)(int state);
|
void (*DO3)(int state);
|
||||||
void (*DO4_Reserved)(int state);
|
void (*DO4)(int state);
|
||||||
void (*DO5_Reserved)(int state);
|
void (*DO5)(int state);
|
||||||
}UPP_DiscreteOutputs_t;
|
}UPP_DiscreteOutputs_t;
|
||||||
extern UPP_DiscreteOutputs_t UPP_DO;
|
extern UPP_DiscreteOutputs_t UPP_DO;
|
||||||
#endif //_UPP_ERRORS_H
|
|
||||||
|
/* Инициализация дискретных входов/выходов УПП */
|
||||||
|
void UPP_IO_Init(void);
|
||||||
|
|
||||||
|
/* Выставить направление UART1 (STM USART2) */
|
||||||
|
void UPP_UART1_SetDirection(int state);
|
||||||
|
/* Выставить направление UART2 (STM USART5) */
|
||||||
|
void UPP_UART2_SetDirection(int state);
|
||||||
|
#endif //_UPP_IO_H
|
||||||
@ -7,6 +7,7 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "upp_main.h" // всё остальное по работе с УПП
|
#include "upp_main.h" // всё остальное по работе с УПП
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
|
#include "iwdg.h"
|
||||||
|
|
||||||
UPP_t upp;
|
UPP_t upp;
|
||||||
float iref_dbg = 0;
|
float iref_dbg = 0;
|
||||||
@ -18,6 +19,9 @@ float iref_dbg = 0;
|
|||||||
*/
|
*/
|
||||||
int UPP_Init(void)
|
int UPP_Init(void)
|
||||||
{
|
{
|
||||||
|
/* Очищаем входы */
|
||||||
|
UPP_IO_Init();
|
||||||
|
|
||||||
BenchTime_Init();
|
BenchTime_Init();
|
||||||
// Подключение указателей
|
// Подключение указателей
|
||||||
upp.errors = &errors;
|
upp.errors = &errors;
|
||||||
@ -25,10 +29,22 @@ int UPP_Init(void)
|
|||||||
upp.PUI.values = &MB_DATA.InRegs.pui;
|
upp.PUI.values = &MB_DATA.InRegs.pui;
|
||||||
upp.call = &MB_INTERNAL.FuncCalls;
|
upp.call = &MB_INTERNAL.FuncCalls;
|
||||||
|
|
||||||
HAL_TIM_Base_Start(&ustim);
|
if(HAL_TIM_Base_Start(&ustim) != HAL_OK)
|
||||||
PowerMonitor_Init(&upp.pm);
|
{
|
||||||
PWM_Init(&upp.hpwm);
|
return 1;
|
||||||
Angle_Init(&upp.hangle);
|
}
|
||||||
|
if(PowerMonitor_Init(&upp.pm) != HAL_OK)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(PWM_Init(&upp.hpwm) != HAL_OK)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(Angle_Init(&upp.hangle) != HAL_OK)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
upp.workmode = WM_Ready;
|
upp.workmode = WM_Ready;
|
||||||
return 0;
|
return 0;
|
||||||
@ -41,8 +57,14 @@ int UPP_Init(void)
|
|||||||
int UPP_PreWhile(void)
|
int UPP_PreWhile(void)
|
||||||
{
|
{
|
||||||
UPP_Params_InternalControl();
|
UPP_Params_InternalControl();
|
||||||
Angle_SetRange(&upp.hangle, 0.0, 0.8);
|
|
||||||
PowerMonitor_Start(&upp.pm);
|
if(Angle_SetRange(&upp.hangle, 0.0, 0.8) != HAL_OK)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if(PowerMonitor_Start(&upp.pm) != HAL_OK)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,8 +74,14 @@ int UPP_PreWhile(void)
|
|||||||
*/
|
*/
|
||||||
int UPP_While(void)
|
int UPP_While(void)
|
||||||
{
|
{
|
||||||
|
int retval = 0;
|
||||||
|
HAL_IWDG_Refresh(&hiwdg);
|
||||||
if(upp.pm.f.runSlow)
|
if(upp.pm.f.runSlow)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
|
|
||||||
|
UPP_DO.CEN(ENABLE);
|
||||||
// если ошибка вызываем СТОП
|
// если ошибка вызываем СТОП
|
||||||
if(errors.pui.all)
|
if(errors.pui.all)
|
||||||
{
|
{
|
||||||
@ -84,7 +112,14 @@ int UPP_While(void)
|
|||||||
// Автомат состояний УПП
|
// Автомат состояний УПП
|
||||||
switch(upp.workmode)
|
switch(upp.workmode)
|
||||||
{
|
{
|
||||||
|
/* Состояние готовности */
|
||||||
case WM_Ready:
|
case WM_Ready:
|
||||||
|
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
||||||
|
// Индикация
|
||||||
|
UPP_DO.Ready(ENABLE);
|
||||||
|
UPP_DO.Work(DISABLE);
|
||||||
|
UPP_DO.Error(DISABLE);
|
||||||
|
|
||||||
// если пришла команда на запуск
|
// если пришла команда на запуск
|
||||||
if (upp.call->go)
|
if (upp.call->go)
|
||||||
{
|
{
|
||||||
@ -94,7 +129,12 @@ int UPP_While(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* Состояние В работе */
|
||||||
case WM_Running:
|
case WM_Running:
|
||||||
|
// Индикация
|
||||||
|
UPP_DO.Ready(DISABLE);
|
||||||
|
UPP_DO.Work(ENABLE);
|
||||||
|
UPP_DO.Error(DISABLE);
|
||||||
// если пришла команда на остановку
|
// если пришла команда на остановку
|
||||||
if (!upp.call->go)
|
if (!upp.call->go)
|
||||||
upp.workmode = WM_Ready;
|
upp.workmode = WM_Ready;
|
||||||
@ -105,32 +145,43 @@ int UPP_While(void)
|
|||||||
// если слишком долгий запуск
|
// если слишком долгий запуск
|
||||||
if((local_time() - upp.StartTick) > (upp.PUI.params->Tdelay*1000))
|
if((local_time() - upp.StartTick) > (upp.PUI.params->Tdelay*1000))
|
||||||
{
|
{
|
||||||
errors.pui.err.LongStart = 1;
|
ERR_PRIVATE.longstart = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// /* Состояние Работа завершена */
|
||||||
|
// case WM_Done:
|
||||||
|
// // Индикация
|
||||||
|
// UPP_DO.Ready(DISABLE);
|
||||||
|
// UPP_DO.Work(DISABLE);
|
||||||
|
// UPP_DO.Error(DISABLE);
|
||||||
|
// PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
||||||
|
// break;
|
||||||
|
|
||||||
|
/* Состояние Ошибки */
|
||||||
case WM_Error:
|
case WM_Error:
|
||||||
|
default:
|
||||||
|
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
||||||
|
// Индикация
|
||||||
|
UPP_DO.Ready(ENABLE);
|
||||||
|
UPP_DO.Work(DISABLE);
|
||||||
|
UPP_DO.Error(ENABLE);
|
||||||
|
// Находимся до тех пор пока ошибки не будет устранена
|
||||||
if(errors.common == Err_None)
|
if(errors.common == Err_None)
|
||||||
upp.workmode = WM_Ready;
|
upp.workmode = WM_Ready;
|
||||||
|
|
||||||
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
retval = 1;
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_Done:
|
|
||||||
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
upp.pm.f.runSlow = 0;
|
upp.pm.f.runSlow = 0;
|
||||||
|
upp.Timings.slow_calc_us = BenchTime_End(BT_SLOWCALC, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
}//if(upp.pm.f.runSlow)
|
}//if(upp.pm.f.runSlow)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -153,9 +204,18 @@ void UPP_Tick(void)
|
|||||||
void UPP_ADC_Handle(void)
|
void UPP_ADC_Handle(void)
|
||||||
{
|
{
|
||||||
BenchTime_Start(BT_ADC, angletim.Instance->CNT, HAL_MAX_DELAY);
|
BenchTime_Start(BT_ADC, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
|
if(upp.pm.f.inIsr)
|
||||||
|
{
|
||||||
|
ERR_PRIVATE.overrun_fast_calc = 1;
|
||||||
|
ERR_PRIVATE_CNT.overrun_fast_calc++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
upp.pm.f.inIsr = 1;
|
||||||
|
|
||||||
PowerMonitor_FastCalc(&upp.pm);
|
PowerMonitor_FastCalc(&upp.pm);
|
||||||
|
|
||||||
|
PowerMonitor_Protect(&upp.pm, upp.workmode == WM_Running);
|
||||||
|
|
||||||
for(int phase = 0; phase < 3; phase++)
|
for(int phase = 0; phase < 3; phase++)
|
||||||
{
|
{
|
||||||
// Если произошел Zero Cross
|
// Если произошел Zero Cross
|
||||||
@ -175,13 +235,14 @@ void UPP_ADC_Handle(void)
|
|||||||
|
|
||||||
// Проверяем на ошибки
|
// Проверяем на ошибки
|
||||||
|
|
||||||
upp.Timings.isr_adc = BenchTime_End(BT_ADC, angletim.Instance->CNT);
|
upp.Timings.isr_adc_us = BenchTime_End(BT_ADC, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
|
upp.pm.f.inIsr = 0;
|
||||||
}
|
}
|
||||||
void UPP_PWM_Handle(void)
|
void UPP_PWM_Handle(void)
|
||||||
{
|
{
|
||||||
BenchTime_Start(BT_PWM, angletim.Instance->CNT, HAL_MAX_DELAY);
|
BenchTime_Start(BT_PWM, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
PWM_Handle(&upp.hpwm);
|
PWM_Handle(&upp.hpwm);
|
||||||
upp.Timings.isr_pwm = BenchTime_End(BT_PWM, angletim.Instance->CNT);
|
upp.Timings.isr_pwm_us = BenchTime_End(BT_PWM, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPP_Angle_Handle(void)
|
void UPP_Angle_Handle(void)
|
||||||
@ -212,8 +273,13 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim)
|
|||||||
{
|
{
|
||||||
if (htim == upp.hangle.htim)
|
if (htim == upp.hangle.htim)
|
||||||
{
|
{
|
||||||
BenchTime_Start(BT_SYSTICK, angletim.Instance->CNT, HAL_MAX_DELAY);
|
|
||||||
UPP_Angle_Handle();
|
UPP_Angle_Handle();
|
||||||
upp.Timings.isr_systick = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void HAL_IncTick(void)
|
||||||
|
{
|
||||||
|
BenchTime_Start(BT_SYSTICK, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
|
uwTick += uwTickFreq;
|
||||||
|
UPP_Tick();
|
||||||
|
upp.Timings.isr_systick_us = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
|
}
|
||||||
@ -39,9 +39,10 @@ typedef struct
|
|||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32_t isr_adc;
|
uint32_t slow_calc_us;
|
||||||
uint32_t isr_pwm;
|
uint32_t isr_adc_us;
|
||||||
uint32_t isr_systick;
|
uint32_t isr_pwm_us;
|
||||||
|
uint32_t isr_systick_us;
|
||||||
}Timings;
|
}Timings;
|
||||||
}UPP_t;
|
}UPP_t;
|
||||||
extern UPP_t upp;
|
extern UPP_t upp;
|
||||||
|
|||||||
@ -35,6 +35,7 @@ void UPP_Params_InternalControl(void)
|
|||||||
float angle_pid_kp = upp.hangle.pid.Kp;
|
float angle_pid_kp = upp.hangle.pid.Kp;
|
||||||
float angle_pid_ki = upp.hangle.pid.Ki;
|
float angle_pid_ki = upp.hangle.pid.Ki;
|
||||||
float angle_pid_kd = upp.hangle.pid.Kd;
|
float angle_pid_kd = upp.hangle.pid.Kd;
|
||||||
|
float angle_ref_alpha = upp.hangle.refFilter.alpha;
|
||||||
// временная переменная для параметров каналов АЦП
|
// временная переменная для параметров каналов АЦП
|
||||||
float adc_channel_max[ADC_NUMB_OF_REGULAR_CHANNELS] = {0};
|
float adc_channel_max[ADC_NUMB_OF_REGULAR_CHANNELS] = {0};
|
||||||
uint16_t adc_channel_zero[ADC_NUMB_OF_REGULAR_CHANNELS] = {0};
|
uint16_t adc_channel_zero[ADC_NUMB_OF_REGULAR_CHANNELS] = {0};
|
||||||
@ -71,6 +72,10 @@ void UPP_Params_InternalControl(void)
|
|||||||
{
|
{
|
||||||
alpha_update = 1;
|
alpha_update = 1;
|
||||||
}
|
}
|
||||||
|
if(__CheckSimpleParamF(&angle_ref_alpha, PARAM_INTERNAL.angle.PID_ExpAlpha, 65535))
|
||||||
|
{
|
||||||
|
alpha_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -130,7 +135,7 @@ void UPP_Params_InternalControl(void)
|
|||||||
if(alpha_update)
|
if(alpha_update)
|
||||||
{
|
{
|
||||||
Angle_SetRange(&upp.hangle, angle_min, angle_max);
|
Angle_SetRange(&upp.hangle, angle_min, angle_max);
|
||||||
Angle_PID_Init(&upp.hangle, angle_pid_kp, angle_pid_ki, angle_pid_kd);
|
Angle_PID_Init(&upp.hangle, angle_pid_kp, angle_pid_ki, angle_pid_kd, angle_ref_alpha);
|
||||||
}
|
}
|
||||||
// Обновление АЦП конфигов
|
// Обновление АЦП конфигов
|
||||||
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
|
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
|
||||||
@ -140,7 +145,7 @@ void UPP_Params_InternalControl(void)
|
|||||||
if(ADC_ConfigChannel(&upp.pm.adc, i, adc_channel_zero[i], adc_channel_max[i], 4095) == HAL_OK)
|
if(ADC_ConfigChannel(&upp.pm.adc, i, adc_channel_zero[i], adc_channel_max[i], 4095) == HAL_OK)
|
||||||
adc_channel_update[i] = 0;
|
adc_channel_update[i] = 0;
|
||||||
else
|
else
|
||||||
errors.prvt.cnt.adc_reinit_err++;
|
ERR_PRIVATE_CNT.adc_reinit_err++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Обновление Zero-Cross конфигов
|
// Обновление Zero-Cross конфигов
|
||||||
@ -149,7 +154,7 @@ void UPP_Params_InternalControl(void)
|
|||||||
if(ZC_Init(&upp.pm.zc, upp.pm.zc.Config.NumChannels, zc_hysteresis, zc_debounce) == HAL_OK)
|
if(ZC_Init(&upp.pm.zc, upp.pm.zc.Config.NumChannels, zc_hysteresis, zc_debounce) == HAL_OK)
|
||||||
zc_update = 0;
|
zc_update = 0;
|
||||||
else
|
else
|
||||||
errors.prvt.cnt.zc_reinit_err++;
|
ERR_PRIVATE_CNT.zc_reinit_err++;
|
||||||
}
|
}
|
||||||
// Обновление ШИМ конфигов
|
// Обновление ШИМ конфигов
|
||||||
if(pwm_update)
|
if(pwm_update)
|
||||||
@ -160,7 +165,7 @@ void UPP_Params_InternalControl(void)
|
|||||||
__AngleSetLimit();
|
__AngleSetLimit();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
errors.prvt.cnt.pwm_reinit_err++;
|
ERR_PRIVATE_CNT.pwm_reinit_err++;
|
||||||
}
|
}
|
||||||
if ((upp.hangle.Config.PeriodLimit == 0) || (upp.hangle.Config.PeriodLimit >= 0.999))
|
if ((upp.hangle.Config.PeriodLimit == 0) || (upp.hangle.Config.PeriodLimit >= 0.999))
|
||||||
{
|
{
|
||||||
@ -221,6 +226,14 @@ void UPP_SetDefault(int pui_default, int internal_default)
|
|||||||
|
|
||||||
PARAM_INTERNAL.zc.Hysteresis = ZERO_CROSS_HYSTERESIS_PERCENT_DEFAULT*100;
|
PARAM_INTERNAL.zc.Hysteresis = ZERO_CROSS_HYSTERESIS_PERCENT_DEFAULT*100;
|
||||||
PARAM_INTERNAL.zc.DebouneCouner = ZERO_CROSS_DEBOUNCE_CNT_DEFAULT;
|
PARAM_INTERNAL.zc.DebouneCouner = ZERO_CROSS_DEBOUNCE_CNT_DEFAULT;
|
||||||
|
|
||||||
|
|
||||||
|
PARAM_INTERNAL.angle.PID_Kp = ANGLE_PID_KP_COEF_DEFAULT*10000;
|
||||||
|
PARAM_INTERNAL.angle.PID_Ki = ANGLE_PID_KI_COEF_DEFAULT*10000;
|
||||||
|
PARAM_INTERNAL.angle.PID_Kd = ANGLE_PID_KD_COEF_DEFAULT*10000;
|
||||||
|
PARAM_INTERNAL.angle.PID_ExpAlpha = ANGLE_REF_ALPHA_COEF_DEFAULT*65535;
|
||||||
|
PARAM_INTERNAL.angle.Angle_Max = ANGLE_MAX_PERCENT_DEFAULT*65535;
|
||||||
|
PARAM_INTERNAL.angle.Angle_Min = ANGLE_MIN_PERCENT_DEFAULT*65535;
|
||||||
//__AngleSetLimit();
|
//__AngleSetLimit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,9 +82,10 @@ typedef struct
|
|||||||
{
|
{
|
||||||
uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535]
|
uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535]
|
||||||
uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535]
|
uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535]
|
||||||
uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 1000]
|
uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000]
|
||||||
uint16_t PID_Ki; ///< Интегральный коэфициент ПИ регулятора угла [x 1000]
|
uint16_t PID_Ki; ///< Интегральный коэфициент ПИ регулятора угла [x 10000]
|
||||||
uint16_t PID_Kd; ///< Интегральный коэфициент ПИ регулятора угла [x 1000]
|
uint16_t PID_Kd; ///< Интегральный коэфициент ПИ регулятора угла [x 10000]
|
||||||
|
uint16_t PID_ExpAlpha; ///< Коэффициент сглаживающего фильтра задания регулятора [0..1 x 65535]
|
||||||
}angle;
|
}angle;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
9
UPP/MDK-ARM/EventRecorderStub.scvd
Normal file
9
UPP/MDK-ARM/EventRecorderStub.scvd
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
|
||||||
|
|
||||||
|
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
|
||||||
|
<events>
|
||||||
|
</events>
|
||||||
|
|
||||||
|
</component_viewer>
|
||||||
24
UPP/MDK-ARM/RTE/_Debug_F417/RTE_Components.h
Normal file
24
UPP/MDK-ARM/RTE/_Debug_F417/RTE_Components.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Auto generated Run-Time-Environment Configuration File
|
||||||
|
* *** Do not modify ! ***
|
||||||
|
*
|
||||||
|
* Project: 'UPP'
|
||||||
|
* Target: 'Debug_F417'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RTE_COMPONENTS_H
|
||||||
|
#define RTE_COMPONENTS_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the Device Header File:
|
||||||
|
*/
|
||||||
|
#define CMSIS_device_header "stm32f4xx.h"
|
||||||
|
|
||||||
|
/* Keil.ARM Compiler::Compiler:I/O:STDOUT:ITM:1.2.0 */
|
||||||
|
#define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */
|
||||||
|
#define RTE_Compiler_IO_STDOUT_ITM /* Compiler I/O: STDOUT ITM */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* RTE_COMPONENTS_H */
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>0</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>18</CpuCode>
|
<CpuCode>18</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
@ -198,6 +198,272 @@
|
|||||||
</TargetOption>
|
</TargetOption>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
<Target>
|
||||||
|
<TargetName>Debug_F417</TargetName>
|
||||||
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
|
<TargetOption>
|
||||||
|
<CLKADS>12000000</CLKADS>
|
||||||
|
<OPTTT>
|
||||||
|
<gFlags>1</gFlags>
|
||||||
|
<BeepAtEnd>1</BeepAtEnd>
|
||||||
|
<RunSim>0</RunSim>
|
||||||
|
<RunTarget>1</RunTarget>
|
||||||
|
<RunAbUc>0</RunAbUc>
|
||||||
|
</OPTTT>
|
||||||
|
<OPTHX>
|
||||||
|
<HexSelection>1</HexSelection>
|
||||||
|
<FlashByte>65535</FlashByte>
|
||||||
|
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||||
|
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||||
|
<HexOffset>0</HexOffset>
|
||||||
|
</OPTHX>
|
||||||
|
<OPTLEX>
|
||||||
|
<PageWidth>79</PageWidth>
|
||||||
|
<PageLength>66</PageLength>
|
||||||
|
<TabStop>8</TabStop>
|
||||||
|
<ListingPath></ListingPath>
|
||||||
|
</OPTLEX>
|
||||||
|
<ListingPage>
|
||||||
|
<CreateCListing>1</CreateCListing>
|
||||||
|
<CreateAListing>1</CreateAListing>
|
||||||
|
<CreateLListing>1</CreateLListing>
|
||||||
|
<CreateIListing>0</CreateIListing>
|
||||||
|
<AsmCond>1</AsmCond>
|
||||||
|
<AsmSymb>1</AsmSymb>
|
||||||
|
<AsmXref>0</AsmXref>
|
||||||
|
<CCond>1</CCond>
|
||||||
|
<CCode>0</CCode>
|
||||||
|
<CListInc>0</CListInc>
|
||||||
|
<CSymb>0</CSymb>
|
||||||
|
<LinkerCodeListing>0</LinkerCodeListing>
|
||||||
|
</ListingPage>
|
||||||
|
<OPTXL>
|
||||||
|
<LMap>1</LMap>
|
||||||
|
<LComments>1</LComments>
|
||||||
|
<LGenerateSymbols>1</LGenerateSymbols>
|
||||||
|
<LLibSym>1</LLibSym>
|
||||||
|
<LLines>1</LLines>
|
||||||
|
<LLocSym>1</LLocSym>
|
||||||
|
<LPubSym>1</LPubSym>
|
||||||
|
<LXref>0</LXref>
|
||||||
|
<LExpSel>0</LExpSel>
|
||||||
|
</OPTXL>
|
||||||
|
<OPTFL>
|
||||||
|
<tvExp>1</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
|
</OPTFL>
|
||||||
|
<CpuCode>18</CpuCode>
|
||||||
|
<DebugOpt>
|
||||||
|
<uSim>0</uSim>
|
||||||
|
<uTrg>1</uTrg>
|
||||||
|
<sLdApp>1</sLdApp>
|
||||||
|
<sGomain>1</sGomain>
|
||||||
|
<sRbreak>1</sRbreak>
|
||||||
|
<sRwatch>1</sRwatch>
|
||||||
|
<sRmem>1</sRmem>
|
||||||
|
<sRfunc>1</sRfunc>
|
||||||
|
<sRbox>1</sRbox>
|
||||||
|
<tLdApp>1</tLdApp>
|
||||||
|
<tGomain>1</tGomain>
|
||||||
|
<tRbreak>1</tRbreak>
|
||||||
|
<tRwatch>1</tRwatch>
|
||||||
|
<tRmem>1</tRmem>
|
||||||
|
<tRfunc>1</tRfunc>
|
||||||
|
<tRbox>1</tRbox>
|
||||||
|
<tRtrace>1</tRtrace>
|
||||||
|
<sRSysVw>1</sRSysVw>
|
||||||
|
<tRSysVw>1</tRSysVw>
|
||||||
|
<sRunDeb>0</sRunDeb>
|
||||||
|
<sLrtime>0</sLrtime>
|
||||||
|
<bEvRecOn>1</bEvRecOn>
|
||||||
|
<bSchkAxf>0</bSchkAxf>
|
||||||
|
<bTchkAxf>0</bTchkAxf>
|
||||||
|
<nTsel>6</nTsel>
|
||||||
|
<sDll></sDll>
|
||||||
|
<sDllPa></sDllPa>
|
||||||
|
<sDlgDll></sDlgDll>
|
||||||
|
<sDlgPa></sDlgPa>
|
||||||
|
<sIfile></sIfile>
|
||||||
|
<tDll></tDll>
|
||||||
|
<tDllPa></tDllPa>
|
||||||
|
<tDlgDll></tDlgDll>
|
||||||
|
<tDlgPa></tDlgPa>
|
||||||
|
<tIfile></tIfile>
|
||||||
|
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
|
||||||
|
</DebugOpt>
|
||||||
|
<TargetDriverDllRegistry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>ARMRTXEVENTFLAGS</Key>
|
||||||
|
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>DLGTARM</Key>
|
||||||
|
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=620,209,878,797,0)(1012=-1,-1,-1,-1,0)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>ARMDBGFLAGS</Key>
|
||||||
|
<Name></Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>DLGUARM</Key>
|
||||||
|
<Name>(105=-1,-1,-1,-1,0)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>UL2CM3</Key>
|
||||||
|
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||||
|
<Name>-U005600373433510237363934 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131123 -TC168000000 -TT10000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
</TargetDriverDllRegistry>
|
||||||
|
<Breakpoint>
|
||||||
|
<Bp>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>136</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>134258308</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename>../Core/Src/stm32f4xx_it.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\Debug_F417\../Core/Src/stm32f4xx_it.c\136</Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
|
<WatchWindow1>
|
||||||
|
<Ww>
|
||||||
|
<count>0</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>upp,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>1</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>uwTick,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>errors.prvt.f.err,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>3</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>errors.prvt.cnt,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>4</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>hbt,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
</WatchWindow1>
|
||||||
|
<WatchWindow2>
|
||||||
|
<Ww>
|
||||||
|
<count>0</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>MB_INTERNAL,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>1</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>MB_DATA</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>errors.prvt.f.err,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>3</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>errors.prvt.cnt</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>4</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>errors.pui,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>5</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>errors.common</ItemText>
|
||||||
|
</Ww>
|
||||||
|
</WatchWindow2>
|
||||||
|
<Tracepoint>
|
||||||
|
<THDelay>0</THDelay>
|
||||||
|
</Tracepoint>
|
||||||
|
<DebugFlag>
|
||||||
|
<trace>0</trace>
|
||||||
|
<periodic>1</periodic>
|
||||||
|
<aLwin>1</aLwin>
|
||||||
|
<aCover>0</aCover>
|
||||||
|
<aSer1>0</aSer1>
|
||||||
|
<aSer2>0</aSer2>
|
||||||
|
<aPa>0</aPa>
|
||||||
|
<viewmode>1</viewmode>
|
||||||
|
<vrSel>0</vrSel>
|
||||||
|
<aSym>0</aSym>
|
||||||
|
<aTbox>0</aTbox>
|
||||||
|
<AscS1>0</AscS1>
|
||||||
|
<AscS2>0</AscS2>
|
||||||
|
<AscS3>0</AscS3>
|
||||||
|
<aSer3>0</aSer3>
|
||||||
|
<eProf>0</eProf>
|
||||||
|
<aLa>0</aLa>
|
||||||
|
<aPa1>0</aPa1>
|
||||||
|
<AscS4>0</AscS4>
|
||||||
|
<aSer4>0</aSer4>
|
||||||
|
<StkLoc>1</StkLoc>
|
||||||
|
<TrcWin>0</TrcWin>
|
||||||
|
<newCpu>0</newCpu>
|
||||||
|
<uProt>0</uProt>
|
||||||
|
</DebugFlag>
|
||||||
|
<LintExecutable></LintExecutable>
|
||||||
|
<LintConfigFile></LintConfigFile>
|
||||||
|
<bLintAuto>0</bLintAuto>
|
||||||
|
<bAutoGenD>0</bAutoGenD>
|
||||||
|
<LntExFlags>0</LntExFlags>
|
||||||
|
<pMisraName></pMisraName>
|
||||||
|
<pszMrule></pszMrule>
|
||||||
|
<pSingCmds></pSingCmds>
|
||||||
|
<pMultCmds></pMultCmds>
|
||||||
|
<pMisraNamep></pMisraNamep>
|
||||||
|
<pszMrulep></pszMrulep>
|
||||||
|
<pSingCmdsp></pSingCmdsp>
|
||||||
|
<pMultCmdsp></pMultCmdsp>
|
||||||
|
<SystemViewers>
|
||||||
|
<Entry>
|
||||||
|
<Name>System Viewer\DMA2</Name>
|
||||||
|
<WinId>35905</WinId>
|
||||||
|
</Entry>
|
||||||
|
<Entry>
|
||||||
|
<Name>System Viewer\TIM8</Name>
|
||||||
|
<WinId>35904</WinId>
|
||||||
|
</Entry>
|
||||||
|
</SystemViewers>
|
||||||
|
<DebugDescription>
|
||||||
|
<Enable>1</Enable>
|
||||||
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
|
<EnableLog>0</EnableLog>
|
||||||
|
<Protocol>2</Protocol>
|
||||||
|
<DbgClock>10000000</DbgClock>
|
||||||
|
</DebugDescription>
|
||||||
|
</TargetOption>
|
||||||
|
</Target>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Configs</GroupName>
|
<GroupName>Configs</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
@ -643,6 +909,18 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Core\Src\DBG_stm32f417_support.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>DBG_stm32f417_support.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>4</GroupNumber>
|
||||||
|
<FileNumber>36</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>../Core/Src/main.c</PathWithFileName>
|
<PathWithFileName>../Core/Src/main.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -650,7 +928,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>36</FileNumber>
|
<FileNumber>37</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -662,7 +940,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>37</FileNumber>
|
<FileNumber>38</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -674,7 +952,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>38</FileNumber>
|
<FileNumber>39</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -686,7 +964,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>39</FileNumber>
|
<FileNumber>40</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -698,7 +976,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>40</FileNumber>
|
<FileNumber>41</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -710,7 +988,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>41</FileNumber>
|
<FileNumber>42</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -722,7 +1000,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>42</FileNumber>
|
<FileNumber>43</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -734,7 +1012,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>43</FileNumber>
|
<FileNumber>44</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -746,7 +1024,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>44</FileNumber>
|
<FileNumber>45</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -758,7 +1036,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>45</FileNumber>
|
<FileNumber>46</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -770,7 +1048,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>46</FileNumber>
|
<FileNumber>47</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -782,7 +1060,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>47</FileNumber>
|
<FileNumber>48</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -802,7 +1080,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>48</FileNumber>
|
<FileNumber>49</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -814,7 +1092,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>49</FileNumber>
|
<FileNumber>50</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -826,7 +1104,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>50</FileNumber>
|
<FileNumber>51</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -838,7 +1116,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>51</FileNumber>
|
<FileNumber>52</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -850,7 +1128,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>52</FileNumber>
|
<FileNumber>53</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -862,7 +1140,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>53</FileNumber>
|
<FileNumber>54</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -874,7 +1152,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>54</FileNumber>
|
<FileNumber>55</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -886,7 +1164,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>55</FileNumber>
|
<FileNumber>56</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -906,7 +1184,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>56</FileNumber>
|
<FileNumber>57</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -918,7 +1196,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>57</FileNumber>
|
<FileNumber>58</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -930,7 +1208,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>58</FileNumber>
|
<FileNumber>59</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -942,7 +1220,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>59</FileNumber>
|
<FileNumber>60</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -954,7 +1232,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>60</FileNumber>
|
<FileNumber>61</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -966,7 +1244,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>61</FileNumber>
|
<FileNumber>62</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -978,7 +1256,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>62</FileNumber>
|
<FileNumber>63</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -990,7 +1268,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>63</FileNumber>
|
<FileNumber>64</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1002,7 +1280,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>64</FileNumber>
|
<FileNumber>65</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1014,7 +1292,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>65</FileNumber>
|
<FileNumber>66</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1026,7 +1304,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>66</FileNumber>
|
<FileNumber>67</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1038,7 +1316,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>67</FileNumber>
|
<FileNumber>68</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1058,7 +1336,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>68</FileNumber>
|
<FileNumber>69</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1070,7 +1348,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>69</FileNumber>
|
<FileNumber>70</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1090,7 +1368,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>70</FileNumber>
|
<FileNumber>71</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1102,7 +1380,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>71</FileNumber>
|
<FileNumber>72</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1114,7 +1392,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>72</FileNumber>
|
<FileNumber>73</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1126,7 +1404,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>73</FileNumber>
|
<FileNumber>74</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1138,7 +1416,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>74</FileNumber>
|
<FileNumber>75</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1158,7 +1436,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>75</FileNumber>
|
<FileNumber>76</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1170,7 +1448,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>76</FileNumber>
|
<FileNumber>77</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1182,7 +1460,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>77</FileNumber>
|
<FileNumber>78</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1194,7 +1472,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>78</FileNumber>
|
<FileNumber>79</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1206,7 +1484,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>79</FileNumber>
|
<FileNumber>80</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1218,7 +1496,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>80</FileNumber>
|
<FileNumber>81</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1230,7 +1508,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>81</FileNumber>
|
<FileNumber>82</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1242,7 +1520,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>82</FileNumber>
|
<FileNumber>83</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1254,7 +1532,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>83</FileNumber>
|
<FileNumber>84</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1266,7 +1544,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>84</FileNumber>
|
<FileNumber>85</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1278,7 +1556,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>85</FileNumber>
|
<FileNumber>86</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1290,7 +1568,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>86</FileNumber>
|
<FileNumber>87</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1302,7 +1580,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>87</FileNumber>
|
<FileNumber>88</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1314,7 +1592,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>88</FileNumber>
|
<FileNumber>89</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1326,7 +1604,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>89</FileNumber>
|
<FileNumber>90</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1338,7 +1616,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>90</FileNumber>
|
<FileNumber>91</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1350,7 +1628,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>91</FileNumber>
|
<FileNumber>92</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1362,7 +1640,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>92</FileNumber>
|
<FileNumber>93</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1374,7 +1652,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>93</FileNumber>
|
<FileNumber>94</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1386,7 +1664,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>94</FileNumber>
|
<FileNumber>95</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1398,7 +1676,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>95</FileNumber>
|
<FileNumber>96</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1410,7 +1688,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>96</FileNumber>
|
<FileNumber>97</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1422,7 +1700,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>97</FileNumber>
|
<FileNumber>98</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1434,7 +1712,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>98</FileNumber>
|
<FileNumber>99</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1454,7 +1732,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>99</FileNumber>
|
<FileNumber>100</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1468,18 +1746,30 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/MDK-ARM</GroupName>
|
<GroupName>Application/MDK-ARM</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>100</FileNumber>
|
<FileNumber>101</FileNumber>
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>startup_stm32f427xx.s</PathWithFileName>
|
<PathWithFileName>.\startup_stm32f417xx.s</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>startup_stm32f417xx.s</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>11</GroupNumber>
|
||||||
|
<FileNumber>102</FileNumber>
|
||||||
|
<FileType>2</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>.\startup_stm32f427xx.s</PathWithFileName>
|
||||||
<FilenameWithoutPath>startup_stm32f427xx.s</FilenameWithoutPath>
|
<FilenameWithoutPath>startup_stm32f427xx.s</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
424
UPP/MDK-ARM/startup_stm32f417xx.s
Normal file
424
UPP/MDK-ARM/startup_stm32f417xx.s
Normal file
@ -0,0 +1,424 @@
|
|||||||
|
;*******************************************************************************
|
||||||
|
;* File Name : startup_stm32f417xx.s
|
||||||
|
;* Author : MCD Application Team
|
||||||
|
;* Description : STM32F417xx devices vector table for MDK-ARM toolchain.
|
||||||
|
;* This module performs:
|
||||||
|
;* - Set the initial SP
|
||||||
|
;* - Set the initial PC == Reset_Handler
|
||||||
|
;* - Set the vector table entries with the exceptions ISR address
|
||||||
|
;* - Branches to __main in the C library (which eventually
|
||||||
|
;* calls main()).
|
||||||
|
;* After Reset the CortexM4 processor is in Thread mode,
|
||||||
|
;* priority is Privileged, and the Stack is set to Main.
|
||||||
|
;*******************************************************************************
|
||||||
|
;* @attention
|
||||||
|
;*
|
||||||
|
;* Copyright (c) 2017 STMicroelectronics.
|
||||||
|
;* All rights reserved.
|
||||||
|
;*
|
||||||
|
;* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
;* in the root directory of this software component.
|
||||||
|
;* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
;*
|
||||||
|
;*******************************************************************************
|
||||||
|
;* <<< Use Configuration Wizard in Context Menu >>>
|
||||||
|
;
|
||||||
|
; Amount of memory (in bytes) allocated for Stack
|
||||||
|
; Tailor this value to your application needs
|
||||||
|
; <h> Stack Configuration
|
||||||
|
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||||
|
; </h>
|
||||||
|
|
||||||
|
Stack_Size EQU 0x400
|
||||||
|
|
||||||
|
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||||
|
Stack_Mem SPACE Stack_Size
|
||||||
|
__initial_sp
|
||||||
|
|
||||||
|
|
||||||
|
; <h> Heap Configuration
|
||||||
|
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||||
|
; </h>
|
||||||
|
|
||||||
|
Heap_Size EQU 0x200
|
||||||
|
|
||||||
|
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||||
|
__heap_base
|
||||||
|
Heap_Mem SPACE Heap_Size
|
||||||
|
__heap_limit
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
|
||||||
|
; Vector Table Mapped to Address 0 at Reset
|
||||||
|
AREA RESET, DATA, READONLY
|
||||||
|
EXPORT __Vectors
|
||||||
|
EXPORT __Vectors_End
|
||||||
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
|
__Vectors DCD __initial_sp ; Top of Stack
|
||||||
|
DCD Reset_Handler ; Reset Handler
|
||||||
|
DCD NMI_Handler ; NMI Handler
|
||||||
|
DCD HardFault_Handler ; Hard Fault Handler
|
||||||
|
DCD MemManage_Handler ; MPU Fault Handler
|
||||||
|
DCD BusFault_Handler ; Bus Fault Handler
|
||||||
|
DCD UsageFault_Handler ; Usage Fault Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD SVC_Handler ; SVCall Handler
|
||||||
|
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD PendSV_Handler ; PendSV Handler
|
||||||
|
DCD SysTick_Handler ; SysTick Handler
|
||||||
|
|
||||||
|
; External Interrupts
|
||||||
|
DCD WWDG_IRQHandler ; Window WatchDog
|
||||||
|
DCD PVD_IRQHandler ; PVD through EXTI Line detection
|
||||||
|
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line
|
||||||
|
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
|
||||||
|
DCD FLASH_IRQHandler ; FLASH
|
||||||
|
DCD RCC_IRQHandler ; RCC
|
||||||
|
DCD EXTI0_IRQHandler ; EXTI Line0
|
||||||
|
DCD EXTI1_IRQHandler ; EXTI Line1
|
||||||
|
DCD EXTI2_IRQHandler ; EXTI Line2
|
||||||
|
DCD EXTI3_IRQHandler ; EXTI Line3
|
||||||
|
DCD EXTI4_IRQHandler ; EXTI Line4
|
||||||
|
DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0
|
||||||
|
DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1
|
||||||
|
DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2
|
||||||
|
DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3
|
||||||
|
DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4
|
||||||
|
DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5
|
||||||
|
DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6
|
||||||
|
DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s
|
||||||
|
DCD CAN1_TX_IRQHandler ; CAN1 TX
|
||||||
|
DCD CAN1_RX0_IRQHandler ; CAN1 RX0
|
||||||
|
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
|
||||||
|
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
|
||||||
|
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
|
||||||
|
DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9
|
||||||
|
DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10
|
||||||
|
DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11
|
||||||
|
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
||||||
|
DCD TIM2_IRQHandler ; TIM2
|
||||||
|
DCD TIM3_IRQHandler ; TIM3
|
||||||
|
DCD TIM4_IRQHandler ; TIM4
|
||||||
|
DCD I2C1_EV_IRQHandler ; I2C1 Event
|
||||||
|
DCD I2C1_ER_IRQHandler ; I2C1 Error
|
||||||
|
DCD I2C2_EV_IRQHandler ; I2C2 Event
|
||||||
|
DCD I2C2_ER_IRQHandler ; I2C2 Error
|
||||||
|
DCD SPI1_IRQHandler ; SPI1
|
||||||
|
DCD SPI2_IRQHandler ; SPI2
|
||||||
|
DCD USART1_IRQHandler ; USART1
|
||||||
|
DCD USART2_IRQHandler ; USART2
|
||||||
|
DCD USART3_IRQHandler ; USART3
|
||||||
|
DCD EXTI15_10_IRQHandler ; External Line[15:10]s
|
||||||
|
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
|
||||||
|
DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line
|
||||||
|
DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12
|
||||||
|
DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13
|
||||||
|
DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14
|
||||||
|
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare
|
||||||
|
DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7
|
||||||
|
DCD FMC_IRQHandler ; FMC
|
||||||
|
DCD SDIO_IRQHandler ; SDIO
|
||||||
|
DCD TIM5_IRQHandler ; TIM5
|
||||||
|
DCD SPI3_IRQHandler ; SPI3
|
||||||
|
DCD UART4_IRQHandler ; UART4
|
||||||
|
DCD UART5_IRQHandler ; UART5
|
||||||
|
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
|
||||||
|
DCD TIM7_IRQHandler ; TIM7
|
||||||
|
DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0
|
||||||
|
DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1
|
||||||
|
DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2
|
||||||
|
DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3
|
||||||
|
DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4
|
||||||
|
DCD ETH_IRQHandler ; Ethernet
|
||||||
|
DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line
|
||||||
|
DCD CAN2_TX_IRQHandler ; CAN2 TX
|
||||||
|
DCD CAN2_RX0_IRQHandler ; CAN2 RX0
|
||||||
|
DCD CAN2_RX1_IRQHandler ; CAN2 RX1
|
||||||
|
DCD CAN2_SCE_IRQHandler ; CAN2 SCE
|
||||||
|
DCD OTG_FS_IRQHandler ; USB OTG FS
|
||||||
|
DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5
|
||||||
|
DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6
|
||||||
|
DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7
|
||||||
|
DCD USART6_IRQHandler ; USART6
|
||||||
|
DCD I2C3_EV_IRQHandler ; I2C3 event
|
||||||
|
DCD I2C3_ER_IRQHandler ; I2C3 error
|
||||||
|
DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out
|
||||||
|
DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In
|
||||||
|
DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI
|
||||||
|
DCD OTG_HS_IRQHandler ; USB OTG HS
|
||||||
|
DCD DCMI_IRQHandler ; DCMI
|
||||||
|
DCD CRYP_IRQHandler ; CRYPTO
|
||||||
|
DCD HASH_RNG_IRQHandler ; Hash and Rng
|
||||||
|
DCD FPU_IRQHandler ; FPU
|
||||||
|
|
||||||
|
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
; Reset handler
|
||||||
|
Reset_Handler PROC
|
||||||
|
EXPORT Reset_Handler [WEAK]
|
||||||
|
IMPORT SystemInit
|
||||||
|
IMPORT __main
|
||||||
|
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__main
|
||||||
|
BX R0
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||||
|
|
||||||
|
NMI_Handler PROC
|
||||||
|
EXPORT NMI_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
HardFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT HardFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
MemManage_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT MemManage_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
BusFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT BusFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
UsageFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT UsageFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SVC_Handler PROC
|
||||||
|
EXPORT SVC_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
DebugMon_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT DebugMon_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
PendSV_Handler PROC
|
||||||
|
EXPORT PendSV_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SysTick_Handler PROC
|
||||||
|
EXPORT SysTick_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
Default_Handler PROC
|
||||||
|
|
||||||
|
EXPORT WWDG_IRQHandler [WEAK]
|
||||||
|
EXPORT PVD_IRQHandler [WEAK]
|
||||||
|
EXPORT TAMP_STAMP_IRQHandler [WEAK]
|
||||||
|
EXPORT RTC_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT FLASH_IRQHandler [WEAK]
|
||||||
|
EXPORT RCC_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI0_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI1_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI2_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI3_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI4_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream0_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream1_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream2_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream3_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream4_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream5_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream6_IRQHandler [WEAK]
|
||||||
|
EXPORT ADC_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN1_TX_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN1_RX0_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN1_RX1_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN1_SCE_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI9_5_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_UP_TIM10_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_CC_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM2_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM3_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM4_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C1_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C1_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C2_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C2_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI1_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI2_IRQHandler [WEAK]
|
||||||
|
EXPORT USART1_IRQHandler [WEAK]
|
||||||
|
EXPORT USART2_IRQHandler [WEAK]
|
||||||
|
EXPORT USART3_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI15_10_IRQHandler [WEAK]
|
||||||
|
EXPORT RTC_Alarm_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_UP_TIM13_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_CC_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream7_IRQHandler [WEAK]
|
||||||
|
EXPORT FMC_IRQHandler [WEAK]
|
||||||
|
EXPORT SDIO_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM5_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI3_IRQHandler [WEAK]
|
||||||
|
EXPORT UART4_IRQHandler [WEAK]
|
||||||
|
EXPORT UART5_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM6_DAC_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM7_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream0_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream1_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream2_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream3_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream4_IRQHandler [WEAK]
|
||||||
|
EXPORT ETH_IRQHandler [WEAK]
|
||||||
|
EXPORT ETH_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN2_TX_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN2_RX0_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN2_RX1_IRQHandler [WEAK]
|
||||||
|
EXPORT CAN2_SCE_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream5_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream6_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream7_IRQHandler [WEAK]
|
||||||
|
EXPORT USART6_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C3_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C3_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_IRQHandler [WEAK]
|
||||||
|
EXPORT DCMI_IRQHandler [WEAK]
|
||||||
|
EXPORT CRYP_IRQHandler [WEAK]
|
||||||
|
EXPORT HASH_RNG_IRQHandler [WEAK]
|
||||||
|
EXPORT FPU_IRQHandler [WEAK]
|
||||||
|
|
||||||
|
WWDG_IRQHandler
|
||||||
|
PVD_IRQHandler
|
||||||
|
TAMP_STAMP_IRQHandler
|
||||||
|
RTC_WKUP_IRQHandler
|
||||||
|
FLASH_IRQHandler
|
||||||
|
RCC_IRQHandler
|
||||||
|
EXTI0_IRQHandler
|
||||||
|
EXTI1_IRQHandler
|
||||||
|
EXTI2_IRQHandler
|
||||||
|
EXTI3_IRQHandler
|
||||||
|
EXTI4_IRQHandler
|
||||||
|
DMA1_Stream0_IRQHandler
|
||||||
|
DMA1_Stream1_IRQHandler
|
||||||
|
DMA1_Stream2_IRQHandler
|
||||||
|
DMA1_Stream3_IRQHandler
|
||||||
|
DMA1_Stream4_IRQHandler
|
||||||
|
DMA1_Stream5_IRQHandler
|
||||||
|
DMA1_Stream6_IRQHandler
|
||||||
|
ADC_IRQHandler
|
||||||
|
CAN1_TX_IRQHandler
|
||||||
|
CAN1_RX0_IRQHandler
|
||||||
|
CAN1_RX1_IRQHandler
|
||||||
|
CAN1_SCE_IRQHandler
|
||||||
|
EXTI9_5_IRQHandler
|
||||||
|
TIM1_BRK_TIM9_IRQHandler
|
||||||
|
TIM1_UP_TIM10_IRQHandler
|
||||||
|
TIM1_TRG_COM_TIM11_IRQHandler
|
||||||
|
TIM1_CC_IRQHandler
|
||||||
|
TIM2_IRQHandler
|
||||||
|
TIM3_IRQHandler
|
||||||
|
TIM4_IRQHandler
|
||||||
|
I2C1_EV_IRQHandler
|
||||||
|
I2C1_ER_IRQHandler
|
||||||
|
I2C2_EV_IRQHandler
|
||||||
|
I2C2_ER_IRQHandler
|
||||||
|
SPI1_IRQHandler
|
||||||
|
SPI2_IRQHandler
|
||||||
|
USART1_IRQHandler
|
||||||
|
USART2_IRQHandler
|
||||||
|
USART3_IRQHandler
|
||||||
|
EXTI15_10_IRQHandler
|
||||||
|
RTC_Alarm_IRQHandler
|
||||||
|
OTG_FS_WKUP_IRQHandler
|
||||||
|
TIM8_BRK_TIM12_IRQHandler
|
||||||
|
TIM8_UP_TIM13_IRQHandler
|
||||||
|
TIM8_TRG_COM_TIM14_IRQHandler
|
||||||
|
TIM8_CC_IRQHandler
|
||||||
|
DMA1_Stream7_IRQHandler
|
||||||
|
FMC_IRQHandler
|
||||||
|
SDIO_IRQHandler
|
||||||
|
TIM5_IRQHandler
|
||||||
|
SPI3_IRQHandler
|
||||||
|
UART4_IRQHandler
|
||||||
|
UART5_IRQHandler
|
||||||
|
TIM6_DAC_IRQHandler
|
||||||
|
TIM7_IRQHandler
|
||||||
|
DMA2_Stream0_IRQHandler
|
||||||
|
DMA2_Stream1_IRQHandler
|
||||||
|
DMA2_Stream2_IRQHandler
|
||||||
|
DMA2_Stream3_IRQHandler
|
||||||
|
DMA2_Stream4_IRQHandler
|
||||||
|
ETH_IRQHandler
|
||||||
|
ETH_WKUP_IRQHandler
|
||||||
|
CAN2_TX_IRQHandler
|
||||||
|
CAN2_RX0_IRQHandler
|
||||||
|
CAN2_RX1_IRQHandler
|
||||||
|
CAN2_SCE_IRQHandler
|
||||||
|
OTG_FS_IRQHandler
|
||||||
|
DMA2_Stream5_IRQHandler
|
||||||
|
DMA2_Stream6_IRQHandler
|
||||||
|
DMA2_Stream7_IRQHandler
|
||||||
|
USART6_IRQHandler
|
||||||
|
I2C3_EV_IRQHandler
|
||||||
|
I2C3_ER_IRQHandler
|
||||||
|
OTG_HS_EP1_OUT_IRQHandler
|
||||||
|
OTG_HS_EP1_IN_IRQHandler
|
||||||
|
OTG_HS_WKUP_IRQHandler
|
||||||
|
OTG_HS_IRQHandler
|
||||||
|
DCMI_IRQHandler
|
||||||
|
CRYP_IRQHandler
|
||||||
|
HASH_RNG_IRQHandler
|
||||||
|
FPU_IRQHandler
|
||||||
|
|
||||||
|
B .
|
||||||
|
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
|
||||||
|
;*******************************************************************************
|
||||||
|
; User Stack and Heap initialization
|
||||||
|
;*******************************************************************************
|
||||||
|
IF :DEF:__MICROLIB
|
||||||
|
|
||||||
|
EXPORT __initial_sp
|
||||||
|
EXPORT __heap_base
|
||||||
|
EXPORT __heap_limit
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
IMPORT __use_two_region_memory
|
||||||
|
EXPORT __user_initial_stackheap
|
||||||
|
|
||||||
|
__user_initial_stackheap
|
||||||
|
|
||||||
|
LDR R0, = Heap_Mem
|
||||||
|
LDR R1, =(Stack_Mem + Stack_Size)
|
||||||
|
LDR R2, = (Heap_Mem + Heap_Size)
|
||||||
|
LDR R3, = Stack_Mem
|
||||||
|
BX LR
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
END
|
||||||
@ -5,9 +5,10 @@ ADC3.Channel-17\#ChannelRegularConversion=ADC_CHANNEL_6
|
|||||||
ADC3.Channel-18\#ChannelRegularConversion=ADC_CHANNEL_7
|
ADC3.Channel-18\#ChannelRegularConversion=ADC_CHANNEL_7
|
||||||
ADC3.Channel-19\#ChannelRegularConversion=ADC_CHANNEL_8
|
ADC3.Channel-19\#ChannelRegularConversion=ADC_CHANNEL_8
|
||||||
ADC3.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_10
|
ADC3.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_10
|
||||||
|
ADC3.DMAContinuousRequests=ENABLE
|
||||||
ADC3.EOCSelection=ADC_EOC_SEQ_CONV
|
ADC3.EOCSelection=ADC_EOC_SEQ_CONV
|
||||||
ADC3.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T8_TRGO
|
ADC3.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T8_TRGO
|
||||||
ADC3.IPParameters=Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,ScanConvMode,Rank-16\#ChannelRegularConversion,Channel-16\#ChannelRegularConversion,SamplingTime-16\#ChannelRegularConversion,Rank-17\#ChannelRegularConversion,Channel-17\#ChannelRegularConversion,SamplingTime-17\#ChannelRegularConversion,Rank-18\#ChannelRegularConversion,Channel-18\#ChannelRegularConversion,SamplingTime-18\#ChannelRegularConversion,Rank-19\#ChannelRegularConversion,Channel-19\#ChannelRegularConversion,SamplingTime-19\#ChannelRegularConversion,Rank-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,ExternalTrigConv,EOCSelection
|
ADC3.IPParameters=Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,ScanConvMode,Rank-16\#ChannelRegularConversion,Channel-16\#ChannelRegularConversion,SamplingTime-16\#ChannelRegularConversion,Rank-17\#ChannelRegularConversion,Channel-17\#ChannelRegularConversion,SamplingTime-17\#ChannelRegularConversion,Rank-18\#ChannelRegularConversion,Channel-18\#ChannelRegularConversion,SamplingTime-18\#ChannelRegularConversion,Rank-19\#ChannelRegularConversion,Channel-19\#ChannelRegularConversion,SamplingTime-19\#ChannelRegularConversion,Rank-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,ExternalTrigConv,EOCSelection,DMAContinuousRequests
|
||||||
ADC3.NbrOfConversion=6
|
ADC3.NbrOfConversion=6
|
||||||
ADC3.NbrOfConversionFlag=1
|
ADC3.NbrOfConversionFlag=1
|
||||||
ADC3.Rank-15\#ChannelRegularConversion=1
|
ADC3.Rank-15\#ChannelRegularConversion=1
|
||||||
@ -38,7 +39,7 @@ Dma.ADC3.0.FIFOMode=DMA_FIFOMODE_DISABLE
|
|||||||
Dma.ADC3.0.Instance=DMA2_Stream0
|
Dma.ADC3.0.Instance=DMA2_Stream0
|
||||||
Dma.ADC3.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
|
Dma.ADC3.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
|
||||||
Dma.ADC3.0.MemInc=DMA_MINC_ENABLE
|
Dma.ADC3.0.MemInc=DMA_MINC_ENABLE
|
||||||
Dma.ADC3.0.Mode=DMA_NORMAL
|
Dma.ADC3.0.Mode=DMA_CIRCULAR
|
||||||
Dma.ADC3.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
Dma.ADC3.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
||||||
Dma.ADC3.0.PeriphInc=DMA_PINC_DISABLE
|
Dma.ADC3.0.PeriphInc=DMA_PINC_DISABLE
|
||||||
Dma.ADC3.0.Priority=DMA_PRIORITY_LOW
|
Dma.ADC3.0.Priority=DMA_PRIORITY_LOW
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user