diff --git a/App_Wrapper/main.c b/App_Wrapper/main.c deleted file mode 100644 index e699922..0000000 --- a/App_Wrapper/main.c +++ /dev/null @@ -1,193 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 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. - * - ****************************************************************************** - */ - /* USER CODE END Header */ - /* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "adc.h" -#include "tim.h" -#include "usart.h" -#include "gpio.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "upp.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main_init(void) -{ - - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_TIM2_Init(); - /* USER CODE BEGIN 2 */ - upp_init(); - - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - //while (1) - //{ - // upp_main(); - // /* USER CODE END WHILE */ - - // /* USER CODE BEGIN 3 */ - //} - /* USER CODE END 3 */ -} - -uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {} -//HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc) {} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - //RCC_OscInitTypeDef RCC_OscInitStruct = { 0 }; - //RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 }; - //RCC_PeriphCLKInitTypeDef PeriphClkInit = { 0 }; - - ///** Initializes the RCC Oscillators according to the specified parameters - //* in the RCC_OscInitTypeDef structure. - //*/ - //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - //RCC_OscInitStruct.HSEState = RCC_HSE_ON; - //RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - //RCC_OscInitStruct.HSIState = RCC_HSI_ON; - //RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - //RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - //RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - //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_DIV2; - //RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - //if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - //{ - // Error_Handler(); - //} - //PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; - //PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - //if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - //{ - // Error_Handler(); - //} -} - -/* USER CODE BEGIN 4 */ - -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - __disable_irq(); - while (1) - { - } - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t* file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/MCU_STM32F1xx_Matlab/Drivers/STM32F1xx_SIMULINK/stm32f1xx_matlab_gpio.h b/MCU_STM32F1xx_Matlab/Drivers/STM32F1xx_SIMULINK/stm32f1xx_matlab_gpio.h index bb7664c..e694421 100644 --- a/MCU_STM32F1xx_Matlab/Drivers/STM32F1xx_SIMULINK/stm32f1xx_matlab_gpio.h +++ b/MCU_STM32F1xx_Matlab/Drivers/STM32F1xx_SIMULINK/stm32f1xx_matlab_gpio.h @@ -17,7 +17,5 @@ void Simulate_GPIO_BSRR(void); -void WriteFromSFunc(real_T* disc); -void ReadToSFunc(real_T* in); #endif // _MATLAB_GPIO_H_ \ No newline at end of file diff --git a/App_Wrapper/app_io.c b/MCU_Wrapper/app_wrapper.c similarity index 56% rename from App_Wrapper/app_io.c rename to MCU_Wrapper/app_wrapper.c index 02810b0..17be3d1 100644 --- a/App_Wrapper/app_io.c +++ b/MCU_Wrapper/app_wrapper.c @@ -1,22 +1,71 @@ -#include "stm32f1xx_matlab_gpio.h" +/** +************************************************************************** +* @file app_wrapper.c +* @brief Код для из приложения МК для симуляции. +************************************************************************** +**************************************************************************/ + +#include "mcu_wrapper_conf.h" +// Includes START #include "upp.h" +#include "main.h" +// Inlcudes END + +// Dummy functions START +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {} +void SystemClock_Config(void) {} +void Error_Handler(void) {} +// Dummy functions END + +void app_init(void) +{ +/* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_TIM2_Init(); + /* USER CODE BEGIN 2 */ + upp_init(); + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + //while (1) + //{ + // upp_main(); + // /* USER CODE END WHILE */ + + // /* USER CODE BEGIN 3 */ + //} + /* USER CODE END 3 */ +} -#define detect_front(_in_numb_, _var_, _val_) { \ -if ((in[_in_numb_] > 0.5) && (prev_in[_in_numb_] <= 0.5)) \ -{ \ - _var_ = _val_; \ -} } +void app_step(void) +{ + upp_main(); +} -#define detect_rise(_in_numb_, _var_, _val_) { \ -if ((in[_in_numb_] < 0.5) && (prev_in[_in_numb_] >= 0.5)) \ -{ \ - _var_ = _val_; \ -} } - - - -void WriteFromSFunc(real_T* disc) +void app_writeOutputBuffer(real_T* disc) { for (int i = 0; i < PORT_WIDTH; i++) @@ -39,8 +88,21 @@ void WriteFromSFunc(real_T* disc) -void ReadToSFunc(real_T* in) +void app_readInputs(real_T* in) { + +#define detect_front(_in_numb_, _var_, _val_) { \ +if ((in[_in_numb_] > 0.5) && (prev_in[_in_numb_] <= 0.5)) \ +{ \ + _var_ = _val_; \ +} } + +#define detect_rise(_in_numb_, _var_, _val_) { \ +if ((in[_in_numb_] < 0.5) && (prev_in[_in_numb_] >= 0.5)) \ +{ \ + _var_ = _val_; \ +} } + static real_T prev_in[IN_PORT_WIDTH]; detect_front(0, phase_A.zc_detector.f.EXTIZeroCrossDetected, 1); @@ -73,4 +135,4 @@ void ReadToSFunc(real_T* in) { prev_in[i] = in[i]; } -} \ No newline at end of file +} diff --git a/findjobj.mltbx b/MCU_Wrapper/findjobj.mltbx similarity index 100% rename from findjobj.mltbx rename to MCU_Wrapper/findjobj.mltbx diff --git a/MCU_Wrapper/mcu_wrapper.c b/MCU_Wrapper/mcu_wrapper.c index 2c5b73a..5c13741 100644 --- a/MCU_Wrapper/mcu_wrapper.c +++ b/MCU_Wrapper/mcu_wrapper.c @@ -65,8 +65,7 @@ void MCU_Step_Simulation(SimStruct* S, time_T time) } SuspendThread(hmcu.hMCUThread); #else - extern void upp_main(void); - upp_main(); + app_step(); #endif //RUN_APP_MAIN_FUNC_THREAD MCU_writeOutputs(S); // запись портов (по факту запись в буфер. запись в порты в mdlOutputs) @@ -95,7 +94,7 @@ void MCU_readInputs(SimStruct* S) /* Get S-Function inputs */ real_T* IN = ssGetInputPortRealSignal(S, 0); - ReadToSFunc(IN); + app_readInputs(IN); } /* WRITE OUTPUTS BUFFER S-FUNCTION FROM MCU REGS*/ @@ -110,7 +109,7 @@ void MCU_writeOutputs(SimStruct* S) real_T* Out_Buff = ssGetDiscStates(S); Simulate_GPIO_BSRR(); - WriteFromSFunc(Out_Buff); + app_writeOutputBuffer(Out_Buff); } //-----------------CONTROLLER SIMULATE FUNCTIONS---------------// //-------------------------------------------------------------// @@ -154,8 +153,8 @@ void SIM_Initialize_Simulation(void) // инициализация потока, который будет выполнять код МК hmcu.hMCUThread = (HANDLE)CreateThread(NULL, 0, MCU_App_Thread, 0, CREATE_SUSPENDED, &hmcu.idMCUThread); #else - extern int main_init(void); - main_init(); + extern int app_init(void); + app_init(); #endif //RUN_APP_MAIN_FUNC_THREAD /* user initialization */ diff --git a/MCU_Wrapper/mcu_wrapper_conf.h b/MCU_Wrapper/mcu_wrapper_conf.h index 5b9a458..545b824 100644 --- a/MCU_Wrapper/mcu_wrapper_conf.h +++ b/MCU_Wrapper/mcu_wrapper_conf.h @@ -152,9 +152,11 @@ void SIM_deInitialize_Simulation(void); /* Read inputs S-function */ void MCU_readInputs(SimStruct* S); +void app_readInputs(real_T* in); /* Write pre-outputs S-function (out_buff states) */ void MCU_writeOutputs(SimStruct* S); +void app_writeOutputBuffer(real_T* disc); /* Write outputs of block of S-Function*/ void SIM_writeOutput(SimStruct* S); diff --git a/MCU_Wrapper/run_mex.bat b/MCU_Wrapper/run_mex.bat index 15fda3b..de2b654 100644 --- a/MCU_Wrapper/run_mex.bat +++ b/MCU_Wrapper/run_mex.bat @@ -67,7 +67,8 @@ set code_MCU_Sim= .\MCU_STM32F1xx_Matlab\stm32f1xx_matlab_conf.c^ :: оболочка, которая будет моделировать работу МК в симулинке set includes_WRAPPER= -I".\MCU_Wrapper" set code_WRAPPER= .\MCU_Wrapper\MCU.c^ - .\MCU_Wrapper\mcu_wrapper.c + .\MCU_Wrapper\mcu_wrapper.c^ + .\MCU_Wrapper\app_wrapper.c ::------------------------------------------------------------------------- diff --git a/mcu_test_r2023.slx b/mcu_test_r2023.slx index 9d1f4a9..d93df44 100644 Binary files a/mcu_test_r2023.slx and b/mcu_test_r2023.slx differ diff --git a/mexing.m b/mexing.m index d46ff95..158d0d0 100644 --- a/mexing.m +++ b/mexing.m @@ -20,9 +20,9 @@ isDebug = maskValues{inxDebug}; isExtConsole = maskValues{idxExtConsole}; if strcmpi(isDebug, 'on') - modeArg = "release"; -else modeArg = "debug"; +else + modeArg = "release"; end [includesArg, codeArg] = make_mex_arguments('incTable', 'srcTable'); diff --git a/mycode.c b/mycode.c new file mode 100644 index 0000000..9c9ece4 --- /dev/null +++ b/mycode.c @@ -0,0 +1,14 @@ +void app_init() { + // code of foo +} + +void app_step() { + // code of foo +} + +void app_readInputs() { + // code of foo +} +void app_writeOutputBuffer() { + // code of foo +} \ No newline at end of file