From be84043f18b909dff73cdcdd1ffb899ca4d8c163 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sun, 9 Nov 2025 02:06:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D0=B5=D0=BD=D1=8C?= =?UTF-8?q?=D0=BA=D0=B0=D1=8F=20=D1=81=D0=B8=D0=BC=D1=83=D0=BB=D1=8F=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=90=D0=A6=D0=9F=20=D0=B2=20=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B5=D0=BC=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B6=D0=B8=D0=BC=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Но надо отлаживать и сравнивать с работой реального (в плане разных режимов работы, доделать прерывания/дма, флаги и так далее) --- .../Drivers/STM32_SIMULINK/stm32_matlab_adc.c | 230 ++++++++++++++++++ .../Drivers/STM32_SIMULINK/stm32_matlab_adc.h | 56 +++++ MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.c | 52 ++++ MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.h | 20 +- .../stm32f4xx_matlab_conf.json | 21 +- MATLAB/MCU_Wrapper/MCU.c | 32 +-- MATLAB/MCU_Wrapper/mcu_wrapper.c | 3 +- MATLAB/MCU_Wrapper/mcu_wrapper_conf.h | 4 +- MATLAB/app_wrapper/app_includes.h | 1 + MATLAB/app_wrapper/app_init.c | 2 + MATLAB/app_wrapper/app_io.c | 3 +- MATLAB/upp_r2023.slx | Bin 65662 -> 66492 bytes UPP/Core/Inc/adc.h | 3 + UPP/Core/Src/adc.c | 90 ++++++- UPP/Core/Src/main.c | 1 + UPP/MDK-ARM/UPP.uvoptx | 46 ++-- UPP/MDK-ARM/UPP.uvprojx | 123 +++++----- UPP/UPP.ioc | 141 ++++++----- 18 files changed, 647 insertions(+), 181 deletions(-) create mode 100644 MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c create mode 100644 MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c new file mode 100644 index 0000000..e7fa495 --- /dev/null +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c @@ -0,0 +1,230 @@ +#include "stm32_matlab_adc.h" +#include + + +/////////////////////////////---SIMULINK FUNCTIONS---////////////////////////// +void Simulate_ADCs(void) +{ +#ifdef USE_ADC1 + ADC_Simulation(ADC1, &adc1s); +#endif +#ifdef USE_ADC2 + ADC_Simulation(ADC2, &adc2s); +#endif +#ifdef USE_ADC3 + ADC_Simulation(ADC3, &adc3s); +#endif +} + + +/////////////////////////////---ADC SIMULATION---///////////////////////////// +void ADC_Simulation(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) +{ + if (!(ADCx->CR2 & ADC_CR2_ADON)) return; + + // Start conversion on SWSTART + if (ADCx->CR2 & ADC_CR2_SWSTART) { + ADC_Start_Conversion(ADCx, ADCS); + ADCx->CR2 &= ~ADC_CR2_SWSTART; + } + + // Handle ongoing conversion - + if (ADCS->conversion_time_elapsed >= 0) { + ADCS->conversion_time_elapsed += ADCS->simulation_step; + double total_time = ADC_Get_Total_Conversion_Time(ADCx, ADCS); + + if (ADCS->conversion_time_elapsed >= total_time) { + ADC_Complete_Conversion(ADCx, ADCS); + + // Continuous mode auto-restart + if (ADCx->CR2 & ADC_CR2_CONT) { + ADC_Start_Conversion(ADCx, ADCS); + } + } + } + +} + +void ADC_Start_Conversion(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) +{ + // + if (ADCx->CR1 & ADC_CR1_SCAN) { + // + ADCS->current_rank = 0; + ADCS->current_channel = ADC_Get_Sequence_Channel(ADCx, 0); + } + else { + // + ADCS->current_channel = ADC_Get_Sequence_Channel(ADCx, 0); + } + + ADCS->conversion_time_elapsed = 0; +} + +void ADC_Complete_Conversion(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) +{ + // + double analog_val = 0; + if (ADCS->channel_connected[ADCS->current_channel]) { + analog_val = ADCS->channel_values[ADCS->current_channel]; + } + + if (analog_val < 0) + analog_val = 0; + if (analog_val > 3.3) + analog_val = 3.3; + + + // + ADCS->last_conversion_value = (uint16_t)((analog_val / 3.3) * 4095.0); + + // LSB + int32_t noisy_value = (int32_t)ADCS->last_conversion_value + (rand() % (2 * ADC_NOISE_LSB + 1)) - ADC_NOISE_LSB; + + // + if (noisy_value < 0) noisy_value = 0; + if (noisy_value > 4095) noisy_value = 4095; + + ADCS->last_conversion_value = (uint16_t)noisy_value; + + // DR + ADCx->DR = ADCS->last_conversion_value; + + // EOC + ADCx->SR |= ADC_SR_EOC; + + // DMA + if (ADCx->CR2 & ADC_CR2_DMA) { + ADC_DMA_Transfer(ADCx, ADCS); + } + + // + if (ADCx->CR1 & ADC_CR1_SCAN) { + ADCS->current_rank++; + uint32_t seq_len = ADC_Get_Sequence_Length(ADCx); + + if (ADCS->current_rank < seq_len) { + // + ADCS->current_channel = ADC_Get_Sequence_Channel(ADCx, ADCS->current_rank); + ADCS->conversion_time_elapsed = 0; + return; + } + else { + // +#ifdef ADC_SR_EOS + ADCx->SR |= ADC_SR_EOS; +#endif + } + } + + ADCS->conversion_time_elapsed = 0; +} + +/////////////////////////////---REGISTER-BASED FUNCTIONS---/////////////////// +double ADC_Get_Total_Conversion_Time(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) +{ + // sampling time + uint32_t sampling_cycles = ADC_Get_Sampling_Cycles(ADCx, ADCS->current_channel); + + // Conversion cycles + uint32_t conversion_cycles = 12; // 12-bit + + double total_cycles = sampling_cycles + conversion_cycles; + double adc_clock = ADCS->adc_clock_freq; // + + return total_cycles / adc_clock; +} + +uint32_t ADC_Get_Sampling_Cycles(ADC_TypeDef* ADCx, uint32_t channel) +{ + // sampling time SMPR1/SMPR2 + uint32_t smpr_code; + if (channel <= 9) { + smpr_code = (ADCx->SMPR2 >> (channel * 3)) & 0x7; + } + else { + smpr_code = (ADCx->SMPR1 >> ((channel - 10) * 3)) & 0x7; + } + + // Convert SMPR code to actual cycles + static const uint32_t cycles_map[8] = { 3, 15, 28, 56, 84, 112, 144, 480 }; + return (smpr_code < 8) ? cycles_map[smpr_code] : 3; +} + +uint32_t ADC_Get_Sequence_Length(ADC_TypeDef* ADCx) +{ +#ifdef ADC_SQR1_L + return ((ADCx->SQR1 & ADC_SQR1_L) >> ADC_SQR1_L_Pos) + 1; +#else + return ((ADCx->SQR1 & 0x00F00000) >> 20) + 1; +#endif +} + +uint32_t ADC_Get_Sequence_Channel(ADC_TypeDef* ADCx, uint32_t rank) +{ + if (rank > 15) return 0; + + if (rank < 6) { + return (ADCx->SQR3 >> (rank * 5)) & 0x1F; + } + else if (rank < 12) { + return (ADCx->SQR2 >> ((rank - 6) * 5)) & 0x1F; + } + else { + return (ADCx->SQR1 >> ((rank - 12) * 5)) & 0x1F; + } +} + +/////////////////////////////---DMA FUNCTIONS---/////////////////////////////// +void ADC_DMA_Transfer(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) +{ + if (!ADCS->dma_buffer || ADCS->dma_buffer_size == 0) return; + + ADCS->dma_buffer[ADCS->dma_current_index] = ADCx->DR; + ADCS->dma_current_index++; + + if (ADCS->dma_current_index >= ADCS->dma_buffer_size) { + if (ADCS->dma_circular) { + ADCS->dma_current_index = 0; + } + } +} + +/////////////////////////////---CHANNEL FUNCTIONS---/////////////////////////// +void ADC_Set_Channel_Value(ADC_TypeDef* ADCx, uint32_t channel, double voltage) +{ +#ifdef USE_ADC1 + if (ADCx == ADC1 && channel < 19) { + adc1s.channel_values[channel] = voltage; + adc1s.channel_connected[channel] = 1; + } +#endif +#ifdef USE_ADC2 + if (ADCx == ADC2 && channel < 19) { + adc2s.channel_values[channel] = voltage; + adc2s.channel_connected[channel] = 1; + } +#endif +#ifdef USE_ADC3 + if (ADCx == ADC3 && channel < 19) { + adc3s.channel_values[channel] = voltage; + adc3s.channel_connected[channel] = 1; + } +#endif +} +/////////////////////////////---INITIALIZATION---///////////////////////////// + +void ADC_SIM_DEINIT(void) +{ +#ifdef USE_ADC1 + memset(&adc1s, 0, sizeof(adc1s)); +#endif +#ifdef USE_ADC2 + memset(&adc2s, 0, sizeof(adc2s)); +#endif +#ifdef USE_ADC3 + memset(&adc3s, 0, sizeof(adc3s)); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h new file mode 100644 index 0000000..feea8fe --- /dev/null +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h @@ -0,0 +1,56 @@ +#ifndef _MATLAB_ADC_H_ +#define _MATLAB_ADC_H_ + +#include "stm32_matlab_conf.h" + + +#ifdef STM32F1 +#define ADC_NOISE_LSB 10 // Шум в LSB (квантах АЦП) +#endif + +#ifdef STM32F4 +#define ADC_NOISE_LSB 2 // Шум в LSB (квантах АЦП) +#endif + +/////////////////////////////---STRUCTURES---/////////////////////////// +struct ADC_Sim +{ + double conversion_time_elapsed; + uint32_t current_channel; + uint32_t current_rank; + uint16_t last_conversion_value; + + double channel_values[19]; + uint8_t channel_connected[19]; + + // DMA + uint32_t* dma_buffer; + uint32_t dma_buffer_size; + uint32_t dma_current_index; + uint8_t dma_circular; + + // Timing + double simulation_step; + double adc_clock_freq; +}; +/////////////////////////////////////////////////////////////////////// + +///////////////////////////---FUNCTIONS---/////////////////////////// + +void Simulate_ADCs(void); +void ADC_Simulation(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS); +void ADC_Start_Conversion(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS); +void ADC_Complete_Conversion(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS); + +double ADC_Get_Total_Conversion_Time(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS); +uint32_t ADC_Get_Sampling_Cycles(ADC_TypeDef* ADCx, uint32_t channel); +uint32_t ADC_Get_Sequence_Length(ADC_TypeDef* ADCx); +uint32_t ADC_Get_Sequence_Channel(ADC_TypeDef* ADCx, uint32_t rank); +void ADC_DMA_Transfer(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS); +void ADC_Set_Channel_Value(ADC_TypeDef* ADCx, uint32_t channel, double voltage); + +void ADC_SIM_DEINIT(void); + +/////////////////////////////////////////////////////////////////////// + +#endif // _MATLAB_ADC_H_ \ No newline at end of file diff --git a/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.c b/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.c index 3c6bfd5..2973f9c 100644 --- a/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.c +++ b/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.c @@ -16,11 +16,21 @@ MCU_CortexMemoryTypeDef MCU_CORTEX_MEM; void Initialize_Periph_Sim(void) { Init_TIM_SIM(); + Init_ADC_SIM(); } + +// MCU PERIPH SIM +void Simulate_Periph_Sim(void) +{ + Simulate_TIMs(); + Simulate_ADCs(); +} + // MCU PERIPH DEINIT void deInitialize_Periph_Sim(void) { TIM_SIM_DEINIT(); + ADC_SIM_DEINIT(); } // MCU DEINIT void deInitialize_MCU(void) @@ -85,6 +95,7 @@ struct TIM_Sim tim14s; void Init_TIM_SIM(void) { #ifdef USE_TIM1 + memset(&tim1s, 0, sizeof(tim1s)); tim1s.tx_cnt = TIM1->CNT; tim1s.tx_step = hmcu.sSimSampleTime * ABP2_TIMS_Value; @@ -98,6 +109,7 @@ void Init_TIM_SIM(void) tim1s.Channels.OC4_PIN_SHIFT = 11; #endif #ifdef USE_TIM2 + memset(&tim2s, 0, sizeof(tim2s)); tim2s.tx_cnt = TIM2->CNT; tim2s.tx_step = hmcu.sSimSampleTime * ABP1_TIMS_Value; @@ -111,6 +123,7 @@ void Init_TIM_SIM(void) tim2s.Channels.OC4_PIN_SHIFT = 3; #endif #ifdef USE_TIM3 + memset(&tim3s, 0, sizeof(tim3s)); tim3s.tx_cnt = TIM3->CNT; tim3s.tx_step = hmcu.sSimSampleTime * ABP1_TIMS_Value; @@ -124,6 +137,7 @@ void Init_TIM_SIM(void) tim3s.Channels.OC4_PIN_SHIFT = 9; #endif #ifdef USE_TIM4 + memset(&tim4s, 0, sizeof(tim4s)); tim4s.tx_cnt = TIM4->CNT; tim4s.tx_step = hmcu.sSimSampleTime * ABP1_TIMS_Value; @@ -137,6 +151,7 @@ void Init_TIM_SIM(void) tim4s.Channels.OC4_PIN_SHIFT = 9; #endif #ifdef USE_TIM5 + memset(&tim5s, 0, sizeof(tim5s)); tim5s.tx_cnt = TIM5->CNT; tim5s.tx_step = hmcu.sSimSampleTime * ABP1_TIMS_Value; @@ -150,6 +165,7 @@ void Init_TIM_SIM(void) tim5s.Channels.OC4_PIN_SHIFT = 3; #endif #ifdef USE_TIMx + memset(&tim6s, 0, sizeof(tim6s)); tim6s.tx_cnt = TIMx->CNT; tim6s.tx_step = hmcu.sSimSampleTime * ABP1_TIMS_Value; @@ -165,3 +181,39 @@ void Init_TIM_SIM(void) } /*-------------------------------TIMERS----------------------------------*/ //-----------------------------------------------------------------------// + + + +//-----------------------------------------------------------------------// +/*---------------------------------ADC-----------------------------------*/ +#ifdef USE_ADC1 +struct ADC_Sim adc1s; +#endif +#ifdef USE_ADC2 +struct ADC_Sim adc2s; +#endif +#ifdef USE_ADC3 +struct ADC_Sim adc3s; +#endif +void Init_ADC_SIM(void) +{ +#ifdef USE_ADC1 + memset(&adc1s, 0, sizeof(adc1s)); + adc1s.simulation_step = hmcu.sSimSampleTime; + adc1s.adc_clock_freq = ABP2_Value; // Частота APB2 +#endif + +#ifdef USE_ADC2 + memset(&adc2s, 0, sizeof(adc2s)); + adc2s.simulation_step = hmcu.sSimSampleTime; + adc2s.adc_clock_freq = ABP2_Value; // Частота APB2 +#endif + +#ifdef USE_ADC3 + memset(&adc3s, 0, sizeof(adc3s)); + adc3s.simulation_step = hmcu.sSimSampleTime; + adc3s.adc_clock_freq = ABP2_Value; // Частота APB2 +#endif +} +/*---------------------------------ADC-----------------------------------*/ +//-----------------------------------------------------------------------// diff --git a/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.h b/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.h index df6ccad..8b353e6 100644 --- a/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.h +++ b/MATLAB/MCU_STM32_Matlab/stm32_matlab_conf.h @@ -54,13 +54,13 @@ //-----------------------------------------------------------------------// /*------------------------------FUNCTIONS--------------------------------*/ void deInitialize_Periph_Sim(void); +void Simulate_Periph_Sim(void); void deInitialize_MCU(void); void Initialize_Periph_Sim(void); #include "stm32_matlab_rcc.h" #include "stm32_matlab_gpio.h" - //-----------------------------------------------------------------------// /*-------------------------------TIMERS----------------------------------*/ //#if defined(USE_TIM1) || defined(USE_TIM2) || defined(USE_TIM3) || defined(USE_TIM4) || defined(USE_TIM5) || \ @@ -116,4 +116,22 @@ extern struct TIM_Sim tim14s; /*-------------------------------TIMERS----------------------------------*/ //-----------------------------------------------------------------------// +//-----------------------------------------------------------------------// +/*---------------------------------ADC-----------------------------------*/ +#include "stm32_matlab_adc.h" + +#ifdef USE_ADC1 +extern struct ADC_Sim adc1s; +#endif +#ifdef USE_ADC2 +extern struct ADC_Sim adc2s; +#endif +#ifdef USE_ADC3 +extern struct ADC_Sim adc3s; +#endif + +/*---------------------------------ADC-----------------------------------*/ +//-----------------------------------------------------------------------// + + #endif // _MATLAB_SETUP_H_ diff --git a/MATLAB/MCU_STM32_Matlab/stm32f4xx_matlab_conf.json b/MATLAB/MCU_STM32_Matlab/stm32f4xx_matlab_conf.json index 5a81e53..3c36e56 100644 --- a/MATLAB/MCU_STM32_Matlab/stm32f4xx_matlab_conf.json +++ b/MATLAB/MCU_STM32_Matlab/stm32f4xx_matlab_conf.json @@ -16,8 +16,7 @@ ], "PeriphSimulation": [ "uwTick = hmcu.SystemClock / (MCU_CORE_CLOCK / 1000)", - "Simulate_TIMs()", - "Simulate_GPIO_BSRR()" + "Simulate_Periph_Sim()" ], "PeriphDeinit": [ "deInitialize_Periph_Sim()" @@ -56,7 +55,7 @@ "Tab_ADC_Enable": { "Prompt": "Enable ADCs", "Type": "checkbox", - "Default": false, + "Default": true, "NewRow": true } } @@ -583,17 +582,27 @@ } }, "ADC": { + "Sources": [ + "Drivers/STM32_SIMULINK/stm32_matlab_adc.c" + ], "Defines": { "ADC1_Enable": { "Prompt": "ADC1 Enable", - "Def": "ADC1_ENABLE", + "Def": "USE_ADC1", "Type": "checkbox", - "Default": false, + "Default": true, "NewRow": true }, "ADC2_Enable": { "Prompt": "ADC2 Enable", - "Def": "ADC2_ENABLE", + "Def": "USE_ADC2", + "Type": "checkbox", + "Default": false, + "NewRow": true + }, + "ADC3_Enable": { + "Prompt": "ADC3 Enable", + "Def": "USE_ADC3", "Type": "checkbox", "Default": false, "NewRow": true diff --git a/MATLAB/MCU_Wrapper/MCU.c b/MATLAB/MCU_Wrapper/MCU.c index 822dd05..72b00c7 100644 --- a/MATLAB/MCU_Wrapper/MCU.c +++ b/MATLAB/MCU_Wrapper/MCU.c @@ -197,24 +197,24 @@ static void mdlTerminate(SimStruct* S) //// Простая версия - ждем завершения потока - // Ждем до 5 секунд - for (int i = 0; i < 50; i++) { - // Проверяем, завершился ли поток (упрощенная проверка) - DWORD exitCode; - if (GetExitCodeThread(hmcu.hMCUThread, &exitCode) && exitCode != STILL_ACTIVE) { - break; // поток завершился - } - Sleep(100); // ждем 100ms - } - - - //// Даем потоку шанс завершиться нормально - //DWORD waitResult = WaitForSingleObject(hmcu.hMCUThread, 3000); - //if (waitResult == WAIT_TIMEOUT) { - // // Поток не ответил - завершаем принудительно - // TerminateThread(hmcu.hMCUThread, 0); + //// Ждем до 5 секунд + //for (int i = 0; i < 50; i++) { + // // Проверяем, завершился ли поток (упрощенная проверка) + // DWORD exitCode; + // if (GetExitCodeThread(hmcu.hMCUThread, &exitCode) && exitCode != STILL_ACTIVE) { + // break; // поток завершился + // } + // Sleep(100); // ждем 100ms //} + + // Даем потоку шанс завершиться нормально + DWORD waitResult = WaitForSingleObject(hmcu.hMCUThread, 10000); + if (waitResult == WAIT_TIMEOUT) { + // Поток не ответил - завершаем принудительно + TerminateThread(hmcu.hMCUThread, 0); + } + CloseHandle(hmcu.hMCUThread); hmcu.hMCUThread = NULL; } diff --git a/MATLAB/MCU_Wrapper/mcu_wrapper.c b/MATLAB/MCU_Wrapper/mcu_wrapper.c index dba2ff6..6a07287 100644 --- a/MATLAB/MCU_Wrapper/mcu_wrapper.c +++ b/MATLAB/MCU_Wrapper/mcu_wrapper.c @@ -114,8 +114,7 @@ void MCU_Periph_Simulation(SimStruct* S) { // PERIPH SIM START uwTick = hmcu.SystemClock / (MCU_CORE_CLOCK / 1000); - Simulate_TIMs(); - Simulate_GPIO_BSRR(); + Simulate_Periph_Sim(); // PERIPH SIM END } diff --git a/MATLAB/MCU_Wrapper/mcu_wrapper_conf.h b/MATLAB/MCU_Wrapper/mcu_wrapper_conf.h index e444b4f..fa2864b 100644 --- a/MATLAB/MCU_Wrapper/mcu_wrapper_conf.h +++ b/MATLAB/MCU_Wrapper/mcu_wrapper_conf.h @@ -51,11 +51,11 @@ // INPUT/OUTPUTS PARAMS START #define IN_PORT_NUMB 2 #define ADC_PORT_1_WIDTH 6 -#define IN_PORT_2_WIDTH 16 +#define IN_PORT_2_WIDTH 1 #define OUT_PORT_NUMB 2 #define THYR_PORT_1_WIDTH 6 -#define OUT_PORT_2_WIDTH 16 +#define OUT_PORT_2_WIDTH 1 // INPUT/OUTPUTS PARAMS END /** WRAPPER_CONF diff --git a/MATLAB/app_wrapper/app_includes.h b/MATLAB/app_wrapper/app_includes.h index a1f34d7..1c5648d 100644 --- a/MATLAB/app_wrapper/app_includes.h +++ b/MATLAB/app_wrapper/app_includes.h @@ -13,6 +13,7 @@ //#include "stm32_matlab_conf.h" #include "main.h" #include "tim.h" +#include "adc.h" // INCLUDES END #endif //_APP_INCLUDES_H_ \ No newline at end of file diff --git a/MATLAB/app_wrapper/app_init.c b/MATLAB/app_wrapper/app_init.c index 12338d5..515a489 100644 --- a/MATLAB/app_wrapper/app_init.c +++ b/MATLAB/app_wrapper/app_init.c @@ -21,6 +21,8 @@ void app_init(void) { MX_TIM3_Init(); __HAL_TIM_SET_COMPARE(&hpwm1, PWM_CHANNEL_1, __HAL_TIM_GET_AUTORELOAD(&hpwm1)/2); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1); + MX_ADC1_Init(); + HAL_ADC_Start(&hadc1); // USER APP INIT END } diff --git a/MATLAB/app_wrapper/app_io.c b/MATLAB/app_wrapper/app_io.c index 745e9b9..46f50ea 100644 --- a/MATLAB/app_wrapper/app_io.c +++ b/MATLAB/app_wrapper/app_io.c @@ -32,7 +32,7 @@ void ThyristorWrite(real_T* Buffer) */ void app_readInputs(const real_T* Buffer) { // USER APP INPUT START - +ADC_Set_Channel_Value(ADC1, 0, ReadInputArray(1,0)); // USER APP INPUT END } @@ -44,5 +44,6 @@ void app_readInputs(const real_T* Buffer) { void app_writeOutputBuffer(real_T* Buffer) { // USER APP OUTPUT START ThyristorWrite(Buffer); + WriteOutputArray(ADC1->DR, 1, 0); // USER APP OUTPUT END } \ No newline at end of file diff --git a/MATLAB/upp_r2023.slx b/MATLAB/upp_r2023.slx index 67a3ffd50b5c2a5212bc2bfcc22bcf8be2a1eecb..d9915853767404eb7514ded05466e006e0438fd7 100644 GIT binary patch delta 46511 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�|(Cl7dIH{X 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 delta 45638 zcmV)YK&-#KhXnqB1Q$?C0|YGq000O8001EX4L3q_abExcBas&}f4fysTu<2bJGgt$ zAVC7bf(3U85IjJz;2zvvg9i^GxQE~tf;$8Y9%OKL8{FkI|5NX|JC|S8ckxm~F~!WD zy}SGAwSKF2PlSq+3>G>WIs^j2dM7KT3W30#J^i90gZ~UnEqwuh&>Up7ogol}Ur)bq zS^|S~5XcM2J1KE>e~uk8J#I{nqA%BI4Wpu&?leVzSDp)UKQ@cMl{MvMF>4?EQ3Muq{sy z*OOTEO8A0?Cby(ljDdy*e;J9D?`W-g7I% zeHjK@`qVHxt26HnYiUuTrGXh`6U1jvPED=;i6BVkcc%X)_tLKAT!REN)NOz{QO@UL z#-c?_k_Kj&f1R+*&BL>Lb-acfc^$l?qpqzTVK(sHX!iG~`kkL?5C~6N*+Nzr9V45($xPl~?RWorprme+UXoN`g8J19Zyl>U=ab zG}xwM`n;bGFs>rO!^0zCHw<_>02dE0(0$35*!yB%e_TZ+uA)S8!ekoxoz!P~qR9Bv z)Gw>6#_9adJC{9DaU&6{f_|9T#>IOuNS)1qHW_jZzDppx-(M z{{HREa9@l-!XSb`Cak!>$>q<9GAL)BIod`vhJkMUOiWIW86p8!J+r@8jC)Q3x*1Jh zSC?Gme`cF@f4*TH`r&_07TNu|m(m-PfI;cZ^+UK9W>^_s{4yaSq0!7QGd}0dD4FVZ z!e`IUB+9~@I8BgJ?reUcRC+MoKtP@lcBHe^qyPH;J&1bS8 zf0UYy4Tq7Dkq@-uwLxpt=%~uX)KsS-dv;?Z8F;^BD5m&_4}`y}s~tB7Nlh&*^2*DH zp=|MetRj*O9cx@?*0BqAVX|~i_XponQX-}u+-}YZ=;TNDL9Y_P@UCI5 zPj#fn$HPHbB^q2)rj~e@de{qEqeL_Qe=nV7|G$TbJqux`$Axt-dwMzOV=z%xZ6 zr+uO*;RTWR<7t|{efz^bieb%cv!9(kzxM?TJOX!k6#4RAu?iJkq8z*DiPWoS=oRU( ziK1~Z$d`W`3Lnu?k9z+^ta+cOs%{aRnQdIHQ9VX6s+pf#Ar)>>2%OP&c1m!#e{368 zWZi~Q`Td!*Z;M^&lJUNuUsTo5fEN`NMMTm&as5z;Bj9<03Nf52CDrF&T8kBpK0CvF z^-QiJJ@%%6%Kr`<*7it5Lrd#*kXkNQr^ON;5z*D`DW9!g{9Z>Vyd!Abs9KvkiP^Av z=0y^7_9Tx)*+tNpWq{5>SWgdff8U1F^g)0+6OthqZg@zzl=1X|8%eZR;p78585W;2 zJ+V~{6(l=*nFSMB_;ZkCj(V}fu`v=6TWbwe|E?yt@rH(lNIo`w&bZ3(Z2P$W;pVyH zii8NnaK4@qH{wsF77K3V+sYXm+{o@Y*&pmAXW&0ampB1qmJkSNgH{<)f4Ef4FU}Nl zMa5{9qB|9B?NGG>CF8;5cYH3}GQpvtk|nn7-x!_!u08kW`x9jF@bN?I>;F(*^JYIB z4DlL-bQ_<~UjH#hn=1E3&GNmV)Tnsi7P(%xop&0r(qbWc^(^LcGysD2dsezo-737> zc-lsTBw89YTZ=`b&r}sWe-H1*f0Zalf{84fubMnW-)G91E|3^v)Fs_vING$RTx8!r zB8pTp=`E_6X?Yq$LX{Oo*QViuntade#7x|`Ct1(Ynd}1P6;$IvCpJO=C ze+rpG7%3?zabGzRw}vw$bY>m?^fIj8T?;)UB7#&(7FbJ2bc%rvL`1aARxJV|W@PzB z99#q{Hg-tAsf45?D;e2tmBR{at6$NC%x_Q4-&%v9Ad-bVe~GZE9`NAc+VkaO1e<^T zq5;F+W%))d|3uQ(mK&b{CAa*L6VzT@TpWB^Eu36Fx=tApHFb`qjg6Ft2c5C;DjYC2 z3Ir5=sEK&r0}mRt{LJpMExSK+igkC-9Uc=Cq+0Y@ZUZHw9IZgfOuS$`Cntx9 zkuhi)RuQP=p3f#DA%VZUYn83e1g7z;bU}BrqM{%@R&goc_d2sGre2#P!ekKFDY6er|H+f99D`C-mdte+`I>V_)CeYFsoJ zGN&!oU~MuHB% z!>+E$m)6$ad(U^RN71fsexj(l>0Tl=GAim1P>#bJ5jM6F=B@mTmkb7BKYmQOJ=)95 zp>tSGe;|SyY^r_vGQYm{H8Zogf}CQ=e186xeFp(|1LyYib;(ec^U`LCtvs zfp+ZMj_Z9RvWgT@a0tc_zC#z#V}|V8coYW@+Jy^tG9Nx5(a`2C92(SE5sF+b2NBJI z8E|}es=OM(@Gwt5k(aktY1)q--o1(~f4Gi^_a3^wvGIbP9Tl|m=#*fsc1|FRYCXeU z#3cJxD+%Gg307;=8T^UQb(fBl3y0>V87>gIC9V1+bKPbwwD>-b_u)h4&gYi3T7&g2 zMd*Hheh0`mrz4`V`};PSRDK(t_0j~vpz!Y=E-%;elNK$Vqnw%4LizFD-&$F{f2I|@ zP43-jyLZEQ*z(WpE&gz6cysm+0?AO?a=Y1%e$Km^6GnNWqgQm>NWKk9fX`{&Lbp*J zDMTXh%NNx@-7j-%FF1>fnN-x&qJx7?F-dTPnw!ZXF)4qgXgES~s3s3RsXUh9Y-WDt z54n}q<_ws0zoo&$L=M{XuAYffe@x?{W?(3I+raOv;j+{0a_)C!gmUIpraAJdMu)@r zkH?=Ldav_lsYR!&Baw*-bx-vvs~Y3K-#k$;p8taPp90ukmux`(yLcSC|X`Xm4!RZtCChnF(Q&p7ZkiVc(%PyVf${f5Xn^oE&V( z(X`2kmu_2SCF;B@ly;cv|jS@nhG(ygq#D4R;djy?9xUm#LSTofg zR1_IfSo|0E@4Vl=agwn-fA8nvX2-!@V^fLGr#IprM;+dcE>Uv%J)e=%(c{B!G9T}k z9=mVO_l)Z1-fL)tDvMkrqM@N_)!LAXJY1QS>Nem5QXEKH`h0TYATg zYn}i*LhethK zXV38Y^ZX-recmKbZf@?gCI2=8E(-zkTb9?a|9odn6B3aT@6ZOCxEe;~W^}fl1IXVe zbP?x@Zq(Y^`naDVe**_e(C?1Vd~kbq*IH3gXMgq_NuB9K*oFc<0lji&$jHdz zva)azpF6#~^cRhuf0&@Ys(AEj7^sNto8z%x zoL{}|>5+bFXkkT#jG^HR$O{GrV$nMXR4#Ltj`e;cJ%P3{%l2?QQW8#6L^qgQ^GHuG zgYj6d8D*Bq_9&jm*;oPYvuB@SZSLuLE#EalJ(pGz#0+Y7p_GYfJY{?GMN<>%Ci~MJ zB!abT#~U%-f7)M2w%ev_tcd{}EN-l+Gre4QLb|&XXq`h2KtRDZy1QcR>+cWLVvz>; zPD3*bJ99shMD+^;vT3TdW94;_@z&}rIL=S;~cp$6WLPH(>J(m+! z$UALg-2B*TajFg6T1uLJbu$fi*j)J>J>;Y~EOuine@oiTjNh)!H^Vwjwf}tKR)D90 z00MLg7bJ=dVw;z2Y*a~X&*PG(ud5i8)D5BKv5w=4yq+$HFXg}gb{-P?k)Pji;{eVN ztnLNJ*u8VlEo=!mTlvBUuIG4XNUL5#Zi(U{V2Ps&|CY}Ob8Sy%J?TtHTVb57*2ZNy znyue3e>@@z3++&WGDDpTs@}&wx8J|2LX2lmpEMqJEbg5flW@R zuk}*7OXR3{sOvK&nhcX)@;+~!DnPhj?(nVD8f5+cVn60XiH6Z)v!_?*7&-i)SC8l*LUwiWJDvae`;=J^cM|z(f~UPzpha6c<{*n{Tmmg z#moATla@=7i>vvTGG!DmyF;{T8=h?!MO2(vDbQ`D8omBj>gt$4Q1gJGbaYTZL52As zUEP)^i0Q|FnJa#yo&EbqBTIMiNN{z1?LF~re!fVJ;k|BpY#f~$2%b{bu(X2%swpS`moLMTH1WpE?QZ~T7_|p% zyCK}i%TRWNN#n@O$K`=q{oduF^hRrc!j z>z)K9By2QI61wxHoF@Fe>6XRVr;!V z6a;#;KU;%=90cdqL;>bG(sJ^d&Cb7WKto+rk5{jHVlt*SbwwZQpR=`IJv(f@6&E`G zLrcPK^=(hGR`B-XU@wJu;}Xhn zZ{tbBT4;G!r#0wt*wDMOwY7zQ)*Z=U{BV~qtK_DTcs=#eex(Ct&c4WTD(`wECo5|$ zCL~8u;=Q&uc8bEL761Ka+E6mLwNV;QwJ_tWSExHXJ7AJxVN(i)fB*R-1%Lr*4_eV% z0=ggFC2c5lMC2CUtA%7l=#;n4WP4yh{%AstO`OH;Zn0K>FR#XNt>^rjfA97~_NAG! z@Hq|S1@k~J;m+E=+w%91axw-k))%_|C}2)>~<$f96#ry}piVRy~7RGC8|C zeh(-~;o%Y>ErC$sG0y7irAiH!ZZXh>uGbOlx&n2q{E`+L^Zpt)m14EC#K}l3_7o zva*(uzD^DJ7)0~I&+W8AFP9!=B7G511Yms!2X1jYe-yqI)l~6p@b-&${#WY>?udY?3V_9{tE<1Dp;=ABw#CMe_%ms; zU{`1IaCdDNE9!m0qN=8*=Z>kUs0b3O?RW(|vr zuFJFJsfUX?(VY4#ctBXk*aNOEhd+PPL!F&lfAn#pdzuKWrw>|h*~KTI-;$DO1q2$q zYeBiM9IbqZH2~FtwLM}l`kX5IT+Gaoi1^^Esv_6%F9qQ&1_GcR%xEG(KykBAnQ4`F z2-Mfn38oNy!08Ib+WVo)sH)myJW+V8-*Bj=+=2*!N@a`QpN#{kK@BL!`uLpB;e`#4 zf6S?erzijCpddV4T!+c?Pi!t}sbq6ynr3FC*p%~Oz>*tl`3Lkry%Yx+*3c^Ms$}K52A(cMYPR(~G1At`2-Q0Lu?=L>idv0a0lSQNA;KMJYb>SiOfe?~eL*0n8b zOtPA2<+5;!%UU{iKw|)T;$6b#3r^1BFzd;xvojZ{Lv1nK52LNLRN)y>X7BzChTyA7e@DG;<0|I*bFY??asAVN#`LxIrm#RIM2K4x$>W3j z+*Ix8s1~ICZ=$A1^ODD!93qO0(Z3%tPzb4TquJiRJ@8HJfy;AtlpC#V|Jws1kbvFm zzr#|v8b+<2$9?5Q4GioMR*x;CaQp6LG5*v2cudB=W{z>#^3888cEhFCe*;-r)b3z3 z=+tOKCc2CJQ~EqQbzb`Mcsk;J4D8de`%9C6kh_fHA$>y8TZYz6vkU_5ZI?#73fiIP zE;K0iN=D44zD%Rl)v>hv{8&pq)uh1BI5>`9F){{A=LOE#bj&wII$rEEP9N~3i~18e zI!0Jp{mZSYq68>&Q2tj#e?=ugQ{NM*qU9o0=6rPLH|2=W=7e@ZeLiJP)^lq#SrKhx}bzcE&``}usH@vAa9O zwsv46vn+B>S0-cCfA8iK4inSgxQvX5r&UTjC@ufBH1uIa^pX5Ik4=D5fuy-Py_~#! zmEXM=CfOTQ9ML=WTAP{A-iHkZ1FpM~=@diYRXk#1lnf=5c-dfZQmMCZYdriueEf)! zuR3!mv^#vifHr70pn(uD_dPkwZ#Jku!2;d^(bd+L^>ff%e=Rb9!4IVL0YQB<_bm#q z(`=XkvH%_=yt_S>J9EjDkeGPwbY$tz)v+_)^R(^S!5m3Zpe~O3#YRh`1@OKPJ~Dl* zA8TjN`>n1|xXV9@!Y$wICDnR#{hmAM8x{#YJBxA~5p>>E7)#0(Q#EOy`(gm7YK zFhy63#T;1;C5!W=);X5N#VKJ#Gwg-(HvhSnGq>Fn=nj+aLttvS@?_Y_fi=v+KTG@{dKr zATpdPf7QOan6u~by>ZzGuFV}Q2mv3y)`0@+9?od0^1ggZe=S1|`kouw>swhpwsi~9 z29Gzxlx6PrJ8FT46U`}qu3b-UhZtswBcv!oJ?%d&Fe@Ra!B4-_>=U~(&i0ixSbArm{-qC ze>RRbtEJ1*87Byy%c~Zlx-V>8>m3WiJb2KOc%z>4VoT@Yoo)_wrEpnPy6pVpDY5(h z{rl>CgM>ncz=-X5lg>d{zPzU4e0_h51}t-m0bxON(f<((5hct`e>7S#ZLvFysx=~v z$`2E=4ASSfZx_Vpz$`#+X{xk_ZcR5`e+I}vfl?V?9X(X{co`ZxMEVEa-67j7-qF)5 zB#$0`tsBM#=v}`O`g}g~^6vUnR!PZ?qGEgpmyB#`rL9iQ#YMMZqt;FslA;h(_E9uc zovGXZF3bckY|4FhXwSZSM)$T%qr}?a^gyp$h`|Y{5Qtt^tC4I+Jdr-1&Vj?-f0S}>B^Y?Vjejb6mUOX+yk`oL4zi~UMD_E znie+NzmfImLkZqTnK-$JMZ#q+f88_^;61QAS#k_ATwT+W4bSBjesNV5yk9>9P&qp4us?gw^OnR|Lyh^;}DxkDNLNg^>h>fCuh8x;3m$is9GFJN-xw+BYf9J<)Nt;@T zN+<+dyZaMRIP4c$S^dhrzI0^EfT(V2s{0A;ZqMNH%jKeX#e&H*bfhS0lh`Ti>B=z@ z9vhd~^pAOHowc^!xa2;$r=5`El05;ob=uDuE;X|_yo>dJp_AEeLKo8*t>qF)S57tD zi`f_>!x?iNMx7+V!NI?if2CaxW@|jo#$-S=h)YfmPhe2)Tw0=HYrCUqy;{X+zQ2$T z4yC6N5Ga?~gN~|%rP-y1?u>649qRUCDO;!!rz!lTEK^gKS5Wv=?V;xXvR>>m@o?}N zgNy2?IsHuvexEA_kiDWP=6D5)zzNsp?EOz>&TVV0tuYU3aw{uwe}OiLKHck>ckHEr z1Q>ONK4}#-H8r2pIx0Q^L6zNt0DyFI5uayFA8?UzD6w1gp?R(e{id>Va@|9`6`yr{ zZM!A)^|AjB$g_X?7v4f#-rw2PwT4943;F9;)j8JFVZlc+ zhf0ftqVv%xA>=Y2Y>y)4g6NXs9dGBw!q@*hJKWdO*3rQhZS$CS zkeoBB69)O&XsLA^sLXV0%PCS)@cMj%&|sE7ZLRI?d=0*Ze~Af#6b;_$8bQva6^Dh= z2=+je4j91}{V-B4dQUUQ?*N8l1^YAj9DjVwSPhnb-CC?^zaZP2HgpW z(W&e<=5TU~p?&iPGbabn(y~y}#6%d_E-vwwwhWDdpyMj)>VM1q@72`EGwYcu-i2Smw$Wt-6=x2EB=?vke6};v9&SroR z*&Ri|5K|xemt(ZT7G$kUSHePyfussYUt!OaQXZJ_f4$KJ8bU_%Zc#y|lW*Dh&QT`@ zTRW&kxqSS~g-dl5ncB&vPIAcVD*pSA-lWvjM$>KnZ1C{#M(o>;N6R8C+MT@4xex6N z-pc+SqPvM=qE71;Pn#a@rVn)+UGSbpbh)GJ>82GPN47k)u%g1&{k#U$Ilg_%IT4_Z zfBDXCf8A6MN2q|U;wc6F{d3fra-e%-qoV=b)>G|PH4mKDnI?XBgM&epS_*~bt-;^E ziSzm0;exT7u=2mUzV5QBc?#yLMToT0Q60x?VW6|nN+!`W%FzHdnpdL%gDNa8b{Lwf zHSACn@!P=OgBt8ejx~qmT)T8j-S@9_g>l%F1A$ii)^8 zY_c7-gnzH=1Lx=W5FV@C6M}JFf7nP}Sk@ACc7}O(cS;%FZCt2s1!fs2xSXmgIPlXq zFz{9^02ze8uFz;HadDBmySt}5;(%Deg!8qlpdumJc3TaaimY~db6{nCeO&;Q6<)Q- zf5c|HAgdLm|7j0J_b&+K?%P>DCuo_z7uwL;=;yq~tA8R2i{a(uUO(ORR7)TtB+Tb? zWx_Br!Xpvl18pUhiMhi}QTX!X$DYHD3(wP9o`M3oI+N(rV0`#M7!Jby+qaB^=3K9J z`@*`754i#tb-l+43C867>nmwIi{yD$zD^A`dFtrpB1ft%Gds!Nm1frq+pZTr6xmh&2J zr5$gNtu3@N3Z}hE8#%xN3^j}bf5D^>cv@yy*NG_0N&fz1Q=8WB`FW2pP-z*!R>V6=ssG=AV#E5-E6iWV0T%VAmT%v9x-1j8Ok@^U=%4 z>q9$-+I*3kHjqW1ScAys3QfUo*V->S&cnP;%AXtATB-{2u_Se7D~B=Af8!Rg`3gp< z_?JTY4Z8$iVi$ z9x$kM+K>a0%E0`~EpcZjJ|02BXg^`OlCLkTU9%&T`EYvdOf^4_q<@$G;X1cDm&4B2 z3TyF+x&`+o-@>9II7l;4e*&#$k1Fe><&Gc@?+cst&CS)7FsdF5w&sARrI;d2DVIe-xgy4iH3aD`BOFR7^LDtvEC+`>S!%Q!a1 zK_Yzfmxk7Plkf0zMwjs8S%D~=L+L9m(4Y_rtQrAq`R{|fi8p!!e_Y*Yfy?m1Z{CoX zXb7+GS>fW<#DC?)w{N@GPCMxDr-jSz77-Q2;<3B?!qpw$i%7gJCFM(K@g*;lt{#YU zDqt>Rl~)3k=0=<;?5?{)V2+-v4uLt~6|)R~f3hJDU?eUqvice4XhisYc$9*}tw*+S ze}9lyCC@rq2a>=!f7RA-hP0obT~bU0nERtSd4g=RQkrIG+Yznh@UD0W89tly4Z8Eb zbruOWd=&g&BLI{A`HaNe_~ru}o@@E_N!!?%CVejx8=JU`3pp9t?t4wmpsTBkBrdn_ z`HN5({6a#AzHEI@%#fIl4wJ~$G6kT}I%S2(cXZE&H~a_wf6C#KkObG)(|t=M%*oBg z?C&pPC&Q}LDXVv&ra}+F=S;!e*m%jFqJWAK86cN04Z0AY0L6IrcSEZmKQ!HsczZZR zpU3_|l#c!<;Ab*WtMmzD2k;c*1g?|e+$Q->n zlDF(0N3yXM1(Q5y6Y|u%m+1qKQ&4Dbb2B1SA{k9QDgv@pm*tz>(o)3#GQH!IGyuos z?(m2R8A-{Exf59H z?Q17z=l35zgm9QN*5VE{d-8hZ{hf%Yv4$Fh>n0I!d3ABP5D9Rc#K7-5-&(;&RaG@| z<~L;dWMkkJ3rlxj{J0TMno#Q$NE6LE?ljbnb$9mO)@C5_o0?O$2cyO0e+a{-=toNM zDP2Npe{{}CYH+5oKN{}-sFdZ_7M$g5mX{+LRy#vXK>;)V5%u1kjr*-{C9VBTn{uSV%%%J{qeIG>GDx^t7E8Uf?H;(8dWvG% z7l$WOj^>)EF&Ew_kX?TG#>q*^+eJZ9kpeJSf9&;X(^N`Kxa{_gZ?@W_>t30)uO1Q& zO$V-Nw*A5l7CJh*Ad8y5e(3MtXf0~gG&H%C^z~w~k@A1;FCUXCO2nn4CQ7FB!k>1y zA-abtwJ>vX!atshKDK8H3;O60=GyI*o%cj|eO-oc`SAnS!2g~Hob{hk!^sIJP(!3V zf9Ysgek$7dbQS4zjdkSH2f7RqJT0&N%a<4Wf0x&!z&Wa~F#p>{ce797_5Tqf=BvbF zqFa|ndH^ppoSdm#A=g^wn~p-qf5z|pv;79lt5-IXvShpjETVrrl#L+YG&p-Ei#|%* z%w6z*O;CGU?7<{Y4lOQ5|CX5ef{6(^e=rbf)arT8B+m;vy3(Otk&5OMbidQIB?u&j zQh0WwVZO+jkT5Zs!-Ntv0xn)Q7_b*2GIEC<%7m3D2`0c>bV!W$y#hTgaKi~JZYdfL z79xyN4X$;kmw$}Gb1oa6=RZ_Q!6mm=LixA_2M4)=rUC95Z(YsQBLzAs7~hquFl^G$nC=RmZLX zPeMgiS-F_A@5z@>!o|mjPb@a8_s$~*N!j1+LodNtO*i2-XqHK@xr_Su?NnaNQHQ%t zUTY4=RjvKSmgmH5fBI5}hA(n+b8*SY&_T%G-?y2Vm{@MTJ={}E_ztc#i^FBxRns*l zm5kP|Ilc^8$`^0WD56n}J^{#-=qkwSL|oF5yOzI|Ky zwC~vtqrbmjt7>(sM4)%hzIrmCu);W-z*QWOWv0&wT&ZpYf4oUgl(@8XXvwD*Pp;c^ zerF$TMVdxrj!|$TI{cMH&4*|L20sViB_9L->`AK?7!0;&h5CKLt~<@X6+Ps0B(mNB z6EpLR#0$GWwe_?82{Zf87{t&+;PYf+_jv=yldwo|$Md%8<_?}VK}biFg)}$YOxq~3 zlU4X-dPQ#Ff6K|Ubz0S|PHGx-6DSM8MM$lVRekvIfzNH9WOF1d7HZ&6x;MqzwO8Tq zGU>YeI!HX0ka_B6|0ct8Cx1&tM`v@-DlV2)=M4fL-b#y?qGondlIF5|n>Rja7;F+< zWkk@Ch5&FD28mFz@WQP?i+=3=?IoyJ2w=h9bbigtf5E1P3_;PJhx=PFHd6a@bvRrW zUbQ-gj*c9)_DeB)6>XGl59i1%TFWg0uD!r(_s93#=~)j1e&p-vZAs=HIv_Rnn@ZT& z2z_U3dk%5f9#u}}vY-Ys^+S~r6B$9BiF?qTVBLv7{oa=j9}PS=<>Y4}ss^wuMbjOK zASza*fBtl@hCNLYH{uU&B!z!!Dp`DjGrmc$(&v8DJ2URry|Yt9k)$;7eKm(Q3wA+L zG$E5#j%CFgEC_tx-zCbK0n|`o`T#zlt+cx=Op7H{ipJGd1u%z7$^A!i`)dB-3Mg;K z2wS%M!-n@52AdFELO;N?IH0iHnVy@ZAnK-zf5PsuE!7H?4o*1AZqaeyFHQUmT(aTG z%U))IWLH)~bZikmf0l?#O2Ue!M`cPxH#2()V%BHf^5C&TnRoA~jZN0Zrl-SCPK*cB z>Ja1O$4K5-z5)s#u(}HWhKGknRFqggX)zRo_~gB+DtH?{gy+qhiM*T~5LaFp8?OT6 zfB1BDd)sAK*JV=+sidW+e_G@NNhyJ0GrzVOts?t(1 zFu-WgeUNWYd;k9Z7m)PUH#5Zm!dY2c>yF^D={1J8x4!`7H1EZ1k&<_z*XS~~mSY){ zWdQ7h-$fu}&ogzw?r}r%M_&KO*GYAJf8}h*76zpRcs1)68Aavg$OtI~i6Rm4dA7T21%c$`;FZ^u-rwKnXxxJ6g$Gc{)3YJ2-}LAdBVepBNVoiI z14{`lp&vDE2sv#iW_OpVZ-et`dvY|g<(oh-YUQpK+^J%SNFkk;6OuV9kbn{ee{F3J zkV9V($>S1lX*CQOj*1tlOXi;-EZ1{smfRb@NyVk4j7U!QfF8enizKV06e72QQj=r<5Zp7cW2GkY9sNox`vMibK?Sdu023FVE+DidD2*tpdA1HorMkA)Xjkq zVOTw*JEuTT@C+Tvl#>)Z06Ls`2}62EerlAwb#QQqZNsL)r;L$g*!?^|Pms(DLxyN;`3FDtlNgngLGeqNzph88{lAK+PI0pM&1-a_nv?@ zI5>XFD(t0&U0J{tTTTj za1#S60Kf{cT3NcUC8_ka<>ft-1^L1Q--p_FC-;s{M~wQ0hkI7Lf1kc?GrPi}bbAR4 z>o)EH91kN4YxVc{tJ|CV0CK*BM5ot*m(+ctGW>lIj=qepE)1)ljg750jyfSOQ{*SK z{GEh_`@%ckHjLPqn9!#^JayGl@A6fF{Whe|nsJiS;lGP)@_`Zx4PM#KiS&l!Q9Ro4 z`oDRK^t#O+V{2k4e*r*`w8}J~mx_uyv9T>Wx0n90bM|co&~ljxgKN6cprD`%ulVqC zK@*t=}qnEHH9AL|V2q?yr z#Ypu&4P>{Me+J$|?&s&OuNWBv+uCj;oOgG3j|RC$+DArkpn6az?A_C?ktX4uhL+r1 z_#`&Xyvk8uerla6WBSA9Q@i!8t+l>*+WLdqIh}p?&}vXs-Nv8r_URLLl6Jyhs=Rsz z^1S2F7gWBUqPE9}+ox@rN?F4_1j={FX}qw#N|B`3f5&!}_IO73H@(L*7BHjpU4yj* z<;9+p4Qrz}WbaiRkfD0K&&;dQK!5`@28<_cT($0Q%U@)4wdccVpuV~~Vr2Jc(4Ef+$df?RpWOya@#+{Xs5zbJ? z&h9m2e;Je|Do)$K{_&X!J22g9bUrE^%zA~VnYc;GjJU_kB392}Mo4`I5pnt;21fz( z7{!!DXYh``kLx-sP;`KLDn)md-j^E5LqvV1s*srP6xB0P01D@w2AE{?ZDpizT|Z=D zo`K|u?da%edq~t|HI&K?ANu1)gxfAF9~#v%*GqYbV5xH(;AVq0rwW@a=| z_@2U!jkzRPiJ`O7$aVnjgJ%Q9lFz9K5u5)0?9|=sdD8V^Tj{mLPsSNpKQo4^@FNg` zt#bcS%o{UYXmo`HG&j?HOY(l?_tMrT1#l*mnULAYz-s#nG$uYh{b{W-01FN-uySUf zf1T_cv?4A!d61oW0jeNU2-{4fJod&aYu1*U22m^?)>=z9iOX%DH{+_2b764;LG7evlK{U3b-+A0M7y zbx}Pa$ixzPm)S{hoBiDOL*Q*Dd)eC&3^} z>3o60-WSUm?u#8`c{0amQg9@S?B)(#xW}z4hwcG6 zg^P%=4HDqtK{u~PvZ^6_`SK+zC7w&q*d5HLXX(kfZ5DR#^Y!4e3%7+RJ(e$pf1T_M z_AI|x)7aPVib3~WwVLZU>L(}!TU{0+T)MqsEn$F=X#@nwlV4#^&ibzlUoJ1I@@j ztXsB$N4JAm)gl+Hj|l@C>}1iSJ1%wu`a>?2QtK&SzhYeN6tEp{B*Aivi~VCsj%T=B zS{AEn8#)Xf$|NaCNuO5l_LthIdSfUgt*n^jg!i7O81y=a+3fcBW`^cOOqLTVwF1wQ>uX+LnbCCLBOOOFAxk}AQx~! z9UB`<<}^cp`cC4HA9U%$f8InPAt4KmQ$5kopKfrIa+xm&qD-}$a;}W#VCegBcYe^( z`63yH-QYX#SXQwl?B|28QPGOgR9)1?aueg~Sg(s^AuV>8|AON>okf7tma;?(QSG?35e zI9$@hmP@7BSkJw(3;!^0x=|D3)hgS$ExW87P4#aQ1}xX&Kx?ue@d=sy+KdovF+R*%bR22R8>(4P)s9#j7dr91?1_fc;EE%2VI9T zhd6zLc;1*;!FbJf{mdQqf?k+Xq8w65ln%;Fds;XwlQnnZdle~sSt^&Kq=IfncE&t8DI zB}%ljl`a{RtD`ZyOICd!=33j^X~KU=ul1Y`)R+?M&!;|CS&UFVeSLJfJ&=UoiLUkT zWT2!t*4gp9wJW)o-66+dhG0dP<96AC&*{+B(>>4d@Nk~nr+p4AA8Roo*{avH3(oFV7#Il51_XL%B(Kwa^=nMM z?+K>mw3 zUh6fva_GJNu@-ahrCI5JfBtAR`}-}chUWg47Vo;Xe;Es^EjANSjJTw<6kjql>hq+PxSpP3T{)mXc8?(FX|DgIj-d}obBx(Xmk15FVBXeJzfAOsLNkY(LLQ1DnF&|3(($@!hV~{4{ zO*lZuKu7n2i;Lh%8y8!=kHbXo;NHD^w;)P=9zHs%VxZZvB|sK-$XGHtYn+SM$OB0I zRpMVBcQ24$t&Z=lEACr(OD6XwtVE+oR+==%qo0cg$>mFHOudJ+53sfE&t4XY-lG8x ze+L$cBOzg2WjVH6k}3Lv+m-#W%|B@Gc7A@1&+qQX+%JGGy?58AaC`zw$jHbble>9E zzsC8PAQu<_>CFPnu)LW@ESdkSzE&@~3D)|&qU}MzhUYm5xS&wwOLZGgc9rBN5Yj1@ zn(up!s|8nL`!~4gre|@g?J7?CSQWiG)=X=E;N-95%(+gd%CpOk?))=lmaxryX~e`L6gE3cmd@vh2mlJyf3OlXxVf2JN(xg1u*_RYse1+ly7#wK(2HHRA6 zZP%M=}t78QHe+i+mNlg(bLl&+vfs6k;F=D19SjhK%u{1_ihX% zJ$)h78Y&Xr;_bft@6jH%*p*v+SsS>-HHgU`^nyVg+euxD04LkhXhVCBEIF~()!OWn zcEkCT z$uyiHFR4D^dvvso9h5@^bWTYL|J5_QXz~nK)BfR%CJqk=i7+HjJ$-!@iDr_e0%h&z`l<%rs0+`n#TQk0E6FoV-h`Lx3=XB2u%9^y>qFprKjj*_NGOttQ>I2?*%qyW^w(+4^ia&Q?)G2%oKSty*!o<6N{>< zexW*gllu;@<7I<8JK=-Fcz>IH*0-PpetyDf3(&&%1W)j;l?>h1MS`fPe~YCQzT@yZ z`{6Zkdh!d8jBISZ76miBd%5HI^LEuzv6w-#2gk4KY7XziTrVy~bzI3c>y9 z**}KtFJ8VxijR+XaCYw6oy2h5onW+CdN8w~(h0L3;ye3EF5*K1RDU<5OyE|ZJnV37 zEqH#OC7o|2I8)fWb8_-S90eN1dB}({+@VuM++nW$((SIEG$S)}$7IR*Qm-Q6Oif+P zViq7Z&Otcq$Aq4F*1^CF>-7mz9bYT}GVm6|=^euvf=~KMM@PqZQa?M`-;c)4&8WWrSRA^0`1>y)F+>pqB)bUr0!3d2{M&r@3}} zf7P9h%^J_<;|EOy@*UZUhuJeX?i2+O!FIl`eeE``Vs+7(6ZlT{B`WH-H>Isnwc++? zP93a9^2UiTt#W~1p)5b~fS4__iu>rF)zH<=9up$U04_1q)4t?+qFE*RSS=>wUL|oZ9TB;pB6*j4P`&(z@y7 znVCv`LuI1h1`OG0g>=8f#l;Aly-t*iPrlkB3oRX+7t_)CwV)P=f)tXYoHcCyeS8&w zc;K&J7ktlhMPuLR{XgxT^;c9~*!M?JKpLcO>5xvP5q~j;5NU^yE&%}v>F(|u5Kuuv z1f->7=oFC7p+Rb30O@}AdG3GWUF&^V^UDFwnzQTre!lzc>tfj4ez8GualF$GB6rl6 zFLbu3YNEar0r?Lf9xg90GbQ%!K{*}U(-l)yHrj>N3sW63{QPbzb_eVHzmybcaFK?S z+n!hF(tm_?`s(&+d3jckQ7$fb5hI2_K1S^;(;E9-SK=@vHic3jB z*^khfJ3;Hkr_rwq_HyD#*!xpMPEU2r--`G}R^{hsJ`2cgHLm0UOj;INp~V^3BTGFNyEGoCDI zcW_B&6%qLdws*Rc0rQWzhrW?IL2KW9K27G4^uFNBds@le_%+ZwM` z0q(b=P}IP-V=x(A3m;FHI6(w@Q3xPOo2 z7QTCVPJyXS$*x*rWPDcY=VQTBU#Y`8WMyaEpDIsEM>mr_IhyqEzt20mNm@?#%|01T z6F0c+ws%ClBx*9KK{yeGeA;rh5Qypw1pKMPOXcqAiElckWkWA{c!!wb66;k;36^oF zigxI9#aHVxLk$gbL!To}D2Wy34}azVfd{1bEOHyomFy(DD~mw*DdcL8dVg%>OPhJr zl}EXA6+eFbDDyaQy+j*5a9@eJA>iQPaQEH7RpGy{FyJn}O?#(B)Ex?VSEH1G8`eq#Ba`pr%tr7a&Jl${>0Vqf#%9~|C+j5AZf8W4I9jRr!0d0V;4l4S&r)sXJw_^wBzDHFH;z z=Zzk!Ox!;Ne6J<$82Md^EU&Bxxojbn(j_VVtD4U$-;D}d4Kaaei<_sC{#;+5uCcKZ zsvQIa@)x94*!gJiaZqL^6KDw;qt783yHe`^CQ0lz-!#2=F*mMxEzcKxe|_+4r~+G{ ze#uiiJE{&-4u4LHIY9?wx};y^Ny!FbDJiO9Ck43vM`tl`F)K3gT-}afc^+RqR9%ia2$ECJAhnr3p zSjXT20U`02+em55jH~Gy49gQ9bdt2S1_tiq`B%T9KW_Yzb);uzU15o(zaR!=xiOk2X6X5j|9|g+(=Ax@`M=r-~Y&` z7up#`{enMbC&GjJP!h)25CUq`>&r87kH2hPF|=Vsw4%mGTjM~Wgd?M( z0Dm^(!$42sV!lwS6;CWyO^OOnVbWzCm4`R2)igA2yPaT;*uNL(DOd|sOcMrWO^9|D zN~55K0cSZgi*-Torw&+z!?R`B+v=o)@>H~6?_STrSa}AAucdipy0mV?`F?Dn=&Qh!Ry zmAcgyHfU|F`#zz*zW#87n=q7~Wy;mC{?n13Ny89t(9NY9YvK7qvdrMnX={v!7G?pZEv37yE0U?M+9%y%hI86@)w>os2J?ii!%f zOEmAkLZp=TFjo_0Uz8#>%^@X4%gj8n_p7fDdL;&A>)*u0a)+fhs`u!LRevpL|I*Zy zMI~Jl+UP1bvv*s6_44c=zbkZ`=Rwx))cyi#1pIUaVZ7G>;$UvoGB#SZ)C^nWldJ))2{A`cI3GBUC|+S(G_JbfU_4CjR1Fs7s(sB35h zFE2k&Rg&xIoFh?HwMQU0q0xb^kcM$nQ%mB$m-3DKU4-Ah(S_)j__wMNfEmoeaTn;3 z-tgy6(`UZdBDZnHo}}9tn02$W@bUd4<>rf%*58ClFcpeg4#&JnOMh#=MLIplg*jOe zFkNbs0Fg`&R%2;^4`k;22n~j=%%mL$sRkO6w3{_{cX#d%C;Mvl zU-^obB(B$LIy&K*On+!DGo&F&NcJBCGzI=0Ya1J8@(5B2ir~ONEO+-=AN|@IH_}R7 z8@)HwDRxs0C%Cn>wNF_JLKIz2Tq{@-@XE{iWL|lrg*`pbJ%F&0nwTIz>$|lE`i(Vw zO+J!hVZE5Rn7c1NG(-AsEdM3Uzoo?(jFsuC0y->B?*`Yuv47DP<&7qw{w??PsUU-A z{@eFmD=Un4!{=`8PdUhI<79jpDJi)dx*OJ4%}qMO#fuD)_#k)@!7{6>sRm_k9z&sW zYzz^7Uj!dIBMwAt51Oa*jUMs6=I%hY9Z&a62>n*c;50EkXRG)6Ki9y9hZ9^W;gnQs zlX?Pte0LcAE`OhRo?r+_NCqdaV4o5)d>K4_?u>2WhuN0a*22KoxqSAjL$OLPKu`9t~!C_%FKR74G$0?hdCZ6C!mGG36l`96*MBlpxz0Fg- ziQYlgn015)6LUpg?9?0#lp?zS^fik#{LX!)>_>xi-hbqUWq$ic)7!h?wuP&TBbm@r zta~H_^KT7W(K~!>w1ARzoGdkxcXt=h@WMzOZjRzYC)nma*6A-#SK`9s;=*)z<&>3) zy5bn)?%rcxygFH^d7t;7*ocJgw8(I2%;@?dkpS|LL@z+Yi<6J$i2aX!k`Q_nwTys`-bn|aTIf_tayO6w{O03 z{Tw?!pIuu|7^<6(P&_@mGZpw#q|=cq>W(L}q!&vxy#$9n@h*M{?V)FSad^pt$I?hL zS}8gS3GK3Xqf)Lis)fji%E}d2zeQp~!e{2@&VM;^LPHU^RkExu#OE`ly;xXT+qEJt ze({tVZ;cg%NB)e>P*73989H`N{Ur6T5ieDZO)7!9jt&jG$`^S)D&sA+26O6&heNT?k6_vf0L4`yfUTWv+n z_J0;lz%N3Ft^5JbSXfBv8~oWjJPbu}hiJUP2Qh$x$`CpW2SPkxG$JD-nbkFmXSo_I z{21TMW0b_|pSNZ`@$Q_-xgbPWA8jYc5B(KFE57B5rANi(eZ4N6vs6FcmS}m(kzIY4 zfS_Vdi<6>S5Etg>chi+IVw#aLPdxn_$$$UwAvt~s78e(nJHTS0x4$U*(;jtCG$19k zOY~by3>xAyGGf8VF@eW_;q_*Ai+z1(Ckj1T{9@|iqtS#EH_CtjWTpmJmX@~ZSbjt; zm{_xO(hkcV>ZwZXhnx3eE-&=~FyrCjh3XpI1?B*ONMaQbpnaG|*wp0P)2}42@_(C> zkby4l#}EAQPSbCBMo&*LhSeAsK1WNA+BJs3fq}L^eR+E)&CNY3j_|Rjev1}!YhUD= z4(~wei`WMsYB_Ie@V@zZyP%-JeY?CH^7JNi^)3UUVTPsMGgUU_w$l$eDe$2afk1J$ zGFfYWpp^MVU2nr#)D!b&>?sR6JAXPvE@sHdyD|afZf>scF9xj$I%c~>yP2CC1&8X| zkd+wpJyTFPSUK9Qbl-pE#us@3nCqus|d5O5)N@co<@n_qH65r0oj_G6(d(_ zY^MP}*$wiZZsf#?UhEDr4S`>cY`{*A9Wb*Jmj_>Ow&Q)s)cf+q1GiOWbAL5j!D{|c z=Yms_m*I)Oi#%a)-JOqtyvS^=BSe@JB?bi4DP5&x+6aU(h&M2Q*(fR#fIm=$3_kOj z>_V5wzTVy+Zq0T}sLm)$-A3fU|C(N2EXdn3ax1Z$Atyg4IFiZ7G02@@GOAS^UB<`8 zT8sss7LI4zFEr`YIxs`r1%Jd0f)m~1>S;48(hWmHL+Eu>lo27Bi?VjfH*DDX;XCip z?>GQW#{2s! zHk8!(UMaeJoEiUJ{eO5Rv@<^^RBTkGi}o83`mCH^#4GRX%kS+&@1#7>U|n@z@oil@ z)|D1o!_x9XH?TUn(=;G4@t(D{b!PoarDC)16-4lC4<4AHs^3FzfdHHAgP>sw+%_IQ zeqcj`6bK&sQ)Y2Xz%x9*xxOlQL2DK1)er;e4Ep-@D#Rpqgnvxdu{+iWSEe~5JcfQL z9t6UbQCg>UisFa}zxFs827g^2>=$8Orl3u*qGGoc-ZvV%b;lXKcKfKKjtJ{iC8|U8 zI+l?U*ZsoEW{*+A0>tgK=oqH(nJ5+Qpy3>jaT~7b)RvZbt@lRUE=rjwse@bqqSxr= z`PS9mxEh~4K7R*{K6iFbj*xe)nXZwSrzf;MMgP!tXTsK|MzY~n3kZj0_C{Clw6CtN zglr~w328+Mfv@fWu@$lq`VFo`rsXt9&!a#Dcjs`9JVe2#XJ<T z)4@P+PgVL3RLiEn*72pd%NEVZs7#Glq*j<~BoEIcCV$D9JKb^G?E}h$Mn-p&6j|-& zg;{y~|Cub=%o^6Q*GA9?StyCsHn?5tSHsQ!Y;1Da&(_|erl$VykOBDU9aYNZ1Sqjr zr2oo|6?;D;%*MthtYas9-|=|+jnXIKyD!3sL*n8{0s{k?fDPQ45dpRw!f>0(lFrI^ z>8P|))_=%lxtLE@4ZP5>C_AoF6!Q@u1_tU{30u_GMKC46xVS*Ti_iW!670BAZ*p_3 zc({WO9MQn$H=0-qz@0T-SGdcvwd{Ly<<`;N4Z#(Z-VbfBx}YbRrKRb~BX0YgAGZE{ z+gIj&_V@RbF)uA09UUZdsLKO3HfZUe{z)+cEPo!?*7h9mk@0FzLU?3k+fdev9SqmJ z#)+=Fz9m?@14mm1jkVVzA?0S$OyqMJVrR`aQbVpNQ^$VqU+^)}$x`aJ_M8R-v|*z= zl|Yj?z1Q(})xabnOrUWO3yKAADlC?Ouy+GVfX;zGzCK-u^r@ zw(oV?Bg?&woCMd>g-_YyE$1w%)B&YHO9$bUAplqmpe!$?}dkl#NWSv zVX(8av(w9iL3IQoxTuI%ztNq{Y5jL6fSLUnn^I?KXy1xB{mQ0Aw&Thx){AdF411Q+$CiNl)6MqmN z?*M$`>YAZ!9K-d-!~i|8#6z3T)!DUr72jRZYs5jVu=JAez2I7U*1+J8gR5)TJW^`^ z@*v9LulYk>DuPg=S7jIVqC?*5`to4lfZoDE8vuhx%dviNa#~tmHbvuWs;NaivaIas zEeI(r#M|G;H-EcnB8n{`;R%O}=YLdB1m0X3QGQoF2@b<8{d&)Z9k`58VxJbwk(pW8 zN~xbuiJ^cS;FHu;8mQ7ZMA5n+L#p`p9e?uOYx*6~ zJD_KMeK}a2G+;2ia_B68w7RBdL{U+nTEQ<{Sx3NSd;O0DSReec3d$Cb>I|%`r04)L z{DvYA@v#MkqJH~!QeCf5UVj!3tiAj9WA1}K<>Pl~$h90~vYq}(fFJTX$d7x#hI9ka zOGZYf#g?UE@B$AbsVTwJ}be!KI?bVr>N;l$qH)zw|*#5yLv zo!cxd*^ArTfxrx(o*f0Z8kfa{kq{CFC~D$Fz_HxiR4FJ8g5p$3XnzQC^g7)P=QRoG z#3`VbAd=#Ev>yt-8$p=Ay^00%1^mYssgzJ$2AYuVZ64?VDB<>t7elOLoqWWYrqfsyU74n6r>>pU@fPnhKJyO@Fm?~2BEO^ z=TFeLZ*Piyef7ZFaes4jn{D*Cmz$frG1njl76d81K{MH9M+7ESuoc-_^`YXQY7^T+ ztvkY!-(te)fJEMkSNPU5Sh}99;HDUam_PSl!T(5wu#N({QN~A-~~cY%t%Ge@W)d6n{%}`uJQydkITR5z)~E zJw3H}0BjZ5G~n{xi|0qC6qJ9!*S=IxmJXPinQ6eOZ}wwi@Nu>%G+Hl?x5L!eNl%W; zvZx2m+$ums0`Iu@*xr6Yi_uaWz*J#jVU|`Q89jYWUy49`cQ-ChP*!VIaJ@`}UJV*Y zy!}hhe#bIuw}0kYkSTMrqU}oKfJOJQa%q8M|3&S`uVOQ@&)ar34F@b9ar0=jv~9KWl7y{J;Cmk!Q4_Q3msA~l+A$Gfyu<8l7C`z? z0XYzT19f<-3&VKHs$}eUQIl19sx_jj& z7MK!N)?t zu*z4-u(5Q%Eh zNwB}ALw_3yYe@nA9aif-EtD8VI{fu@6xJ2WzBxpzQ1{;Lskb^a#LS~yLK(3u5yy81mXjFrLn)CBcY$gB(6d}~}&c8;@A&rAV#=8Znf zQp?QDgx!z9k;@^2()dS4Mo7uXZZR@4uCA?RgMUAPpd20^ZdGc=QO_YEAz`vJQl5U#mU-~t!GE1t z>3^k8M<$`7sX3a+kfucM#S0&+5*&)ShF^2qa!mIP z!*x4*UlM9-Ylpobv=V-vH!5Z81y@c`%tLi>{Wy(z^k1R($^W;j%KzUj|98v(Pq+Br zkhJV?MtO@MlwjcJrK}3PQY4jI&7nWQhmK475%J22WV_A)Shq*DEbVVe&i}`)w?ixn zn2L@Qjf2FN35GNe@?6oNPjy>W5L%Ov*|rqb&^2Tcz1}u$RW&TlUXx7JHZ04QZOdGf zY_n}!vTRtk0h(X4ph(dT8O$Y8^tK6a>jwN#Wdv}Vf1(fr0T0`zXTAGf1ph+G^_Duc%oa~HtMx1>F62zAmNJbL$?%dNYU=ZU9cS9mH$nSY`v3UyFaU{eJF zj~Oaz;GjGnN276+^}|Hc+f*@0;RxfNv~n?Ae_h)jN-H0%uH`_O2jdT&zK0{XD@BPR zz|zX2pTiqW4@$#{Iu6^(v+fwIkQYgA_|lP9w(7#3%mLdausMov&N$4$eRmMuo$j1> z`_Wwi3yIr6XDjm~K|GCgICy*bmx;vJQ?`c+b=7 z`~WAfvwt394@}QMdb*c9j)E~>U7M#0e>TaPqXzauSg7Qg8xV8DIwe<8QcMiozTfXd z-yJ)FOT2l~!$mwu_Ypva{Vv7f*bT>^(F+xjF_3mZ>|JjbgAPnOoPqlZ?tv{I4VPAVu2d?+gzB?q`SEzekZYxMHJUVbLxuD7n`Z)e|m<= zfzvNMrk<`W^DvnPoke6H_p#T5zH?99fg4>F3LkrgpC3L9+}>4d zs4J}_K?y*tv{Y7XL#7jzsrKMCGhZK;)hC91v1GOmXw>U`Vjo~0FhT9h2hRa3R6x^8uC33@xA&tFXce_#Fb>1p!z zZ+??JdK%(j2cN=F_qM_L_3(gb=S)L>%D%*Zir>ax$Nz|5Uw;OFe;>cS{*0Am6+Idc z3B#ms$~h(~*7*EI_6}J=NtSzfdd2Bd4>&1Orh4bw)Yng6etNv~n>tDwe26*pw53=Y zi2PDjFIDvqLse%AMsTE;P>h@$G3U^c`xd&KXRRB*rUs^wrX-TxzPNrdpt;y8hSeKg8c8 z>gg@$t=B&Qjis*UUn8^WtxGp#BRKPNGK)?|@oI+!!&4**z5U(Gf9WCxQYiEF1g@bp z-$YJVi$k{WT>0Z@2Zq-pQT24lo~x4bqIAvW$oHpKT!?~}9y#Z3Kfkb*IVq*#T);RLRt}`XRAAXcd`dk#`LaE^_`bpwJ;SD4s z)k)e~tp}G9kgQE+e;sbY7t=><0Mb9D9pYf>NOpMAh8RdY)o&1#Q-IQHyXQ887Bwko1chvObs7q8V+~RQ2Vu z-cs^^7*0zAf6&^Rr>Wmjkp))3sv?c625h$oyIk;FF8DQC@GC+loRgQ_=ij3>!9%BL zc7A*-f~qblnj&eoDQTwuEv*Rd;Nkc(w<1V>uqDCD6z=k+L7Aj*BZcn8BPrZSvm2*y z=V&b@Cf((f(Ub0%NJvsA`{!mc)&O6XY>YGMwudG=f8xmJWJ}@zpGLDV$If7k$(9to z2}Qd;Swti|5`3^;-6+eFRjMdc63SHVwkc~)7tsqTMVeVb5i(PX@*@0ubK^LdFV&}kpl|s*g5IW7DLfw zTGHC=e-Hc?+xxr4dn9%_izJ>s*q1JZ!=V zS{5-X<7q`PXkdu!$3_a_1*1s{{!fn=^sIZ!cp>RtW755ib~t3+JA8Qx+NudV7%9G% zT8*!j;j79w!gp`N4s&5^X4sZ7uT3{O%2bU}f6I9zHP*au?aa8#mDs8ow%U!b#lx5R zP06<;Llt|p7A0H{9oI`clzmUkahbEkV%oY)4o5%+J13z@kCOH_m5mkj^O3t+XZUAM zf_Ruk=M977iYEs?l=$Gpvrx!hUz6Hp?Up=?vU4DkAod0udWpr+$#ON^ zQgl$@+#Tqc!YIQ1_(x%WtNH9M?YZUv5B&qj8&CE!>UN3ZS*PAJ(L3bdMoMSVa~fh6 zS~(MuO#^hjOoK9GPuvn_>*a67Q=LXOe{-wNQe;)KIH40n6_u&`8=+g@+)v{>@vO^M zDH41MrU|}{W{iA;KNr3eSGA0*6MXFqUqiVOzI9!{X>2EsYPs;q!I}lZycM7IqN_~NS zuoWKgNSLNNI!%p^fP0ioSMv@HtHVCJO-^#r$nhHrFp^<35!@yF{4m)kGxdtxkbP8S zC(F*NPEHllmfGh>$UdF%2|JfDe`TM8?WYOrfa52KAfeJ(t3{U%RpQzZ_fctdct_*} z(QX&&`>-C($U_?||6-TKe;kw0SiRljf5Z}Fnz22Q!0;?xR$$6O)2>AQ0 zkbZwjhGe69O!K=0$dO3w_`}SD5}iU>I;@IJ4huuXrYN#awZd|*fS`)+-ChAyBbxrL z?-j6Z)J7Vz>+Kb=G@~tRe@L?nPX&2*Rfk9w8oYTD9-or(B)l{qdzpo|%)-m@%#E_} z=GhN$n`wCL3yGk!Z=$q3R3rDdfJ)5+;-*@ib6>#iC=@P+{6jE;(qDF?CBMPe%$tO_0M+v*gFJ>>rKA2a~XVqgB~O z2MT8v5y{*RhtiY%e{Jc0;N%t$xLlkqCrUw$g++tVt!pr_rb=UBO~$oy(Xed6@6ZWD z_nc%eOq02wr9W0LRLg3m`3coc6*3gW;Pb5vzI^H73-00TPwIm*6c}btxOL&sWmvJ( z`uWGXdp+=n8IXe4RUS+S9MyeUc!qv@Og~!#5}Yc(?TnnRe>-W2dv5?VbXnO>a@v5P zoxB+*_fh2U6uIFd{><=a788|*gXR!G5?rJLXvj@$$x;B90{BxBz$~DKc>8J^2%w>) z7SK?a7H}zmKWzc*M0k|R9{tXeXSDL%X=2Dof|70MO%r6u5+5y{E!sMbk~cZ5>I_E% z%wBHhV;`Lbe;BW`#Vc|L%klc2lYLKdd^8C}Q%!oY56PBO8}w5n zH9%>kBp&bOXd~(%NB*5D(#sV??nUWX@ZK_yx9sIx&f`sVMxK{9M`XCxBY(YL%yTH} zBf1)REUGsxE$k-Bw>ugO)ftrS?+Z&4ZCb$Ci>v*2wgRUT>y1ncdXc6ERD~!j&c~nbMZR#zabT8h)u9zeDAi;OBD=<8cve<1SVk_ujql6IaW9jj9I@nR$VIEYr%)$+>2 z$@{Xjt{_?Z1$=O~XppGx7_`AvZZ~rQ0Q|_k9(D$aW)R+|NVABp_J$+eW1g-6u;`jw zHnRBxlk?4uwr+|1^E0BD+@L#lqkVi%t`rn1f9(6j@u?V~51$0=x=xc@!#HFD9bUi; zg*yfTJ|!sdO~S8eDW5Z-2#gfX?ZV`$zU-4bY`@CDL93Gg`A|c$Z*JZ7xFhkap>x^V z%opA?UGeDbDuBWDL0S_FqG`hPwmIEqx`|LzQIg51YgPkG(lF5vsF*X+@9E)T7Jg`S zf9IMa(-@PIW%wa&nc*j>VwvGr>oh%EZ6njDm)SyrYu=Hu=*$%^qRYgUW#Y3okKHVE&dC%j3!5l3%a*Kpfj2--4rmfMISgDspvUqke@4@)N*djC8e!A=yBM&FZnc)R{~BLODCj~W!&R?5%-vc8;Oo+ZIUx^e*o^4cy>Z{^zPfONp7dZmz=5=KbpHW2bVg-$PTv_WJ?(GPr`r?R?z^(fOf8T#aERPVc zN4_@zSJ?@m4jg33YFsh$K*%zg7Lr3WlIxA}<0)`)U@-Cn4F38n=m8itPY`2c5k&VK z^Abe_mG1&YeR^Eod+0q~=7-BZ8u)!-4Ii>Xe#gVCfy`ZnFNe;#m?O@UctUIQ*F^Pm z-={MOAW|^8#If7mJrause>uS;NsnuDYv^8e2SjSQnUaajcA_hSB^Ts$?DZTn1jOL+ ztpEu%lkK}gEP+jO;b=wXv(=QT2qWzDt^`;;8HSy*@*X2>>X@1vMnU8Mh`%CdqDVB6 zF#Zz0e;xlLeogKuPVOpx8~-(pkcy8ZRkIMOR(dp$o*opgA$me!f0Hw78wN%J`I*2d znQ%`#+z#Qqn)}5|kXLP9b`Y6Q(@kY-+&yKTpxfF+iv13B>U$hteNb zB={~mGm@gf2fQJ)>S1%zPLG-ZNZQd z6q4(29(0agl8@}<@~I{@ZKg?XqYBw*obRFy)?8KFohRF~O*4LgkqV}%&DDCtP8Q04 z*2!fIy{_4lPL>ze$*7`}ZTr?b8Qn%Fm+6ceQfOp~7U_%QWUgB|X%s2yt#z_er;|n9 ziMZKfgf>k!e?&HmnaEOCU{2L)@YWnD7D|a~WgU?XyS5NiERpl1$$Awkzz)IUl(xci zb2Gl1k+4|8RCR8oPNZOpvnZmiu(4dJM#62^73TJ`CF)z*{?j!zk4V6MIdD_v$ zvYT2_+MDPW4P2Kxx`muvu_(=wRm!|Qox41e4Z$4he`nqS5qVmZX3H4gM44x(+*HMD zXqE-I?mJqrf}il-Em%>-7WspdW=s7+q?n6fal2OEDi&XnEsoU{{z~8!tJm@wg_c(6 zf@@Wa5*lhSxk5s3G;NO~LizRbVWDkgbo6#T~M$3$tx(HF8Zc*IkE$|sq3S3r? zh8Ze!f1W}TayHB~)tQYU1%m35Bxpj>Uhwf?yaXc7>GNWbHV`INXdzUk+-)`W21_VN z%*Nssr@S!D*`BJ1mTWXl=$22MsBC2fiG3(lFA;JvUZSN=O{-qwBD+`;Jzlc%rZ-S_ znk>Xi)vEEDtjy?Di0ShpCLBn$dM#GV9GP{ie`+L+IY&|xng^(_3NgLLK*&9MewM#f1kGB|c_E;2Zy zf0ZZW=A+TAMFyug=OTl55NM8!In9M?3z^swM(h$MZWI99A4)49RQD2x%B+_JVYxyt z2|aqNK{yNW5$a+~tt0AlkBZQUTNSFzY7iy`+bmrBv@5uPwKt~;(PZJ$qAhe|dvZ!0*SSd(O%I%)?|P}q zm_8OD1K)Koaqk06E^gur&?XqtQ+wjZ7e}H7= z-Kc_{z#nzaoSuKd$8a(PEE~`Xu=CQ%9*R}5s`FF>xe&MGenL{8CXzpCgFEUlk>ihg z{FnGm{Pp!8;;*hhzy6o_&GqL}{NM4PO8G!Vq(8`w-xj_7%jO*!wq%3Fv4O_3$W7Ql zQw72w|4;l6k`NaEHU298BK`)Lf8q-X9{xH0Gv|V;;?4jqVFpB)K~tB^aNEqlF_Vp$ zL01LLkY)^C{~i>=XYluTlSIL4&7hHOB2+Uh4aDs;1IJfw#tfQ(8U8C7{XbHz@TH`# zU;ndo{ZF7P{*PRv7ypf1rAIE=0|j#ZdHi>#KCVBnp*A!fC2B)Ad1<0cNKRQKr*ORf zMx0^@T#5WXyJ|m@nhbV(gT_5PX*u|d9DL3cx^nREZLlQk%{%`OP)h>@EdT%j2mk;8 zApoa&y2o8>x-fpQh0wh&I^@T~{p|x~$m@`6`@x5|nO$_dwu_iO7CteB8uRhJeAkuw zXd*yLMYgU#l$7BUM1J?LCy<~mPZU+(Hj~4*DSYAD&HLNM0<(?tIHYwIO|;7{6`)L} z2oM+se`Kpx>5d#99H}Eg-G6?-RI3(*JSjag8pecEX4r5z_wK{Mde*oVQWD;)Jm&2 z@$ZF&sN(sBzMAN0ssphah^RPj0@$vqOaxUI1dSKAIS%o${(z{tH1B^+&2QwnW)u+SJD`Ypxa6u9X^9t=wh|Cl9}FV;^5B1Xqg( z^*5#i(cAn)(e6%E z;Wm>il#Fk8x86dtzs^6K{XF}2_7eX7Fnf+>Kf$m0=kqV;{}rx%KK}yl;rq|w#;e&& zH2Vhrd^7tIe*X+NUqYr=s56`%h^JeUc#8G6i!&}e3j4paUuLi7pM$_35D0iZ|MTo8 z1lOKJ;eXF(uc5#%3^-d8Ty0pG2GTw?L^Kpx=S85CsTdb_(ejP5&kfeh@p}T}&nqer zyV5J~tm)^h&Y{7bm;8qK~16<)63o|GoF-ivpFX~I z3$BePcge4?Y~zt+XWJqsa;B(A1T4%Qc{&!PodvzO?7qgn2I&^}KNW#9eA`Y31pY#5 z=^KlWU*OA+U@?CLlD?RKg_>ZB$~h)qRV1irWH&-v$WT`$D92<8v*OCM0C?-J8=yOr zEq{0=gPjXl{zr>1T;6D8?AGKU_F)Y6#bj7b^Monz#VN+zhV>!9p(WfG`^Tc zI*kTPS=bEeyjSW^UM86&dsoy%S7o@8S#ZGu|NHzIv91?JZ~Aif0@yY_eP=qLSASrb zX5aeN>~Dq_CjJWQfQT`xtfQSndD=u3W&O;mKQABm_J5ix`rWrQPJ1Y=Uo66ne*NSc7N z|C@8$c;~j#PDoOE-{vXTU$()=jeqXs@Xw8KZ7Ec_w`cq9)w%81oJ8?MeacIV!QFT` zwZ;~mYZ!5vcXqsb3r$yt|WY#Il<#L`C=>9QF{fjxyg0g-l)$qcshJS_Z`JbTH zc9D@}72{i4E?Lor!e&$Q91zdH#BRazj|i~+h&}l$@S5Kc_x{{+?my4}3&{-0Ovm~0 zZbURoHMZ+EiY06Fb-&gR^c#O6OoC>Jkog@}4Ug4V0uZP{K~)uXB%NE`1-Md;KNrxc za@Z8gfiq$9c+mRsj|-h;MC=6Z z{h-uM5V6p>twcRiLgPEGB`G44Loc&FhPV?}7lqm|HbI+H=n?7~$Z^MHjk2 zI1_u~))y3>&rOW!(wOM(^7=(Y%8a6N9|0EwbDEr@e1Wv2rf@nvw^h9bP#rm!X zgu)oHk6|j(57YdMByB4@h0iz@CppIuFye;xSKuYGgp@km9AyR4=O3@CPLI8&cHzKD z+&6PeB;3_%Me1r()6fC+YF-;sQr`8}O#UkRpsH`B05Llw3_1xE^?W2$doY)TR0^>K z8Fgh^1cR+Svs4b7(u*e(E^^=#kKu*OYtecBRp3rO1dW{R7G4kH*Q{8OYfAqeSV(n4 zi=|Y|pB}AXZXDJL8_l(CniZd$%0?Mleuxk2P25iV<6j>GMkVIlF*qZCD{yq)ddK+G zczvQ%N%!Ib)1CWpZY45Qb}%wt0@$@s&R;fchg=v(;>M`?MRKMG*`_iM7U{}bZ@HIv z#$tq#jZJx6=ecIhc>!aYq5=LEDEq48+}-#Ymp1y}mPdfybdj?3QZ88@GS?^Ts7hPv zcBsP*g8J!0N=dibVZ=DB(AbGDiJ6n(2ozkcy=+Vem)O;=bXYJj?LPb_@NOQFwl=!X ze1FSrxOmwh)4j32bEVLWMKpnZLrV{MQ=+Tltc6#T4#se}Qp`}D=`&VGB0nj%gP<}6&VF(D+Il&&7L8^Eq+`E*~+9TF115U7L0 zmab^O)fUXb0Tr?x2aEXC2gbp_VM1d|Lr<+&!3lqmJb%?E-@5OZlLc}K$_t01J;Gb`jCY-UGpZ;oVLpy#0v`8H^c^i_=dXhm z>-~z+p9wQWiiF{=%zqdee0tZk$MHHZ+Htz4Y1jLQ^&4HRxBjZNp!M!3^~>y_%w462 zCvVGUagSbZnB}HyUk&X6j(W6lRcT}i9fK?CDU0cmr>g^I#>62$s^>&BK^-)G zCCDGD(<&P~n{p&OO@Ub(|5WoN7?F)^Mige6cLAS#cN_)+q=n?xz~4jYLhWoMOG*1#9OZ{h7w2QDl$kH zY~q>J9xD6p;lRR|hhG|iK0?**wF;ZxrcN#6j=UdvyAH%9Qx_fsey@v_ijCza+Itlk zKe|hd-Y)_ScdsFAKAg(Byb_a%1xcelmcoAW;?>ho%w zXXsoGO6ZVwVlfKt{#?pjYOYSx7APCSf?V{cfLgv+%^K~~zP*WRz$1KT( z?pSWt_j|dcBc7e$hlj|WWk3D}N8@M6F-9uVj=WpJfgaLu=`B26eyyG{}wm$XD!x?A}`w5cEM6~{1#8Z~fW=sk|s(-Vq< ztt!T(j>;YtR#A~vuOE*hGYxA&DzP~pgB1VA_-nCLVl)r67!{5YJs2QyAZEC$L4A8f zO{j|gbT-jlQ`_H!ME$bhHp`{L|CccxGc($+9w;#i8--{>&Ek|G1pzoLYmvJD=?Q$L z6h+|ZmQ8X!%P;}N&8uen!jBt2ujwQfw)IK|J@?}S9&6L{6S#8V<7+jxN5XQO;!SGf z*Pp*K5!VE%k z1|k;q-+JJr=}eC6#=A$?Oti=+ai|+{~fC4Nh1B;(Tht<;Vi8*a`WCXuE z*+k#FHj{nk;dK*UpEI47K0%o|<;Wne=`=Nnru>V;P18|%1 z@t@LIZtBsh3feuVx~Dx+jhbEo%^6MwvjyC69}7cKTlZ5c(7jMIfRP(oq|EPcOqwo} ziYxs!0VGfWK z4^2nw0o7)!L5Ix0+Gf0_1~ON$s*cdQFsu+AQiN4O3)4cQ($i-(4MqA^9?< zPVCwwhLRK@(G-3-^rf(yTIVosJ|f^(2O%YOJra`HWsUQhjLpFVc06|&Dy40*CV_h2 z6j6qa4}MTg6e3wnqa)THWzO>@&}pW zEEgdzS{|J#y4z;_ZrZ+{! zplN>H4Jw`Vj**8z9nrt{S-;Qnh?hSCN8o~TcoF1*{0>G@!;3E&(+u^U;b~fNiFR;7 z!yZUM1^O^1j0DhjRoSv&&i$0ixbZ2?M2n^tS|+^EUj{@by_xVcJaRb@=m;;*AiL$9 zVUP8kg6tM68>_05@h@)oG2GT)QekY{za!F82o@$J{NDWuWj&GdTRO0NNOlxwFp(jJ z;}Dtz$hqO7%tf8YX~As3+IYr_UQ=7Tef;BG!hWja-nMj^K$b>=+`~tGpjv@Y@1n}( zdjGx<$G(~dD};s0<_dsH@#JQxtR28qYOpRan`iHxfUz8Tv6x9hRyE$*wU^tg>B_h} zt_fFNwaRsgx0A->#*0BHiL;9l<{s#y?8;FB4DAfQ8i?*6qvGyjx83dcUa-B8q9DGm z`ZZuk7LrQ5FQ^vot`2k7u$uG}_heBB*;qX6s#^k)HyCfctgrpVk;sLivV5st(0B+ZQto;Qz;q-NH>$n$W4?4 z$ZNJ^)S6~Es-}L+g9hp}^IOtZs#ifHpg7AQT2=W$?DYF*6I}d2fWiLk@x?4tl&bD% zx#*CqSwm2~=2Trs+~jLv2_Z;3qYev67o3%Ww?)%o<4HT1R9snv6qHv3Di?OqZoeEJL-E+z&xpl554{<$Zf>%^s~NaNx> z=IG&pw@^sU5*6WmJqkz_L?=AMLv1&U>nktl%ve{&loI_|TfRv!OH|Ga=P1Y4K3YLO z_4&URoz&<9V+Qu4?^_DZVPe33S)NU7(iDO^Yv9jUfoI=4n4FHRSAlop@xUAr5K#2p z?2X9iHSn(Q6ffr$kSUrg0_ynL!Q&hdyAPT)9yk5~c-i~!M50pQh06m3w|9hxcLwgW z#LEl136PXweOGUI*LWu+^WdAgD`KZ;WF4pva*(uBk-oh@iAnn&0hD|4eUnACCBT+Q z(S?2TuFr&e!W($YToR*!;b6O*e*wjH)$4v}uV354FPHW#CF&3%%|7b*T20#}b7SV6 z5*W8>iZ1{^Z9I$bpDz@MisDi#P(kgiGl00t-v(sE3U=O+$D zUUoyv9U+u&_q_Iz;9EMD@M?;pHSZ^|n5~!rBWpwCQpEALm`a#xa|)a(Hox~>)Dg%$ zUmB)MKSo1RXn&G#R#&X~YqqA*g;P+;iY21=Yo_Z~iwLm+4NnxeaK9ctNw=j=f@1v= zbU}yPIHLURIwg7n; zYh9cZqH`;mSHHdNnA>Wrqm9Duy2$KmDEmhIkYEv(%e7(FlFlLZ`4QCeFJWqXMb6Vc zsx{xxV`J-wIr{Q!+z95Oy`CzB%Z<9*mkv^R@3ScdaKxJ z6-*(I2rNK;DRmV|3){orIqVG*Ro11qk(=3y&-ld;obA8TqCUs71#?{S9(ESWfdzay zo`IN+-xKM_a?JWkmwg|k#&}NB+ zGGa!?i4nQd_cwgo=}!99yX7QTV+WVaZq1JQ@>Y)()S$5-))>|d5afoJMzJshv`m>cl6+YA6=W*P~} z7b0>own`4xfU0Sd1hqI9NLO&f-mumrg|g=ZFf^`TlNTyQwRKfGO_iV_>Ob(6cuHhv zMLftY0ugEsuC#O7tu9I|tTQW6BMl*I0-8LtvaYqCL7jm(7fVQ}!X^UuT)n9XWOs6? zkw)vmM5#T6dsN0D2@d(vOZ4D#)AVaYq|)2K8Fb=}uvTPDVezve_w_r7{=?0f@l_qj zI;`=gK`Jqa31{*$t>xBYj0dSIC|u0dP(MX0FWn|)D)-U+D4|Rr88Ks+*3v#oehgD} zLE#90ap8zFxG)7)SP}dIa@`KCzQmJIv<0h7hww*AmdQAKZFLP_ju*V{dz2xu`p&%NyMS6CG-WSE_K>nQ+pdNq+N(wN~evp=0m|Q%N_*h0Sw+hEH(eE1V`bF6n}08Mm7Ff|AU{p z4=|=x_B0hv&WE-^K&JRb+Zq3)vn?!d1m9Oy{X&d-(VvMhu}`vR0ITvistwyL<@j(C^q;=GjtKKplihL~HL$JADpzucmG zu!sI`XWC|kZ7Z#bts&X?$N1Mq&FZ-(Hdx0Zd&z&iXWF&Pf0e@Jd%MKD7-h*NCpa;W z4t23D*IYQw)LXp$2kpS!@^EuhwS9#S3BWbko89KcQW`4}DE*1!>6#Q*iT5kfef;dJ z(nd9U{Do+dj;&AzZ?*s3T2nwtOJa9Dzro1F_l(Ou*u=yOXM&f+VM8Wp^8gb&1yO&P zVfG}S@??xD^QACB!u)^u+jIMqoM2x`G_CImbbLJ*(qydqs8)6 zfQ3Dy6Z-TnKt)u+?Zh~7O%4zBbss5y-q(2|zZG+FSy%zowRdsZ-|#&d=v;h%XO^H8 zol{yTTlhMK5h3X4w7$w~tgWpdUb=GniTC6wmf8V5E8j^*t4bBovvIZ7tv6F#$}5ja zg4mE7e!6hz2H{L*>kqcj=dl}Fd|NTfZj0h?n_e@20_Nl^`U3jYma;C_OC>sV5$&4O z!L*PBiK|pbXdS79WV9xiE}fIvIYJO zSi3bR2jY_!n^j5$e;%~0y~ zZ&`?2HBYJc;y1`n-QO7+*{uIj$DQ3*WUOWJ(7&c^MFgrL(I*HXzMy9|&+8!3CcFOV zeyn6AD%i0;dp)sgq@_KDO<4`Ysq}O-h)4T$5;%^^g6B+9_#R6l<{2= z_!}qNGywkGihH%fyD&8lLt@Rwv$DvArosaBBlpLn%i2&MeSpIGmus>?KfX1er?VmO zrn^)q3rX0d+Bgoj!gg&4 z_*jc4P@(L?G1RLtUyD?-d;}TCny2srW+O(q)UjYmF!aiV&l3zfU*pKMRmezYX~*i# zM8}t)=aP*&pk^%bPjFf8+)2DAm|qywEN7eXh|)q&WGg7v9)0zQHUEe*LHMDCtr4hm>U8laqP@!qR#U{2$;+ zf%C&fw<+GL12_3r!>h7h-PejgXUR?4YIKRyFmA-bwJ7_Kv_(@2S$%QoSO#CtlAW|w z#Rn^4#KHH2C1cT)K~|q$I;Qi%>WCUUw;XifWvZW#x5Aeki;{|$^jiH}nGAy?sN!O= zD^=OSI3HivRA5!GK@au@v9hcq0L{6CV-|`^RX2!)Ui{A0D582Jb+8e?`4JEHe z=;NHB%1dy{$e5X88?t}8>;Y6@unS$~RA2WYVKE$n89{>rK+=V0$1j{Vyx+dqv`5;| zqE-&Nh7yRQj_H&jPF~I|bitIqF84^YTF?w_=(L*9V9xc-V&fT+Lz^-|>^d^Bin zn9$-kIf=#ZpFqx`j}L`S?j=m6iE`MS$JLa0a@}HV-~ZLiLFmd|V5zrXb+kWR{%6fF zzEy7g+Q?Nsw|?mEcIa*${F42^dF&7l7g3)_=YcTOSoeKSHQfG|Iy;-f3#rloOGT(V^Ed2`^PMejw$`seBWqfBfP)g7e=oLW>Vp z;9tttMfzb&$K)R>4&+zvwEEYJ72eyL(fp6rsB?Z{G<nWiP@T|eoy`GG4`1&z<`3rn)=Bl1KJ!qsMx*Eo(N5vsALZQb zxao>Fj42Mu?bH&VPs*gtOqQfrw4--7`}oqv0ml|9{X8v_hoi#XDFQ1}7{zLXWBwg_ zj~rdV?-mmL9SljR)LIvRMYr%APH?5Rp9{bCDQBmE2=my9=4WWsq1|6KOJUNnInL_g z%AG?#(&i9me`C5#>8_w>T_@gzy}C@4cC70=rQS&v*ztBVj9yYY^yg^8oCyb}og zo(cwG0r{cV<9mGSgVx0xh$QaX1K1Ovjb9#(->3rNvjb>Bn2(ML6HtY(Zs^x23r_1B zZ1r?Fk0LL1QxRP0o@miQF}0LyCkA1RIZ;^7Vh=S#8Q$t;4Y4tn4{Cn`P^-*7-6F^y zBVGWkvg~Yc*?PK_!wP)piG^LjOd|&?7y_=sK#1!Xl|K0fqi>`rw7lxSUA;QZTQVXf ztot63eRd|;LJ&;@s`icU1td1Ez)sPcT0LV zKIPvl%$rt{4mP-$2+sS#ePK_sDhSw)Y^(w{I1hF~PezTlmXV*U{>o4F#pOHjqLwK^ z$Jc-3*-cl&18S;cleYqYGGDZE<(65(9>|zdm~$`6LiuoCyW{jN%xYU9xnhpVp;3$N zbRHQZk|BdtrH36&JCnxhifTsbTd@69W+qCol+6{@C%I&ny~Zp-q4r4|1+RY<;``@f z&j9V5U<+CEla_rkwPt1A-VFIrokdm>rTjS9(BzH@F2J%?cu2<++3KDW>qMae0fAB;M^$18`^tW2p?;74+c zhnv}r_jM%?hjv}~lmudecGO@dr}1UG-o7J3l!kLH((o4dtc*2*rgg47>vImL3hy;@ zm~%Xs^K`&@I?TCtTx^rsYPehUS0L%lnQ?q51@aDrbw4A0{M275q&iqCkm(2??foy# zE3tnePaElmF{?plN=;YcQM3~r*!4wJzZqw69%*_(^J!}VUpDpc-_n8znR}4lwFEThT>HYOiBcsPz&;|S zvYy+p7iOwF4bGqIC^qGChk*O^FPM^w>_}WRvbCjr0xcNUS6GXdxn?7*lpcFY;1Y^Y~a(U$H)GNfBf_=vWM3mgI zI<<$6S14y0M=s0vE4Aqz@+&f^T`4O9rX}-+uy4ltENO4X*~i{lBS5>5l9C4=- zg0<%m$no^PV7?7@BvbAXX< z_Fqrma1XZF_>*=6=(&tkZ=*d-JA3(3N4P8pLEmO=bj~FMY+$M*9K>*M_f_Z@M?yOCl`EppCGF>xbLh710%>WhBX)JBhPwv*rfqa!}3Ex+!X zE@gIZkdoDghuNc*GPt^zg!myEVhg8CqLqTMwpU{tYEWn!s*?m$L7Uh%YKmT&F%}FL z-^biQ&SF9eG*;w6cZNg7Woi&*G09g`M}`?a-48!1PBh!{Z6pD)2Oi)|6|M z)|C4bv?Uq-H~A5Rz)n5_m3lq2qwwacMQrR6V=@V?&*FsLF?yNsFUH8_cZLKDUipMy$ zZknU^GFm=!VK3lsW820UuL7>n3Q;^2n!p8V#vltsHN)`r8>Dd+A_ff~3{? zskcncPk%CNiZ^x-YQ)|^XEk8%QX?W;1QQFuh#LB0+9{@()bzf2~U$a21^&eMiU}NE@(dQb8(m&-g71 zjSxx|7VfxoP70#eS7|$uEt7rvv#Z)8h(pFDm)b}Beo6s)fvP_N7oxz<5j0BHClBO7 z0|(FM%uo$gak*|n7?HSn`E>Mh7*Y4L=8Ho!HZtDx)liMjl+Q!blifRw&D)(938=-z zXqs~-)y_*e(d0>Ww-HXC<+J4;K^Axf>RJm~7>`Vg)RyjF!$`7kA`snQ`eq37Mv;4C z5ZEtE4~xyQIgS?hTfS@G=O9YVD40@x1FD)i!!&FP_YssArWui76^i-Q7wvPfAxRCj?SxE=N^_?S&5%sye$$zOJujLQ+~ z;+dS_U9Lc0qz}rrTnj$ziP`Et7V3f;**o73YtaprV<>)dY7z4^Nvz96Q?^JO1MA}I z)!p#SRkwU-LkcvD4?KG2qzj@k^_G`JrleOqmyN-=VGw4_c{-09#Rs}wMeM(MJQe(* zc=D3j*|5li3`yQlV~Ru_v{&~&6~z;JanC_p6_12)s05<<5iHn*Vlunr*Rl^lxf#%H z{6d-=wpc2TB4>?=DJvkGI4}GNXo}=Azo%%|E9?K)!zfl{)e8{+1{qZA&~``%km+&lb!a0& zZ3QYOpbMtlSa~)%S`(L74bZ*UpIj_|p#v${fJ0tZ1Zj#`H2zG) zD8eNYh^@D7gj?IrZ}3Zq2Gc~X1oZ+&1&5rEl^HZ*OtQ6FH=HW{f-zl_{gS4=)#_Rk zh0B_uucS-P^oy*kP8U;v;Pqs1v-sCHc(otFbm6b>VZCHgo@|OfFe1WA29&EI+Rzzf zNhkSoBpFT0WEE#ZCaq4@*0;K%dR~)9D;AqxWWPI5bm|A*%{hG!bvHtp2V3q=bTof& zWtT4M(7l(7)DxRzVhm&88SByHy8sbF)l}d|B>DEgnX4`X z0kd=m)t_~_5Mi>9wMU%<+B&oAcvZ>GE&_4M%@apX@CrL70(}oOUu7qewp&?$NOkJm z*YCG@eQ)!Wx<2I{=I9#K-e8fn3dC~%b3XO&j;txh@Mc?fZ{YjO`M3Z6Tr=OHp$Y1- z$KL7SijBgNj#Baei2z5PLOC#H?jMmy{mnxuk`Ra3GzikmoAh-D$N|XkVah8n-`A#e z*5dZ%xMg*lg#*FR9evx+wv{e99C0Q*sb_}sZBH~2-qeb+P3$lg?A2nroX-ADaLQ{R&7@8hG{XYh9rYHP;~D%X%#Lp&G`6yvMQd>e`mnB zV&}S^{>c7Oiu^fx{?FUBrne%#f7ka;(A>{mmYdL{NFhG84*K7rCWoqn6vv6vr9CHI zXI(4LhpLehq~xlyJ#TFWju#E@^5})jODsOXhqbm$isN&R`C?`I(N^S zw${q}dgZ9qa9$Cq$Q@4rKU!?C&fO=8IUo$xg{++JUrm?2?oC^^mFr=n~4NG18Myn zsFl-)WtNk1KTaU7B0@kjVSt`1>0k98M?cGo)h|FAa>8ZjmndaaloT>o)IkZpUiv|N zx66IT`YxCeH~G%5a)k{Za!m1DKnF~FO}%VH5_)P5XfyIpk$e@ z6ZPRpj8Uwn>5n0L`k>$mg`7A%3uU1{HR3mIBd3R za%7bOg|Vb?nbq*(*9q|9!;s>WjbKs|;C0+vim)wE@MVf!qwcn_(Ltoy*D-^22iqrO z$FjuQR~XpAJ+FnJMl{9)kJP>-yRp(oNnY7iK=@oa+&T8*xJQ`8e{UkzSm<&Xl*eu? z%q@4gmBk(D^p1VPiY}*dxR(2sioA`hIcvsO$BHn5w@qj_{6|MIAv{ajCml|&2Mf3N z-z_`rulV~?ATnhcV`r@TdDTX<^z44FWP+_;nb1P8h-Fm>5`*46@Y5nKAB2w`qr~i` zK*vn0dXII*gf9O^#H$8~m=>7OAj=_*F!G58lM^$oXJ4VbEbTT1?Gi0@-OI^XvyG>d zkS&_sVwa8Zdcld0S4nZ67q$#rwwP`ahjx)mpxsmgpA)OmH+=l0kf!?txB_@}v`Sa- zTWJN3D>wkO;54#<$HRqu?Gtv3O{Ti~_v}~tT9QOyTmZz&NsPNwk@Y|ps;Iv=o>Tiq zh)^?@L0%G%rkr-GtX(3H>7+>##=@E-=5G@uwmZh*;H^=+vuQspP*$!?G86NQQVeG; z>7K3+$Z4}-aGXi7Vi9U7sqSzDg|`j1v&mg{g^M}-&qWN7Q?EjErB0B3_!(JFA&bp4 zNK3B^k94!TXK_72l<5A+^EQu^)La{Nb&HZ4oN69Z)_>w-glfT7~+>0T#kYGfAHntrP z>-{-Vj3N|x2%`CJbG^+Ml|J^AW|t+rsO&U-s!k7Dx5n%?Vp)Fm5b||;sz1~>w1~Fb zRqhpBdSBnO4HQ6X9|9%tbNr=eu+X%~wzklJQ;a_~uS+|?-X#k>Q`Qz<6gD|%ryAVyQ8DOuk=_So!%_KTuB-W z*aNXXom6w+mY?;zI10JoJ#jZQA&9MuKoBm+MNqcx)EmHs6m6h>b;c^QdkIoci1Mk5 zbQ`mfE6P(q#CcbY%rl-3cwyV9MRmKBrhV~MigYcSWJ?92u8JBiEW53Qkw^!Unw4pyw|L!J8{-(!4$5Xack`P*Cs4KgWrpxNXRQL z&RK6VzurTgj|`O9c$>6ayDqBpxp6KUTmiph|3Mc{ls4>s#d^3MR5*uWd-_VJ*v9Y{ zHSbM`aK5IrV%H|W<<(8FV9<#_WE!23aUkD-AT9>&D`akYCh6CjX#z4`=z!@|=%g3c zb%Q*K>b#_prB60~P5)jiu$#XDd!v0n9nenr!a0~W)jNoC#9M+3lDt!VF_4=iUj!;H zU3|ITE6hzKLA|4>9A;im(uI0Q*!+EpWA_}lmTd#S9pF?=6<74|BVi4t=3rbPSuxT7 z*KI4#ANxzGtOwntD>bn$(8{-!d*T~)A9X*9BiH@AuRm20$l?uIt?j8!^|=lpayzXI z1~4_(={C3Gs`TiPRVV7&>bl6f=Psa$k>w!aZp+_?ouKRAr*A2#d(8*w zdQk8=libr`-M_Y8+G5b2q*hcM{_Ih7h<1T-+@E%z zgC@;}X9og3*-b?=2jI^jZxf1cPt@x`QT93E={Fni+)-ERHG}GZd6F+sy<)H5gGsmg$o4*h4@jZpwRdw-Ce&yLD8fRynH78Z+t;wD5yaQ6cptL|34S> zfA6i|QeEG1QaN5JNdJGw6`?5p%l!WunfU!rBZSoOS5AOf(f?LwKB~TD|68Sa;{?=I zrE0v1AxG9geT2oZbZ}=+6@SM|t$8B`NYr=_!)d8ywA7Ub;|1l@ne#~Y3 zWBMfjXH>+d)RA{tKxcEhF*Hd!8#EhWrRC#M1F+iqpEs%E9T@4W&`f}Ha3&%&vhk_#fKh4lC QGvi>Onc$rt|MU9)0V3l&n*aa+ diff --git a/UPP/Core/Inc/adc.h b/UPP/Core/Inc/adc.h index 674dd85..34c0965 100644 --- a/UPP/Core/Inc/adc.h +++ b/UPP/Core/Inc/adc.h @@ -32,12 +32,15 @@ extern "C" { /* USER CODE END Includes */ +extern ADC_HandleTypeDef hadc1; + extern ADC_HandleTypeDef hadc3; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ +void MX_ADC1_Init(void); void MX_ADC3_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/UPP/Core/Src/adc.c b/UPP/Core/Src/adc.c index 317cc69..87bdb83 100644 --- a/UPP/Core/Src/adc.c +++ b/UPP/Core/Src/adc.c @@ -24,8 +24,56 @@ /* USER CODE END 0 */ +ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc3; +/* ADC1 init function */ +void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + + /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) + */ + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.ScanConvMode = DISABLE; + hadc1.Init.ContinuousConvMode = ENABLE; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.NbrOfConversion = 1; + hadc1.Init.DMAContinuousRequests = DISABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + + /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. + */ + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = 1; + sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} /* ADC3 init function */ void MX_ADC3_Init(void) { @@ -78,7 +126,28 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(adcHandle->Instance==ADC3) + if(adcHandle->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + /* ADC1 clock enable */ + __HAL_RCC_ADC1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PA0/WKUP ------> ADC1_IN0 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } + else if(adcHandle->Instance==ADC3) { /* USER CODE BEGIN ADC3_MspInit 0 */ @@ -116,7 +185,24 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) { - if(adcHandle->Instance==ADC3) + if(adcHandle->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC1_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PA0/WKUP ------> ADC1_IN0 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0); + + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } + else if(adcHandle->Instance==ADC3) { /* USER CODE BEGIN ADC3_MspDeInit 0 */ diff --git a/UPP/Core/Src/main.c b/UPP/Core/Src/main.c index becb0c7..ec5e420 100644 --- a/UPP/Core/Src/main.c +++ b/UPP/Core/Src/main.c @@ -104,6 +104,7 @@ int main(void) MX_SPI3_Init(); MX_TIM11_Init(); MX_TIM12_Init(); + MX_ADC1_Init(); /* USER CODE BEGIN 2 */ #else MX_TIM1_Init(); diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index d9bfde0..13cdd2d 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -1,4 +1,4 @@ - + 1.0 @@ -45,7 +45,7 @@ 79 66 8 - + 1 @@ -104,16 +104,16 @@ 0 0 6 - - - - - - - - - - + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll @@ -128,7 +128,7 @@ -U-O142 -O2190 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) - + 0 @@ -158,19 +158,19 @@ 0 0 - - + + 0 0 0 - - - - - - - - + + + + + + + + 1 1 diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx index 7545c7a..13644f1 100644 --- a/UPP/MDK-ARM/UPP.uvprojx +++ b/UPP/MDK-ARM/UPP.uvprojx @@ -1,10 +1,7 @@ - - - + + 2.1 -
### uVision Project, (C) Keil Software
- UPP @@ -20,28 +17,28 @@ Keil.STM32F4xx_DFP.2.16.0 http://www.keil.com/pack/ IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ - - - + + + 0 - - - - - - - - - - + + + + + + + + + + $$Device:STM32F427ZGTx$CMSIS\SVD\STM32F427x.svd 0 0 - - - - - + + + + + 0 0 @@ -56,15 +53,15 @@ 1 1 1 - + 1 0 0 0 0 - - + + 0 0 0 @@ -73,8 +70,8 @@ 0 0 - - + + 0 0 0 @@ -83,15 +80,15 @@ 0 1 - - + + 0 0 0 0 1 - + 0 @@ -105,8 +102,8 @@ 0 0 3 - - + + 0 @@ -139,11 +136,11 @@ 1 BIN\UL2V8M.DLL - - - - - + + + + + 0 @@ -176,7 +173,7 @@ 0 0 "Cortex-M4" - + 0 0 0 @@ -311,7 +308,7 @@ 0x10000 - + 1 @@ -338,9 +335,9 @@ 0 0 - + USE_HAL_DRIVER,STM32F427xx - + ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../AllLibs/ExtMemory/Inc;../AllLibs/Modbus/Inc;../AllLibs/MyLibs/MyLibs/Inc;../AllLibs/MyLibs/RTT;../AllLibs/PeriphGeneral/Inc;../Core/Configs @@ -356,10 +353,10 @@ 0 1 - - - - + + + + @@ -369,15 +366,15 @@ 0 1 0 - - - - - - - - - + + + + + + + + + @@ -796,26 +793,24 @@ - - + - + - + - + - + - + - @@ -824,5 +819,5 @@ -
+ diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc index caaef45..b810d65 100644 --- a/UPP/UPP.ioc +++ b/UPP/UPP.ioc @@ -1,6 +1,14 @@ #MicroXplorer Configuration settings - do not modify +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_0 +ADC1.ContinuousConvMode=ENABLE +ADC1.IPParameters=Rank-1\#ChannelRegularConversion,master,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-1\#ChannelRegularConversion=1 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES +ADC1.master=1 ADC3.Channel-15\#ChannelRegularConversion=ADC_CHANNEL_7 -ADC3.IPParameters=Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,NbrOfConversionFlag +ADC3.IPParameters=Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion +ADC3.NbrOfConversion=1 ADC3.NbrOfConversionFlag=1 ADC3.Rank-15\#ChannelRegularConversion=1 ADC3.SamplingTime-15\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES @@ -21,22 +29,23 @@ IWDG.Prescaler=IWDG_PRESCALER_32 KeepUserPlacement=false Mcu.CPN=STM32F427ZGT6 Mcu.Family=STM32F4 -Mcu.IP0=ADC3 -Mcu.IP1=CAN1 -Mcu.IP10=TIM11 -Mcu.IP11=TIM12 -Mcu.IP12=TIM13 -Mcu.IP13=USART3 -Mcu.IP14=USART6 -Mcu.IP2=IWDG -Mcu.IP3=NVIC -Mcu.IP4=RCC -Mcu.IP5=RTC -Mcu.IP6=SPI3 -Mcu.IP7=SYS -Mcu.IP8=TIM1 -Mcu.IP9=TIM3 -Mcu.IPNb=15 +Mcu.IP0=ADC1 +Mcu.IP1=ADC3 +Mcu.IP10=TIM3 +Mcu.IP11=TIM11 +Mcu.IP12=TIM12 +Mcu.IP13=TIM13 +Mcu.IP14=USART3 +Mcu.IP15=USART6 +Mcu.IP2=CAN1 +Mcu.IP3=IWDG +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=RTC +Mcu.IP7=SPI3 +Mcu.IP8=SYS +Mcu.IP9=TIM1 +Mcu.IPNb=16 Mcu.Name=STM32F427Z(G-I)Tx Mcu.Package=LQFP144 Mcu.Pin0=PE2 @@ -47,61 +56,62 @@ Mcu.Pin12=PF10 Mcu.Pin13=PH0/OSC_IN Mcu.Pin14=PH1/OSC_OUT Mcu.Pin15=PC0 -Mcu.Pin16=PA4 -Mcu.Pin17=PA5 -Mcu.Pin18=PA6 -Mcu.Pin19=PB0 +Mcu.Pin16=PA0/WKUP +Mcu.Pin17=PA4 +Mcu.Pin18=PA5 +Mcu.Pin19=PA6 Mcu.Pin2=PE4 -Mcu.Pin20=PB1 -Mcu.Pin21=PF11 -Mcu.Pin22=PB10 -Mcu.Pin23=PB11 -Mcu.Pin24=PB13 -Mcu.Pin25=PG6 -Mcu.Pin26=PC6 -Mcu.Pin27=PC7 -Mcu.Pin28=PC8 -Mcu.Pin29=PC9 +Mcu.Pin20=PB0 +Mcu.Pin21=PB1 +Mcu.Pin22=PF11 +Mcu.Pin23=PB10 +Mcu.Pin24=PB11 +Mcu.Pin25=PB13 +Mcu.Pin26=PG6 +Mcu.Pin27=PC6 +Mcu.Pin28=PC7 +Mcu.Pin29=PC8 Mcu.Pin3=PE5 -Mcu.Pin30=PA8 -Mcu.Pin31=PA9 -Mcu.Pin32=PA10 -Mcu.Pin33=PA11 -Mcu.Pin34=PA12 -Mcu.Pin35=PA13 -Mcu.Pin36=PA14 -Mcu.Pin37=PA15 -Mcu.Pin38=PC10 -Mcu.Pin39=PC11 +Mcu.Pin30=PC9 +Mcu.Pin31=PA8 +Mcu.Pin32=PA9 +Mcu.Pin33=PA10 +Mcu.Pin34=PA11 +Mcu.Pin35=PA12 +Mcu.Pin36=PA13 +Mcu.Pin37=PA14 +Mcu.Pin38=PA15 +Mcu.Pin39=PC10 Mcu.Pin4=PE6 -Mcu.Pin40=PC12 -Mcu.Pin41=PD2 -Mcu.Pin42=PD3 -Mcu.Pin43=PD6 -Mcu.Pin44=PG12 -Mcu.Pin45=PG15 -Mcu.Pin46=PB3 -Mcu.Pin47=PB6 -Mcu.Pin48=PB7 -Mcu.Pin49=PB8 +Mcu.Pin40=PC11 +Mcu.Pin41=PC12 +Mcu.Pin42=PD2 +Mcu.Pin43=PD3 +Mcu.Pin44=PD6 +Mcu.Pin45=PG12 +Mcu.Pin46=PG15 +Mcu.Pin47=PB3 +Mcu.Pin48=PB6 +Mcu.Pin49=PB7 Mcu.Pin5=PC13 -Mcu.Pin50=PB9 -Mcu.Pin51=PE0 -Mcu.Pin52=PE1 -Mcu.Pin53=VP_IWDG_VS_IWDG -Mcu.Pin54=VP_RTC_VS_RTC_Activate -Mcu.Pin55=VP_RTC_VS_RTC_Calendar -Mcu.Pin56=VP_SYS_VS_tim14 -Mcu.Pin57=VP_TIM1_VS_ClockSourceINT -Mcu.Pin58=VP_TIM3_VS_ClockSourceINT -Mcu.Pin59=VP_TIM11_VS_ClockSourceINT +Mcu.Pin50=PB8 +Mcu.Pin51=PB9 +Mcu.Pin52=PE0 +Mcu.Pin53=PE1 +Mcu.Pin54=VP_IWDG_VS_IWDG +Mcu.Pin55=VP_RTC_VS_RTC_Activate +Mcu.Pin56=VP_RTC_VS_RTC_Calendar +Mcu.Pin57=VP_SYS_VS_tim14 +Mcu.Pin58=VP_TIM1_VS_ClockSourceINT +Mcu.Pin59=VP_TIM3_VS_ClockSourceINT Mcu.Pin6=PC14/OSC32_IN -Mcu.Pin60=VP_TIM12_VS_ClockSourceINT -Mcu.Pin61=VP_TIM13_VS_ClockSourceINT +Mcu.Pin60=VP_TIM11_VS_ClockSourceINT +Mcu.Pin61=VP_TIM12_VS_ClockSourceINT +Mcu.Pin62=VP_TIM13_VS_ClockSourceINT Mcu.Pin7=PC15/OSC32_OUT Mcu.Pin8=PF6 Mcu.Pin9=PF7 -Mcu.PinsNb=62 +Mcu.PinsNb=63 Mcu.ThirdPartyNb=0 Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;mb_htim,htim12;mb_dbg_huart,huart6;ustim,htim13;mem_hspi,hspi3;hpwm1,htim1;hpwm2,htim2;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4 Mcu.UserName=STM32F427ZGTx @@ -121,6 +131,7 @@ NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn NVIC.TimeBaseIP=TIM14 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA0/WKUP.Signal=ADCx_IN0 PA10.GPIOParameters=GPIO_Label PA10.GPIO_Label=PWM3 PA10.Locked=true @@ -404,6 +415,8 @@ RTC.IPParameters=WeekDay,Year,Date,Month,Hours RTC.Month=RTC_MONTH_JANUARY RTC.WeekDay=RTC_WEEKDAY_MONDAY RTC.Year=25 +SH.ADCx_IN0.0=ADC1_IN0,IN0 +SH.ADCx_IN0.ConfNb=1 SH.ADCx_IN10.0=ADC3_IN10,IN10 SH.ADCx_IN10.ConfNb=1 SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1