Начата работа с документацией

This commit is contained in:
2024-10-11 14:09:52 +03:00
parent ac187eb2d3
commit 6a08b0462d
759 changed files with 370188 additions and 223 deletions

View File

@@ -1,7 +1,12 @@
#include "stm32f4xx_matlab_gpio.h"
#include "modbus.h"
/**
* @brief Write S-Function disc ports from MCU GPIOs.
* @param disc - discrete array of S-Function. Outputs would be written from disc.
* @details Функция для записи дискретных выходов S-Function из GPIO.
После в @ref SIM_writeOutputs из disc формируются выходы S-Function.
*/
void GPIO_to_SFUNC(real_T* disc)
{
for (int i = 0; i < PORT_WIDTH; i++)
@@ -23,6 +28,12 @@ void GPIO_to_SFUNC(real_T* disc)
}
}
/**
* @brief Write S-Function inputs to MCU.
* @param disc - discrete array of S-Function. Outputs would be written from disc.
* @details Функция для считывания входов S-Function в МК.
Можно абстрагироваться от считывания в GPIO и записывать напрямую в переменные МК.
*/
void SFUNC_to_GPIO(real_T* in)
{
// write pwm ctrl registers

View File

@@ -5,7 +5,20 @@
#include "simstruc.h"
#include "mcu_wrapper_conf.h"
/**
* @addtogroup GPIO_SIMULATOR
* @ingroup MAIN_SIMULATOR
* @brief Simulator for GPIO
* @details Определяет взаимодействие портов МК и оболочки (S-Function)
* @{
*/
/* Функция для записи дискретных выходов S-Function из GPIO */
void SFUNC_to_GPIO(real_T* disc);
/* Функция для считывания входов S-Function в МК */
void GPIO_to_SFUNC(real_T* in);
/** GPIO_SIMULATOR
* @}
*/
#endif // _MATLAB_GPIO_H_

View File

@@ -3,6 +3,14 @@
#include "mcu_wrapper_conf.h"
/**
* @addtogroup RCC_SIMULATOR
* @ingroup MAIN_SIMULATOR
* @brief Simulator for RCC and Clocks
* @details Определ¤ет параметры тактирования МК.
Содержит дефайны дл¤ скипа бесконечных циклов ожидающих выставление флагов
* @{
*/
//#define SYSLCK_Value ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)
@@ -15,8 +23,8 @@
#define ABP2_Value (double)72000000;
#define ABP2_TIMS_Value (double)72000000;
/* Эти дефайны добавлены в код stm32f4xx_hal_rcc.c, чтобы не попасть в бесконечный цикл */
/* Мб перенести в MCU_Periph_Simulation(), но чет не хочется нагружать симуляцию этой херней*/
/* Эти дефайны добавлены в код stm32f4xx_hal_rcc.c, чтобы не попасть в бесконечный цикл */
/* Мб перенести в MCU_Periph_Simulation(), но чет не хочется нагружать симуляцию этой херней*/
#define _RCC_SET_FLAG(__FLAG__) \
if(((__FLAG__) >> 5U) == 1U) RCC->CR |= (1U << ((__FLAG__) & RCC_FLAG_MASK)); \
else if(((__FLAG__) >> 5U) == 2U) RCC->BDCR |= (1U << ((__FLAG__) & RCC_FLAG_MASK)); \
@@ -35,4 +43,8 @@ if(_condition_) _RCC_CLEAR_FLAG(_flag_)
#define Clear_Flag_If_Its_Expected(_flag_, _condition_) \
if(_condition_) _RCC_SET_FLAG(_flag_)
/** RCC_SIMULATOR
* @}
*/
#endif // _MATLAB_RCC_H_

View File

@@ -6,11 +6,11 @@
struct SlaveChannels Slave_Channels; // структура для связи и синхронизации таймеров
struct SlaveChannels Slave_Channels; ///< структура для связи и синхронизации таймеров
//----------------------TIMER BASE FUNCTIONS-----------------------//
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
/** Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{
Overflow_Check(TIMx, TIMS);
@@ -36,7 +36,7 @@ switch (TIMx->SMCR & TIM_SMCR_SMS) // TIMER MODE
}
}
/* Счет таймера за один такт */
/** Счет таймера за один такт */
void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
{
if ((TIMx->CR1 & TIM_CR1_DIR) && TIMx->CR1) // up COUNTER and COUNTER ENABLE
@@ -45,7 +45,7 @@ void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
TIMS->tx_cnt += TIMS->tx_step / TIMx->PSC;
TIMx->CNT = (uint32_t)TIMS->tx_cnt;
}
/* Проверка на переполнение и дальнейшая его обработка */
/** Проверка на переполнение и дальнейшая его обработка */
void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
{
// Переполнение таймера: сброс таймера и вызов прерывания
@@ -70,7 +70,7 @@ void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
//----------------------------CHANNELS-----------------------------//
/* Симуляция каналов таймера */
/** Симуляция каналов таймера */
void Channels_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
{
CC_PWM_Ch1_Simulation(TIMx, TIMS);
@@ -83,7 +83,7 @@ void Channels_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
Write_OC_to_TRGO(TIMx, TIMS);
}
//-----------------CAPTURE COPMARE & PWM FUNCTIONS------------------//
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
/** Выбор режима CaptureCompare или PWM и симуляция для первого канала */
void CC_PWM_Ch1_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{ // определяет режим канала
switch (TIMx->CCMR1 & TIM_CCMR1_OC1M)
@@ -125,6 +125,7 @@ switch (TIMx->CCMR1 & TIM_CCMR1_OC1M)
}
}
/** Выбор режима CaptureCompare или PWM и симуляция для второго канала */
void CC_PWM_Ch2_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{ // определяет режим канала
switch (TIMx->CCMR1 & TIM_CCMR1_OC2M)
@@ -166,6 +167,7 @@ switch (TIMx->CCMR1 & TIM_CCMR1_OC2M)
}
}
/** Выбор режима CaptureCompare или PWM и симуляция для третьего канала */
void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{ // определяет режим канала
switch (TIMx->CCMR2 & TIM_CCMR1_OC1M)
@@ -207,6 +209,7 @@ switch (TIMx->CCMR2 & TIM_CCMR1_OC1M)
}
}
/** Выбор режима CaptureCompare или PWM и симуляция для четвертого канала */
void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{ // определяет режим канала
switch (TIMx->CCMR2 & TIM_CCMR1_OC2M)
@@ -248,7 +251,7 @@ switch (TIMx->CCMR2 & TIM_CCMR1_OC2M)
}
}
/* Запись каналов таймера в порты GPIO */
/** Запись каналов таймера в порты GPIO */
void Write_OC_to_GPIO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
{
// write gpio pin if need
@@ -322,7 +325,7 @@ void Write_OC_to_GPIO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
}
}
}
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
/** Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
{
// write trigger output from OCxREF pin if need
@@ -368,7 +371,7 @@ void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
//--------------------MISC (temporary) FUNCTIONS--------------------//
/* Определение источника для запуска таймера в SLAVE MODE */
/** Определение источника для запуска таймера в SLAVE MODE */
void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
{
if (TIMx == TIM2)
@@ -420,7 +423,7 @@ void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
//------------------------SIMULINK FUNCTIONS------------------------//
// Симулирование выбранных таймеров
/** Симулирование выбранных через дефайн таймеров */
void Simulate_TIMs(void)
{
#ifdef USE_TIM1
@@ -466,7 +469,7 @@ void Simulate_TIMs(void)
TIM_Simulation(TIM14, &tim14s);
#endif
}
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
/* Деинициализирование выбранных через дефайн таймеров (вызывается в конце симуляции) */
void TIM_SIM_DEINIT(void)
{
#ifdef USE_TIM1
@@ -555,7 +558,7 @@ void TIM8_BRK_TIM12_IRQHandler(void) {}
void TIM8_TRG_COM_TIM14_IRQHandler(void) {}
#endif
/* Вызов прерывания */
/** Вызов прерывания */
void call_IRQHandller(TIM_TypeDef* TIMx)
{ // calling HANDLER
if ((TIMx == TIM1) || (TIMx == TIM10))

View File

@@ -1,5 +1,5 @@
/**************************************************************************
Данный файл содержит объявления всякого для симуляции таймеров STM32F407xx.
Данный файл содержит объявления всякого для симуляции таймеров STM32F407xx.
**************************************************************************/
#ifndef _MATLAB_TIM_H_
@@ -9,67 +9,79 @@
#include "stm32f4xx_it.h"
#include "mcu_wrapper_conf.h"
/**
* @addtogroup TIM_SIMULATOR
* @ingroup MAIN_SIMULATOR
* @brief Simulator for TIM
* @details Дефайны и функции для симуляции таймеров.
* @{
*/
/////////////////////////////---DEFINES---/////////////////////////////
/* дефайн для сдвига между первой и второй половиной CCMRx регистров */
#define TIM_OCMODE_SECOND_SHIFT TIM_CCMR1_OC2M_Pos - TIM_CCMR1_OC1M_Pos
/** Дефайн для сдвига между первой и второй половиной CCMRx регистров */
#define TIM_OCMODE_SECOND_SHIFT (TIM_CCMR1_OC2M_Pos - TIM_CCMR1_OC1M_Pos)
/* дефайны для проверки выводить ли канал на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OC1_GPIO_Output(_tims_) (_tims_->Channels.OC1_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC1_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC1_PIN_SHIFT))
#define Check_OC2_GPIO_Output(_tims_) (_tims_->Channels.OC2_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC2_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC2_PIN_SHIFT))
#define Check_OC3_GPIO_Output(_tims_) (_tims_->Channels.OC3_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC3_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC3_PIN_SHIFT))
#define Check_OC4_GPIO_Output(_tims_) (_tims_->Channels.OC4_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC4_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC4_PIN_SHIFT))
/** Дефайн для проверки выводить ли канал на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OCx_GPIO_Output(_tims_, _OCx_GPIOx_, _OCx_PIN_SHIFT_) (_tims_->Channels._OCx_GPIOx_->MODER & (0b11<<(2*_tims_->Channels._OCx_PIN_SHIFT_))) == (0b10<<(2*_tims_->Channels._OCx_PIN_SHIFT_))
/** Дефайн для проверки выводить ли канал 1 на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OC1_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC1_GPIOx, OC1_PIN_SHIFT)
/** Дефайн для проверки выводить ли канал 2 на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OC2_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC2_GPIOx, OC2_PIN_SHIFT)
/** Дефайн для проверки выводить ли канал 3 на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OC3_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC3_GPIOx, OC3_PIN_SHIFT)
/** Дефайн для проверки выводить ли канал 4 на GPIO (настроен ли GPIO на альтернативную функцию) */
#define Check_OC4_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC4_GPIOx, OC4_PIN_SHIFT)
/////////////////////////////////////////////////////////////////////
///////////////////////////---STRUCTURES---//////////////////////////
/* Структура для управления Слейв Таймерами */
/** Структура для управления Слейв Таймерами */
struct SlaveChannels
{
unsigned TIM1_TRGO : 1;
unsigned TIM2_TRGO : 1;
unsigned TIM3_TRGO : 1;
unsigned TIM4_TRGO : 1;
unsigned TIM5_TRGO : 1;
unsigned TIM6_TRGO : 1;
unsigned TIM7_TRGO : 1;
unsigned TIM8_TRGO : 1;
unsigned TIM1_TRGO : 1; ///< Синган синхронизации таймера 1
unsigned TIM2_TRGO : 1; ///< Синган синхронизации таймера 2
unsigned TIM3_TRGO : 1; ///< Синган синхронизации таймера 3
unsigned TIM4_TRGO : 1; ///< Синган синхронизации таймера 4
unsigned TIM5_TRGO : 1; ///< Синган синхронизации таймера 5
unsigned TIM6_TRGO : 1; ///< Синган синхронизации таймера 6
unsigned TIM7_TRGO : 1; ///< Синган синхронизации таймера 7
unsigned TIM8_TRGO : 1; ///< Синган синхронизации таймера 8
};
/* Структура для моделирования каналов таймера */
/** Структура для моделирования каналов таймера */
struct Channels_Sim
{
// связанные с каналами GPIO порты и пины
GPIO_TypeDef *OC1_GPIOx;
uint32_t OC1_PIN_SHIFT;
// Каналы таймера
unsigned OC1REF:1; ///< Первый канал
unsigned OC2REF:1; ///< Второй канал
unsigned OC3REF:1; ///< Третьий канал
unsigned OC4REF:1; ///< Четвертый канал
GPIO_TypeDef *OC2_GPIOx;
uint32_t OC2_PIN_SHIFT;
// связанные с каналами GPIO порты и пины
GPIO_TypeDef *OC1_GPIOx; ///< Порт первого канала
uint32_t OC1_PIN_SHIFT; ///< Пин первого канала
GPIO_TypeDef *OC3_GPIOx;
uint32_t OC3_PIN_SHIFT;
GPIO_TypeDef *OC2_GPIOx; ///< Порт второго канала
uint32_t OC2_PIN_SHIFT; ///< Пин второго канала
GPIO_TypeDef *OC4_GPIOx;
uint32_t OC4_PIN_SHIFT;
GPIO_TypeDef *OC3_GPIOx; ///< Порт третьего канала
uint32_t OC3_PIN_SHIFT; ///< Пин третьего канала
GPIO_TypeDef *OC4_GPIOx; ///< Порт четвертого канала
uint32_t OC4_PIN_SHIFT; ///< Пин четвертого канала
// Каналы таймера
unsigned OC1REF:1;
unsigned OC2REF:1;
unsigned OC3REF:1;
unsigned OC4REF:1;
};
/* Структура для моделирования таймера */
/** Структура для моделирования таймера */
struct TIM_Sim
{
double tx_cnt; // счетчик таймера
double tx_step; // шаг счета за один шаг симуляции
int RELOAD; // буфер, если PRELOAD = 1
struct Channels_Sim Channels; // структура для симуляции каналов
double tx_cnt; ///< Счетчик таймера
double tx_step; ///< Шаг счета за один шаг симуляции
int RELOAD; ///< Буфер, если PRELOAD = 1
struct Channels_Sim Channels; ///< Структура для симуляции каналов
};
/////////////////////////////////////////////////////////////////////
@@ -78,43 +90,46 @@ struct TIM_Sim
///////////////////////////---FUNCTIONS---///////////////////////////
//----------------------TIMER BASE FUNCTIONS-----------------------//
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
/* Счет таймера за один такт */
/* Счет таймера за один такт */
void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
/* Проверка на переполнение и дальнейшая его обработка */
/* Проверка на переполнение и дальнейшая его обработка */
void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
/* Вызов прерывания */
/* Вызов прерывания */
void call_IRQHandller(TIM_TypeDef *TIMx);
//-----------------------------------------------------------------//
//------------------------CHANNELS FUNCTIONS-----------------------//
/* Симуляция каналов таймера */
/* Симуляция каналов таймера */
void Channels_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
/*---------------- - CAPTURE COPMARE & PWM FUNCTIONS------------------*/
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
void CC_PWM_Ch1_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
void CC_PWM_Ch2_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
void CC_PWM_Ch3_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
void CC_PWM_Ch4_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
/* Запись каналов таймера в порты GPIO */
/* Запись каналов таймера в порты GPIO */
void Write_OC_to_GPIO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
//------------------------------------------------------------------//
//--------------------MISC (temporary) FUNCTIONS--------------------//
/* Определение источника для запуска таймера в SLAVE MODE */
/* Определение источника для запуска таймера в SLAVE MODE */
void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
//------------------------------------------------------------------//
//------------------------SIMULINK FUNCTIONS------------------------//
// Симулирование выбранных таймеров
// Симулирование выбранных таймеров
void Simulate_TIMs(void);
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
void TIM_SIM_DEINIT(void);
//------------------------------------------------------------------//
/** TIM_SIMULATOR
* @}
*/
#endif // _MATLAB_TIM_H_

View File

@@ -7,6 +7,13 @@
**************************************************************************/
#include "stm32f407xx_matlab.h"
/**
* @addtogroup PERIPH_VARS_FOR_DEBUG
* @ingroup STM_SIMULATION
* @brief Varables of peripheral registers for debug watches
* @{
*/
TIM_TypeDef* tim2 = TIM2;
TIM_TypeDef* tim3 = TIM3;
@@ -91,4 +98,9 @@ FSMC_Bank2_3_TypeDef* fsmc_bank2_3_r = FSMC_Bank2_3;
FSMC_Bank4_TypeDef* fsmc_bank4_r = FSMC_Bank4;
DBGMCU_TypeDef* dbgmcu = DBGMCU;
USB_OTG_GlobalTypeDef* usb_otg_fs_periph = USB_OTG_FS;
USB_OTG_GlobalTypeDef* usb_otg_hs_periph = USB_OTG_HS;
USB_OTG_GlobalTypeDef* usb_otg_hs_periph = USB_OTG_HS;
/** PERIPH_VARS_FOR_DEBUG
* @}
*/

View File

@@ -1,6 +1,6 @@
/**************************************************************************
Äàííûé ôàéë íàñòðàèâàåò ñòðóêòóðû äëÿ ñèìóëÿöèè ïåðèôåðèé, êîòîðûå âûáðàíû
äåôàéíàìè â stm32f4xx_matlab_conf.h.
Данный файл настраивает структуры для симуляции периферий, которые выбраны
дефайнами в stm32f4xx_matlab_conf.h.
**************************************************************************/
#include "mcu_wrapper_conf.h"
@@ -24,9 +24,9 @@ void deInitialize_Periph_Sim(void)
// MCU DEINIT
void deInitialize_MCU(void)
{
// îáíóëåíèå ñòðóêòóðû, óïðàâëÿþùåé ïðîãðàììîé ÌÊ
// обнуление структуры, управляющей программой МК
memset(&hmcu, 0, sizeof(hmcu));
// îáíóëåíèå ñòðóêòóð, ñèìóëèðóþùèõ ïàìÿòü ÌÊ
// обнуление структур, симулирующих память МК
memset(&MCU_MEM, 0, sizeof(MCU_MEM));
memset(&MCU_CORTEX_MEM, 0, sizeof(MCU_CORTEX_MEM));
memset(&DEBUG_MCU, 0, sizeof(DEBUG_MCU));
@@ -87,7 +87,7 @@ void Init_TIM_SIM(void)
{
#ifdef USE_TIM1
tim1s.tx_cnt = TIM1->CNT;
tim1s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
tim1s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
tim1s.Channels.OC1_GPIOx = GPIOE;
tim1s.Channels.OC1_PIN_SHIFT = 9;
@@ -104,7 +104,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM2
tim2s.tx_cnt = TIM2->CNT;
tim2s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim2s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim2s.Channels.OC1_GPIOx = GPIOA;
tim2s.Channels.OC1_PIN_SHIFT = 5;
@@ -121,7 +121,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM3
tim3s.tx_cnt = TIM3->CNT;
tim3s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim3s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim3s.Channels.OC1_GPIOx = GPIOA;
tim3s.Channels.OC1_PIN_SHIFT = 6;
@@ -138,7 +138,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM4
tim4s.tx_cnt = TIM4->CNT;
tim4s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim4s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim4s.Channels.OC1_GPIOx = GPIOD;
tim4s.Channels.OC1_PIN_SHIFT = 12;
@@ -155,7 +155,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM5
tim5s.tx_cnt = TIM5->CNT;
tim5s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim5s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim5s.Channels.OC1_GPIOx = GPIOA;
tim5s.Channels.OC1_PIN_SHIFT = 0;
@@ -172,7 +172,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM6
tim6s.tx_cnt = TIM6->CNT;
tim6s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim6s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim6s.Channels.OC1_GPIOx = GPIOA;
tim6s.Channels.OC1_PIN_SHIFT = 6;
@@ -189,7 +189,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM7
tim7s.tx_cnt = TIM7->CNT;
tim7s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim7s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim7s.Channels.OC1_GPIOx = GPIOA;
tim7s.Channels.OC1_PIN_SHIFT = 6;
@@ -206,7 +206,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM8
tim8s.tx_cnt = TIM8->CNT;
tim8s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
tim8s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
tim8s.Channels.OC1_GPIOx = GPIOA;
tim8s.Channels.OC1_PIN_SHIFT = 6;
@@ -223,7 +223,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM9
tim9s.tx_cnt = TIM9->CNT;
tim9s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
tim9s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
tim9s.Channels.OC1_GPIOx = GPIOA;
tim9s.Channels.OC1_PIN_SHIFT = 6;
@@ -240,7 +240,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM10
tim10s.tx_cnt = TIM10->CNT;
tim10s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
tim10s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
tim10s.Channels.OC1_GPIOx = GPIOA;
tim10s.Channels.OC1_PIN_SHIFT = 6;
@@ -257,7 +257,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM11
tim11s.tx_cnt = TIM11->CNT;
tim11s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
tim11s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
tim11s.Channels.OC1_GPIOx = GPIOA;
tim11s.Channels.OC1_PIN_SHIFT = 6;
@@ -274,7 +274,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM12
tim12s.tx_cnt = TIM12->CNT;
tim12s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim12s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim12s.Channels.OC1_GPIOx = GPIOA;
tim12s.Channels.OC1_PIN_SHIFT = 6;
@@ -291,7 +291,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM13
tim13s.tx_cnt = TIM13->CNT;
tim13s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim13s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim13s.Channels.OC1_GPIOx = GPIOA;
tim13s.Channels.OC1_PIN_SHIFT = 6;
@@ -308,7 +308,7 @@ void Init_TIM_SIM(void)
#endif
#ifdef USE_TIM14
tim14s.tx_cnt = TIM14->CNT;
tim14s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
tim14s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
tim14s.Channels.OC1_GPIOx = GPIOA;
tim14s.Channels.OC1_PIN_SHIFT = 6;

View File

@@ -1,10 +1,30 @@
/**************************************************************************
Äŕííűé ôŕéë íĺîáőîäčě äë˙ îďđĺäĺëĺíč˙, ęŕęóţ ďĺđčôĺđčţ íŕîáőîäčěî áóäĺň
ńčěóëčđîâŕňü.
Данный файл необходим для определения, какую периферию наобходимо будет
симулировать.
**************************************************************************/
#ifndef _MATLAB_SETUP_H_
#define _MATLAB_SETUP_H_
#ifndef _MATLAB_CONF_H_
#define _MATLAB_CONF_H_
/**
* @addtogroup STM_SIMULATION
* @brief Stuff for simulating STM32 in MATLAB
*/
/**
* @addtogroup MAIN_SIMULATOR
* @ingroup STM_SIMULATION
* @brief Stuff for configuring, initializing and deinitializing simulator
* @details Здесь дефайнами задается используемая периферия и
подключаются файлы, необходимые для её симуляции
*/
/**
* @addtogroup SIMULATOR_CONF
* @ingroup MAIN_SIMULATOR
* @brief Configurations for simulator to simulating MCU
* @details Здесь дефайнами задается периферия для симуляции
* @{
*/
// DEFINES (UNCOMMENT WHAT YOU WILL SIMULATE)
// TIMS
@@ -38,15 +58,26 @@
//#define USE_TIM8_TRG_COM_TIM14_HANDLER
/** SIMULATOR_CONF
* @}
*/
/**
* @addtogroup MAIN_SIMULATOR
* @{
*/
//-----------------------------------------------------------------------//
/*------------------------------FUNCTIONS--------------------------------*/
void deInitialize_Periph_Sim(void);
void deInitialize_MCU(void);
// MCU PERIPH INIT
void Initialize_Periph_Sim(void);
// MCU PERIPH DEINIT
void deInitialize_Periph_Sim(void);
// MCU DEINIT
void deInitialize_MCU(void);
#include "stm32f4xx_matlab_rcc.h"
@@ -60,7 +91,7 @@ void Initialize_Periph_Sim(void);
// defined(USE_TIM11) || defined(USE_TIM12) || defined(USE_TIM13) || defined(USE_TIM14)
#include "stm32f4xx_matlab_tim.h"
// CODE
// Init timersfor simulation
void Init_TIM_SIM(void);
#ifdef USE_TIM1
@@ -108,4 +139,8 @@ extern struct TIM_Sim tim14s;
/*-------------------------------TIMERS----------------------------------*/
//-----------------------------------------------------------------------//
#endif // _MATLAB_SETUP_H_
/** MAIN_SIMULATOR
* @}
*/
#endif // _MATLAB_CONF_H_