STM MATLAB Simulator
Loading...
Searching...
No Matches
stm32f4xx_matlab_tim.h
Go to the documentation of this file.
1/**
2**************************************************************************
3* @file stm32f4xx_matlab_tim.h
4* @brief Заголовочный файл для симулятора таймеров.
5**************************************************************************
6@details
7Данный файл содержит объявления всякого для симуляции таймеров STM32F407xx.
8**************************************************************************/
9#ifndef _MATLAB_TIM_H_
10#define _MATLAB_TIM_H_
11
12#include "stm32f4xx_hal.h"
13#include "stm32f4xx_it.h"
14#include "mcu_wrapper_conf.h"
15
16/**
17 * @addtogroup TIM_SIMULATOR TIM Simulator
18 * @ingroup MAIN_SIMULATOR
19 * @brief Симулятор для таймеров
20 * @details Дефайны и функции для симуляции таймеров.
21 * @{
22 */
23
24/////////////////////////////---DEFINES---/////////////////////////////
25/**
26 * @brief Дефайн для сдвига между первой и второй половиной CCMRx регистров
27 */
28#define TIM_OCMODE_SECOND_SHIFT (TIM_CCMR1_OC2M_Pos - TIM_CCMR1_OC1M_Pos)
29
30/**
31 * @brief Дефайн для проверки выводить ли канал таймера на GPIO
32 * @details Данный дефайн проверяет, настроен ли пин GPIO на альтернативную функцию. Если да - то таймер выводиться на этот пин
33 */
34#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_))
35/**
36 * @brief Дефайн для проверки выводить ли канал 1 на GPIO (настроен ли GPIO на альтернативную функцию)
37 */
38#define Check_OC1_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC1_GPIOx, OC1_PIN_SHIFT)
39/**
40 * @brief Дефайн для проверки выводить ли канал 2 на GPIO (настроен ли GPIO на альтернативную функцию)
41 */
42#define Check_OC2_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC2_GPIOx, OC2_PIN_SHIFT)
43/**
44 * @brief Дефайн для проверки выводить ли канал 3 на GPIO (настроен ли GPIO на альтернативную функцию)
45 */
46#define Check_OC3_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC3_GPIOx, OC3_PIN_SHIFT)
47/**
48 * @brief Дефайн для проверки выводить ли канал 4 на GPIO (настроен ли GPIO на альтернативную функцию)
49 */
50#define Check_OC4_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC4_GPIOx, OC4_PIN_SHIFT)
51
52/////////////////////////////////////////////////////////////////////
53
54
55
56///////////////////////////---STRUCTURES---//////////////////////////
57/**
58 * @brief Структура для управления Слейв Таймерами
59 */
61{
62 unsigned TIM1_TRGO : 1; ///< Синган синхронизации таймера 1
63 unsigned TIM2_TRGO : 1; ///< Синган синхронизации таймера 2
64 unsigned TIM3_TRGO : 1; ///< Синган синхронизации таймера 3
65 unsigned TIM4_TRGO : 1; ///< Синган синхронизации таймера 4
66 unsigned TIM5_TRGO : 1; ///< Синган синхронизации таймера 5
67 unsigned TIM6_TRGO : 1; ///< Синган синхронизации таймера 6
68 unsigned TIM7_TRGO : 1; ///< Синган синхронизации таймера 7
69 unsigned TIM8_TRGO : 1; ///< Синган синхронизации таймера 8
70
71};
72
73/**
74 * @brief Структура для моделирования каналов таймера
75 */
77{
78 // Каналы таймера
79 unsigned OC1REF:1; ///< Первый канал
80 unsigned OC2REF:1; ///< Второй канал
81 unsigned OC3REF:1; ///< Третьий канал
82 unsigned OC4REF:1; ///< Четвертый канал
83
84 // связанные с каналами GPIO порты и пины
85 GPIO_TypeDef *OC1_GPIOx; ///< Порт первого канала
86 uint32_t OC1_PIN_SHIFT; ///< Пин первого канала
87
88 GPIO_TypeDef *OC2_GPIOx; ///< Порт второго канала
89 uint32_t OC2_PIN_SHIFT; ///< Пин второго канала
90
91 GPIO_TypeDef *OC3_GPIOx; ///< Порт третьего канала
92 uint32_t OC3_PIN_SHIFT; ///< Пин третьего канала
93
94 GPIO_TypeDef *OC4_GPIOx; ///< Порт четвертого канала
95 uint32_t OC4_PIN_SHIFT; ///< Пин четвертого канала
96
97};
98
99/**
100 * @brief Структура для моделирования таймера
101 */
103{
104 double tx_cnt; ///< Счетчик таймера (double, т.к. кол-во тактов за шаг симуляции может быть дробным)
105 double tx_step; ///< Шаг счета за один шаг симуляции (double, т.к. кол-во тактов за шаг симуляции может быть дробным)
106 int RELOAD; ///< Буфер для периода таймера (для реализации функции PRELOAD)
107 struct Channels_Sim Channels; ///< Структура для симуляции каналов
108};
109/////////////////////////////////////////////////////////////////////
110
111
112
113///////////////////////////---FUNCTIONS---///////////////////////////
114
115//----------------------TIMER BASE FUNCTIONS-----------------------//
116/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
117void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
118/* Счет таймера за один такт */
119void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
120/* Проверка на переполнение и дальнейшая его обработка */
121void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
122/* Вызов прерывания */
123void call_IRQHandller(TIM_TypeDef *TIMx);
124//-----------------------------------------------------------------//
125
126
127//------------------------CHANNELS FUNCTIONS-----------------------//
128/* Симуляция каналов таймера */
129void Channels_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
130/*---------------- - CAPTURE COPMARE & PWM FUNCTIONS------------------*/
131/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
132void CC_PWM_Ch1_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
133void CC_PWM_Ch2_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
134void CC_PWM_Ch3_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
135void CC_PWM_Ch4_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
136/* Запись каналов таймера в порты GPIO */
137void Write_OC_to_GPIO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
138/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
139void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
140//------------------------------------------------------------------//
141
142
143//--------------------MISC (temporary) FUNCTIONS--------------------//
144/* Определение источника для запуска таймера в SLAVE MODE */
145void Slave_Mode_Check_Source(TIM_TypeDef* TIMx);
146//------------------------------------------------------------------//
147
148
149//------------------------SIMULINK FUNCTIONS------------------------//
150// Симулирование выбранных таймеров
151void Simulate_TIMs(void);
152// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
153void TIM_SIM_DEINIT(void);
154//------------------------------------------------------------------//
155/** TIM_SIMULATOR
156 * @}
157 */
158#endif // _MATLAB_TIM_H_
void Overflow_Check(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Проверка на переполнение и дальнейшая его обработка.
void Write_OC_to_GPIO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Запись каналов таймера в порты GPIO.
void Simulate_TIMs(void)
Симуляция выбранных таймеров.
void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Симуляция таймера на один такт симуляции.
void Write_OC_to_TRGO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Запись каналов таймера в глабальную структуру с TRIGGER OUTPUT.
void TIM_SIM_DEINIT(void)
Деинициализирование выбранных таймеров.
void TIMx_Count(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Симуляция счетчика таймера на один такт симуляции.
void CC_PWM_Ch1_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Выбор режима первого канала и его симуляция.
void Slave_Mode_Check_Source(TIM_TypeDef *TIMx)
Определение источника для запуска таймера в SLAVE MODE.
void Channels_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Симуляция каналов таймера.
void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Выбор режима третьего канала и его симуляция.
void call_IRQHandller(TIM_TypeDef *TIMx)
Вызов прерывания таймера TIMx.
void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Выбор режима четвертого канала и его симуляция.
void CC_PWM_Ch2_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
Выбор режима второго канала и его симуляция.
Заголовочный файл для оболочки МК.
Структура для моделирования каналов таймера
GPIO_TypeDef * OC2_GPIOx
Порт второго канала
unsigned OC4REF
Четвертый канал
uint32_t OC1_PIN_SHIFT
Пин первого канала
GPIO_TypeDef * OC1_GPIOx
Порт первого канала
GPIO_TypeDef * OC3_GPIOx
Порт третьего канала
GPIO_TypeDef * OC4_GPIOx
Порт четвертого канала
unsigned OC2REF
Второй канал
uint32_t OC4_PIN_SHIFT
Пин четвертого канала
unsigned OC1REF
Первый канал
unsigned OC3REF
Третьий канал
uint32_t OC3_PIN_SHIFT
Пин третьего канала
uint32_t OC2_PIN_SHIFT
Пин второго канала
Структура для управления Слейв Таймерами
unsigned TIM1_TRGO
Синган синхронизации таймера 1.
unsigned TIM6_TRGO
Синган синхронизации таймера 6.
unsigned TIM8_TRGO
Синган синхронизации таймера 8
unsigned TIM2_TRGO
Синган синхронизации таймера 2.
unsigned TIM7_TRGO
Синган синхронизации таймера 7.
unsigned TIM5_TRGO
Синган синхронизации таймера 5.
unsigned TIM3_TRGO
Синган синхронизации таймера 3.
unsigned TIM4_TRGO
Синган синхронизации таймера 4.
Структура для моделирования таймера
int RELOAD
Буфер для периода таймера (для реализации функции PRELOAD)
double tx_cnt
Счетчик таймера (double, т.к. кол-во тактов за шаг симуляции может быть дробным)
struct Channels_Sim Channels
Структура для симуляции каналов
double tx_step
Шаг счета за один шаг симуляции (double, т.к. кол-во тактов за шаг симуляции может быть дробным)