Compare commits
	
		
			30 Commits
		
	
	
		
			main
			...
			test_confi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e0ba383b8d | |||
| 2cfd952cbc | |||
| a1a05d823c | |||
| 343d07cbf9 | |||
| f950785327 | |||
| 10e831c4b5 | |||
| 41411cb0d4 | |||
| e7e0884c09 | |||
| 0f3ac734bf | |||
| 5e93fc2099 | |||
| 0a4a87038e | |||
| ead46d7d82 | |||
| a6c5a9edab | |||
| fffd725d91 | |||
| 99ec69324d | |||
| 59b4f9cffc | |||
| 63ce872689 | |||
| e80725d9cf | |||
| 47365da124 | |||
| 25da0591b4 | |||
| 3a14a5c252 | |||
| 70e524f041 | |||
| 082e27dde5 | |||
| dc84b068d6 | |||
| 6392d35129 | |||
| 1c5ce14f0f | |||
| c3d30fa6f1 | |||
| 97368919cb | |||
| 08719ffc05 | |||
| c6269ca448 | 
@ -1,49 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    gpio.h
 | 
			
		||||
  * @brief   This file contains all the function prototypes for
 | 
			
		||||
  *          the gpio.c file
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 */
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __GPIO_H__
 | 
			
		||||
#define __GPIO_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
void MX_GPIO_Init(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Prototypes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Prototypes */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif /*__ GPIO_H__ */
 | 
			
		||||
 | 
			
		||||
@ -1,69 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file           : main.h
 | 
			
		||||
  * @brief          : Header for main.c file.
 | 
			
		||||
  *                   This file contains the common defines of the application.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __MAIN_H
 | 
			
		||||
#define __MAIN_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void Error_Handler(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __MAIN_H */
 | 
			
		||||
@ -1,495 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_conf_template.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   HAL configuration template file.
 | 
			
		||||
  *          This file should be copied to the application folder and renamed
 | 
			
		||||
  *          to stm32f4xx_hal_conf.h.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_CONF_H
 | 
			
		||||
#define __STM32F4xx_HAL_CONF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* ########################## Module Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the list of modules to be used in the HAL driver
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
  /* #define HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CAN_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CAN_LEGACY_MODULE_ENABLED */
 | 
			
		||||
 #define HAL_DAC_MODULE_ENABLED 
 | 
			
		||||
/* #define HAL_DCMI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DMA2D_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ETH_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ETH_LEGACY_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_PCCARD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SDRAM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_HASH_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_LTDC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_MMC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
 #define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
 #define HAL_UART_MODULE_ENABLED 
 | 
			
		||||
 #define HAL_USART_MODULE_ENABLED 
 | 
			
		||||
/* #define HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SMBUS_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_HCD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DSI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CEC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_FMPI2C_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_FMPSMBUS_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SPDIFRX_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DFSDM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_LPTIM_MODULE_ENABLED */
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
#define HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* ########################## HSE/HSI Values adaptation ##################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSE is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSE_VALUE)
 | 
			
		||||
  #define HSE_VALUE    25000000U /*!< Value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define HSE_STARTUP_TIMEOUT    100U   /*!< Time out for HSE start up, in ms */
 | 
			
		||||
#endif /* HSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal High Speed oscillator (HSI) value.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSI is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal Low Speed oscillator (LSI) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSI_VALUE)
 | 
			
		||||
 #define LSI_VALUE  32000U       /*!< LSI Typical Value in Hz*/
 | 
			
		||||
#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz
 | 
			
		||||
                                             The real value may vary depending on the variations
 | 
			
		||||
                                             in voltage and temperature.*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External Low Speed oscillator (LSE) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSE_VALUE)
 | 
			
		||||
 #define LSE_VALUE  32768U    /*!< Value of the External Low Speed oscillator in Hz */
 | 
			
		||||
#endif /* LSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (LSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define LSE_STARTUP_TIMEOUT    5000U   /*!< Time out for LSE start up, in ms */
 | 
			
		||||
#endif /* LSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External clock source for I2S peripheral
 | 
			
		||||
  *        This value is used by the I2S HAL module to compute the I2S clock source
 | 
			
		||||
  *        frequency, this source is inserted directly through I2S_CKIN pad.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (EXTERNAL_CLOCK_VALUE)
 | 
			
		||||
  #define EXTERNAL_CLOCK_VALUE    12288000U /*!< Value of the External audio frequency in Hz*/
 | 
			
		||||
#endif /* EXTERNAL_CLOCK_VALUE */
 | 
			
		||||
 | 
			
		||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
 | 
			
		||||
   ===  you can define the HSE value in your toolchain compiler preprocessor. */
 | 
			
		||||
 | 
			
		||||
/* ########################### System Configuration ######################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the HAL system configuration section
 | 
			
		||||
  */
 | 
			
		||||
#define  VDD_VALUE		      3300U /*!< Value of VDD in mv */
 | 
			
		||||
#define  TICK_INT_PRIORITY            15U   /*!< tick interrupt priority */
 | 
			
		||||
#define  USE_RTOS                     0U
 | 
			
		||||
#define  PREFETCH_ENABLE              1U
 | 
			
		||||
#define  INSTRUCTION_CACHE_ENABLE     1U
 | 
			
		||||
#define  DATA_CACHE_ENABLE            1U
 | 
			
		||||
 | 
			
		||||
#define  USE_HAL_ADC_REGISTER_CALLBACKS         0U /* ADC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CAN_REGISTER_CALLBACKS         0U /* CAN register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CEC_REGISTER_CALLBACKS         0U /* CEC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CRYP_REGISTER_CALLBACKS        0U /* CRYP register callback disabled      */
 | 
			
		||||
#define  USE_HAL_DAC_REGISTER_CALLBACKS         0U /* DAC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_DCMI_REGISTER_CALLBACKS        0U /* DCMI register callback disabled      */
 | 
			
		||||
#define  USE_HAL_DFSDM_REGISTER_CALLBACKS       0U /* DFSDM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_DMA2D_REGISTER_CALLBACKS       0U /* DMA2D register callback disabled     */
 | 
			
		||||
#define  USE_HAL_DSI_REGISTER_CALLBACKS         0U /* DSI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_ETH_REGISTER_CALLBACKS         0U /* ETH register callback disabled       */
 | 
			
		||||
#define  USE_HAL_HASH_REGISTER_CALLBACKS        0U /* HASH register callback disabled      */
 | 
			
		||||
#define  USE_HAL_HCD_REGISTER_CALLBACKS         0U /* HCD register callback disabled       */
 | 
			
		||||
#define  USE_HAL_I2C_REGISTER_CALLBACKS         0U /* I2C register callback disabled       */
 | 
			
		||||
#define  USE_HAL_FMPI2C_REGISTER_CALLBACKS      0U /* FMPI2C register callback disabled    */
 | 
			
		||||
#define  USE_HAL_FMPSMBUS_REGISTER_CALLBACKS    0U /* FMPSMBUS register callback disabled  */
 | 
			
		||||
#define  USE_HAL_I2S_REGISTER_CALLBACKS         0U /* I2S register callback disabled       */
 | 
			
		||||
#define  USE_HAL_IRDA_REGISTER_CALLBACKS        0U /* IRDA register callback disabled      */
 | 
			
		||||
#define  USE_HAL_LPTIM_REGISTER_CALLBACKS       0U /* LPTIM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_LTDC_REGISTER_CALLBACKS        0U /* LTDC register callback disabled      */
 | 
			
		||||
#define  USE_HAL_MMC_REGISTER_CALLBACKS         0U /* MMC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_NAND_REGISTER_CALLBACKS        0U /* NAND register callback disabled      */
 | 
			
		||||
#define  USE_HAL_NOR_REGISTER_CALLBACKS         0U /* NOR register callback disabled       */
 | 
			
		||||
#define  USE_HAL_PCCARD_REGISTER_CALLBACKS      0U /* PCCARD register callback disabled    */
 | 
			
		||||
#define  USE_HAL_PCD_REGISTER_CALLBACKS         0U /* PCD register callback disabled       */
 | 
			
		||||
#define  USE_HAL_QSPI_REGISTER_CALLBACKS        0U /* QSPI register callback disabled      */
 | 
			
		||||
#define  USE_HAL_RNG_REGISTER_CALLBACKS         0U /* RNG register callback disabled       */
 | 
			
		||||
#define  USE_HAL_RTC_REGISTER_CALLBACKS         0U /* RTC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_SAI_REGISTER_CALLBACKS         0U /* SAI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_SD_REGISTER_CALLBACKS          0U /* SD register callback disabled        */
 | 
			
		||||
#define  USE_HAL_SMARTCARD_REGISTER_CALLBACKS   0U /* SMARTCARD register callback disabled */
 | 
			
		||||
#define  USE_HAL_SDRAM_REGISTER_CALLBACKS       0U /* SDRAM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_SRAM_REGISTER_CALLBACKS        0U /* SRAM register callback disabled      */
 | 
			
		||||
#define  USE_HAL_SPDIFRX_REGISTER_CALLBACKS     0U /* SPDIFRX register callback disabled   */
 | 
			
		||||
#define  USE_HAL_SMBUS_REGISTER_CALLBACKS       0U /* SMBUS register callback disabled     */
 | 
			
		||||
#define  USE_HAL_SPI_REGISTER_CALLBACKS         0U /* SPI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_TIM_REGISTER_CALLBACKS         0U /* TIM register callback disabled       */
 | 
			
		||||
#define  USE_HAL_UART_REGISTER_CALLBACKS        0U /* UART register callback disabled      */
 | 
			
		||||
#define  USE_HAL_USART_REGISTER_CALLBACKS       0U /* USART register callback disabled     */
 | 
			
		||||
#define  USE_HAL_WWDG_REGISTER_CALLBACKS        0U /* WWDG register callback disabled      */
 | 
			
		||||
 | 
			
		||||
/* ########################## Assert Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Uncomment the line below to expanse the "assert_param" macro in the
 | 
			
		||||
  *        HAL drivers code
 | 
			
		||||
  */
 | 
			
		||||
/* #define USE_FULL_ASSERT    1U */
 | 
			
		||||
 | 
			
		||||
/* ################## Ethernet peripheral configuration ##################### */
 | 
			
		||||
 | 
			
		||||
/* Section 1 : Ethernet peripheral configuration */
 | 
			
		||||
 | 
			
		||||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
 | 
			
		||||
#define MAC_ADDR0   2U
 | 
			
		||||
#define MAC_ADDR1   0U
 | 
			
		||||
#define MAC_ADDR2   0U
 | 
			
		||||
#define MAC_ADDR3   0U
 | 
			
		||||
#define MAC_ADDR4   0U
 | 
			
		||||
#define MAC_ADDR5   0U
 | 
			
		||||
 | 
			
		||||
/* Definition of the Ethernet driver buffers size and count */
 | 
			
		||||
#define ETH_RX_BUF_SIZE                 /* buffer size for receive               */
 | 
			
		||||
#define ETH_TX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for transmit              */
 | 
			
		||||
#define ETH_RXBUFNB                    4U       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */
 | 
			
		||||
#define ETH_TXBUFNB                    4U       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */
 | 
			
		||||
 | 
			
		||||
/* Section 2: PHY configuration section */
 | 
			
		||||
 | 
			
		||||
/* DP83848_PHY_ADDRESS Address*/
 | 
			
		||||
#define DP83848_PHY_ADDRESS           0x01U
 | 
			
		||||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
 | 
			
		||||
#define PHY_RESET_DELAY                 0x000000FFU
 | 
			
		||||
/* PHY Configuration delay */
 | 
			
		||||
#define PHY_CONFIG_DELAY                0x00000FFFU
 | 
			
		||||
 | 
			
		||||
#define PHY_READ_TO                     0x0000FFFFU
 | 
			
		||||
#define PHY_WRITE_TO                    0x0000FFFFU
 | 
			
		||||
 | 
			
		||||
/* Section 3: Common PHY Registers */
 | 
			
		||||
 | 
			
		||||
#define PHY_BCR                         ((uint16_t)0x0000U)    /*!< Transceiver Basic Control Register   */
 | 
			
		||||
#define PHY_BSR                         ((uint16_t)0x0001U)    /*!< Transceiver Basic Status Register    */
 | 
			
		||||
 | 
			
		||||
#define PHY_RESET                       ((uint16_t)0x8000U)  /*!< PHY Reset */
 | 
			
		||||
#define PHY_LOOPBACK                    ((uint16_t)0x4000U)  /*!< Select loop-back mode */
 | 
			
		||||
#define PHY_FULLDUPLEX_100M             ((uint16_t)0x2100U)  /*!< Set the full-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_HALFDUPLEX_100M             ((uint16_t)0x2000U)  /*!< Set the half-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_FULLDUPLEX_10M              ((uint16_t)0x0100U)  /*!< Set the full-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_HALFDUPLEX_10M              ((uint16_t)0x0000U)  /*!< Set the half-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_AUTONEGOTIATION             ((uint16_t)0x1000U)  /*!< Enable auto-negotiation function     */
 | 
			
		||||
#define PHY_RESTART_AUTONEGOTIATION     ((uint16_t)0x0200U)  /*!< Restart auto-negotiation function    */
 | 
			
		||||
#define PHY_POWERDOWN                   ((uint16_t)0x0800U)  /*!< Select the power down mode           */
 | 
			
		||||
#define PHY_ISOLATE                     ((uint16_t)0x0400U)  /*!< Isolate PHY from MII                 */
 | 
			
		||||
 | 
			
		||||
#define PHY_AUTONEGO_COMPLETE           ((uint16_t)0x0020U)  /*!< Auto-Negotiation process completed   */
 | 
			
		||||
#define PHY_LINKED_STATUS               ((uint16_t)0x0004U)  /*!< Valid link established               */
 | 
			
		||||
#define PHY_JABBER_DETECTION            ((uint16_t)0x0002U)  /*!< Jabber condition detected            */
 | 
			
		||||
 | 
			
		||||
/* Section 4: Extended PHY Registers */
 | 
			
		||||
#define PHY_SR                          ((uint16_t)0x10U)    /*!< PHY status register Offset                      */
 | 
			
		||||
 | 
			
		||||
#define PHY_SPEED_STATUS                ((uint16_t)0x0002U)  /*!< PHY Speed mask                                  */
 | 
			
		||||
#define PHY_DUPLEX_STATUS               ((uint16_t)0x0004U)  /*!< PHY Duplex mask                                 */
 | 
			
		||||
 | 
			
		||||
/* ################## SPI peripheral configuration ########################## */
 | 
			
		||||
 | 
			
		||||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
 | 
			
		||||
* Activated: CRC code is present inside driver
 | 
			
		||||
* Deactivated: CRC code cleaned from driver
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define USE_SPI_CRC                     0U
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Include module's header file
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RCC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_rcc.h"
 | 
			
		||||
#endif /* HAL_RCC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_gpio.h"
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_exti.h"
 | 
			
		||||
#endif /* HAL_EXTI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma.h"
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cortex.h"
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_adc.h"
 | 
			
		||||
#endif /* HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_can.h"
 | 
			
		||||
#endif /* HAL_CAN_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_can_legacy.h"
 | 
			
		||||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_crc.h"
 | 
			
		||||
#endif /* HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cryp.h"
 | 
			
		||||
#endif /* HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma2d.h"
 | 
			
		||||
#endif /* HAL_DMA2D_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dac.h"
 | 
			
		||||
#endif /* HAL_DAC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dcmi.h"
 | 
			
		||||
#endif /* HAL_DCMI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_eth.h"
 | 
			
		||||
#endif /* HAL_ETH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ETH_LEGACY_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_eth_legacy.h"
 | 
			
		||||
#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_flash.h"
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sram.h"
 | 
			
		||||
#endif /* HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nor.h"
 | 
			
		||||
#endif /* HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nand.h"
 | 
			
		||||
#endif /* HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_pccard.h"
 | 
			
		||||
#endif /* HAL_PCCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sdram.h"
 | 
			
		||||
#endif /* HAL_SDRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hash.h"
 | 
			
		||||
#endif /* HAL_HASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2c.h"
 | 
			
		||||
#endif /* HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_smbus.h"
 | 
			
		||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2s.h"
 | 
			
		||||
#endif /* HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_iwdg.h"
 | 
			
		||||
#endif /* HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_ltdc.h"
 | 
			
		||||
#endif /* HAL_LTDC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pwr.h"
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rng.h"
 | 
			
		||||
#endif /* HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RTC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rtc.h"
 | 
			
		||||
#endif /* HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sai.h"
 | 
			
		||||
#endif /* HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sd.h"
 | 
			
		||||
#endif /* HAL_SD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_spi.h"
 | 
			
		||||
#endif /* HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_tim.h"
 | 
			
		||||
#endif /* HAL_TIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_uart.h"
 | 
			
		||||
#endif /* HAL_UART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_USART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_usart.h"
 | 
			
		||||
#endif /* HAL_USART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_irda.h"
 | 
			
		||||
#endif /* HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_smartcard.h"
 | 
			
		||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_wwdg.h"
 | 
			
		||||
#endif /* HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pcd.h"
 | 
			
		||||
#endif /* HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hcd.h"
 | 
			
		||||
#endif /* HAL_HCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DSI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_dsi.h"
 | 
			
		||||
#endif /* HAL_DSI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_qspi.h"
 | 
			
		||||
#endif /* HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CEC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_cec.h"
 | 
			
		||||
#endif /* HAL_CEC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FMPI2C_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_fmpi2c.h"
 | 
			
		||||
#endif /* HAL_FMPI2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FMPSMBUS_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_fmpsmbus.h"
 | 
			
		||||
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPDIFRX_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_spdifrx.h"
 | 
			
		||||
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DFSDM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_dfsdm.h"
 | 
			
		||||
#endif /* HAL_DFSDM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_lptim.h"
 | 
			
		||||
#endif /* HAL_LPTIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_MMC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_mmc.h"
 | 
			
		||||
#endif /* HAL_MMC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
#ifdef  USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The assert_param macro is used for function's parameters check.
 | 
			
		||||
  * @param  expr If expr is false, it calls assert_failed function
 | 
			
		||||
  *         which reports the name of the source file and the source
 | 
			
		||||
  *         line number of the call that failed.
 | 
			
		||||
  *         If expr is true, it returns no value.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
 | 
			
		||||
/* Exported functions ------------------------------------------------------- */
 | 
			
		||||
  void assert_failed(uint8_t* file, uint32_t line);
 | 
			
		||||
#else
 | 
			
		||||
  #define assert_param(expr) ((void)0U)
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_CONF_H */
 | 
			
		||||
@ -1,66 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_it.h
 | 
			
		||||
  * @brief   This file contains the headers of the interrupt handlers.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_IT_H
 | 
			
		||||
#define __STM32F4xx_IT_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void NMI_Handler(void);
 | 
			
		||||
void HardFault_Handler(void);
 | 
			
		||||
void MemManage_Handler(void);
 | 
			
		||||
void BusFault_Handler(void);
 | 
			
		||||
void UsageFault_Handler(void);
 | 
			
		||||
void SVC_Handler(void);
 | 
			
		||||
void DebugMon_Handler(void);
 | 
			
		||||
void PendSV_Handler(void);
 | 
			
		||||
void SysTick_Handler(void);
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_IT_H */
 | 
			
		||||
@ -1,90 +0,0 @@
 | 
			
		||||
// TRACE SETTINGS
 | 
			
		||||
 | 
			
		||||
#define TRACE_MB_UART_ENABLE									14
 | 
			
		||||
//#define TRACE_MB_TIM_ENABLE										15
 | 
			
		||||
#define TRACE_TIM_PWM_ENABLE									15
 | 
			
		||||
//#define TRACE_PWM_REINIT_ENABLE								15
 | 
			
		||||
//#define TRACE_TIM_DEAD_TIME_ENABLE						14
 | 
			
		||||
//#define TRACE_TIM_CTRL_ENABLE									15
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define TRACE_GPIO_ENTER(_gpio_,_pin_)				(_gpio_)->BSRR = (1<<(_pin_))
 | 
			
		||||
#define TRACE_GPIO_EXIT(_gpio_,_pin_)					(_gpio_)->BSRR = (1<<((_pin_)+16))
 | 
			
		||||
 | 
			
		||||
#ifdef TRACE_MB_UART_ENABLE
 | 
			
		||||
	#define Trace_MB_UART_Enter()			TRACE_GPIO_ENTER(GPIOD, TRACE_MB_UART_ENABLE)
 | 
			
		||||
	#define Trace_MB_UART_Exit()			TRACE_GPIO_EXIT(GPIOD, TRACE_MB_UART_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef TRACE_MB_TIM_ENABLE
 | 
			
		||||
	#define Trace_MB_TIM_Enter()			TRACE_GPIO_ENTER(GPIOD, TRACE_MB_TIM_ENABLE)
 | 
			
		||||
	#define Trace_MB_TIM_Exit()				TRACE_GPIO_EXIT(GPIOD, TRACE_MB_TIM_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef TRACE_TIM_PWM_ENABLE
 | 
			
		||||
	#define Trace_PWM_TIM_Enter()			TRACE_GPIO_ENTER(GPIOD, TRACE_TIM_PWM_ENABLE)
 | 
			
		||||
	#define Trace_PWM_TIM_Exit()			TRACE_GPIO_EXIT(GPIOD, TRACE_TIM_PWM_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef TRACE_PWM_REINIT_ENABLE
 | 
			
		||||
	#define Trace_PWM_reInit_Enter()	TRACE_GPIO_ENTER(GPIOD, TRACE_PWM_REINIT_ENABLE)
 | 
			
		||||
	#define Trace_PWM_reInit_Exit()		TRACE_GPIO_EXIT(GPIOD, TRACE_PWM_REINIT_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef TRACE_TIM_DEAD_TIME_ENABLE
 | 
			
		||||
	#define Trace_PWM_DeadTime_Enter()	TRACE_GPIO_ENTER(GPIOD, TRACE_TIM_DEAD_TIME_ENABLE)
 | 
			
		||||
	#define Trace_PWM_DeadTime_Exit()		TRACE_GPIO_EXIT(GPIOD, TRACE_TIM_DEAD_TIME_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TRACE_TIM_CTRL_ENABLE
 | 
			
		||||
	#define Trace_CTRL_TIM_Enter()		TRACE_GPIO_ENTER(GPIOD, TRACE_TIM_CTRL_ENABLE)
 | 
			
		||||
	#define Trace_CTRL_TIM_Exit()			TRACE_GPIO_EXIT(GPIOD, TRACE_TIM_CTRL_ENABLE)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_MB_UART_Enter
 | 
			
		||||
	#define Trace_MB_UART_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_MB_UART_Exit
 | 
			
		||||
	#define Trace_MB_UART_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_MB_TIM_Enter
 | 
			
		||||
	#define Trace_MB_TIM_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_MB_TIM_Exit
 | 
			
		||||
	#define Trace_MB_TIM_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_TIM_Enter
 | 
			
		||||
	#define Trace_PWM_TIM_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_TIM_Exit
 | 
			
		||||
	#define Trace_PWM_TIM_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_CTRL_TIM_Enter
 | 
			
		||||
	#define Trace_CTRL_TIM_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_CTRL_TIM_Exit
 | 
			
		||||
	#define Trace_CTRL_TIM_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_reInit_Enter
 | 
			
		||||
	#define Trace_PWM_reInit_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_reInit_Exit
 | 
			
		||||
	#define Trace_PWM_reInit_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_DeadTime_Enter
 | 
			
		||||
	#define Trace_PWM_DeadTime_Enter()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef Trace_PWM_DeadTime_Exit
 | 
			
		||||
	#define Trace_PWM_DeadTime_Exit()
 | 
			
		||||
#endif
 | 
			
		||||
@ -1,61 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    gpio.c
 | 
			
		||||
  * @brief   This file provides code for the configuration
 | 
			
		||||
  *          of all used GPIO pins.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 "gpio.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------*/
 | 
			
		||||
/* Configure GPIO                                                             */
 | 
			
		||||
/*----------------------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
 | 
			
		||||
/** Configure pins as
 | 
			
		||||
        * Analog
 | 
			
		||||
        * Input
 | 
			
		||||
        * Output
 | 
			
		||||
        * EVENT_OUT
 | 
			
		||||
        * EXTI
 | 
			
		||||
*/
 | 
			
		||||
void MX_GPIO_Init(void)
 | 
			
		||||
{
 | 
			
		||||
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
 | 
			
		||||
  /* GPIO Ports Clock Enable */
 | 
			
		||||
  __HAL_RCC_GPIOH_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_GPIOD_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
  /*Configure GPIO pin : PC13 */
 | 
			
		||||
  GPIO_InitStruct.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13 | GPIO_PIN_12;
 | 
			
		||||
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 | 
			
		||||
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 2 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 2 */
 | 
			
		||||
@ -1,256 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file           : main.c
 | 
			
		||||
  * @brief          : Main program body
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 "gpio.h"
 | 
			
		||||
#include "math.h"
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
#include "pwm.h"
 | 
			
		||||
#include "rs_message.h"
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PTD */
 | 
			
		||||
UART_SettingsTypeDef modbus1_suart;
 | 
			
		||||
TIM_SettingsTypeDef modbus1_stim;
 | 
			
		||||
RS_HandleTypeDef hmodbus1;
 | 
			
		||||
RS_MsgTypeDef MODBUS_MSG;
 | 
			
		||||
/* 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 */
 | 
			
		||||
//MODBUS_HandleTypeDef hmodbus1;
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialize Peripheral.
 | 
			
		||||
	* @note 	Данная функция необходима, если запрос на реинициализацию приходит от другой периферии.
 | 
			
		||||
	*					И чтобы не реинициализировать периферию в прерывании, она реинится в main while(1).
 | 
			
		||||
	*/
 | 
			
		||||
void Periph_reInit(void)
 | 
			
		||||
{		
 | 
			
		||||
	// wait for reinit modbus coil (requested by modbus interrupt)
 | 
			
		||||
	if(MB_Read_Coil_Global(COIL_UART_CTRL_GLOBAL, NULL) && hmodbus1.fTX_Done)
 | 
			
		||||
	{
 | 
			
		||||
		MB_Write_Coil_Global(COIL_UART_CTRL_GLOBAL, RESET_COIL);
 | 
			
		||||
		modbus1_suart.huart.Init.BaudRate = uart_ctrl[R_UART_CTRL_SPEED];
 | 
			
		||||
		RS_ReInit_UART(&hmodbus1 ,&modbus1_suart);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// fait for reinit log timer (requested by modbus interrupt)
 | 
			
		||||
	if((TIM_CTRL.sTimFreqHz != log_ctrl[R_LOG_CTRL_LOG_HZ]) && (log_ctrl[R_LOG_CTRL_LOG_HZ] != 0))
 | 
			
		||||
	{
 | 
			
		||||
		TIM_CTRL.sTimFreqHz = log_ctrl[R_LOG_CTRL_LOG_HZ];
 | 
			
		||||
		// clear logs params
 | 
			
		||||
		Set_Log_Params();	
 | 
			
		||||
		TIM_Base_MspDeInit(&TIM_CTRL.htim);
 | 
			
		||||
		Control_Timer_ReInit(&TIM_CTRL);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// READ	TIM_PWM_HZ
 | 
			
		||||
	if(hpwm1.stim.sTimFreqHz != pwm_ctrl[R_PWM_CTRL_PWM_HZ])
 | 
			
		||||
	{
 | 
			
		||||
		hpwm1.stim.sTimFreqHz = pwm_ctrl[R_PWM_CTRL_PWM_HZ];
 | 
			
		||||
		pwm_ctrl[R_PWM_CTRL_PWM_HZ] = hpwm1.stim.sTimFreqHz;
 | 
			
		||||
		// update logs params
 | 
			
		||||
		Set_Log_Params();	
 | 
			
		||||
		// reinit tim
 | 
			
		||||
		PWM_Sine_ReInit(&hpwm1);	
 | 
			
		||||
		PWM_SlavePhase_reInit(&hpwm2);
 | 
			
		||||
		PWM_SlavePhase_reInit(&hpwm3);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The application entry point.
 | 
			
		||||
  * @retval int
 | 
			
		||||
  */
 | 
			
		||||
int main(void)
 | 
			
		||||
 {
 | 
			
		||||
  /* USER CODE BEGIN 1 */
 | 
			
		||||
	__HAL_DBGMCU_FREEZE_TIM1();
 | 
			
		||||
	__HAL_DBGMCU_FREEZE_TIM3();
 | 
			
		||||
	__HAL_DBGMCU_FREEZE_TIM4();
 | 
			
		||||
	__HAL_DBGMCU_FREEZE_TIM12();
 | 
			
		||||
	// 0xE0042008
 | 
			
		||||
  /* 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();
 | 
			
		||||
  /* USER CODE BEGIN 2 */
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
  /* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
  /* Infinite loop */
 | 
			
		||||
  /* USER CODE BEGIN WHILE */		
 | 
			
		||||
	
 | 
			
		||||
	// init params for pwm and log
 | 
			
		||||
	pwm_ctrl[R_PWM_CTRL_PWM_VALUE] = 2560;
 | 
			
		||||
	pwm_ctrl[R_PWM_CTRL_PWM_HZ] = HZ_TIMER_PWM;
 | 
			
		||||
	pwm_ctrl[R_PWM_CTRL_MIN_PULSE_DUR] = 30;
 | 
			
		||||
	pwm_ctrl[R_PWM_CTRL_DEAD_TIME] = 1;
 | 
			
		||||
	pwm_ctrl[R_PWM_CTRL_SIN_TABLE_SIZE] = SIN_TABLE_SIZE_MAX;
 | 
			
		||||
	//MB_Write_Coil_Global(COIL_PWM_DC_MODE_GLOBAL, SET_COIL);
 | 
			
		||||
	MB_Write_Coil_Global(COIL_PWM_CH_MODE_GLOBAL, SET_COIL);
 | 
			
		||||
	MB_Write_Coil_Global(COIL_PWM_PHASE_MODE_GLOBAL, SET_COIL);
 | 
			
		||||
	
 | 
			
		||||
	log_ctrl[R_LOG_CTRL_LOG_HZ] = HZ_TIMER_CTRL;
 | 
			
		||||
	log_ctrl[R_LOG_CTRL_LOG_SIZE] = 50;
 | 
			
		||||
	log_ctrl[R_LOG_CTRL_LOG_PWM_NUMB] = 3;
 | 
			
		||||
	
 | 
			
		||||
	WriteSettingsToMem();
 | 
			
		||||
	MODBUS_FirstInit();
 | 
			
		||||
	Control_Timer_FirstInit();
 | 
			
		||||
	PWM_Sine_FirstInit();
 | 
			
		||||
	
 | 
			
		||||
	//---------------TEST MODBUS------------------
 | 
			
		||||
//	MODBUS_Transmit_IT(&hmodbus1, &MODBUS_MSG);		
 | 
			
		||||
	//RS_Receive_IT(&hmodbus1, &MODBUS_MSG);
 | 
			
		||||
 | 
			
		||||
  while (1)
 | 
			
		||||
  {		
 | 
			
		||||
    /* USER CODE END WHILE */		
 | 
			
		||||
		Periph_reInit();
 | 
			
		||||
    /* USER CODE BEGIN 3 */
 | 
			
		||||
//		HAL_Delay(200);
 | 
			
		||||
//		MB_Toogle_Coil_Local(&GPIOD->ODR, COIL_GPIOD_LED3);
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END 3 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief System Clock Configuration
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemClock_Config(void)
 | 
			
		||||
{
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 | 
			
		||||
 | 
			
		||||
  /** Configure the main internal regulator output voltage
 | 
			
		||||
  */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
 | 
			
		||||
  /** Initializes the RCC Oscillators according to the specified parameters
 | 
			
		||||
  * in the RCC_OscInitTypeDef structure.
 | 
			
		||||
  */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 | 
			
		||||
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 | 
			
		||||
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM = 8;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN = 72;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ = 4;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Initializes the CPU, AHB and APB buses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 | 
			
		||||
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 | 
			
		||||
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != 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 */
 | 
			
		||||
@ -1,81 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file         stm32f4xx_hal_msp.c
 | 
			
		||||
  * @brief        This file provides code for the MSP Initialization
 | 
			
		||||
  *               and de-Initialization codes.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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"
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Define */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Define */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Macro */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Macro */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* External functions --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
/**
 | 
			
		||||
  * Initializes the Global MSP.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MspInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_SYSCFG_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* System interrupt init*/
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN MspInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
@ -1,205 +0,0 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_it.c
 | 
			
		||||
  * @brief   Interrupt Service Routines.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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 "stm32f4xx_it.h"
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* 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 -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/* External variables --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EV */
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*           Cortex-M4 Processor Interruption and Exception Handlers          */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Non maskable interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void NMI_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END NonMaskableInt_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END NonMaskableInt_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Hard fault interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void HardFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN HardFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END HardFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
 | 
			
		||||
		return;
 | 
			
		||||
    /* USER CODE END W1_HardFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Memory management fault.
 | 
			
		||||
  */
 | 
			
		||||
void MemManage_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN MemoryManagement_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MemoryManagement_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Pre-fetch fault, memory access fault.
 | 
			
		||||
  */
 | 
			
		||||
void BusFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN BusFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END BusFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_BusFault_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_BusFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Undefined instruction or illegal state.
 | 
			
		||||
  */
 | 
			
		||||
void UsageFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN UsageFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END UsageFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_UsageFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles System service call via SWI instruction.
 | 
			
		||||
  */
 | 
			
		||||
void SVC_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN SVCall_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SVCall_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN SVCall_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SVCall_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Debug monitor.
 | 
			
		||||
  */
 | 
			
		||||
void DebugMon_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END DebugMonitor_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END DebugMonitor_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Pendable request for system service.
 | 
			
		||||
  */
 | 
			
		||||
void PendSV_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN PendSV_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END PendSV_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN PendSV_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END PendSV_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles System tick timer.
 | 
			
		||||
  */
 | 
			
		||||
void SysTick_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN SysTick_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SysTick_IRQn 0 */
 | 
			
		||||
  HAL_IncTick();
 | 
			
		||||
  /* USER CODE BEGIN SysTick_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SysTick_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/* STM32F4xx Peripheral Interrupt Handlers                                    */
 | 
			
		||||
/* Add here the Interrupt Handlers for the used peripherals.                  */
 | 
			
		||||
/* For the available peripheral interrupt handler names,                      */
 | 
			
		||||
/* please refer to the startup file (startup_stm32f4xx.s).                    */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
@ -1,747 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32f4xx.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File.
 | 
			
		||||
  *
 | 
			
		||||
  *   This file provides two functions and one global variable to be called from 
 | 
			
		||||
  *   user application:
 | 
			
		||||
  *      - SystemInit(): This function is called at startup just after reset and 
 | 
			
		||||
  *                      before branch to main program. This call is made inside
 | 
			
		||||
  *                      the "startup_stm32f4xx.s" file.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 | 
			
		||||
  *                                  by the user application to setup the SysTick 
 | 
			
		||||
  *                                  timer or configure other parameters.
 | 
			
		||||
  *                                     
 | 
			
		||||
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 | 
			
		||||
  *                                 be called whenever the core clock is changed
 | 
			
		||||
  *                                 during program execution.
 | 
			
		||||
  *
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_VALUE) 
 | 
			
		||||
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Defines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/************************* Miscellaneous Configuration ************************/
 | 
			
		||||
/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory  */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
 | 
			
		||||
 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
/* #define DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\
 | 
			
		||||
          STM32F412Zx || STM32F412Vx */
 | 
			
		||||
 
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/* #define DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\
 | 
			
		||||
          STM32F479xx */
 | 
			
		||||
 | 
			
		||||
/* Note: Following vector table addresses must be defined in line with linker
 | 
			
		||||
         configuration. */
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate the vector table
 | 
			
		||||
     anywhere in Flash or Sram, else the vector table is kept at the automatic
 | 
			
		||||
     remap of boot address selected */
 | 
			
		||||
/* #define USER_VECT_TAB_ADDRESS */
 | 
			
		||||
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate your vector Table
 | 
			
		||||
     in Sram else user remap will be done in Flash. */
 | 
			
		||||
/* #define VECT_TAB_SRAM */
 | 
			
		||||
#if defined(VECT_TAB_SRAM)
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   SRAM_BASE       /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#else
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#endif /* VECT_TAB_SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t SystemCoreClock = 16000000;
 | 
			
		||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 | 
			
		||||
const uint8_t APBPrescTable[8]  = {0, 0, 0, 0, 1, 2, 3, 4};
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  static void SystemInit_ExtMemCtl(void); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the microcontroller system
 | 
			
		||||
  *         Initialize the FPU setting, vector table location and External memory 
 | 
			
		||||
  *         configuration.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* FPU settings ------------------------------------------------------------*/
 | 
			
		||||
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
 | 
			
		||||
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  SystemInit_ExtMemCtl(); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
  /* Configure the Vector Table location -------------------------------------*/
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
   * @brief  Update SystemCoreClock variable according to Clock Register Values.
 | 
			
		||||
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 | 
			
		||||
  *         be used by the user application to setup the SysTick timer or configure
 | 
			
		||||
  *         other parameters.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   Each time the core clock (HCLK) changes, this function must be called
 | 
			
		||||
  *         to update SystemCoreClock variable value. Otherwise, any configuration
 | 
			
		||||
  *         based on this variable will be incorrect.         
 | 
			
		||||
  *     
 | 
			
		||||
  * @note   - The system frequency computed by this function is not the real 
 | 
			
		||||
  *           frequency in the chip. It is calculated based on the predefined 
 | 
			
		||||
  *           constant and the selected clock source:
 | 
			
		||||
  *             
 | 
			
		||||
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
 | 
			
		||||
  *                                              
 | 
			
		||||
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
 | 
			
		||||
  *                          
 | 
			
		||||
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) 
 | 
			
		||||
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 | 
			
		||||
  *         
 | 
			
		||||
  *         (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value
 | 
			
		||||
  *             16 MHz) but the real value may vary depending on the variations
 | 
			
		||||
  *             in voltage and temperature.   
 | 
			
		||||
  *    
 | 
			
		||||
  *         (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value
 | 
			
		||||
  *              depends on the application requirements), user has to ensure that HSE_VALUE
 | 
			
		||||
  *              is same as the real frequency of the crystal used. Otherwise, this function
 | 
			
		||||
  *              may have wrong result.
 | 
			
		||||
  *                
 | 
			
		||||
  *         - The result of this function could be not correct when using fractional
 | 
			
		||||
  *           value for HSE crystal.
 | 
			
		||||
  *     
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemCoreClockUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
 | 
			
		||||
  
 | 
			
		||||
  /* Get SYSCLK source -------------------------------------------------------*/
 | 
			
		||||
  tmp = RCC->CFGR & RCC_CFGR_SWS;
 | 
			
		||||
 | 
			
		||||
  switch (tmp)
 | 
			
		||||
  {
 | 
			
		||||
    case 0x00:  /* HSI used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x04:  /* HSE used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSE_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x08:  /* PLL used as system clock source */
 | 
			
		||||
 | 
			
		||||
      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
 | 
			
		||||
         SYSCLK = PLL_VCO / PLL_P
 | 
			
		||||
         */    
 | 
			
		||||
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
 | 
			
		||||
      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
 | 
			
		||||
      
 | 
			
		||||
      if (pllsource != 0)
 | 
			
		||||
      {
 | 
			
		||||
        /* HSE used as PLL clock source */
 | 
			
		||||
        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* HSI used as PLL clock source */
 | 
			
		||||
        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
 | 
			
		||||
      SystemCoreClock = pllvco/pllp;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  /* Compute HCLK frequency --------------------------------------------------*/
 | 
			
		||||
  /* Get HCLK prescaler */
 | 
			
		||||
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 | 
			
		||||
  /* HCLK frequency */
 | 
			
		||||
  SystemCoreClock >>= tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in startup_stm32f4xx.s before jump to main.
 | 
			
		||||
  *         This function configures the external memories (SRAM/SDRAM)
 | 
			
		||||
  *         This SRAM/SDRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t tmp = 0x00;
 | 
			
		||||
 | 
			
		||||
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
 | 
			
		||||
  register __IO uint32_t index;
 | 
			
		||||
 | 
			
		||||
  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x000001F8;
 | 
			
		||||
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CCC0CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A8A;
 | 
			
		||||
  /* Configure PDx pins speed to 100 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0FCF;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00CC0CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA828A;
 | 
			
		||||
  /* Configure PEx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC3CF;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PHx pins to FMC Alternate function */
 | 
			
		||||
  GPIOH->AFR[0]  = 0x00C0CC00;
 | 
			
		||||
  GPIOH->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PHx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOH->MODER   = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOH->OSPEEDR = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins Output type to push-pull */  
 | 
			
		||||
  GPIOH->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PHx pins */ 
 | 
			
		||||
  GPIOH->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PIx pins to FMC Alternate function */
 | 
			
		||||
  GPIOI->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOI->AFR[1]  = 0x00000CC0;
 | 
			
		||||
  /* Configure PIx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOI->MODER   = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOI->OSPEEDR = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins Output type to push-pull */  
 | 
			
		||||
  GPIOI->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PIx pins */ 
 | 
			
		||||
  GPIOI->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC Configuration -------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR |= 0x00000001;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x000019E4;
 | 
			
		||||
  FMC_Bank5_6->SDTR[0] = 0x01115351;      
 | 
			
		||||
  
 | 
			
		||||
  /* SDRAM initialization sequence */
 | 
			
		||||
  /* Clock enable command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000011; 
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Delay */
 | 
			
		||||
  for (index = 0; index<1000; index++);
 | 
			
		||||
  
 | 
			
		||||
  /* PALL command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000012;           
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Auto refresh command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000073;
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* MRD register program */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00046014;
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Set refresh count */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDRTR;
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
 | 
			
		||||
  
 | 
			
		||||
  /* Disable write protection */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDCR[0]; 
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
#if defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001091;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00110212;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
  (void)(tmp); 
 | 
			
		||||
}
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in startup_stm32f4xx.s before jump to main.
 | 
			
		||||
  *         This function configures the external memories (SRAM/SDRAM)
 | 
			
		||||
  *         This SRAM/SDRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t tmp = 0x00;
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
#if defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
 | 
			
		||||
  register __IO uint32_t index;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface
 | 
			
		||||
      clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x0000007D;
 | 
			
		||||
#else
 | 
			
		||||
  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface 
 | 
			
		||||
      clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x000001F8;
 | 
			
		||||
#endif /* STM32F446xx */  
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
 | 
			
		||||
  
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  /* Connect PAx pins to FMC Alternate function */
 | 
			
		||||
  GPIOA->AFR[0]  |= 0xC0000000;
 | 
			
		||||
  GPIOA->AFR[1]  |= 0x00000000;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */
 | 
			
		||||
  GPIOA->MODER   |= 0x00008000;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */
 | 
			
		||||
  GPIOA->OSPEEDR |= 0x00008000;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */
 | 
			
		||||
  GPIOA->OTYPER  |= 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */
 | 
			
		||||
  GPIOA->PUPDR   |= 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PCx pins to FMC Alternate function */
 | 
			
		||||
  GPIOC->AFR[0]  |= 0x00CC0000;
 | 
			
		||||
  GPIOC->AFR[1]  |= 0x00000000;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */
 | 
			
		||||
  GPIOC->MODER   |= 0x00000A00;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */
 | 
			
		||||
  GPIOC->OSPEEDR |= 0x00000A00;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */
 | 
			
		||||
  GPIOC->OTYPER  |= 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */
 | 
			
		||||
  GPIOC->PUPDR   |= 0x00000000;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x000000CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCC000CCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00000CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx)  
 | 
			
		||||
  /* Connect PHx pins to FMC Alternate function */
 | 
			
		||||
  GPIOH->AFR[0]  = 0x00C0CC00;
 | 
			
		||||
  GPIOH->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PHx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOH->MODER   = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOH->OSPEEDR = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins Output type to push-pull */  
 | 
			
		||||
  GPIOH->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PHx pins */ 
 | 
			
		||||
  GPIOH->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PIx pins to FMC Alternate function */
 | 
			
		||||
  GPIOI->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOI->AFR[1]  = 0x00000CC0;
 | 
			
		||||
  /* Configure PIx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOI->MODER   = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOI->OSPEEDR = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins Output type to push-pull */  
 | 
			
		||||
  GPIOI->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PIx pins */ 
 | 
			
		||||
  GPIOI->PUPDR   = 0x00000000;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC Configuration -------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR |= 0x00000001;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
 | 
			
		||||
  /* Configure and enable SDRAM bank1 */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x00001954;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x000019E4;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  FMC_Bank5_6->SDTR[0] = 0x01115351;      
 | 
			
		||||
  
 | 
			
		||||
  /* SDRAM initialization sequence */
 | 
			
		||||
  /* Clock enable command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000011; 
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Delay */
 | 
			
		||||
  for (index = 0; index<1000; index++);
 | 
			
		||||
  
 | 
			
		||||
  /* PALL command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000012;           
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Auto refresh command */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x000000F3;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000073;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* MRD register program */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00044014;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00046014;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Set refresh count */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDRTR;
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1));
 | 
			
		||||
#else    
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  
 | 
			
		||||
  /* Disable write protection */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDCR[0]; 
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
 | 
			
		||||
#endif /* DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
 | 
			
		||||
 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
 | 
			
		||||
#if defined(DATA_IN_ExtSRAM)
 | 
			
		||||
/*-- GPIOs Configuration -----------------------------------------------------*/
 | 
			
		||||
   /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
 | 
			
		||||
  RCC->AHB1ENR   |= 0x00000078;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CCC0CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A8A;
 | 
			
		||||
  /* Configure PDx pins speed to 100 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0FCF;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00CC0CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA828A;
 | 
			
		||||
  /* Configure PEx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC3CF;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCC0000;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA000AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xFF000FFF;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0x000000C0;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0x00085AAA;
 | 
			
		||||
  /* Configure PGx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0x000CAFFF;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC/FSMC Configuration --------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC/FSMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR         |= 0x00000001;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
#if defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001091;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00110212;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F469xx || STM32F479xx */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\
 | 
			
		||||
   || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FSMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FSMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */
 | 
			
		||||
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\
 | 
			
		||||
          STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx  */ 
 | 
			
		||||
  (void)(tmp); 
 | 
			
		||||
}
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
/**********************************TIM**************************************
 | 
			
		||||
Данный файл содержит базовые функции для инициализации портов.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#include "gpio_general.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//------------------------GPIO INIT FUNCTIONS------------------------
 | 
			
		||||
 | 
			
		||||
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{	
 | 
			
		||||
	HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
	// choose port for enable clock
 | 
			
		||||
	if (GPIOx==GPIOA)
 | 
			
		||||
		__HAL_RCC_GPIOA_CLK_ENABLE();
 | 
			
		||||
	else if (GPIOx==GPIOB)
 | 
			
		||||
		__HAL_RCC_GPIOB_CLK_ENABLE();
 | 
			
		||||
	else if (GPIOx==GPIOC)
 | 
			
		||||
		__HAL_RCC_GPIOC_CLK_ENABLE();
 | 
			
		||||
	else if (GPIOx==GPIOD)
 | 
			
		||||
		__HAL_RCC_GPIOD_CLK_ENABLE();
 | 
			
		||||
	else if (GPIOx==GPIOE)
 | 
			
		||||
		__HAL_RCC_GPIOE_CLK_ENABLE();
 | 
			
		||||
	else
 | 
			
		||||
		status = HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------GPIO INIT FUNCTIONS------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
@ -1,17 +0,0 @@
 | 
			
		||||
/**********************************TIM**************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для инициализации 
 | 
			
		||||
портов.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __GPIO_GENERAL_H_
 | 
			
		||||
#define __GPIO_GENERAL_H_
 | 
			
		||||
 | 
			
		||||
#include "periph_general.h"
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
 | 
			
		||||
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx);
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __GPIO_GENERAL_H_
 | 
			
		||||
@ -1,29 +0,0 @@
 | 
			
		||||
/**********************************TIM**************************************
 | 
			
		||||
Данный файл содержит инклюды и дефайны для всех библиотек базовой перефирии.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __PERIPH_GENERAL_H_
 | 
			
		||||
#define __PERIPH_GENERAL_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// user includes	
 | 
			
		||||
#include "modbus.h"
 | 
			
		||||
 | 
			
		||||
#include "trace.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void Error_Handler(void);
 | 
			
		||||
#define ERROR_HANDLER_NAME(_params_) 	Error_Handler(_params_)
 | 
			
		||||
/* If error handler not defined - set void */
 | 
			
		||||
#ifndef ERROR_HANDLER_NAME
 | 
			
		||||
#define ((void)0U)
 | 
			
		||||
#endif // ERROR_HANDLER_NAME
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
#include "gpio_general.h"
 | 
			
		||||
#include "uart_general.h"
 | 
			
		||||
#include "tim_general.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __PERIPH_GENERAL_H_
 | 
			
		||||
@ -1,481 +0,0 @@
 | 
			
		||||
/**********************************TIM**************************************
 | 
			
		||||
Данный файл содержит базовые функции для инициализации таймеров.
 | 
			
		||||
//-------------------Функции-------------------//
 | 
			
		||||
	
 | 
			
		||||
@func tim initialize
 | 
			
		||||
	- TIM_Base_Init									Инициализация TIM
 | 
			
		||||
	- TIM_Output_PWM_Init						Инициализация PWM с выводом на GPIO
 | 
			
		||||
	- TIM_Base_MspInit							Аналог HAL_MspInit для таймера
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#include "tim_general.h"
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-------------------------TIM INIT FUNCTIONS------------------------	
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize TIM with TIM_SettingsTypeDef structure.
 | 
			
		||||
	* @param 	stim - указатель на структуру с настройками таймера.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	* @note 	Данная структура содержит хендл таймера и структуры для его настройки.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef *stim)
 | 
			
		||||
{ // function takes structure for init
 | 
			
		||||
	// check that htim is defined
 | 
			
		||||
  if (stim->htim.Instance == NULL)
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
		
 | 
			
		||||
	if(stim->sTickBaseMHz)	// if tickbase isnt disable
 | 
			
		||||
	{		
 | 
			
		||||
		if((stim->sTimAHBFreqMHz == 0))
 | 
			
		||||
			return HAL_ERROR;			
 | 
			
		||||
		stim->htim.Init.Prescaler = (stim->sTimAHBFreqMHz*stim->sTickBaseMHz) - 1;
 | 
			
		||||
		
 | 
			
		||||
		if ((stim->sTimFreqHz != NULL))
 | 
			
		||||
			stim->htim.Init.Period = ((1000000/stim->sTickBaseMHz) / stim->sTimFreqHz) - 1;
 | 
			
		||||
	}
 | 
			
		||||
	// if freq is too high (period too small for choosen base) OR base is too high (period too small for choosen base)
 | 
			
		||||
	if((stim->htim.Init.Period == NULL) || (stim->htim.Init.Prescaler == NULL))
 | 
			
		||||
	{		
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// fix overflow of presc and period if need
 | 
			
		||||
	for(int i = 0; (stim->htim.Init.Prescaler > 0xFFFF) || (stim->htim.Init.Period > 0xFFFF); i++)
 | 
			
		||||
	{		
 | 
			
		||||
		if (i>10) // if it isnt fixed after 10 itteration - return HAL_ERRPOR
 | 
			
		||||
		{
 | 
			
		||||
			return HAL_ERROR;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// if timbase is too big (prescaller too big for choosen base from MHZ)
 | 
			
		||||
		if(stim->htim.Init.Prescaler > 0xFFFF)
 | 
			
		||||
		{
 | 
			
		||||
			// переносим часть пресскалера в период
 | 
			
		||||
			stim->htim.Init.Prescaler = ((stim->htim.Init.Prescaler + 1)/2) - 1;
 | 
			
		||||
			stim->htim.Init.Period = ((stim->htim.Init.Period + 1)*2) - 1;
 | 
			
		||||
			// обновляем TickBase
 | 
			
		||||
			stim->sTickBaseMHz /= 2;
 | 
			
		||||
		}
 | 
			
		||||
		// if freq is too low (period too big for choosen base)
 | 
			
		||||
		if(stim->htim.Init.Period > 0xFFFF)
 | 
			
		||||
		{		
 | 
			
		||||
			// переносим часть периода в прескалер
 | 
			
		||||
			stim->htim.Init.Period = ((stim->htim.Init.Period + 1)/2) - 1;
 | 
			
		||||
			stim->htim.Init.Prescaler = ((stim->htim.Init.Prescaler + 1)*2) - 1;
 | 
			
		||||
			// обновляем TickBase
 | 
			
		||||
			stim->sTickBaseMHz *= 2;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//-------------TIM BASE INIT----------------
 | 
			
		||||
	// tim base init		
 | 
			
		||||
	TIM_Base_MspInit(&stim->htim, stim->sTimMode);
 | 
			
		||||
  if (HAL_TIM_Base_Init(&stim->htim) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
		
 | 
			
		||||
	//-------------CLOCK SRC INIT---------------
 | 
			
		||||
	// fill sClockSourceConfig if its NULL
 | 
			
		||||
  if (stim->sClockSourceConfig.ClockSource == NULL)
 | 
			
		||||
		stim->sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;	
 | 
			
		||||
	// clock source init		
 | 
			
		||||
  if (HAL_TIM_ConfigClockSource(&stim->htim, &stim->sClockSourceConfig) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
	
 | 
			
		||||
	//--------------SLAVE INIT------------------	
 | 
			
		||||
	// if slave mode enables - config it
 | 
			
		||||
  if (stim->sSlaveConfig.SlaveMode)
 | 
			
		||||
	{
 | 
			
		||||
		// slave mode init		
 | 
			
		||||
		if (HAL_TIM_SlaveConfigSynchro(&stim->htim, &stim->sSlaveConfig) != HAL_OK)
 | 
			
		||||
		{
 | 
			
		||||
			ERROR_HANDLER_NAME();
 | 
			
		||||
			return HAL_ERROR;
 | 
			
		||||
		}	
 | 
			
		||||
	}
 | 
			
		||||
	//--------------MASTER INIT-----------------		
 | 
			
		||||
	// master mode init		
 | 
			
		||||
  if (HAL_TIMEx_MasterConfigSynchronization(&stim->htim, &stim->sMasterConfig) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }	
 | 
			
		||||
	
 | 
			
		||||
	//--------------BDTR INIT-----------------		
 | 
			
		||||
	if (HAL_TIMEx_ConfigBreakDeadTime(&stim->htim, &stim->sBreakDeadTimeConfig) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
	
 | 
			
		||||
	//----------------IT CLEAR-------------------	
 | 
			
		||||
	__HAL_TIM_CLEAR_IT(&stim->htim, TIM_IT_UPDATE);
 | 
			
		||||
	
 | 
			
		||||
		
 | 
			
		||||
	stim->htim.Instance->CNT = 0;
 | 
			
		||||
	return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize PWM Channel and GPIO for output.
 | 
			
		||||
	* @param 	htim 				- указатель на хендл таймера.
 | 
			
		||||
	* @param 	sConfigOC 	- указатель на настрйоки канала таймера.
 | 
			
		||||
	* @param 	TIM_CHANNEL - канал таймера для настройки.
 | 
			
		||||
	* @param 	GPIOx 			- порт для вывода ШИМ.
 | 
			
		||||
	* @param 	GPIO_PIN 		- пин для вывода ШИМ.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN)
 | 
			
		||||
{
 | 
			
		||||
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
	HAL_StatusTypeDef RES = HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	// setup channel for pwm
 | 
			
		||||
	if (HAL_TIM_PWM_ConfigChannel(htim, sConfigOC, TIM_CHANNEL) != HAL_OK)
 | 
			
		||||
	{
 | 
			
		||||
		ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	}
 | 
			
		||||
	// choose port for enable clock
 | 
			
		||||
	if(GPIO_Clock_Enable(GPIOx) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
	
 | 
			
		||||
  GPIO_InitStruct.Pin = GPIO_PIN;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
			
		||||
	GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 | 
			
		||||
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;	
 | 
			
		||||
	GPIO_InitStruct.Alternate = TIM_Alternate_Mapping(htim->Instance);
 | 
			
		||||
	if(GPIO_InitStruct.Alternate)
 | 
			
		||||
		HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
 | 
			
		||||
	
 | 
			
		||||
	return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
	 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize TIMs clock and interrupt.
 | 
			
		||||
	* @param 	htim - указатель на хендл таймера.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с иницилизацией неиспользуемых таймеров,
 | 
			
		||||
						дефайнами в tim_general.h определяются используемые таймеры.
 | 
			
		||||
	*/
 | 
			
		||||
void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode)
 | 
			
		||||
{
 | 
			
		||||
	it_mode = it_mode&TIM_IT_CONF;
 | 
			
		||||
#ifdef USE_TIM1
 | 
			
		||||
	if(htim->Instance==TIM1)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM2 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM1_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM2 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM2
 | 
			
		||||
	if(htim->Instance==TIM2)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM2 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM2_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM2 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM2_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM3
 | 
			
		||||
  if(htim->Instance==TIM3)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM3 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM3_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM3 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM3_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM4
 | 
			
		||||
  if(htim->Instance==TIM4)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM4 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM4_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM4 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM4_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM5
 | 
			
		||||
  if(htim->Instance==TIM5)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM5 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM5_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM5 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM5_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM6
 | 
			
		||||
  if(htim->Instance==TIM6)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM6 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM6_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM6 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM7
 | 
			
		||||
  if(htim->Instance==TIM7)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM7 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM7_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM7 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM7_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM8
 | 
			
		||||
  if(htim->Instance==TIM8)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM8 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM8_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM8 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM9
 | 
			
		||||
  if(htim->Instance==TIM9)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM9 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM9_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM9 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM10
 | 
			
		||||
  if(htim->Instance==TIM10)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM10 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM10_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM10 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }  
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM11
 | 
			
		||||
	if(htim->Instance==TIM11)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM11 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM11_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM11 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM12
 | 
			
		||||
  if(htim->Instance==TIM12)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM12 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM12_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM12 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM13
 | 
			
		||||
  if(htim->Instance==TIM13)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM13 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM13_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM13 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM14
 | 
			
		||||
  if(htim->Instance==TIM14)
 | 
			
		||||
  {
 | 
			
		||||
    /* TIM14 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM14_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM14 interrupt Init */
 | 
			
		||||
	if(it_mode)
 | 
			
		||||
	{
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0);
 | 
			
		||||
		HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	DeInitialize TIMs clock and interrupt.
 | 
			
		||||
	* @param 	htim - указатель на хендл таймера.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с деиницилизацией неиспользуемых таймеров,
 | 
			
		||||
						дефайнами в tim_general.h определяются используемые таймеры.
 | 
			
		||||
	*/
 | 
			
		||||
void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim)
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_TIM1
 | 
			
		||||
	if(htim->Instance==TIM1)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM1_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM1_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM2
 | 
			
		||||
	if(htim->Instance==TIM2)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM2_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM2_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM3
 | 
			
		||||
  if(htim->Instance==TIM3)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM3_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM3_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM4
 | 
			
		||||
  if(htim->Instance==TIM4)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM4_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM4_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM5
 | 
			
		||||
  if(htim->Instance==TIM5)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM5_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM5_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM6
 | 
			
		||||
  if(htim->Instance==TIM6)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM6_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM6_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM7
 | 
			
		||||
  if(htim->Instance==TIM7)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM7_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM7_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM8
 | 
			
		||||
  if(htim->Instance==TIM8)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM8_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM8_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM9
 | 
			
		||||
  if(htim->Instance==TIM9)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM9_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM9_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM10
 | 
			
		||||
  if(htim->Instance==TIM10)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM10_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM10_RELEASE_RESET();
 | 
			
		||||
  }  
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM11
 | 
			
		||||
	if(htim->Instance==TIM11)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM11_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM11_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM12
 | 
			
		||||
  if(htim->Instance==TIM12)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM12_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM12_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM13
 | 
			
		||||
  if(htim->Instance==TIM13)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM13_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM13_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef USE_TIM14
 | 
			
		||||
  if(htim->Instance==TIM14)
 | 
			
		||||
  {
 | 
			
		||||
		__HAL_RCC_TIM14_FORCE_RESET();
 | 
			
		||||
		__HAL_RCC_TIM14_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
//-------------------------TIM INIT FUNCTIONS------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
@ -1,127 +0,0 @@
 | 
			
		||||
/**********************************TIM**************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для инициализации 
 | 
			
		||||
таймеров.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __TIM_GENERAL_H_
 | 
			
		||||
#define __TIM_GENERAL_H_
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED // need to uncomment this define in stm32f4xx_hal_conf.h
 | 
			
		||||
 | 
			
		||||
#define USE_TIM1
 | 
			
		||||
#define USE_TIM2
 | 
			
		||||
#define USE_TIM3
 | 
			
		||||
#define USE_TIM4
 | 
			
		||||
#define USE_TIM5
 | 
			
		||||
#define USE_TIM6
 | 
			
		||||
#define USE_TIM7
 | 
			
		||||
#define USE_TIM8
 | 
			
		||||
#define USE_TIM9
 | 
			
		||||
#define USE_TIM10
 | 
			
		||||
#define USE_TIM11
 | 
			
		||||
#define USE_TIM12
 | 
			
		||||
#define USE_TIM13
 | 
			
		||||
#define USE_TIM14
 | 
			
		||||
/* note: used uart defines in modbus.h */
 | 
			
		||||
 | 
			
		||||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
			
		||||
#include "periph_general.h"
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
#define TIM_IT_CONF_Pos						0
 | 
			
		||||
//#define TIM_PWM_CONF_Pos					1
 | 
			
		||||
//#define TIM_CLCK_SRC_CONF_Pos			2
 | 
			
		||||
//#define TIM_SLAVE_CONF_Pos				3
 | 
			
		||||
//#define TIM_MASTER_CONF_Pos				4
 | 
			
		||||
//#define TIM_BDTR_CONF_Pos					5
 | 
			
		||||
 | 
			
		||||
#define TIM_IT_CONF 	(1<<(TIM_IT_CONF_Pos))
 | 
			
		||||
//#define TIM_PWM_CONF 			(1<<(TIM_PWM_Pos))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define TIM_Alternate_Mapping(INSTANCE) 			 ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: 																										\
 | 
			
		||||
																								(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3:  													\
 | 
			
		||||
																								(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8:  \
 | 
			
		||||
																								(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: 												\
 | 
			
		||||
																								(0))
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
	TIM_DEFAULT = 				0,
 | 
			
		||||
	TIM_IT_MODE = 				TIM_IT_CONF,
 | 
			
		||||
//	TIM_PWM_MODE = 				TIM_PWM_ENABLE,
 | 
			
		||||
//	TIM_PWM_IT_MODE = 		TIM_PWM_ENABLE | TIM_IT_CONF,
 | 
			
		||||
}TIM_ITModeTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
	TIM_Base_Disable = 			0,
 | 
			
		||||
	TIM_TickBase_1US = 			1,
 | 
			
		||||
	TIM_TickBase_10US = 		10,
 | 
			
		||||
	TIM_TickBase_100US = 		100,
 | 
			
		||||
	TIM_TickBase_1MS = 			1000,
 | 
			
		||||
	TIM_TickBase_10MS = 		10000,
 | 
			
		||||
	TIM_TickBase_100MS = 		100000,
 | 
			
		||||
}TIM_MHzTickBaseTypeDef;
 | 
			
		||||
 | 
			
		||||
typedef struct // struct with settings for custom function
 | 
			
		||||
{
 | 
			
		||||
	TIM_HandleTypeDef 			htim;
 | 
			
		||||
	TIM_ClockConfigTypeDef	sClockSourceConfig;
 | 
			
		||||
	TIM_SlaveConfigTypeDef 	sSlaveConfig;
 | 
			
		||||
	TIM_MasterConfigTypeDef	sMasterConfig;
 | 
			
		||||
  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
 | 
			
		||||
	TIM_ITModeTypeDef 			sTimMode;
 | 
			
		||||
	
 | 
			
		||||
	TIM_MHzTickBaseTypeDef 	sTickBaseMHz;
 | 
			
		||||
	float 									sTimAHBFreqMHz;
 | 
			
		||||
	uint32_t 								sTimFreqHz;
 | 
			
		||||
	
 | 
			
		||||
}TIM_SettingsTypeDef;
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize TIM with TIM_SettingsTypeDef structure.
 | 
			
		||||
	* @param 	stim - указатель на структуру с настройками таймера.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	* @note 	Данная структура содержит хендл таймера и структуры для его настройки.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef* stim);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize PWM Channel and GPIO for output.
 | 
			
		||||
	* @param 	htim 				- указатель на хендл таймера.
 | 
			
		||||
	* @param 	sConfigOC 	- указатель на настрйоки канала таймера.
 | 
			
		||||
	* @param 	TIM_CHANNEL - канал таймера для настройки.
 | 
			
		||||
	* @param 	GPIOx 			- порт для вывода ШИМ.
 | 
			
		||||
	* @param 	GPIO_PIN 		- пин для вывода ШИМ.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize TIMs clock and interrupt.
 | 
			
		||||
	* @param 	htim - указатель на хендл таймера.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с иницилизацией неиспользуемых таймеров,
 | 
			
		||||
						дефайнами в tim_general.h определяются используемые таймеры.
 | 
			
		||||
	*/
 | 
			
		||||
void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	DeInitialize TIMs clock and interrupt.
 | 
			
		||||
	* @param 	htim - указатель на хендл таймера.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с деиницилизацией неиспользуемых таймеров,
 | 
			
		||||
						дефайнами в tim_general.h определяются используемые таймеры.
 | 
			
		||||
	*/
 | 
			
		||||
void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim);
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __TIM_GENERAL_H_
 | 
			
		||||
@ -1,373 +0,0 @@
 | 
			
		||||
/*********************************UART**************************************
 | 
			
		||||
Данный файл содержит базовые функции для инициализации UART.
 | 
			
		||||
//-------------------Функции-------------------//
 | 
			
		||||
@func users
 | 
			
		||||
	- UART_Base_Init									Инициализация UART 
 | 
			
		||||
 | 
			
		||||
@func uart initialize
 | 
			
		||||
	- UART_GPIO_Init							Инициализация GPIO для UART
 | 
			
		||||
	- UART_DMA_Init							Инициализация DMA для UART
 | 
			
		||||
	- UART_MspInit								Аналог HAL_MspInit для UART
 | 
			
		||||
	- UART_MspDeInit							Аналог HAL_MspDeInit для UART
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#include "uart_general.h"
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//------------------------UART INIT FUNCTIONS------------------------
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize UART with UART_SettingsTypeDef structure.
 | 
			
		||||
	* @param 	suart - указатель на структуру с настройками UART.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	* @note 	Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO)
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart)
 | 
			
		||||
{ // function takes setting structure for init
 | 
			
		||||
	
 | 
			
		||||
	// check is settings are valid
 | 
			
		||||
	if(Check_UART_Init_Struct(suart) != HAL_OK)
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  	
 | 
			
		||||
	suart->huart.Init.Mode = UART_MODE_TX_RX;
 | 
			
		||||
	
 | 
			
		||||
	UART_MspInit(&suart->huart);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	if (HAL_UART_Init(&suart->huart) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
		ERROR_HANDLER_NAME();
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
	
 | 
			
		||||
	// init gpio from UARTSettings structure
 | 
			
		||||
	UART_GPIO_Init(suart->GPIOx, suart->GPIO_PIN_RX, suart->GPIO_PIN_TX);
 | 
			
		||||
	
 | 
			
		||||
	// init dma from UARTSettings structure if need
 | 
			
		||||
	if (suart->DMAChannel != 0)
 | 
			
		||||
		UART_DMA_Init(&suart->huart, suart->huart.hdmarx, suart->DMAChannel, suart->DMA_CHANNEL_X);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize GPIO for UART.
 | 
			
		||||
	* @param 	GPIOx 			- порт для настройки.
 | 
			
		||||
	* @param 	GPIO_PIN_RX - пин для настройки на прием.
 | 
			
		||||
	* @param 	GPIO_PIN_TX - пин для настройки на передачу.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX)
 | 
			
		||||
{ // function takes port and pins (for rx and tx)
 | 
			
		||||
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
	
 | 
			
		||||
	// choose port for enable clock
 | 
			
		||||
	GPIO_Clock_Enable(GPIOx);
 | 
			
		||||
	
 | 
			
		||||
	//USART3 GPIO Configuration
 | 
			
		||||
	//GPIO_PIN_TX ------> USART_TX
 | 
			
		||||
	//GPIO_PIN_RX ------> USART_RX    
 | 
			
		||||
	
 | 
			
		||||
#if defined(STM32F407xx) // gpio init for 407
 | 
			
		||||
	GPIO_InitStruct.Pin = GPIO_PIN_TX|GPIO_PIN_RX;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
			
		||||
	GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
			
		||||
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | 
			
		||||
	GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
 | 
			
		||||
	HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
 | 
			
		||||
#elif defined(STM32F103xG)  // gpio init for atm403/stm103
 | 
			
		||||
	//GPIO_PIN_TX ------> USART_TX
 | 
			
		||||
	GPIO_InitStruct.Pin = GPIO_PIN_TX;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | 
			
		||||
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 | 
			
		||||
	HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
//	GPIO_PIN_RX ------> USART_RX	
 | 
			
		||||
	GPIO_InitStruct.Pin = GPIO_PIN_RX;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 | 
			
		||||
	GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
			
		||||
	HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize DMA for UART.
 | 
			
		||||
	* @param 	huart 				- указатель на хендл UART для настройки DMA.
 | 
			
		||||
	* @param 	hdma_rx 			- указатель на хендл DMA для линии приема UART.
 | 
			
		||||
	* @param 	DMAChannel 		- указатель на канал DMA/поток DMA в STM32F407.
 | 
			
		||||
	* @param 	DMA_CHANNEL_X - канал DMA.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X)
 | 
			
		||||
{ // function takes uart and dma handlers and dmachannel for uart
 | 
			
		||||
	// for now only dma rx is supported, tx maybe later if needed
 | 
			
		||||
		// calc defines on boot_project_setup.h
 | 
			
		||||
 | 
			
		||||
	/* USART3 DMA Init */
 | 
			
		||||
	/* USART3_RX Init */
 | 
			
		||||
	
 | 
			
		||||
	hdma_rx->Instance = DMAChannel;
 | 
			
		||||
#if defined(STM32F407xx) // dma channel choose for 407
 | 
			
		||||
	hdma_rx->Init.Channel = DMA_CHANNEL_X;
 | 
			
		||||
#endif
 | 
			
		||||
	hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
 | 
			
		||||
	hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
 | 
			
		||||
	hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
 | 
			
		||||
	hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
 | 
			
		||||
	hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
 | 
			
		||||
	hdma_rx->Init.Mode = DMA_CIRCULAR;
 | 
			
		||||
	hdma_rx->Init.Priority = DMA_PRIORITY_LOW;
 | 
			
		||||
	if (HAL_DMA_Init(hdma_rx) != HAL_OK)
 | 
			
		||||
	{
 | 
			
		||||
		ERROR_HANDLER_NAME();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	__USER_LINKDMA(huart,hdmarx,hdma_rx); 	
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	// __USER_LINKDMA is need because __HAL_LINKDMA is written for global defined hdma_rx
 | 
			
		||||
	// so you get error because hal uses . insted of ->
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize UART & DMA clock and interrupt.
 | 
			
		||||
	* @param 	huart - указатель на хендл UART для инициализации.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с иницилизацией неиспользуемых UART,
 | 
			
		||||
						дефайнами в rs_message.h определяются используемые UART.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_MspInit(UART_HandleTypeDef *huart) // analog for hal function
 | 
			
		||||
{ 	
 | 
			
		||||
//	__RCC_DMA_UART_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  /* DMA1_Stream1_IRQn interrupt configuration */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA_UART_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA_UART_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	// rcc, dma and interrupt init for USARTs
 | 
			
		||||
	// GPIO init was moved to own functions UART_GPIO_Init  
 | 
			
		||||
	if(0);
 | 
			
		||||
#ifdef USE_USART1
 | 
			
		||||
	else if(huart->Instance==USART1)
 | 
			
		||||
  {
 | 
			
		||||
	
 | 
			
		||||
  /* DMA2 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA2_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART1 clock enable */
 | 
			
		||||
	__HAL_RCC_USART1_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
	/* USART1 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(USART1_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART1
 | 
			
		||||
#ifdef USE_USART2
 | 
			
		||||
	else if(huart->Instance==USART2)
 | 
			
		||||
  {
 | 
			
		||||
  /* DMA1 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART2 clock enable */
 | 
			
		||||
	__HAL_RCC_USART2_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
	/* USART2 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(USART2_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART2
 | 
			
		||||
#ifdef USE_USART3
 | 
			
		||||
	else if(huart->Instance==USART3)
 | 
			
		||||
  {			
 | 
			
		||||
  /* DMA1 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART3 clock enable */
 | 
			
		||||
	__HAL_RCC_USART3_CLK_ENABLE();	
 | 
			
		||||
	/* USART3 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(USART3_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART3
 | 
			
		||||
#ifdef USE_UART4
 | 
			
		||||
	else if(huart->Instance==UART4)
 | 
			
		||||
  {
 | 
			
		||||
  /* DMA1 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* UART4 clock enable */
 | 
			
		||||
	__HAL_RCC_UART4_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
	/* UART4 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(UART4_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_UART4
 | 
			
		||||
#ifdef USE_UART5
 | 
			
		||||
	else if(huart->Instance==UART5)
 | 
			
		||||
  {
 | 
			
		||||
  /* DMA1 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* UART5 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
	/* UART5 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(UART5_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_UART5
 | 
			
		||||
#ifdef USE_USART6
 | 
			
		||||
	else if(huart->Instance==USART6)
 | 
			
		||||
  {
 | 
			
		||||
  /* DMA2 clock enable */
 | 
			
		||||
	__HAL_RCC_DMA2_CLK_ENABLE();
 | 
			
		||||
  /* DMA interrupt init */
 | 
			
		||||
  HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
 | 
			
		||||
  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART6 clock enable */
 | 
			
		||||
	__HAL_RCC_USART6_CLK_ENABLE();
 | 
			
		||||
	
 | 
			
		||||
	/* USART6 interrupt Init */
 | 
			
		||||
	HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(USART6_IRQn);
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART6
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Deinitialize UART & DMA clock and interrupt.
 | 
			
		||||
	* @param 	huart - указатель на хендл UART для деинициализации.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART,
 | 
			
		||||
						дефайнами определяются используемые UART.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_MspDeInit(UART_HandleTypeDef *huart) // analog for hal function
 | 
			
		||||
{ 	
 | 
			
		||||
	// rcc, dma and interrupt init for USARTs
 | 
			
		||||
	// GPIO init was moved to own functions UART_GPIO_Init  
 | 
			
		||||
	if(0);
 | 
			
		||||
#ifdef USE_USART1
 | 
			
		||||
	else if(huart->Instance==USART1)
 | 
			
		||||
  {
 | 
			
		||||
	
 | 
			
		||||
//  /* DMA2 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA2_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART1 clock reset */
 | 
			
		||||
	__HAL_RCC_USART1_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_USART1_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART1
 | 
			
		||||
#ifdef USE_USART2
 | 
			
		||||
	else if(huart->Instance==USART2)
 | 
			
		||||
  {
 | 
			
		||||
//  /* DMA1 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART2 clock reset */
 | 
			
		||||
	__HAL_RCC_USART2_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_USART2_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART2
 | 
			
		||||
#ifdef USE_USART3
 | 
			
		||||
	else if(huart->Instance==USART3)
 | 
			
		||||
  {			
 | 
			
		||||
//  /* DMA1 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART3 clock reset */
 | 
			
		||||
	__HAL_RCC_USART3_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_USART3_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART3
 | 
			
		||||
#ifdef USE_UART4
 | 
			
		||||
	else if(huart->Instance==UART4)
 | 
			
		||||
  {
 | 
			
		||||
//  /* DMA1 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* UART4 clock reset */
 | 
			
		||||
	__HAL_RCC_UART4_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_UART4_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_UART4
 | 
			
		||||
#ifdef USE_UART5
 | 
			
		||||
	else if(huart->Instance==UART5)
 | 
			
		||||
  {
 | 
			
		||||
//  /* DMA1 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA1_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* UART5 clock reset */
 | 
			
		||||
	__HAL_RCC_UART5_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_UART5_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_UART5
 | 
			
		||||
#ifdef USE_USART6
 | 
			
		||||
	else if(huart->Instance==USART6)
 | 
			
		||||
  {
 | 
			
		||||
//  /* DMA2 clock enable */
 | 
			
		||||
//	__HAL_RCC_DMA2_CLK_ENABLE();
 | 
			
		||||
//  /* DMA interrupt init */
 | 
			
		||||
//  HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
 | 
			
		||||
//  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
 | 
			
		||||
	
 | 
			
		||||
	/* USART6 clock reset */
 | 
			
		||||
	__HAL_RCC_USART6_FORCE_RESET();
 | 
			
		||||
	__HAL_RCC_USART6_RELEASE_RESET();
 | 
			
		||||
  }
 | 
			
		||||
#endif // USE_USART6
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Check that uart init structure have correct values.
 | 
			
		||||
	* @param 	suart - указатель на структуру с настройками UART.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef Check_UART_Init_Struct(UART_SettingsTypeDef *suart)
 | 
			
		||||
{
 | 
			
		||||
	// check is settings are valid
 | 
			
		||||
	if (!IS_UART_INSTANCE(suart->huart.Instance))
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	if (!IS_UART_BAUDRATE(suart->huart.Init.BaudRate) || (suart->huart.Init.BaudRate == NULL))
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	if (!IS_GPIO_ALL_INSTANCE(suart->GPIOx))
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	if (!IS_GPIO_PIN(suart->GPIO_PIN_RX) && !IS_GPIO_PIN(suart->GPIO_PIN_TX)) // if both pins arent set up
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------UART INIT FUNCTIONS------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
@ -1,106 +0,0 @@
 | 
			
		||||
/*********************************UART**************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для инициализации 
 | 
			
		||||
UART.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __UART_GENERAL_H_
 | 
			
		||||
#define __UART_GENERAL_H_
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
			
		||||
#define HAL_UART_MODULE_ENABLED 	// need to uncomment these defines in stm32f4xx_hal_conf.h
 | 
			
		||||
#define HAL_USART_MODULE_ENABLED 	// also need to add hal_uart.c (source code)
 | 
			
		||||
 | 
			
		||||
//#define USE_USART1
 | 
			
		||||
//#define USE_USART2
 | 
			
		||||
//#define USE_USART3
 | 
			
		||||
//#define USE_UART4
 | 
			
		||||
//#define USE_UART5
 | 
			
		||||
//#define USE_USART6
 | 
			
		||||
/* note: used uart defines in modbus.h */
 | 
			
		||||
 | 
			
		||||
/////////////////////////---USER SETTINGS---/////////////////////////
 | 
			
		||||
#include "periph_general.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Analog for HAL define. Remade with pointer to structure.
 | 
			
		||||
	* @note 	@ref __HAL_LINKDMA.
 | 
			
		||||
	*/
 | 
			
		||||
#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__)  	\
 | 
			
		||||
do{                                                      								\
 | 
			
		||||
(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); 										\
 | 
			
		||||
(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
 | 
			
		||||
 | 
			
		||||
															
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
typedef struct // struct with settings for custom function
 | 
			
		||||
{
 | 
			
		||||
	UART_HandleTypeDef huart;
 | 
			
		||||
	
 | 
			
		||||
	GPIO_TypeDef *GPIOx;
 | 
			
		||||
	uint16_t GPIO_PIN_RX;
 | 
			
		||||
	uint16_t GPIO_PIN_TX;
 | 
			
		||||
	
 | 
			
		||||
	DMA_Stream_TypeDef *DMAChannel; // DMAChannel = 0 if doesnt need
 | 
			
		||||
	uint32_t DMA_CHANNEL_X; // DMAChannel = 0 if doesnt need
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
}UART_SettingsTypeDef;
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize UART with UART_SettingsTypeDef structure.
 | 
			
		||||
	* @param 	suart - указатель на структуру с настройками UART.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	* @note 	Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO)
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef UART_Base_Init(UART_SettingsTypeDef *suart);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize GPIO for UART.
 | 
			
		||||
	* @param 	GPIOx 			- порт для настройки.
 | 
			
		||||
	* @param 	GPIO_PIN_RX - пин для настройки на прием.
 | 
			
		||||
	* @param 	GPIO_PIN_TX - пин для настройки на передачу.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize DMA for UART.
 | 
			
		||||
	* @param 	huart 				- указатель на хендл UART для настройки DMA.
 | 
			
		||||
	* @param 	hdma_rx 			- указатель на хендл DMA для линии приема UART.
 | 
			
		||||
	* @param 	DMAChannel 		- указатель на канал DMA/поток DMA в STM32F407.
 | 
			
		||||
	* @param 	DMA_CHANNEL_X - канал DMA.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Stream_TypeDef *DMAChannel, uint32_t DMA_CHANNEL_X);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Initialize UART & DMA clock and interrupt.
 | 
			
		||||
	* @param 	huart - указатель на хендл UART для инициализации.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с иницилизацией неиспользуемых UART,
 | 
			
		||||
						дефайнами определяются используемые UART.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_MspInit(UART_HandleTypeDef *huart);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Deinitialize UART & DMA clock and interrupt.
 | 
			
		||||
	* @param 	huart - указатель на хендл UART для деинициализации.
 | 
			
		||||
	* @note 	Чтобы не генерировать функцию с деиницилизацией неиспользуемых UART,
 | 
			
		||||
						дефайнами в rs_message.h определяются используемые UART.
 | 
			
		||||
	*/
 | 
			
		||||
void UART_MspDeInit(UART_HandleTypeDef *huart);
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Check that uart init structure have correct values.
 | 
			
		||||
	* @param 	suart - указатель на структуру с настройками UART.
 | 
			
		||||
  * @return HAL status.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef Check_UART_Init_Struct(UART_SettingsTypeDef *suart);
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
 | 
			
		||||
#endif // __UART_GENERAL_H_
 | 
			
		||||
@ -1,116 +0,0 @@
 | 
			
		||||
#include "crc_algs.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint32_t CRC_calc;
 | 
			
		||||
uint32_t CRC_ref;
 | 
			
		||||
 | 
			
		||||
//uint16_t CRC_calc;
 | 
			
		||||
//uint16_t CRC_ref;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// left this global for debug
 | 
			
		||||
uint8_t uchCRCHi = 0xFF;  
 | 
			
		||||
uint8_t uchCRCLo = 0xFF; 
 | 
			
		||||
unsigned uIndex;    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint32_t crc32(uint8_t *data, uint32_t data_size)
 | 
			
		||||
{
 | 
			
		||||
	static const unsigned int crc32_table[] =
 | 
			
		||||
{
 | 
			
		||||
	0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 
 | 
			
		||||
	0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 
 | 
			
		||||
	0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 
 | 
			
		||||
	0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 
 | 
			
		||||
	0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 
 | 
			
		||||
	0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 
 | 
			
		||||
	0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 
 | 
			
		||||
	0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 
 | 
			
		||||
	0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 
 | 
			
		||||
	0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 
 | 
			
		||||
	0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 
 | 
			
		||||
	0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 
 | 
			
		||||
	0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 
 | 
			
		||||
	0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 
 | 
			
		||||
	0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 
 | 
			
		||||
	0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 
 | 
			
		||||
	0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 
 | 
			
		||||
	0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 
 | 
			
		||||
	0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 
 | 
			
		||||
	0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 
 | 
			
		||||
	0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 
 | 
			
		||||
	0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 
 | 
			
		||||
	0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 
 | 
			
		||||
	0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 
 | 
			
		||||
	0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 
 | 
			
		||||
	0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 
 | 
			
		||||
	0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 
 | 
			
		||||
	0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 
 | 
			
		||||
	0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 
 | 
			
		||||
	0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 
 | 
			
		||||
	0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 
 | 
			
		||||
	0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
 | 
			
		||||
};  
 | 
			
		||||
unsigned int crc = 0xFFFFFFFF;
 | 
			
		||||
  while (data_size--)
 | 
			
		||||
    {
 | 
			
		||||
      crc = (crc >> 8) ^ crc32_table[(crc ^ *data) & 255];
 | 
			
		||||
      data++;
 | 
			
		||||
    }
 | 
			
		||||
  return crc^0xFFFFFFFF;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t crc16(uint8_t *data, uint32_t data_size)
 | 
			
		||||
{	
 | 
			
		||||
	/*Table of CRC values for high order byte*/
 | 
			
		||||
	static unsigned char auchCRCHi[]=
 | 
			
		||||
	{
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
 | 
			
		||||
			0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
 | 
			
		||||
	};
 | 
			
		||||
	/*Table of CRC values for low order byte*/
 | 
			
		||||
	static char auchCRCLo[] =
 | 
			
		||||
	{
 | 
			
		||||
					0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,
 | 
			
		||||
					0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,
 | 
			
		||||
					0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,
 | 
			
		||||
					0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,
 | 
			
		||||
					0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
 | 
			
		||||
					0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,
 | 
			
		||||
					0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,
 | 
			
		||||
					0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,
 | 
			
		||||
					0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,
 | 
			
		||||
					0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
 | 
			
		||||
					0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,
 | 
			
		||||
					0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,
 | 
			
		||||
					0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,
 | 
			
		||||
					0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,
 | 
			
		||||
					0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
 | 
			
		||||
					0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40,
 | 
			
		||||
			};
 | 
			
		||||
	uchCRCHi = 0xFF;  
 | 
			
		||||
  uchCRCLo = 0xFF;   
 | 
			
		||||
    /* CRC Generation Function */
 | 
			
		||||
  while( data_size--) /* pass through message buffer */
 | 
			
		||||
  {
 | 
			
		||||
    uIndex = uchCRCHi ^ *data++; /* calculate the CRC */
 | 
			
		||||
    uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
 | 
			
		||||
		uchCRCLo = auchCRCLo[uIndex];
 | 
			
		||||
  }
 | 
			
		||||
	return uchCRCHi | uchCRCLo<<8;
 | 
			
		||||
}
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
// extern here to use in bootloader.c
 | 
			
		||||
extern uint32_t CRC_calc;
 | 
			
		||||
extern uint32_t CRC_ref;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t crc16(uint8_t *data, uint32_t data_size);
 | 
			
		||||
uint32_t crc32(uint8_t *data, uint32_t data_size);
 | 
			
		||||
@ -1,864 +0,0 @@
 | 
			
		||||
/********************************MODBUS*************************************
 | 
			
		||||
Данный файл содержит базовые функции для реализации MODBUS.
 | 
			
		||||
//-------------------Функции-------------------//
 | 
			
		||||
@func user
 | 
			
		||||
	- MB_SetCoil
 | 
			
		||||
	- MB_ResetCoil
 | 
			
		||||
 | 
			
		||||
@func process message
 | 
			
		||||
	- MB_DefineRegistersAddress 		Определение "начального" адреса регистров
 | 
			
		||||
	- MB_DefineCoilsAddress					Определение "начального" адреса коилов
 | 
			
		||||
	- MB_Check_Address_For_Arr 							принадлежит ли адресс Addr конкретному массиву
 | 
			
		||||
	- Modbus_Command_x							Обработка команды x
 | 
			
		||||
 | 
			
		||||
@func RS functions
 | 
			
		||||
	-	Parse_Message/Collect_Message	Заполнение структуры сообщения и буфера
 | 
			
		||||
	-	RS_Response  									Ответ на комманду
 | 
			
		||||
	- RS_Define_Size_of_RX_Message	Определение размера принимаемых данных
 | 
			
		||||
	-	RS_Init												Инициализация периферии и modbus handler
 | 
			
		||||
 | 
			
		||||
@func initialization
 | 
			
		||||
	- MB_Init												Инициализация modbus
 | 
			
		||||
	
 | 
			
		||||
//--------------Данные для модбас--------------//
 | 
			
		||||
@registers Holding/Input Registers
 | 
			
		||||
	Регистры представляют собой 16-битные числа (слова). В обработке комманд 
 | 
			
		||||
	находится адресс "начального" регистра и записывается в указатель. Доступ к 
 | 
			
		||||
	остальным регистрам осуществляется через указатель.	Таким образом, сами 
 | 
			
		||||
	регистры могут представлять собой как массив так и структуру.
 | 
			
		||||
	- sine_log - массив регистров на 500 элементов
 | 
			
		||||
	- sine_log - массив регистров на 500 элементов
 | 
			
		||||
 | 
			
		||||
@coils Coils
 | 
			
		||||
	Коилы представляют собой биты, упакованные в 16-битные регистры. В обработке 
 | 
			
		||||
	комманд находится адресс "начального" регистра запрашиваемого коила. Доступ к 
 | 
			
		||||
	остальным коилам осуществляется через маску и указатель. Таким образом, сами 
 | 
			
		||||
	коилы могут представлять собой как массив так и структуру.
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
@example SLAVE RECEIVE
 | 
			
		||||
//--------------Настройка модбас--------------//
 | 
			
		||||
	// create handles and settings
 | 
			
		||||
	Create_MODBUS_Handles(modbus1);
 | 
			
		||||
	
 | 
			
		||||
	// set up UART for modbus
 | 
			
		||||
	modbus1_suart.huart = &modbus1_huart;
 | 
			
		||||
	modbus1_suart.huart->Instance = USED_MODBUS_UART;
 | 
			
		||||
	modbus1_suart.huart->Init.BaudRate = 38400;	
 | 
			
		||||
	modbus1_suart.GPIOx = MODBUS_GPIOX;
 | 
			
		||||
	modbus1_suart.GPIO_PIN_RX = MODBUS_GPIO_PIN_RX;
 | 
			
		||||
	modbus1_suart.GPIO_PIN_TX = MODBUS_GPIO_PIN_TX;
 | 
			
		||||
	
 | 
			
		||||
	// set up timeout TIM for modbus
 | 
			
		||||
	modbus1_stim.htim = &modbus1_htim;
 | 
			
		||||
	modbus1_stim.htim.Instance = USED_MODBUS_TIM;
 | 
			
		||||
	modbus1_stim.htim.Init.Prescaler = 36000;  // set this to 0.5 ms
 | 
			
		||||
	modbus1_stim.TIM_MODE = TIM_IT_CONF;
 | 
			
		||||
	
 | 
			
		||||
	// set up modbus: MB_RX_Size_NotConst and Timeout enable
 | 
			
		||||
	hmodbus1.ID = 1;
 | 
			
		||||
	hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst;
 | 
			
		||||
	hmodbus1.sRS_Timeout = 100;
 | 
			
		||||
	hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT;
 | 
			
		||||
	hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &modbus1_suart, &modbus1_stim, 0);
 | 
			
		||||
	
 | 
			
		||||
//----------------Прием модбас----------------//
 | 
			
		||||
	RS_MsgTypeDef MODBUS_MSG;
 | 
			
		||||
	RS_Receive_IT(&hmodbus1, &MODBUS_MSG);
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#include "rs_message.h"
 | 
			
		||||
uint32_t dbg_temp, dbg_temp2, dbg_temp3; // for debug
 | 
			
		||||
uint32_t err_cnt = 0;
 | 
			
		||||
/* EXTERN MODBUS HANDLES */
 | 
			
		||||
extern UART_SettingsTypeDef modbus1_suart;
 | 
			
		||||
extern TIM_SettingsTypeDef modbus1_stim;
 | 
			
		||||
extern RS_HandleTypeDef hmodbus1;
 | 
			
		||||
 | 
			
		||||
/* DEFINE REGISTERS/COILS */
 | 
			
		||||
uint16_t sine_log[R_SINE_LOG_QNT];						// start from 0x0000
 | 
			
		||||
uint16_t pwm_log[R_PWM_LOG_QNT]; 						 	// start from 500 (0x1F4)
 | 
			
		||||
uint16_t cnt_log[R_CNT_LOG_QNT];							// start from 100 (0x3E8)
 | 
			
		||||
uint16_t time_log[R_TIME_LOG_QNT];						// start from 1500 (0x5DC)
 | 
			
		||||
uint16_t pwm_ctrl[R_PWM_CTRL_QNT];						// start from 2000 (0x7D0)
 | 
			
		||||
uint16_t log_ctrl[R_PWM_CTRL_QNT];						// start from 2008 (0x7D0)
 | 
			
		||||
uint16_t uart_ctrl[R_UART_CTRL_QNT]; 	
 | 
			
		||||
 | 
			
		||||
uint16_t coils_regs[C_CTRL_COILS_QNT];
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-----------------------------FOR USER------------------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First set up of MODBUS.
 | 
			
		||||
	* @note 	Первый инит модбас. Заполняет структуры и инициализирует таймер и юарт для общения по модбас.
 | 
			
		||||
	* 				Скважность ШИМ меняется по закону синусоиды, каждый канал генерирует свой полупериод синуса (от -1 до 0 И от 0 до 1)
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void MODBUS_FirstInit(void)
 | 
			
		||||
{
 | 
			
		||||
	//-----------SETUP MODBUS-------------
 | 
			
		||||
	// set up UART for modbus
 | 
			
		||||
	modbus1_suart.huart.Instance = USED_MODBUS_UART;
 | 
			
		||||
	modbus1_suart.huart.Init.BaudRate = PROJSET.MB_SPEED;	
 | 
			
		||||
	modbus1_suart.GPIOx = (GPIO_TypeDef *)PROJSET.MB_GPIOX;
 | 
			
		||||
	modbus1_suart.GPIO_PIN_RX = PROJSET.MB_GPIO_PIN_RX;
 | 
			
		||||
	modbus1_suart.GPIO_PIN_TX = PROJSET.MB_GPIO_PIN_TX;
 | 
			
		||||
	
 | 
			
		||||
	// set up timeout TIM for modbus
 | 
			
		||||
	modbus1_stim.htim.Instance = USED_MODBUS_TIM;
 | 
			
		||||
	modbus1_stim.sTimAHBFreqMHz = PROJSET.MB_TIM_AHB_FREQ;
 | 
			
		||||
	modbus1_stim.sTimMode = TIM_IT_CONF;
 | 
			
		||||
	
 | 
			
		||||
	// set up modbus: MB_RX_Size_NotConst and Timeout enable
 | 
			
		||||
	hmodbus1.ID = PROJSET.MB_DEVICE_ID;
 | 
			
		||||
	hmodbus1.sRS_Timeout = PROJSET.MB_MAX_TIMEOUT;
 | 
			
		||||
	hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT;
 | 
			
		||||
	hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst;
 | 
			
		||||
	
 | 
			
		||||
	// INIT
 | 
			
		||||
	hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &modbus1_suart, &modbus1_stim, 0);	
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set or Reset Coil at its global address.
 | 
			
		||||
	* @param 	Addr 					- адрес коила.
 | 
			
		||||
	* @param 	WriteVal 			- Что записать в коил: 0 или 1.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если коила по адресу не существует, и NO_ERRORS если все ок.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к любому коилу по его глобальному адрессу.
 | 
			
		||||
						Вне зависимости от того как коилы размещены в памяти.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	MB_ExceptionTypeDef Exception = NO_ERRORS;
 | 
			
		||||
	uint16_t *coils;
 | 
			
		||||
	uint16_t start_shift = 0; // shift in coils register
 | 
			
		||||
	
 | 
			
		||||
	//------------WRITE COIL-------------
 | 
			
		||||
	Exception = MB_DefineCoilsAddress(&coils, Addr, 1, &start_shift, 1);
 | 
			
		||||
	if(Exception == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		switch(WriteVal)
 | 
			
		||||
		{
 | 
			
		||||
			case SET_COIL:
 | 
			
		||||
				*coils |= (1<<start_shift);				
 | 
			
		||||
				break;
 | 
			
		||||
				
 | 
			
		||||
			case RESET_COIL:
 | 
			
		||||
				*coils &= ~(1<<start_shift);					
 | 
			
		||||
				break;
 | 
			
		||||
				
 | 
			
		||||
			case TOOGLE_COIL:
 | 
			
		||||
				*coils ^= (1<<start_shift);						
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
		}		
 | 
			
		||||
	}
 | 
			
		||||
	return Exception;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Read Coil at its global address.
 | 
			
		||||
	* @param 	Addr 					- адрес коила.
 | 
			
		||||
	* @param 	Exception 		- Указатель на переменную для кода исключения, в случа неудачи при чтении.
 | 
			
		||||
	* @return uint16_t			- Возвращает весь регистр с маской на запрошенном коиле.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к любому коилу по его глобальному адрессу.
 | 
			
		||||
						Вне зависимости от того как коилы размещены в памяти.
 | 
			
		||||
	*/
 | 
			
		||||
uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	MB_ExceptionTypeDef Exception_tmp;
 | 
			
		||||
	if(Exception == NULL)							// if exception is not given to func fill it
 | 
			
		||||
		Exception = &Exception_tmp;
 | 
			
		||||
		
 | 
			
		||||
	uint16_t *coils;
 | 
			
		||||
	uint16_t start_shift = 0; // shift in coils register
 | 
			
		||||
	
 | 
			
		||||
	//------------READ COIL--------------
 | 
			
		||||
	*Exception = MB_DefineCoilsAddress(&coils, Addr, 1, &start_shift, 0);	
 | 
			
		||||
	if(*Exception == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		return ((*coils)&(1<<start_shift));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//----------------FUNCTIONS FOR PROCESSING MESSAGE-------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define Address Origin for Input/Holding Registers
 | 
			
		||||
	* @param 	pRegs 				- указатель на указатель регистров.
 | 
			
		||||
	* @param 	Addr 					- адрес начального регистра.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых регистров.
 | 
			
		||||
	* @param 	WriteFlag 		- флаг регистр нужны для чтения или записи.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если есть, и NO_ERRORS если нет.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Определение адреса начального регистра.
 | 
			
		||||
	* @note 	WriteFlag пока не используется.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t WriteFlag)
 | 
			
		||||
{	
 | 
			
		||||
	/* check quantity error */
 | 
			
		||||
	if (Qnt > 125)	
 | 
			
		||||
	{		
 | 
			
		||||
			return ILLEGAL_DATA_VALUE;	// return exception code
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// sensors array
 | 
			
		||||
	if(MB_Check_Address_For_Arr(Addr, Qnt, R_SINE_LOG_ADDR, R_SINE_LOG_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&sine_log, Addr);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// PWM array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_PWM_LOG_ADDR, R_PWM_LOG_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&pwm_log, Addr - R_PWM_LOG_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// counter array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_CNT_LOG_ADDR, R_CNT_LOG_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&cnt_log, Addr - R_CNT_LOG_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// time array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_TIME_LOG_ADDR, R_TIME_LOG_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&time_log, Addr - R_TIME_LOG_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// PWM array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_PWM_CTRL_ADDR, R_PWM_CTRL_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&pwm_ctrl, Addr - R_PWM_CTRL_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// log array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_LOG_CTRL_ADDR, R_LOG_CTRL_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&log_ctrl, Addr - R_LOG_CTRL_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// uart settings array
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, R_UART_CTRL_ADDR, R_UART_CTRL_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pRegs = MB_Set_Register_Ptr(&uart_ctrl, Addr - R_UART_CTRL_ADDR);	// начало регистров хранения/входных
 | 
			
		||||
	}
 | 
			
		||||
	// if address doesnt match any array - return illegal data address response
 | 
			
		||||
	else	
 | 
			
		||||
	{
 | 
			
		||||
		return ILLEGAL_DATA_ADDRESS;
 | 
			
		||||
	}
 | 
			
		||||
	// if found requeried array return no err
 | 
			
		||||
	return NO_ERRORS; // return no errors
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define Address Origin for coils
 | 
			
		||||
	* @param 	pCoils 				- указатель на указатель коилов.
 | 
			
		||||
	* @param 	Addr 					- адресс начального коила.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых коилов.
 | 
			
		||||
	* @param 	start_shift 	- указатель на переменную содержащую сдвиг внутри регистра для начального коила.
 | 
			
		||||
	* @param 	WriteFlag 		- флаг коилы нужны для чтения или записи.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если есть, и NO_ERRORS если нет.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Определение адреса начального регистра запрашиваемых коилов.
 | 
			
		||||
	* @note 	WriteFlag используется для определния регистров GPIO: ODR или IDR.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag)
 | 
			
		||||
{	
 | 
			
		||||
	/* check quantity error */
 | 
			
		||||
	if (Qnt > 2000)	
 | 
			
		||||
	{
 | 
			
		||||
		return ILLEGAL_DATA_VALUE;	// return exception code
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
	// gpiod coils
 | 
			
		||||
	if(MB_Check_Address_For_Arr(Addr, Qnt, C_GPIOD_ADDR, C_GPIOD_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		if(WriteFlag)		// if write set odr
 | 
			
		||||
			*pCoils = MB_Set_Coil_Reg_Ptr(&GPIOD->ODR, Addr);
 | 
			
		||||
		else						// if read set idr
 | 
			
		||||
			*pCoils = MB_Set_Coil_Reg_Ptr(&GPIOD->IDR, Addr);
 | 
			
		||||
	}
 | 
			
		||||
	// peripheral control coils
 | 
			
		||||
	else if(MB_Check_Address_For_Arr(Addr, Qnt, C_CTRL_COILS_ADDR, C_CTRL_COILS_QNT) == NO_ERRORS)
 | 
			
		||||
	{
 | 
			
		||||
		*pCoils = MB_Set_Coil_Reg_Ptr(&coils_regs, Addr-C_CTRL_COILS_ADDR);
 | 
			
		||||
	}
 | 
			
		||||
	// if address doesnt match any array - return illegal data address response
 | 
			
		||||
	else	
 | 
			
		||||
	{
 | 
			
		||||
		return ILLEGAL_DATA_ADDRESS;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	*start_shift = Addr % 16;	// set shift to requested coil
 | 
			
		||||
	// if found requeried array return no err
 | 
			
		||||
	return NO_ERRORS;	// return no errors
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Check is address valid for certain array.
 | 
			
		||||
	* @param 	Addr 					- начальный адресс.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых элементов.
 | 
			
		||||
	* @param 	R_ARR_ADDR 		- начальный адресс массива R_ARR.
 | 
			
		||||
	* @param 	R_ARR_NUMB 		- количество элементов в массиве R_ARR.
 | 
			
		||||
	* @return ExceptionCode	- ILLEGAL DATA ADRESS если адресс недействителен, и NO_ERRORS если все ок.
 | 
			
		||||
	*
 | 
			
		||||
	* @note 	Позволяет определить, принадлежит ли адресс Addr массиву R_ARR:
 | 
			
		||||
	*					Если адресс Addr находится в диапазоне адрессов массива R_ARR, то возвращаем NO_ERROR.
 | 
			
		||||
	*					Если адресс Addr находится за пределами адрессов массива R_ARR - ILLEGAL_DATA_ADDRESSю.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB)
 | 
			
		||||
{
 | 
			
		||||
	// if address from this array
 | 
			
		||||
	if(Addr >= R_ARR_ADDR) 
 | 
			
		||||
	{		
 | 
			
		||||
		// if quantity too big return error
 | 
			
		||||
		if ((Addr - R_ARR_ADDR) + Qnt > R_ARR_NUMB) 
 | 
			
		||||
		{
 | 
			
		||||
			return ILLEGAL_DATA_ADDRESS;	// return exception code
 | 
			
		||||
		}
 | 
			
		||||
		// if all ok - return no errors
 | 
			
		||||
		return NO_ERRORS;
 | 
			
		||||
	}
 | 
			
		||||
	// if address isnt from this array return error
 | 
			
		||||
	else 
 | 
			
		||||
		return ILLEGAL_DATA_ADDRESS;	// return exception code		
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Proccess command Read Coils (01 - 0x01).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Read Coils.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	uint16_t *coils;
 | 
			
		||||
	uint16_t start_shift = 0; // shift in coils register
 | 
			
		||||
	
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 0);
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
	//-----------READING COIL------------
 | 
			
		||||
	// setup output message data size	
 | 
			
		||||
	modbus_msg->ByteCnt = Divide_Up(modbus_msg->Qnt, 8);
 | 
			
		||||
	// create mask for coils
 | 
			
		||||
	uint16_t mask_for_coils = 0;	// mask for coils that've been chosen
 | 
			
		||||
	uint16_t setted_coils = 0;		// value of setted coils
 | 
			
		||||
	uint16_t temp_reg = 0;				// temp register for saving coils that hasnt been chosen
 | 
			
		||||
	uint16_t coil_cnt = 0;				// counter for processed coils
 | 
			
		||||
 | 
			
		||||
	// cycle until all registers with requered coils would be processed
 | 
			
		||||
	int shift = start_shift; 	// set shift to first coil in first register
 | 
			
		||||
	int ind = 0;							// index for coils registers and data
 | 
			
		||||
	for(; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++)
 | 
			
		||||
	{ 
 | 
			
		||||
		//----SET MASK FOR COILS REGISTER----
 | 
			
		||||
		mask_for_coils = 0;
 | 
			
		||||
		for(; shift < 0x10; shift++)
 | 
			
		||||
		{
 | 
			
		||||
			mask_for_coils |= 1<<(shift); // choose certain coil
 | 
			
		||||
			if(++coil_cnt >= modbus_msg->Qnt)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		shift = 0; // set shift to zero for the next step
 | 
			
		||||
	
 | 
			
		||||
		//-----------READ COILS--------------
 | 
			
		||||
		modbus_msg->DATA[ind] = (*(coils+ind)&mask_for_coils) >> start_shift;
 | 
			
		||||
		if(ind > 0)
 | 
			
		||||
			modbus_msg->DATA[ind-1] |= ((*(coils+ind)&mask_for_coils) << 16) >> start_shift;
 | 
			
		||||
			
 | 
			
		||||
	}
 | 
			
		||||
	// т.к. DATA 16-битная, для 8-битной передачи, надо поменять местами верхний и нижний байты
 | 
			
		||||
	for(; ind >= 0; --ind)	
 | 
			
		||||
		modbus_msg->DATA[ind] = ByteSwap16(modbus_msg->DATA[ind]);
 | 
			
		||||
	
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Read Holding Registers (03 - 0x03).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Read Holding Registers.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------	
 | 
			
		||||
	// get origin address for data
 | 
			
		||||
	uint16_t *pHoldRegs; 			
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, modbus_msg->Qnt, NULL);	// определение адреса регистров
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	//-----------READING REGS------------
 | 
			
		||||
	// setup output message data size	
 | 
			
		||||
	modbus_msg->ByteCnt = modbus_msg->Qnt*2; // *2 because we transmit 8 bits, not 16 bits
 | 
			
		||||
	// read data
 | 
			
		||||
	int i;
 | 
			
		||||
	for (i = 0; i<modbus_msg->Qnt; i++)
 | 
			
		||||
	{
 | 
			
		||||
		modbus_msg->DATA[i]	= *(pHoldRegs++);
 | 
			
		||||
	}	
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Single Coils (05 - 0x05).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Single Coils.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	if ((modbus_msg->Qnt != 0x0000) && (modbus_msg->Qnt != 0xFF00))
 | 
			
		||||
	{
 | 
			
		||||
		modbus_msg->Except_Code = ILLEGAL_DATA_VALUE;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}		
 | 
			
		||||
	// define position of coil
 | 
			
		||||
	uint16_t *coils;
 | 
			
		||||
	uint16_t start_shift = 0; // shift in coils register
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, 0, &start_shift, 1);
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	//----------WRITTING COIL------------
 | 
			
		||||
	if(modbus_msg->Qnt == 0xFF00)
 | 
			
		||||
		*(coils) |= 1<<start_shift; // write flags corresponding to received data
 | 
			
		||||
	else
 | 
			
		||||
		*(coils) &= ~(1<<start_shift); // write flags corresponding to received data
 | 
			
		||||
	
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Single Register (06 - 0x06).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Single Register.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Write_Single_Reg(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{	
 | 
			
		||||
	// get origin address for data
 | 
			
		||||
	uint16_t *pInputRegs; 			
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineRegistersAddress(&pInputRegs, modbus_msg->Addr, 1, NULL);	// определение адреса регистров
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
	//-----------WRITTING REG------------	
 | 
			
		||||
	*(pInputRegs) = modbus_msg->Qnt;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Multiple Coils (15 - 0x0F).
 | 
			
		||||
	* @param 	modbus_msg 			- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled	- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Multiple Coils.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	if (modbus_msg->ByteCnt != Divide_Up(modbus_msg->Qnt, 8))
 | 
			
		||||
	{ // if quantity too large OR if quantity and bytes count arent match
 | 
			
		||||
		modbus_msg->Except_Code = ILLEGAL_DATA_VALUE;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}	
 | 
			
		||||
	// define position of coil
 | 
			
		||||
	uint16_t *coils;					// pointer to coils
 | 
			
		||||
	uint16_t start_shift = 0; // shift in coils register
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 1);
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
	//----------WRITTING COILS-----------
 | 
			
		||||
	// create mask for coils
 | 
			
		||||
	uint16_t mask_for_coils = 0;	// mask for coils that've been chosen
 | 
			
		||||
	uint32_t setted_coils = 0;		// value of setted coils
 | 
			
		||||
	uint16_t temp_reg = 0;				// temp register for saving coils that hasnt been chosen
 | 
			
		||||
	uint16_t coil_cnt = 0;				// counter for processed coils
 | 
			
		||||
 | 
			
		||||
	// cycle until all registers with requered coils would be processed
 | 
			
		||||
	int shift = start_shift; // set shift to first coil in first register
 | 
			
		||||
	for(int ind = 0; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++)
 | 
			
		||||
	{ 
 | 
			
		||||
		//----SET MASK FOR COILS REGISTER----
 | 
			
		||||
		mask_for_coils = 0;
 | 
			
		||||
		for(; shift < 0x10; shift++)
 | 
			
		||||
		{
 | 
			
		||||
			mask_for_coils |= 1<<(shift); // choose certain coil
 | 
			
		||||
			if(++coil_cnt >= modbus_msg->Qnt)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		shift = 0; // set shift to zero for the next step
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		//-----------WRITE COILS-------------
 | 
			
		||||
		// get current coils
 | 
			
		||||
		temp_reg = *(coils+ind);
 | 
			
		||||
		// set coils
 | 
			
		||||
		setted_coils = ByteSwap16(modbus_msg->DATA[ind]) << start_shift;
 | 
			
		||||
		if(ind > 0)
 | 
			
		||||
		{
 | 
			
		||||
			setted_coils |= ((ByteSwap16(modbus_msg->DATA[ind-1]) << start_shift) >> 16);
 | 
			
		||||
		}
 | 
			
		||||
		// write coils
 | 
			
		||||
			
 | 
			
		||||
		*(coils+ind) = setted_coils & mask_for_coils;		
 | 
			
		||||
		 // restore untouched coils
 | 
			
		||||
		*(coils+ind) |= temp_reg&(~mask_for_coils);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		if(coil_cnt >= modbus_msg->Qnt) // if all coils written - break cycle
 | 
			
		||||
			break;												// *kind of unnecessary
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Multiple Registers (16 - 0x10).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Multiple Registers.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	//---------CHECK FOR ERRORS----------
 | 
			
		||||
	if (modbus_msg->Qnt*2 != modbus_msg->ByteCnt)
 | 
			
		||||
	{ // if quantity and bytes count arent match
 | 
			
		||||
		modbus_msg->Except_Code = 3;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}	
 | 
			
		||||
	// get origin address for data
 | 
			
		||||
	uint16_t *pInputRegs; 			
 | 
			
		||||
	modbus_msg->Except_Code = MB_DefineRegistersAddress(&pInputRegs, modbus_msg->Addr, modbus_msg->Qnt, NULL);	// определение адреса регистров
 | 
			
		||||
	if(modbus_msg->Except_Code != NO_ERRORS)
 | 
			
		||||
		return 0;
 | 
			
		||||
	
 | 
			
		||||
	//-----------WRITTING REGS-----------	
 | 
			
		||||
	for (int i = 0; i<modbus_msg->Qnt; i++)
 | 
			
		||||
	{
 | 
			
		||||
		*(pInputRegs++) = modbus_msg->DATA[i];
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Respond accord to received message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о результате ответа на комманду.
 | 
			
		||||
	* @note		Обработка принятой комманды и ответ на неё.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
 | 
			
		||||
{
 | 
			
		||||
	RS_StatusTypeDef MB_RES = 0;
 | 
			
		||||
	hmodbus->fMessageHandled = 0;
 | 
			
		||||
	hmodbus->fEchoResponse = 0;
 | 
			
		||||
	RS_Reset_TX_Flags(hmodbus);			// reset flag for correct transmit
 | 
			
		||||
	
 | 
			
		||||
	if(modbus_msg->Func_Code < ERR_VALUES_START)// if no errors after parsing
 | 
			
		||||
	{
 | 
			
		||||
		switch (modbus_msg->Func_Code)
 | 
			
		||||
		{
 | 
			
		||||
			// Read Coils
 | 
			
		||||
			case MB_R_COILS: 
 | 
			
		||||
				hmodbus->fMessageHandled = 	MB_Read_Coils(hmodbus->pMessagePtr);
 | 
			
		||||
				break;
 | 
			
		||||
//			case MB_R_DISC_IN: 		break;
 | 
			
		||||
			
 | 
			
		||||
			// Read Hodling Registers
 | 
			
		||||
			case MB_R_HOLD_REGS: 
 | 
			
		||||
			case MB_R_IN_REGS: 
 | 
			
		||||
				hmodbus->fMessageHandled = 	MB_Read_Hold_Regs(hmodbus->pMessagePtr);
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
			// Write Single Coils
 | 
			
		||||
			case MB_W_COIL: 
 | 
			
		||||
				hmodbus->fMessageHandled =	MB_Write_Single_Coil(hmodbus->pMessagePtr);	
 | 
			
		||||
				if(hmodbus->fMessageHandled) hmodbus->fEchoResponse = 1;  // echo response if write ok
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
			case MB_W_IN_REG: 	
 | 
			
		||||
				hmodbus->fMessageHandled =	MB_Write_Single_Reg(hmodbus->pMessagePtr);	
 | 
			
		||||
				if(hmodbus->fMessageHandled) hmodbus->fEchoResponse = 1;  // echo response if write ok
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
			// Write Multiple Coils
 | 
			
		||||
			case MB_W_COILS: 
 | 
			
		||||
				hmodbus->fMessageHandled = 	MB_Write_Miltuple_Coils(hmodbus->pMessagePtr);
 | 
			
		||||
				if(hmodbus->fMessageHandled) hmodbus->fEchoResponse = 1; hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes)
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
			// Write Multiple Registers
 | 
			
		||||
			case MB_W_IN_REGS:
 | 
			
		||||
				hmodbus->fMessageHandled = 	MB_Write_Miltuple_Regs(hmodbus->pMessagePtr);
 | 
			
		||||
				if(hmodbus->fMessageHandled) hmodbus->fEchoResponse = 1; hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes)
 | 
			
		||||
				break;
 | 
			
		||||
			
 | 
			
		||||
			/* unknown func code */
 | 
			
		||||
			default: modbus_msg->Except_Code = 0x01; /* set exception code: illegal function */
 | 
			
		||||
		}		
 | 
			
		||||
				
 | 
			
		||||
		if(hmodbus->fMessageHandled == 0)
 | 
			
		||||
			modbus_msg->Func_Code += ERR_VALUES_START;
 | 
			
		||||
		
 | 
			
		||||
			
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// if we need response - check that transmit isnt busy
 | 
			
		||||
	if( RS_Is_TX_Busy(hmodbus) ) 
 | 
			
		||||
		RS_Abort(hmodbus, ABORT_TX);		// if tx busy - set it free
 | 
			
		||||
	
 | 
			
		||||
	// Transmit right there, or sets (fDeferredResponse) to transmit response in main code	
 | 
			
		||||
	MB_RES = RS_Handle_Transmit_Start(hmodbus, modbus_msg);
 | 
			
		||||
	
 | 
			
		||||
	hmodbus->RS_STATUS = MB_RES;
 | 
			
		||||
	return MB_RES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Collect message in buffer to transmit it.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
	* @return RS_RES				- статус о результате заполнения буфера.
 | 
			
		||||
	* @note		Заполнение буффера UART из структуры сообщения.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)
 | 
			
		||||
{
 | 
			
		||||
	int ind = 0; // ind for modbus-uart buffer
 | 
			
		||||
	
 | 
			
		||||
	if(hmodbus->fEchoResponse && hmodbus->fMessageHandled) 	// if echo response need
 | 
			
		||||
		ind = hmodbus->RS_Message_Size;
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		//------INFO ABOUT DATA/MESSAGE------
 | 
			
		||||
		//-----------[first bytes]-----------
 | 
			
		||||
		// set ID of message/user
 | 
			
		||||
		modbus_uart_buff[ind++] = modbus_msg->MbAddr;	
 | 
			
		||||
 | 
			
		||||
		// set dat or err response
 | 
			
		||||
		modbus_uart_buff[ind++] = modbus_msg->Func_Code;	
 | 
			
		||||
 | 
			
		||||
		if (modbus_msg->Func_Code < ERR_VALUES_START) // if no error occur
 | 
			
		||||
		{
 | 
			
		||||
			// set size of received data
 | 
			
		||||
			if (modbus_msg->ByteCnt <= DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
 | 
			
		||||
				modbus_uart_buff[ind++] = modbus_msg->ByteCnt;
 | 
			
		||||
			else																				// otherwise return data_size err
 | 
			
		||||
				return RS_COLLECT_MSG_ERR;
 | 
			
		||||
			
 | 
			
		||||
			//---------------DATA----------------
 | 
			
		||||
			//-----------[data bytes]------------
 | 
			
		||||
			uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
 | 
			
		||||
			for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
 | 
			
		||||
			{	// set data
 | 
			
		||||
				if (i%2 == 0)		// HI byte
 | 
			
		||||
					modbus_uart_buff[ind++] = (*tmp_data_addr)>>8;
 | 
			
		||||
				else						// LO byte
 | 
			
		||||
				{
 | 
			
		||||
					modbus_uart_buff[ind++] = *tmp_data_addr;
 | 
			
		||||
					tmp_data_addr++;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else 	// if some error occur
 | 
			
		||||
		{			// send expection code
 | 
			
		||||
			modbus_uart_buff[ind++] = modbus_msg->Except_Code;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	//---------------CRC----------------
 | 
			
		||||
	//---------[last 16 bytes]----------
 | 
			
		||||
	// calc crc of received data
 | 
			
		||||
	uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);
 | 
			
		||||
	// write crc to message structure and modbus-uart buffer
 | 
			
		||||
	modbus_msg->MB_CRC = CRC_VALUE;
 | 
			
		||||
	modbus_uart_buff[ind++] = CRC_VALUE;
 | 
			
		||||
	modbus_uart_buff[ind++] = CRC_VALUE >> 8;
 | 
			
		||||
	
 | 
			
		||||
	hmodbus->RS_Message_Size = ind;
 | 
			
		||||
	
 | 
			
		||||
	return RS_OK; // returns ok
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Parse message from buffer to process it.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
	* @return RS_RES				- статус о результате заполнения структуры.
 | 
			
		||||
	* @note		Заполнение структуры сообщения из буффера UART.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t check_empty_buff;
 | 
			
		||||
	int ind = 0; // ind for modbus-uart buffer
 | 
			
		||||
	//-----INFO ABOUT DATA/MESSAGE-------
 | 
			
		||||
	//-----------[first bits]------------
 | 
			
		||||
	// get ID of message/user
 | 
			
		||||
	modbus_msg->MbAddr = modbus_uart_buff[ind++];
 | 
			
		||||
	if(modbus_msg->MbAddr != hmodbus->ID)
 | 
			
		||||
		return RS_SKIP;
 | 
			
		||||
	
 | 
			
		||||
	// get dat or err response
 | 
			
		||||
	modbus_msg->Func_Code = modbus_uart_buff[ind++];
 | 
			
		||||
	
 | 
			
		||||
	// get address from CMD
 | 
			
		||||
	modbus_msg->Addr = modbus_uart_buff[ind++] << 8;
 | 
			
		||||
	modbus_msg->Addr |= modbus_uart_buff[ind++];
 | 
			
		||||
	
 | 
			
		||||
	// get address from CMD
 | 
			
		||||
	modbus_msg->Qnt = modbus_uart_buff[ind++] << 8;
 | 
			
		||||
	modbus_msg->Qnt |= modbus_uart_buff[ind++];
 | 
			
		||||
	
 | 
			
		||||
	if(hmodbus->fRX_Half == 0) // if all message received
 | 
			
		||||
	{
 | 
			
		||||
		//---------------DATA----------------
 | 
			
		||||
		// 					  (optional)
 | 
			
		||||
		if (modbus_msg->ByteCnt != 0)
 | 
			
		||||
		{
 | 
			
		||||
			ind++; // increment ind for data_size byte
 | 
			
		||||
			//check that data size is correct
 | 
			
		||||
			if (modbus_msg->ByteCnt > DATA_SIZE)
 | 
			
		||||
			{
 | 
			
		||||
	//			hmodbus->MB_RESPONSE = MB_DATA_SIZE_ERR; // set func code - error data size more than maximumif yes, set func code -  error about empty message
 | 
			
		||||
				modbus_msg->Func_Code += ERR_VALUES_START;
 | 
			
		||||
				return RS_PARSE_MSG_ERR;
 | 
			
		||||
			}
 | 
			
		||||
			uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
 | 
			
		||||
			for(int i = 0; i < modbus_msg->ByteCnt; i++) // /2 because we transmit 8 bits, not 16 bits
 | 
			
		||||
			{	// set data
 | 
			
		||||
				if (i%2 == 0)
 | 
			
		||||
					*tmp_data_addr = ((uint16_t)modbus_uart_buff[ind++] << 8);
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					*tmp_data_addr |= modbus_uart_buff[ind++];
 | 
			
		||||
					tmp_data_addr++;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//---------------CRC----------------
 | 
			
		||||
		//----------[last 16 bits]----------
 | 
			
		||||
		// calc crc of received data
 | 
			
		||||
		uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);
 | 
			
		||||
		// get crc of received data
 | 
			
		||||
		modbus_msg->MB_CRC = modbus_uart_buff[ind++];
 | 
			
		||||
		modbus_msg->MB_CRC |= modbus_uart_buff[ind++] << 8;
 | 
			
		||||
		// compare crc
 | 
			
		||||
		if (modbus_msg->MB_CRC != CRC_VALUE)
 | 
			
		||||
			modbus_msg->Func_Code += ERR_VALUES_START;
 | 
			
		||||
	//		hmodbus->MB_RESPONSE = MB_CRC_ERR; // set func code - error about wrong crc
 | 
			
		||||
		
 | 
			
		||||
		// check is buffer empty
 | 
			
		||||
		check_empty_buff = 0;
 | 
			
		||||
		for(int i=0; i<ind;i++)
 | 
			
		||||
			check_empty_buff += modbus_uart_buff[i];
 | 
			
		||||
	//	if(check_empty_buff == 0) 
 | 
			
		||||
	//		hmodbus->MB_RESPONSE = MB_EMPTY_MSG; // 
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return RS_OK;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define size of RX Message that need to be received.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	rx_data_size 	- указатель на переменную для записи кол-ва байт для принятия.
 | 
			
		||||
	* @return RS_RES				- статус о корректности рассчета кол-ва байт для принятия.
 | 
			
		||||
	* @note		Определение сколько байтов надо принять по протоколу.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_t *rx_data_size)
 | 
			
		||||
{		
 | 
			
		||||
	RS_StatusTypeDef MB_RES = 0;
 | 
			
		||||
	
 | 
			
		||||
	MB_RES = Parse_Message(hmodbus, hmodbus->pMessagePtr, hmodbus->pBufferPtr);
 | 
			
		||||
	if(MB_RES == RS_SKIP) // if message not for us
 | 
			
		||||
		return MB_RES;																// return 
 | 
			
		||||
	
 | 
			
		||||
	if ((hmodbus->pMessagePtr->Func_Code & ~ERR_VALUES_START) < 0x0F)
 | 
			
		||||
	{
 | 
			
		||||
		hmodbus->pMessagePtr->ByteCnt = 0;
 | 
			
		||||
		*rx_data_size = 1;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		hmodbus->pMessagePtr->ByteCnt = hmodbus->pBufferPtr[RX_FIRST_PART_SIZE-1]; // get numb of data in command
 | 
			
		||||
	// +1 because that defines is size, not ind.
 | 
			
		||||
		*rx_data_size = hmodbus->pMessagePtr->ByteCnt + 2;
 | 
			
		||||
	}
 | 
			
		||||
	hmodbus->RS_Message_Size = RX_FIRST_PART_SIZE + *rx_data_size; // size of whole message
 | 
			
		||||
	return RS_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------FOR USER------------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-------------------------HANDLERS FUNCTION-------------------------
 | 
			
		||||
#if (MODBUS_UART_NUMB == 1) // choose handler for UART
 | 
			
		||||
void USART1_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 2)
 | 
			
		||||
void USART2_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 3)
 | 
			
		||||
void USART3_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 4)
 | 
			
		||||
void USART4_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 5)
 | 
			
		||||
void USART5_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 6)
 | 
			
		||||
void USART6_IRQHandler(void)
 | 
			
		||||
#endif
 | 
			
		||||
{	
 | 
			
		||||
	Trace_MB_UART_Enter();
 | 
			
		||||
	RS_UART_Handler(&hmodbus1);
 | 
			
		||||
	Trace_MB_UART_Exit();
 | 
			
		||||
}
 | 
			
		||||
#if (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 10) // choose handler for TIM
 | 
			
		||||
void TIM1_UP_TIM10_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 2)
 | 
			
		||||
void TIM2_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 3)
 | 
			
		||||
void TIM3_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 4)
 | 
			
		||||
void TIM4_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 5)
 | 
			
		||||
void TIM5_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 6)
 | 
			
		||||
void TIM6_DAC_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 7)
 | 
			
		||||
void TIM7_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 13)
 | 
			
		||||
void TIM8_UP_TIM13_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 9)
 | 
			
		||||
void TIM1_BRK_TIM9_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 11)
 | 
			
		||||
void TIM1_TRG_COM_TIM11_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 12)
 | 
			
		||||
void TIM8_BRK_TIM12_IRQHandler(void)
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 14)
 | 
			
		||||
void TIM8_TRG_COM_TIM14_IRQHandler(void)
 | 
			
		||||
#endif
 | 
			
		||||
{	
 | 
			
		||||
	Trace_MB_TIM_Enter();
 | 
			
		||||
	RS_TIM_Handler(&hmodbus1);
 | 
			
		||||
	Trace_MB_TIM_Exit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------HANDLERS FUNCTION-------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
@ -1,418 +0,0 @@
 | 
			
		||||
/********************************MODBUS*************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для реализации 
 | 
			
		||||
MODBUS.
 | 
			
		||||
Данный файл необходимо подключить в rs_message.h. После подключать rs_message.h
 | 
			
		||||
к основному проекту.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __MODBUS_H_
 | 
			
		||||
#define __MODBUS_H_
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
#include "modbus_data.h"
 | 
			
		||||
#include "settings.h"		// for modbus settings
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
//////////////////////////---SETTINGS---/////////////////////////////
 | 
			
		||||
////----------DEFINES FOR MODBUS SETTING--------------
 | 
			
		||||
//#define MODBUS_UART_NUMB 							3			// number of used uart
 | 
			
		||||
//#define MODBUS_SPEED									115200
 | 
			
		||||
//#define MODBUS_GPIOX									GPIOB
 | 
			
		||||
//#define MODBUS_GPIO_PIN_RX						GPIO_PIN_11
 | 
			
		||||
//#define MODBUS_GPIO_PIN_TX						GPIO_PIN_10
 | 
			
		||||
///* accord to this define sets define USED_MB_UART = USARTx */
 | 
			
		||||
//#define MODBUS_TIM_NUMB 							7			// number of used uart
 | 
			
		||||
//#define MODBUS_TIM_AHB_FREQ						72
 | 
			
		||||
///* accord to this define sets define USED_MB_TIM = TIMx */
 | 
			
		||||
 | 
			
		||||
///* defines for modbus behaviour */
 | 
			
		||||
//#define MODBUS_DEVICE_ID 										1			// number of used uart
 | 
			
		||||
//#define MODBUS_MAX_TIMEOUT 						5000 	// is ms
 | 
			
		||||
//// custom define for size of receive message 
 | 
			
		||||
////--------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//---------------MODBUS DEVICE DATA-----------------
 | 
			
		||||
/* EXTERN REGISTERS/COILS */ 
 | 
			
		||||
 | 
			
		||||
extern uint16_t sine_log[R_SINE_LOG_QNT];					// start from 0x0000
 | 
			
		||||
extern uint16_t pwm_log[R_PWM_LOG_QNT];						// start from 500 (0x1F4)
 | 
			
		||||
extern uint16_t cnt_log[R_CNT_LOG_QNT];						// start from 100 (0x3E8)
 | 
			
		||||
extern uint16_t time_log[R_TIME_LOG_QNT];					// start from 1500 (0x5DC)
 | 
			
		||||
 | 
			
		||||
extern uint16_t pwm_ctrl[R_PWM_CTRL_QNT];					// start from 2000 (0x7D0)
 | 
			
		||||
extern uint16_t log_ctrl[R_LOG_CTRL_QNT];					// start from 2008 (0x7D0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern uint16_t uart_ctrl[R_UART_CTRL_QNT];
 | 
			
		||||
 | 
			
		||||
extern uint16_t coils_regs[C_CTRL_COILS_QNT];				// start from 0x0001 (16th bit)
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
//////////////////////////---SETTINGS---/////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////////////---USER MESSAGE DEFINES---//////////////////////
 | 
			
		||||
//-------------DEFINES FOR STRUCTURE----------------
 | 
			
		||||
/* defines for structure of modbus message */
 | 
			
		||||
#define MbAddr_SIZE 						1						// size of (MbAddr)
 | 
			
		||||
#define Func_Code_SIZE					1						// size of (Func_Code)
 | 
			
		||||
#define	Addr_SIZE								2						// size of (Addr)
 | 
			
		||||
#define Qnt_SIZE								2						// size of (Qnt)
 | 
			
		||||
#define ByteCnt_SIZE						1						// size of (ByteCnt)
 | 
			
		||||
#define DATA_SIZE 					125 				// maximum number of data: DWORD (NOT MESSAGE SIZE)
 | 
			
		||||
#define CRC_SIZE 								2 					// size of (MB_CRC) in bytes
 | 
			
		||||
 | 
			
		||||
/* size of info */
 | 
			
		||||
#define INFO_SIZE_MAX 					(MbAddr_SIZE+Func_Code_SIZE+Addr_SIZE+Qnt_SIZE+ByteCnt_SIZE)
 | 
			
		||||
 | 
			
		||||
/* size of first part of message that will be received
 | 
			
		||||
first receive info part of message, than defines size of rest message*/
 | 
			
		||||
#define RX_FIRST_PART_SIZE			INFO_SIZE_MAX
 | 
			
		||||
 | 
			
		||||
/* size of buffer: max size of whole message */
 | 
			
		||||
#define MSG_SIZE_MAX 						(INFO_SIZE_MAX + DATA_SIZE*2 + CRC_SIZE) // max possible size of message
 | 
			
		||||
 | 
			
		||||
/* Structure for modbus exception codes */
 | 
			
		||||
typedef enum //MB_ExceptionTypeDef
 | 
			
		||||
{
 | 
			
		||||
	// reading
 | 
			
		||||
	NO_ERRORS =							0x00,		// no errors
 | 
			
		||||
	ILLEGAL_FUNCTION =			0x01,		// function cannot be processed
 | 
			
		||||
	ILLEGAL_DATA_ADDRESS =	0x02,		// data at this address is not available
 | 
			
		||||
	ILLEGAL_DATA_VALUE =		0x03,		// uncorrect data value (quantity too big and cannot be returned or value for coil is incorrect)
 | 
			
		||||
	SLAVE_DEVICE_FAILURE =	0x04,		// idk
 | 
			
		||||
	ACKNOWLEDGE =						0x05,		// idk
 | 
			
		||||
	SLAVE_DEVICE_BUSY =			0x06,		// idk
 | 
			
		||||
	MEMORY_PARITY_ERROR =		0x08,		// idk
 | 
			
		||||
}MB_ExceptionTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Structure for modbus func codes */
 | 
			
		||||
typedef enum //MB_FunctonTypeDef
 | 
			
		||||
{
 | 
			
		||||
	// reading
 | 
			
		||||
	MB_R_COILS = 			0x01,
 | 
			
		||||
	MB_R_DISC_IN = 		0x02,
 | 
			
		||||
	MB_R_IN_REGS = 		0x03,
 | 
			
		||||
	MB_R_HOLD_REGS = 	0x04,
 | 
			
		||||
	
 | 
			
		||||
	// writting
 | 
			
		||||
	MB_W_COIL = 			0x05,
 | 
			
		||||
	MB_W_IN_REG = 		0x06,
 | 
			
		||||
	MB_W_COILS = 			0x0F,
 | 
			
		||||
	MB_W_IN_REGS = 		0x10,
 | 
			
		||||
}MB_FunctonTypeDef;
 | 
			
		||||
#define ERR_VALUES_START				0x80U				// from this value starts error func codes
 | 
			
		||||
 | 
			
		||||
/* Structure for modbus messsage */
 | 
			
		||||
typedef struct 	// RS_MsgTypeDef
 | 
			
		||||
{
 | 
			
		||||
	uint8_t 							MbAddr;
 | 
			
		||||
	MB_FunctonTypeDef 		Func_Code;
 | 
			
		||||
	uint16_t 							Addr;
 | 
			
		||||
	uint16_t 							Qnt;
 | 
			
		||||
	uint8_t 							ByteCnt;
 | 
			
		||||
	
 | 
			
		||||
	uint16_t 							DATA[DATA_SIZE];
 | 
			
		||||
	MB_ExceptionTypeDef		Except_Code;
 | 
			
		||||
	
 | 
			
		||||
	uint16_t 							MB_CRC;
 | 
			
		||||
}RS_MsgTypeDef;
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
/////////////////////---USER MESSAGE DEFINES---//////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////////////---GENERAL MODBUS STUFF---//////////////////////
 | 
			
		||||
/* Structure for coils operation */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
//	READ_COIL,
 | 
			
		||||
	SET_COIL,
 | 
			
		||||
	RESET_COIL,
 | 
			
		||||
	TOOGLE_COIL,
 | 
			
		||||
}MB_CoilsOpTypeDef;
 | 
			
		||||
 | 
			
		||||
//------------DEFINES FOR PROCESS DATA--------------
 | 
			
		||||
/**
 | 
			
		||||
	* @brief	Calc dividing including remainder
 | 
			
		||||
	*	@param 	_val_		- делимое.
 | 
			
		||||
	*	@param 	_div_		- делитель.
 | 
			
		||||
	*	@note 	Если результат деления без остатка: он возвращается как есть
 | 
			
		||||
						Если с остатком - округляется вверх
 | 
			
		||||
	*/
 | 
			
		||||
//#define Divide_Up(_val_, _div_)												(((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_)	/* через тернарный оператор */
 | 
			
		||||
#define Divide_Up(_val_, _div_)												((_val_ - 1) / _div_) + 1																	/* через мат выражение */	
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Swap between Little Endian and Big Endian
 | 
			
		||||
	* @param 	v 			- Переменная для свапа.
 | 
			
		||||
  * @return v (new)	- Свапнутая переменная.
 | 
			
		||||
  * @note 	Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
 | 
			
		||||
	*/
 | 
			
		||||
#define ByteSwap16(v)																	(((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------DEFINES FOR ACCESS TO DATA-------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Macros to set pointer to 16-bit array
 | 
			
		||||
	* @param 	_arr_ 				- массив слов (16-бит).
 | 
			
		||||
	*/
 | 
			
		||||
#define MB_Set_Arr16_Ptr(_arr_)												((uint16_t*)(&(_arr_)))
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Macros to set pointer to register
 | 
			
		||||
	* @param 	_parr_ 				- массив регистров.
 | 
			
		||||
	* @param 	_addr_ 				- Номер регистра (его индекс) от начала массива _arr_.
 | 
			
		||||
	*/
 | 
			
		||||
#define MB_Set_Register_Ptr(_parr_, _addr_)						((uint16_t *)(_parr_)+(_addr_))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Macros to set pointer to a certain register that contains certain coil
 | 
			
		||||
	* @param 	_parr_ 				- массив коилов.
 | 
			
		||||
	* @param 	_coil_ 				- Номер коила от начала массива _arr_.
 | 
			
		||||
	*	@note		Пояснение выражений
 | 
			
		||||
	* 					(_coil_/16) - get index (address shift) of register that contain certain coil 
 | 
			
		||||
	*						(16*(_coil_/16) - how many coils we need to skip. e.g. (16*30/16) - skip 16 coils from first register
 | 
			
		||||
	*						_coil_-(16*(_coil_/16)) - shift to certain coil in certain register
 | 
			
		||||
	*					e.g. Coil(30) gets in register[1] (30/16 = 1) coil №14 (30 - (16*30/16) = 30 - 16 = 14)
 | 
			
		||||
	* 
 | 
			
		||||
	* Visual explanation:
 | 
			
		||||
	* xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxCx
 | 
			
		||||
	* |register[0]----|	|register[1]----|
 | 
			
		||||
	*	|skip this------|	|get this-------|
 | 
			
		||||
	*										|shift to 14 bit|
 | 
			
		||||
	*/
 | 
			
		||||
#define MB_Set_Coil_Reg_Ptr(_parr_, _coil_)						((uint16_t *)(_parr_)+((_coil_)/16))
 | 
			
		||||
#define MB_Set_Coil_Mask(_coil_)											(1 << ( _coil_ - (16*((_coil_)/16)) ))
 | 
			
		||||
	
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Read Coil at its local address.
 | 
			
		||||
	* @param 	_parr_ 				- массив коилов.
 | 
			
		||||
	* @param 	_coil_ 				- Номер коила от начала массива _arr_.
 | 
			
		||||
	* @return uint16_t			- Возвращает весь регистр с маской на запрошенном коиле.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к коилу по адресу относительно _arr_.
 | 
			
		||||
	*/
 | 
			
		||||
#define MB_Read_Coil_Local(_parr_, _coil_)					((	*MB_Set_Coil_Reg_Ptr(_parr_, _coil_)	&		MB_Set_Coil_Mask(_coil_) ) >> _coil_)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Coil at its local address.
 | 
			
		||||
	* @param 	_parr_ 				- указатель на массив коилов.
 | 
			
		||||
	* @param 	_coil_ 				- Номер коила от начала массива _arr_.
 | 
			
		||||
	*	
 | 
			
		||||
  * @note 	Позволяет обратиться к коилу по адресу относительно _arr_.
 | 
			
		||||
	*/
 | 
			
		||||
#define	MB_Set_Coil_Local(_parr_, _coil_)							*MB_Set_Coil_Reg_Ptr(_parr_, _coil_) 	|= 	MB_Set_Coil_Mask(_coil_)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Reset Coil at its local address.
 | 
			
		||||
	* @param 	_parr_ 				- указатель на массив коилов.
 | 
			
		||||
	* @param 	_coil_ 				- Номер коила от начала массива _arr_.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к коилу по адресу относительно _arr_.
 | 
			
		||||
	*/
 | 
			
		||||
#define MB_Reset_Coil_Local(_parr_, _coil_)						*MB_Set_Coil_Reg_Ptr(_parr_, _coil_) 	&= ~(MB_Set_Coil_Mask(_coil_))
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Coil at its local address.
 | 
			
		||||
	* @param 	_parr_ 				- указатель на массив коилов.
 | 
			
		||||
	* @param 	_coil_ 				- Номер коила от начала массива _arr_.
 | 
			
		||||
	*	
 | 
			
		||||
  * @note 	Позволяет обратиться к коилу по адресу относительно _arr_.
 | 
			
		||||
	*/
 | 
			
		||||
#define	MB_Toogle_Coil_Local(_parr_, _coil_)					*MB_Set_Coil_Reg_Ptr(_parr_, _coil_) 	^= 	MB_Set_Coil_Mask(_coil_)
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//------------------OTHER DEFINES-------------------
 | 
			
		||||
// create hadnles and settings for uart, tim, rs with _modbus_ name
 | 
			
		||||
#define CONCAT(a,b) a##b
 | 
			
		||||
#define Create_MODBUS_Handles(_modbus_)												\
 | 
			
		||||
				UART_SettingsTypeDef CONCAT(_modbus_, _suart);				\
 | 
			
		||||
				UART_HandleTypeDef CONCAT(_modbus_, _huart);					\
 | 
			
		||||
				TIM_SettingsTypeDef CONCAT(_modbus_, _stim);					\
 | 
			
		||||
				TIM_HandleTypeDef CONCAT(_modbus_, _htim);						\
 | 
			
		||||
				RS_HandleTypeDef CONCAT(h, _modbus_)	
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
///////////////////---MODBUS & MESSAGE DEFINES---////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
////////////////////---FUNCTIONS FOR USER---/////////////////////////
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First set up of MODBUS.
 | 
			
		||||
	* @note 	Первый инит модбас. Заполняет структуры и инициализирует таймер и юарт для общения по модбас.
 | 
			
		||||
	* 				Скважность ШИМ меняется по закону синусоиды, каждый канал генерирует свой полупериод синуса (от -1 до 0 И от 0 до 1)
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void MODBUS_FirstInit(void);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set or Reset Coil at its global address.
 | 
			
		||||
	* @param 	Addr 					- адрес коила.
 | 
			
		||||
	* @param 	WriteVal 			- Что записать в коил: 0 или 1.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если коила по адресу не существует, и NO_ERRORS если все ок.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к любому коилу по его глобальному адрессу.
 | 
			
		||||
						Вне зависимости от того как коилы размещены в памяти.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Read Coil at its global address.
 | 
			
		||||
	* @param 	Addr 					- адрес коила.
 | 
			
		||||
	* @param 	Exception 		- Указатель на переменную для кода исключения, в случа неудачи при чтении.
 | 
			
		||||
	* @return uint16_t			- Возвращает весь регистр с маской на запрошенном коиле.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Позволяет обратиться к любому коилу по его глобальному адрессу.
 | 
			
		||||
						Вне зависимости от того как коилы размещены в памяти.
 | 
			
		||||
	*/
 | 
			
		||||
uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception);
 | 
			
		||||
////////////////////---FUNCTIONS FOR USER---/////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////---PROCESS MODBUS COMMAND FUNCTIONS---//////////////////
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Check is address valid for certain array.
 | 
			
		||||
	* @param 	Addr 					- начальный адресс.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых элементов.
 | 
			
		||||
	* @param 	R_ARR_ADDR 		- начальный адресс массива R_ARR.
 | 
			
		||||
	* @param 	R_ARR_NUMB 		- количество элементов в массиве R_ARR.
 | 
			
		||||
	* @return ExceptionCode	- ILLEGAL DATA ADRESS если адресс недействителен, и NO_ERRORS если все ок.
 | 
			
		||||
	*
 | 
			
		||||
	* @note 	Позволяет определить, брать ли данные по адрессу Addr из массива R_ARR.
 | 
			
		||||
	*					Если адресс Addr находится в диапазоне адрессов массива R_ARR, то возвращаем NO_ERROR.
 | 
			
		||||
	*					Если адресс Addr находится за пределами адрессов массива R_ARR - ILLEGAL_DATA_ADDRESSю.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define Address Origin for Input/Holding Registers
 | 
			
		||||
	* @param 	pRegs 				- указатель на указатель регистров.
 | 
			
		||||
	* @param 	Addr 					- адрес начального регистра.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых регистров.
 | 
			
		||||
	* @param 	WriteFlag 		- флаг регистр нужны для чтения или записи.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если есть, и NO_ERRORS если нет.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Определение адреса начального регистра.
 | 
			
		||||
	* @note 	WriteFlag пока не используется.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t WriteFlag);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define Address Origin for coils
 | 
			
		||||
	* @param 	pCoils 				- указатель на указатель коилов.
 | 
			
		||||
	* @param 	Addr 					- адресс начального коила.
 | 
			
		||||
	* @param 	Qnt 					- количество запрашиваемых коилов.
 | 
			
		||||
	* @param 	start_shift 	- указатель на переменную содержащую сдвиг внутри регистра для начального коила.
 | 
			
		||||
	* @param 	WriteFlag 		- флаг коилы нужны для чтения или записи.
 | 
			
		||||
	* @return ExceptionCode	- Код исключения если есть, и NO_ERRORS если нет.
 | 
			
		||||
	*
 | 
			
		||||
  * @note 	Определение адреса начального регистра запрашиваемых коилов.
 | 
			
		||||
	* @note 	WriteFlag используется для определния регистров GPIO: ODR или IDR.
 | 
			
		||||
	*/
 | 
			
		||||
MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Proccess command Read Coils (01 - 0x01).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Read Coils.
 | 
			
		||||
*/
 | 
			
		||||
uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg);
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Read Holding Registers (03 - 0x03).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Read Holding Registers.
 | 
			
		||||
*/
 | 
			
		||||
uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg);
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Single Coils (05 - 0x05).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Single Coils.
 | 
			
		||||
*/
 | 
			
		||||
uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg);
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Multiple Coils (15 - 0x0F).
 | 
			
		||||
	* @param 	modbus_msg 			- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled	- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Multiple Coils.
 | 
			
		||||
*/
 | 
			
		||||
uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg);
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Proccess command Write Multiple Register (16 - 0x10).
 | 
			
		||||
	* @param 	modbus_msg 				- указатель на структуру собщения modbus.
 | 
			
		||||
	* @return fMessageHandled		- статус о результате обработки комманды.
 | 
			
		||||
	* @note 	Обработка команды Write Multiple Register.
 | 
			
		||||
	*/
 | 
			
		||||
uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg);
 | 
			
		||||
/////////////---PROCESS MODBUS COMMAND FUNCTIONS---//////////////////
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
/////////////////////////---CALC DEFINES---//////////////////////////
 | 
			
		||||
 | 
			
		||||
/* set USART_TypeDef for choosen numb of usart */
 | 
			
		||||
#if (MODBUS_UART_NUMB == 1) 
 | 
			
		||||
	#define USED_MODBUS_UART					USART1 
 | 
			
		||||
	#define USE_USART1
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 2)
 | 
			
		||||
	#define USED_MODBUS_UART					USART2 
 | 
			
		||||
	#define USE_USART2
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 3)
 | 
			
		||||
	#define USED_MODBUS_UART					USART3 
 | 
			
		||||
	#define USE_USART3
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 4)
 | 
			
		||||
	#define USED_MODBUS_UART					UART4 
 | 
			
		||||
	#define USE_UART4
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 5)
 | 
			
		||||
	#define USED_MODBUS_UART					UART5
 | 
			
		||||
	#define USE_UART6
 | 
			
		||||
#elif (MODBUS_UART_NUMB == 6)
 | 
			
		||||
	#define USED_MODBUS_UART					USART6 
 | 
			
		||||
	#define USE_USART6
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (MODBUS_TIM_NUMB == 1) 
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM1 
 | 
			
		||||
	#define USE_TIM1
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 2)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM2 
 | 
			
		||||
	#define USE_TIM2
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 3)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM3 
 | 
			
		||||
	#define USE_TIM3
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 4)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM4 
 | 
			
		||||
	#define USE_TIM4
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 5)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM5
 | 
			
		||||
	#define USE_TIM5
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 6)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM6 
 | 
			
		||||
	#define USE_TIM6
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 7)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM7 
 | 
			
		||||
	#define USE_TIM7
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 8)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM8
 | 
			
		||||
	#define USE_TIM8 
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 9)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM9 
 | 
			
		||||
	#define USE_TIM9
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 10)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM10 
 | 
			
		||||
	#define USE_TIM10
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 11)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM11
 | 
			
		||||
	#define USE_TIM11
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 12)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM12 
 | 
			
		||||
	#define USE_TIM12
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 13)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM13 
 | 
			
		||||
	#define USE_TIM13
 | 
			
		||||
#elif (MODBUS_TIM_NUMB == 14)
 | 
			
		||||
	#define USED_MODBUS_TIM					TIM14 
 | 
			
		||||
	#define USE_TIM14
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif //__MODBUS_H_
 | 
			
		||||
@ -1,71 +0,0 @@
 | 
			
		||||
//-----------MODBUS DEVICE DATA SETTING-------------
 | 
			
		||||
//--------------DEFINES FOR REGISTERS---------------
 | 
			
		||||
// DEFINES FOR ARRAYS
 | 
			
		||||
#define LOG_SIZE											500
 | 
			
		||||
 | 
			
		||||
#define R_SINE_LOG_ADDR 							0
 | 
			
		||||
#define R_SINE_LOG_QNT 								LOG_SIZE
 | 
			
		||||
 | 
			
		||||
#define R_PWM_LOG_ADDR 								500
 | 
			
		||||
#define R_PWM_LOG_QNT 								LOG_SIZE
 | 
			
		||||
 | 
			
		||||
#define R_CNT_LOG_ADDR 								1000
 | 
			
		||||
#define R_CNT_LOG_QNT 								LOG_SIZE
 | 
			
		||||
 | 
			
		||||
#define R_TIME_LOG_ADDR 							1500
 | 
			
		||||
#define R_TIME_LOG_QNT 								LOG_SIZE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define R_SETTINGS_START_ADDR					20000
 | 
			
		||||
 | 
			
		||||
#define R_PWM_CTRL_ADDR								R_SETTINGS_START_ADDR
 | 
			
		||||
#define	R_PWM_CTRL_QNT 								8
 | 
			
		||||
 | 
			
		||||
#define R_LOG_CTRL_ADDR								(R_SETTINGS_START_ADDR+8)
 | 
			
		||||
#define	R_LOG_CTRL_QNT 								8
 | 
			
		||||
 | 
			
		||||
#define R_UART_CTRL_ADDR							R_SETTINGS_START_ADDR+16
 | 
			
		||||
#define	R_UART_CTRL_QNT 							8
 | 
			
		||||
 
 | 
			
		||||
// DEFINES FOR REGISTERS
 | 
			
		||||
 | 
			
		||||
#define R_PWM_CTRL_PWM_VALUE					0		// PWM value: sin freq OR pwm duty
 | 
			
		||||
#define R_PWM_CTRL_PWM_HZ							1		// frequency of PWM Timer
 | 
			
		||||
#define R_PWM_CTRL_MIN_PULSE_DUR 			2 	// duration of shortest pulse in sine PWM
 | 
			
		||||
#define R_PWM_CTRL_DEAD_TIME 					3 	// duration between between switches half waves (channels)
 | 
			
		||||
#define R_PWM_CTRL_SIN_TABLE_SIZE			4		// size of sinus table
 | 
			
		||||
 | 
			
		||||
#define R_LOG_CTRL_LOG_SIZE						0		// size of number elements in log
 | 
			
		||||
#define R_LOG_CTRL_LOG_PWM_NUMB				1		// number of PWM periods in log
 | 
			
		||||
#define R_LOG_CTRL_LOG_HZ						 	2		// frequency of log Timer
 | 
			
		||||
 | 
			
		||||
#define R_UART_CTRL_SPEED							0	// sin frequency
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
//----------------DEFINES FOR COILS-----------------
 | 
			
		||||
// DEFINES FOR ARRAYS
 | 
			
		||||
#define C_GPIOD_ADDR							0
 | 
			
		||||
#define C_GPIOD_QNT								16		// minimum 16
 | 
			
		||||
 | 
			
		||||
#define C_CTRL_COILS_ADDR					0x10
 | 
			
		||||
#define C_CTRL_COILS_QNT					160		// minimum 16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// DEFINES FOR COILS
 | 
			
		||||
#define COIL_GPIOD_LED1						12
 | 
			
		||||
#define COIL_GPIOD_LED2						13
 | 
			
		||||
#define COIL_GPIOD_LED3						14
 | 
			
		||||
#define COIL_GPIOD_LED4						15
 | 
			
		||||
#define COIL_GPIOD_LED1_GLOBAL		(C_GPIOD_ADDR+COIL_GPIOD_LED1)
 | 
			
		||||
#define COIL_GPIOD_LED2_GLOBAL		(C_GPIOD_ADDR+COIL_GPIOD_LED2)
 | 
			
		||||
#define COIL_GPIOD_LED3_GLOBAL		(C_GPIOD_ADDR+COIL_GPIOD_LED3)
 | 
			
		||||
#define COIL_GPIOD_LED4_GLOBAL		(C_GPIOD_ADDR+COIL_GPIOD_LED4)
 | 
			
		||||
 | 
			
		||||
#define COIL_UART_CTRL							(0)
 | 
			
		||||
#define COIL_UART_CTRL_GLOBAL				(C_CTRL_COILS_ADDR+COIL_UART_CTRL)
 | 
			
		||||
#define COIL_PWM_DC_MODE						(1)
 | 
			
		||||
#define COIL_PWM_DC_MODE_GLOBAL			(C_CTRL_COILS_ADDR+COIL_PWM_DC_MODE)
 | 
			
		||||
#define COIL_PWM_CH_MODE						(2)
 | 
			
		||||
#define COIL_PWM_CH_MODE_GLOBAL			(C_CTRL_COILS_ADDR+COIL_PWM_CH_MODE)
 | 
			
		||||
#define COIL_PWM_PHASE_MODE					(3)
 | 
			
		||||
#define COIL_PWM_PHASE_MODE_GLOBAL	(C_CTRL_COILS_ADDR+COIL_PWM_PHASE_MODE)
 | 
			
		||||
@ -1,502 +0,0 @@
 | 
			
		||||
/**********************************RS***************************************
 | 
			
		||||
Данный файл содержит базовые функции для реализации протоколов по RS/UART.
 | 
			
		||||
//-------------------Функции-------------------//
 | 
			
		||||
@func users
 | 
			
		||||
	-	Parse_Message/Collect_Message	Заполнение структуры сообщения и буфера
 | 
			
		||||
	-	RS_Response  									Ответ на сообщение
 | 
			
		||||
	- RS_Define_Size_of_RX_Message	Определение размера принимаемых данных
 | 
			
		||||
 | 
			
		||||
@func general
 | 
			
		||||
	-	RS_Receive_IT									Ожидание комманды и ответ на неё
 | 
			
		||||
	-	RS_Transmit_IT								Отправление комманды и ожидание ответа
 | 
			
		||||
	-	RS_Init												Инициализация переферии и структуры для RS
 | 
			
		||||
	-	RS_ReInit_UART								Реинициализация UART для RS
 | 
			
		||||
	-	RS_Abort											Отмена приема/передачи по ЮАРТ
 | 
			
		||||
	-	RS_Init												Инициализация периферии и modbus handler
 | 
			
		||||
 | 
			
		||||
@func callback/handler
 | 
			
		||||
	- RS_Handle_Receive_Start				Функция для запуска приема или остановки RS
 | 
			
		||||
	- RS_Handle_Transmit_Start			Функция для запуска передачи или остановки RS
 | 
			
		||||
	
 | 
			
		||||
	-	RS_UART_RxCpltCallback				Коллбек при окончании приема или передачи
 | 
			
		||||
		RS_UART_TxCpltCallback		
 | 
			
		||||
		
 | 
			
		||||
	- RS_UART_Handler								Обработчик прерывания для UART
 | 
			
		||||
	- RS_TIM_Handler								Обработчик прерывания для TIM
 | 
			
		||||
	
 | 
			
		||||
@func uart initialize (это было в отдельных файлах, мб надо обратно разнести)
 | 
			
		||||
	- UART_Base_Init									Инициализация UART для RS
 | 
			
		||||
	- RS_UART_GPIO_Init							Инициализация GPIO для RS
 | 
			
		||||
	- UART_DMA_Init							Инициализация DMA для RS
 | 
			
		||||
	- UART_MspInit								Аналог HAL_MspInit для RS
 | 
			
		||||
	- UART_MspDeInit							Аналог HAL_MspDeInit для RS
 | 
			
		||||
 | 
			
		||||
//-------------------Общее--------------------//
 | 
			
		||||
@note Для настройки RS/UART под нужный протокол, необходимо:
 | 
			
		||||
	- Определить структуру сообщения RS_MsgTypeDef и 
 | 
			
		||||
		дефайны RX_FIRST_PART_SIZE и MSG_SIZE_MAX.
 | 
			
		||||
	- Подключить этот файл в раздел USER SETTINGS rs_message.h.
 | 
			
		||||
	- Определить функции для обработки сообщения @func users.
 | 
			
		||||
	- Добавить UART/TIM Handler в Хендлер используемых UART/TIM.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#include "rs_message.h"
 | 
			
		||||
 | 
			
		||||
uint8_t RS_Buffer[MSG_SIZE_MAX]; // uart buffer
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-------------------------GENERAL FUNCTIONS-------------------------
 | 
			
		||||
/**
 | 
			
		||||
  * @brief 	Start receive IT.
 | 
			
		||||
  * @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
  * @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
  * @return RS_RES	- статус о состоянии RS после инициализации приема.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
 | 
			
		||||
{
 | 
			
		||||
	RS_StatusTypeDef RS_RES = 0;
 | 
			
		||||
	HAL_StatusTypeDef uart_res = 0;
 | 
			
		||||
	
 | 
			
		||||
	//-------------CHECK RS LINE----------------
 | 
			
		||||
	// check that receive isnt busy
 | 
			
		||||
	if( RS_Is_RX_Busy(hRS) ) // if tx busy - return busy status
 | 
			
		||||
		return RS_BUSY;	
 | 
			
		||||
	
 | 
			
		||||
	//-----------INITIALIZE RECEIVE-------------
 | 
			
		||||
	// if all OK: start receiving
 | 
			
		||||
	RS_Set_Busy(hRS);							// set RS busy	
 | 
			
		||||
	RS_Set_RX_Flags(hRS);					// initialize flags for receive
 | 
			
		||||
	hRS->pMessagePtr = RS_msg; 		// set pointer to message structire for filling it from UARTHandler fucntions
 | 
			
		||||
	
 | 
			
		||||
	// start receiving
 | 
			
		||||
	uart_res = HAL_UART_Receive_IT(hRS->huart, hRS->pBufferPtr, RX_FIRST_PART_SIZE); // receive until ByteCnt+1 byte, 
 | 
			
		||||
	// then in Callback restart receive for rest bytes	
 | 
			
		||||
	
 | 
			
		||||
	// if receive isnt started - abort RS
 | 
			
		||||
	if(uart_res != HAL_OK)
 | 
			
		||||
	{
 | 
			
		||||
		RS_RES = RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		RS_RES = RS_OK;
 | 
			
		||||
	
 | 
			
		||||
	hRS->RS_STATUS = RS_RES;
 | 
			
		||||
	return RS_RES; // returns result of receive init	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief 	Start transmit IT.
 | 
			
		||||
  * @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
  * @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
  * @return RS_RES	- статус о состоянии RS после инициализации передачи.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
 | 
			
		||||
{	
 | 
			
		||||
	RS_StatusTypeDef RS_RES = 0;
 | 
			
		||||
	HAL_StatusTypeDef uart_res = 0;
 | 
			
		||||
	
 | 
			
		||||
	//-------------CHECK RS LINE----------------
 | 
			
		||||
	// check that transmit isnt busy
 | 
			
		||||
	if( RS_Is_TX_Busy(hRS) ) // if tx busy - return busy status
 | 
			
		||||
		return RS_BUSY;
 | 
			
		||||
		// check receive line
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	//------------COLLECT MESSAGE---------------
 | 
			
		||||
	RS_RES = Collect_Message(hRS, RS_msg, hRS->pBufferPtr);
 | 
			
		||||
	if (RS_RES != RS_OK) // if message isnt collect - stop RS and return error in RS_RES
 | 
			
		||||
	{// need collect message status, so doesnt write abort to RS_RES
 | 
			
		||||
		RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
		RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);	// restart receive
 | 
			
		||||
	}
 | 
			
		||||
	else // if collect successful
 | 
			
		||||
	{
 | 
			
		||||
		
 | 
			
		||||
		//----------INITIALIZE TRANSMIT-------------
 | 
			
		||||
		RS_Set_Busy(hRS);							// set RS busy
 | 
			
		||||
		RS_Set_TX_Flags(hRS);					// initialize flags for transmit IT
 | 
			
		||||
		hRS->pMessagePtr = RS_msg; 		// set pointer for filling given structure from UARTHandler fucntion
 | 
			
		||||
 | 
			
		||||
		// if all OK: start transmitting
 | 
			
		||||
		uart_res = HAL_UART_Transmit_IT(hRS->huart, hRS->pBufferPtr, hRS->RS_Message_Size); 
 | 
			
		||||
		// if transmit isnt started - abort RS
 | 
			
		||||
		if(uart_res != HAL_OK)
 | 
			
		||||
		{
 | 
			
		||||
			RS_RES = RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			RS_RES = RS_OK;		
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	hRS->RS_STATUS = RS_RES;
 | 
			
		||||
	return RS_RES; // returns result of transmit init 	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Initialize UART and handle RS stucture.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	suart 				- указатель на структуру с настройками UART.
 | 
			
		||||
	* @param 	stim 					- указатель на структуру с настройками таймера.
 | 
			
		||||
	* @param 	pRS_BufferPtr - указатель на буффер для приема-передачи по UART. Если он NULL, то поставиться библиотечный буфер.
 | 
			
		||||
	* @return RS_RES				- статус о состоянии RS после инициализации.
 | 
			
		||||
	* @note		Инициализация перефирии и структуры для приема-передачи по RS.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_SettingsTypeDef *suart, TIM_SettingsTypeDef *stim, uint8_t *pRS_BufferPtr)
 | 
			
		||||
{
 | 
			
		||||
	// check that hRS is defined
 | 
			
		||||
	if (hRS == NULL)
 | 
			
		||||
		return RS_ERR;
 | 
			
		||||
	
 | 
			
		||||
	// check that huart is defined
 | 
			
		||||
	if ((suart->huart.Instance == NULL) || (suart->huart.Init.BaudRate == NULL)) 
 | 
			
		||||
		return RS_ERR;
 | 
			
		||||
	
 | 
			
		||||
	// init uart
 | 
			
		||||
	UART_Base_Init(suart);
 | 
			
		||||
	hRS->huart = &suart->huart;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// check that timeout in interrupt needed
 | 
			
		||||
	if (hRS->sRS_Timeout)
 | 
			
		||||
	{
 | 
			
		||||
		if (stim->htim.Instance == NULL) // check is timer defined
 | 
			
		||||
			return RS_ERR;	
 | 
			
		||||
					
 | 
			
		||||
		// calc frequency corresponding to timeout and tims 1ms tickbase
 | 
			
		||||
		stim->sTickBaseMHz = TIM_TickBase_1MS;
 | 
			
		||||
		stim->htim.Init.Period = hRS->sRS_Timeout;
 | 
			
		||||
		
 | 
			
		||||
		TIM_Base_Init(stim);
 | 
			
		||||
		hRS->htim = &stim->htim;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (hRS->sRS_RX_Size_Mode == NULL)
 | 
			
		||||
		return RS_ERR;
 | 
			
		||||
	
 | 
			
		||||
	// check that buffer is defined
 | 
			
		||||
	if (hRS->pBufferPtr == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		hRS->pBufferPtr = RS_Buffer; 		// if no - set default
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		hRS->pBufferPtr = pRS_BufferPtr; // if yes - set by user
 | 
			
		||||
		
 | 
			
		||||
	return RS_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	ReInitialize UART and RS receive.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	suart 				- указатель на структуру с настройками UART.
 | 
			
		||||
	* @return RS_RES				- статус о состоянии RS после инициализации.
 | 
			
		||||
	* @note		Реинициализация UART и приема по RS.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_SettingsTypeDef *suart)
 | 
			
		||||
{
 | 
			
		||||
	HAL_StatusTypeDef RS_RES;
 | 
			
		||||
	hRS->fReInit_UART = 0;
 | 
			
		||||
	
 | 
			
		||||
	// check is settings are valid
 | 
			
		||||
	if(Check_UART_Init_Struct(suart) != HAL_OK)
 | 
			
		||||
		return HAL_ERROR;
 | 
			
		||||
	
 | 
			
		||||
	RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
	UART_MspDeInit(&suart->huart);
 | 
			
		||||
	RS_RES = UART_Base_Init(suart);	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	RS_Receive_IT(hRS, hRS->pMessagePtr);
 | 
			
		||||
	return RS_RES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Abort RS/UART.
 | 
			
		||||
	* @param 	hRS 				- указатель на хендлер RS.
 | 
			
		||||
	* @param 	AbortMode 	- выбор, что надо отменить.
 | 
			
		||||
							- ABORT_TX:		 Отмена передачи по ЮАРТ, с очищением флагов TX,
 | 
			
		||||
							- ABORT_RX:		 Отмена приема по ЮАРТ, с очищением флагов RX,
 | 
			
		||||
							- ABORT_RX_TX: Отмена приема и передачи по ЮАРТ,
 | 
			
		||||
							- ABORT_RS: 	 Отмена приема-передачи RS, с очищением всей структуры.
 | 
			
		||||
	* @return RS_RES			- статус о состоянии RS после аборта.
 | 
			
		||||
	* @note		Отмена работы UART в целом или отмена приема/передачи RS. 
 | 
			
		||||
						Также очищается хендл hRS.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)
 | 
			
		||||
{
 | 
			
		||||
	HAL_StatusTypeDef uart_res = 0;
 | 
			
		||||
	hRS->htim->Instance->CNT = 0;
 | 
			
		||||
	__HAL_TIM_CLEAR_IT(hRS->htim, TIM_IT_UPDATE);
 | 
			
		||||
	
 | 
			
		||||
	if(hRS->sRS_Timeout)								// if timeout setted
 | 
			
		||||
		HAL_TIM_Base_Stop_IT(hRS->htim);	// stop timeout
 | 
			
		||||
	
 | 
			
		||||
	if((AbortMode&ABORT_RS) == 0x00)
 | 
			
		||||
	{	
 | 
			
		||||
		if((AbortMode&ABORT_RX) == ABORT_RX)
 | 
			
		||||
		{
 | 
			
		||||
			uart_res = HAL_UART_AbortReceive(hRS->huart); 	// abort receive
 | 
			
		||||
			RS_Reset_RX_Flags(hRS);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if((AbortMode&ABORT_TX) == ABORT_TX)
 | 
			
		||||
		{
 | 
			
		||||
			uart_res = HAL_UART_AbortTransmit(hRS->huart); 	// abort transmit
 | 
			
		||||
			RS_Reset_TX_Flags(hRS);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		uart_res = HAL_UART_Abort(hRS->huart);
 | 
			
		||||
		RS_Clear_All(hRS);
 | 
			
		||||
	}
 | 
			
		||||
	hRS->RS_STATUS = RS_ABORTED;
 | 
			
		||||
	return RS_ABORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------GENERAL FUNCTIONS-------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Handle for starting receive.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации приема или окончания общения.
 | 
			
		||||
	* @note		Определяет начинать прием команды/ответа или нет.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
 | 
			
		||||
{	
 | 
			
		||||
	RS_StatusTypeDef RS_RES = 0;
 | 
			
		||||
	
 | 
			
		||||
	switch(hRS->sRS_Mode)
 | 
			
		||||
	{
 | 
			
		||||
		case SLAVE_ALWAYS_WAIT: 											// in slave mode with permanent waiting
 | 
			
		||||
			RS_RES = RS_Receive_IT(hRS, RS_msg); break; // start receiving again
 | 
			
		||||
		case SLAVE_TIMEOUT_WAIT:											// in slave mode with timeout waiting (start receiving cmd by request)
 | 
			
		||||
			RS_Set_Free(hRS);	 RS_RES = RS_OK; break;		// end RS communication (set RS unbusy)
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return RS_RES;
 | 
			
		||||
}
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handle for starting transmit.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации передачи.
 | 
			
		||||
	* @note		Определяет отвечать ли на команду или нет.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
 | 
			
		||||
{	
 | 
			
		||||
	RS_StatusTypeDef RS_RES = 0;
 | 
			
		||||
	
 | 
			
		||||
	switch(hRS->sRS_Mode)
 | 
			
		||||
	{
 | 
			
		||||
		case SLAVE_ALWAYS_WAIT: 	// in slave mode always response
 | 
			
		||||
		case SLAVE_TIMEOUT_WAIT:	// transmit response
 | 
			
		||||
			RS_RES = RS_Transmit_IT(hRS, RS_msg); break; 
 | 
			
		||||
	}
 | 
			
		||||
	return RS_RES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	UART RX Callback: define behaviour after receiving parts of message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после обработки приема.
 | 
			
		||||
	* @note		Контролирует прием сообщения: определяет размер принимаемой посылки и обрабатывает его.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS)
 | 
			
		||||
{
 | 
			
		||||
	RS_StatusTypeDef RS_RES = 0;
 | 
			
		||||
	HAL_StatusTypeDef uart_res = 0;
 | 
			
		||||
	
 | 
			
		||||
	// if we had received bytes before ByteCnt
 | 
			
		||||
	if((hRS->sRS_RX_Size_Mode == RS_RX_Size_NotConst) && (hRS->fRX_Half == 0)) // if data size isnt constant and its first half, and
 | 
			
		||||
	{	// First receive part of message, then define size of rest of message, and start receive it
 | 
			
		||||
		hRS->fRX_Half = 1;
 | 
			
		||||
		//---------------FIND DATA SIZE-----------------
 | 
			
		||||
		uint32_t NuRS_of_Rest_Bytes = 0;
 | 
			
		||||
		RS_RES = RS_Define_Size_of_RX_Message(hRS, &NuRS_of_Rest_Bytes);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		// if there is no bytes to receive OR we need to skip this message - restart receive
 | 
			
		||||
		if ((NuRS_of_Rest_Bytes == 0) || (RS_RES == RS_SKIP))
 | 
			
		||||
		{
 | 
			
		||||
			RS_Abort(hRS, ABORT_RX);
 | 
			
		||||
			RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
 | 
			
		||||
			return RS_RES;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//-------------START UART RECEIVE---------------
 | 
			
		||||
		uart_res = HAL_UART_Receive_IT(hRS->huart, (hRS->pBufferPtr + RX_FIRST_PART_SIZE), NuRS_of_Rest_Bytes); 
 | 
			
		||||
		
 | 
			
		||||
		if(uart_res != HAL_OK)
 | 
			
		||||
		{// need uart status, so doesnt write abort to RS_RES
 | 
			
		||||
			RS_RES = RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			RS_RES = RS_OK;
 | 
			
		||||
	}	 
 | 
			
		||||
	else // if we had received whole message
 | 
			
		||||
	{
 | 
			
		||||
		hRS->fRX_Half = 0;
 | 
			
		||||
 | 
			
		||||
		//---------PROCESS DATA & ENDING RECEIVING--------
 | 
			
		||||
		RS_Set_RX_End(hRS);
 | 
			
		||||
		
 | 
			
		||||
		if(hRS->sRS_Timeout)								// if timeout setted
 | 
			
		||||
			HAL_TIM_Base_Stop_IT(hRS->htim);	// stop timeout
 | 
			
		||||
		
 | 
			
		||||
		// parse received data
 | 
			
		||||
		RS_RES = Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message
 | 
			
		||||
		
 | 
			
		||||
		// RESPONSE
 | 
			
		||||
		RS_RES = RS_Response(hRS, hRS->pMessagePtr);	
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return RS_RES;	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	UART TX Callback: define behaviour after transmiting message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после обработки приема.
 | 
			
		||||
	* @note		Определяет поведение RS после передачи сообщения.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS)
 | 
			
		||||
{
 | 
			
		||||
	RS_StatusTypeDef RS_RES = RS_OK;
 | 
			
		||||
	HAL_StatusTypeDef uart_res = 0;
 | 
			
		||||
	
 | 
			
		||||
	//--------------ENDING TRANSMITTING-------------
 | 
			
		||||
	RS_Set_TX_End(hRS);
 | 
			
		||||
	
 | 
			
		||||
	//-----------START RECEIVING or END RS----------
 | 
			
		||||
	RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
 | 
			
		||||
	
 | 
			
		||||
	return RS_RES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handler for UART.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @note		Обрабатывает ошибки если есть и вызывает RS Коллбеки.
 | 
			
		||||
	*					Добавить вызов этой функции в UARTx_IRQHandler().
 | 
			
		||||
	*/
 | 
			
		||||
void RS_UART_Handler(RS_HandleTypeDef *hRS)
 | 
			
		||||
{		
 | 
			
		||||
  HAL_UART_IRQHandler(hRS->huart);
 | 
			
		||||
	//-------------CALL RS CALLBACKS------------	
 | 
			
		||||
	/* IF NO ERROR OCCURS */
 | 
			
		||||
	if(hRS->huart->ErrorCode == 0) 
 | 
			
		||||
	{
 | 
			
		||||
		hRS->htim->Instance->CNT = 0; // reset cnt;
 | 
			
		||||
		/* Start timeout */
 | 
			
		||||
		if(hRS->sRS_Timeout)								// if timeout setted
 | 
			
		||||
			if((hRS->huart->RxXferCount+1 == hRS->huart->RxXferSize) && RS_Is_RX_Busy(hRS)) // if first byte is received and receive is active
 | 
			
		||||
				HAL_TIM_Base_Start_IT(hRS->htim);
 | 
			
		||||
		
 | 
			
		||||
		/* RX Callback */
 | 
			
		||||
		if ((	hRS->huart->RxXferCount == 0U) && RS_Is_RX_Busy(hRS) && 	// if all bytes are received and receive is active
 | 
			
		||||
					hRS->huart->RxState != HAL_UART_STATE_BUSY_RX)						// also check that receive "REALLY" isnt busy
 | 
			
		||||
			RS_UART_RxCpltCallback(hRS);
 | 
			
		||||
		
 | 
			
		||||
		/* TX Callback */
 | 
			
		||||
		if ((	hRS->huart->TxXferCount == 0U) && RS_Is_TX_Busy(hRS) &&  // if all bytes are transmited and transmit is active
 | 
			
		||||
					hRS->huart->gState != HAL_UART_STATE_BUSY_TX)						// also check that receive "REALLY" isnt busy
 | 
			
		||||
			RS_UART_TxCpltCallback(hRS);
 | 
			
		||||
	}
 | 
			
		||||
	//----------------ERRORS HANDLER----------------
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		/* de-init uart transfer */
 | 
			
		||||
		RS_Abort(hRS, ABORT_RS);
 | 
			
		||||
		RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
 | 
			
		||||
				
 | 
			
		||||
		// later, maybe, will be added specific handlers for err	
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handler for TIM.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @note		Попадание сюда = таймаут и перезапуск RS приема
 | 
			
		||||
	*					Добавить вызов этой функции в TIMx_IRQHandler().
 | 
			
		||||
	*/
 | 
			
		||||
void RS_TIM_Handler(RS_HandleTypeDef *hRS)
 | 
			
		||||
{
 | 
			
		||||
  HAL_TIM_IRQHandler(hRS->htim);
 | 
			
		||||
	HAL_TIM_Base_Stop_IT(hRS->htim);
 | 
			
		||||
	RS_Abort(hRS, ABORT_RS);	
 | 
			
		||||
	
 | 
			
		||||
	RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
 | 
			
		||||
}
 | 
			
		||||
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------
 | 
			
		||||
///** 
 | 
			
		||||
//	* @brief 	Respond accord to received message.
 | 
			
		||||
//	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
//	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
//	* @return RS_RES	- статус о результате ответа на комманду.
 | 
			
		||||
//	* @note		Обработка принятой комманды и ответ на неё.
 | 
			
		||||
//	*/
 | 
			
		||||
//__weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
 | 
			
		||||
//{
 | 
			
		||||
//	/* Redefine function for user purposes */
 | 
			
		||||
//	return RS_ERR;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///** 
 | 
			
		||||
//	* @brief 	Collect message in buffer to transmit it.
 | 
			
		||||
//	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
//	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
//	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
//	* @return RS_RES				- статус о результате заполнения буфера.
 | 
			
		||||
//	* @note		Заполнение буффера UART из структуры сообщения.
 | 
			
		||||
//	*/
 | 
			
		||||
//__weak RS_StatusTypeDef Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
 | 
			
		||||
//{
 | 
			
		||||
//	/* Redefine function for user purposes */
 | 
			
		||||
//	return RS_ERR;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///** 
 | 
			
		||||
//	* @brief 	Parse message from buffer to process it.
 | 
			
		||||
//	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
//	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
//	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
//	* @return RS_RES				- статус о результате заполнения структуры.
 | 
			
		||||
//	* @note		Заполнение структуры сообщения из буффера UART.
 | 
			
		||||
//	*/
 | 
			
		||||
//__weak RS_StatusTypeDef Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
 | 
			
		||||
//{
 | 
			
		||||
//	/* Redefine function for user purposes */
 | 
			
		||||
//	return RS_ERR;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///** 
 | 
			
		||||
//	* @brief 	Define size of RX Message that need to be received.
 | 
			
		||||
//	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
//	* @param 	rx_data_size 	- указатель на переменную для записи кол-ва байт для принятия.
 | 
			
		||||
//	* @return RS_RES				- статус о корректности рассчета кол-ва байт для принятия.
 | 
			
		||||
//	* @note		Определение сколько байтов надо принять по протоколу.
 | 
			
		||||
//	*/
 | 
			
		||||
//__weak RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size)
 | 
			
		||||
//{
 | 
			
		||||
//	/* Redefine function for user purposes */
 | 
			
		||||
//	return RS_ERR;
 | 
			
		||||
//}
 | 
			
		||||
//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
@ -1,297 +0,0 @@
 | 
			
		||||
/**********************************RS***************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для реализации 
 | 
			
		||||
протоколов по RS/UART.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __RS_LIB_H_
 | 
			
		||||
#define __RS_LIB_H_
 | 
			
		||||
 | 
			
		||||
#include "modbus.h" 
 | 
			
		||||
 | 
			
		||||
#include "periph_general.h"
 | 
			
		||||
#include "crc_algs.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
/* Check that all defines required by RS are defined */
 | 
			
		||||
#ifndef MSG_SIZE_MAX
 | 
			
		||||
#error Define MSG_SIZE_MAX (Maximum size of message). This is necessary to create buffer for UART.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef RX_FIRST_PART_SIZE
 | 
			
		||||
#error Define RX_FIRST_PART_SIZE (Size of first part of message). This is necessary to receive the first part of the message, from which determine the size of the remaining part of the message.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Clear message-uart buffer */
 | 
			
		||||
#define RS_Clear_Buff(_buff_)				for(int i=0; i<MSG_SIZE_MAX;i++)	_buff_[i] = NULL
 | 
			
		||||
 | 
			
		||||
/* Set/Reset flags */
 | 
			
		||||
#define RS_Set_Free(_hRS_)					_hRS_->fRS_Busy = 0
 | 
			
		||||
#define RS_Set_Busy(_hRS_)					_hRS_->fRS_Busy = 1
 | 
			
		||||
 | 
			
		||||
#define RS_Set_RX_Flags(_hRS_)			_hRS_->fRX_Busy = 1; _hRS_->fRX_Done = 0; _hRS_->fRX_Half = 0
 | 
			
		||||
#define RS_Set_TX_Flags(_hRS_)			_hRS_->fTX_Busy = 1; _hRS_->fTX_Done = 0
 | 
			
		||||
 | 
			
		||||
#define RS_Reset_RX_Flags(_hRS_)		_hRS_->fRX_Busy = 0; _hRS_->fRX_Done = 0; _hRS_->fRX_Half = 0
 | 
			
		||||
#define RS_Reset_TX_Flags(_hRS_)		_hRS_->fTX_Busy = 0; _hRS_->fTX_Done = 0
 | 
			
		||||
 | 
			
		||||
#define RS_Set_RX_End_Flag(_hRS_)		_hRS_->fRX_Done = 1
 | 
			
		||||
#define RS_Set_TX_End_Flag(_hRS_)		_hRS_->fTX_Done = 1
 | 
			
		||||
 | 
			
		||||
#define RS_Set_RX_End(_hRS_)				RS_Reset_RX_Flags(_hRS_); RS_Set_RX_End_Flag(_hRS_)
 | 
			
		||||
#define RS_Set_TX_End(_hRS_)				RS_Reset_TX_Flags(_hRS_); RS_Set_TX_End_Flag(_hRS_)
 | 
			
		||||
 | 
			
		||||
/* Clear all RS stuff */
 | 
			
		||||
#define RS_Clear_All(_hRS_) 				RS_Clear_Buff(_hRS_->pBufferPtr);	RS_Reset_RX_Flags(_hRS_);	RS_Reset_TX_Flags(_hRS_);
 | 
			
		||||
 | 
			
		||||
//#define MB_Is_RX_Busy(_hRS_)				((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_RX)
 | 
			
		||||
//#define MB_Is_TX_Busy(_hRS_)				((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_TX)
 | 
			
		||||
#define RS_Is_RX_Busy(_hRS_)				(_hRS_->fRX_Busy == 1)
 | 
			
		||||
#define RS_Is_TX_Busy(_hRS_)				(_hRS_->fTX_Busy == 1)
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
//------------------ENUMERATIONS--------------------
 | 
			
		||||
/* Enums for respond CMD about RS status*/
 | 
			
		||||
typedef enum		// RS_StatusTypeDef
 | 
			
		||||
{
 | 
			
		||||
	/* IN-CODE STATUS (start from 0x01, and goes up)*/
 | 
			
		||||
	/*0x01*/	RS_OK = 0x01,
 | 
			
		||||
	/*0x02*/	RS_ERR,	
 | 
			
		||||
	/*0x03*/	RS_ABORTED,	
 | 
			
		||||
	/*0x04*/	RS_BUSY,		
 | 
			
		||||
	/*0x05*/	RS_SKIP,	
 | 
			
		||||
	
 | 
			
		||||
	/*0x06*/	RS_COLLECT_MSG_ERR,
 | 
			
		||||
	/*0x07*/	RS_PARSE_MSG_ERR,
 | 
			
		||||
	
 | 
			
		||||
	// reserved values
 | 
			
		||||
//	/*0x00*/ 	RS_UNKNOWN_ERR = 				0x00, // reserved for case, if no one error founded (nothing changed response from zero)
 | 
			
		||||
}RS_StatusTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Enums for RS Modes */
 | 
			
		||||
typedef enum	// RS_ModeTypeDef
 | 
			
		||||
{
 | 
			
		||||
	SLAVE_ALWAYS_WAIT =				0x01,		// Slave mode with infinity waiting
 | 
			
		||||
	SLAVE_TIMEOUT_WAIT = 			0x02,		// Slave mode with waiting with timeout
 | 
			
		||||
//	MASTER = 									0x03,		// Master mode
 | 
			
		||||
}RS_ModeTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Enums for RS UART Modes */
 | 
			
		||||
typedef enum	// RS_ITModeTypeDef
 | 
			
		||||
{
 | 
			
		||||
	BLCK_MODE = 		0x00,		// Blocking mode
 | 
			
		||||
	IT_MODE = 			0x01,		// Interrupt mode
 | 
			
		||||
}RS_ITModeTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Enums for Abort modes */
 | 
			
		||||
typedef enum	// RS_AbortTypeDef
 | 
			
		||||
{
 | 
			
		||||
	ABORT_TX = 			0x01,		// Abort transmit
 | 
			
		||||
	ABORT_RX = 			0x02,		// Abort receive
 | 
			
		||||
	ABORT_RX_TX =		0x03,		// Abort receive and transmit
 | 
			
		||||
	ABORT_RS = 			0x04,		// Abort uart and reset RS structure
 | 
			
		||||
}RS_AbortTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Enums for RX Size modes */
 | 
			
		||||
typedef enum	// RS_RXSizeTypeDef
 | 
			
		||||
{
 | 
			
		||||
	RS_RX_Size_Const = 			0x01,		// size of receiving message is constant
 | 
			
		||||
	RS_RX_Size_NotConst = 	0x02,		// size of receiving message isnt constant
 | 
			
		||||
}RS_RXSizeTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------STRUCTURE FOR HANDLE RS------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Handle for RS communication.
 | 
			
		||||
	* @note 	Prefixes: h - handle, s - settings, f - flag
 | 
			
		||||
	*/
 | 
			
		||||
typedef struct	// RS_HandleTypeDef
 | 
			
		||||
{		
 | 
			
		||||
	/* MESSAGE */
 | 
			
		||||
	uint8_t										ID;										// ID of RS "channel"
 | 
			
		||||
	RS_MsgTypeDef 						*pMessagePtr;					// pointer to message struct
 | 
			
		||||
	uint8_t 									*pBufferPtr;					// pointer to message buffer
 | 
			
		||||
	uint32_t									RS_Message_Size;			// size of whole message, not only data
 | 
			
		||||
	
 | 
			
		||||
	/* HANDLERS and SETTINGS */
 | 
			
		||||
	UART_HandleTypeDef 				*huart;								// handler for used uart
 | 
			
		||||
	TIM_HandleTypeDef 				*htim;								// handler for used tim
 | 
			
		||||
	RS_ModeTypeDef						sRS_Mode;							// setting: slave or master @ref RS_ModeTypeDef
 | 
			
		||||
	RS_ITModeTypeDef					sRS_IT_Mode;					// setting: 1 - IT mode, 	0 - Blocking mode 
 | 
			
		||||
	uint16_t 									sRS_Timeout;					// setting: timeout in ms
 | 
			
		||||
	RS_RXSizeTypeDef					sRS_RX_Size_Mode;			// setting: 1 - not const, 0 - const 
 | 
			
		||||
	
 | 
			
		||||
	/* FLAGS */		
 | 
			
		||||
	// These flags for controling receive/transmit
 | 
			
		||||
	unsigned 									fRX_Half:1;						// flag: 0 - receiving msg before ByteCnt, 	0 - receiving msg after ByteCnt
 | 
			
		||||
	
 | 
			
		||||
	unsigned 									fRS_Busy:1;						// flag: 1 - RS is busy, 0 - RS isnt busy		
 | 
			
		||||
	unsigned 									fRX_Busy:1;						// flag: 1 - receiving is active, 	0 - receiving isnt active
 | 
			
		||||
	unsigned 									fTX_Busy:1;						// flag: 1 - transmiting is active, 0 - transmiting isnt active				
 | 
			
		||||
	
 | 
			
		||||
	unsigned 									fRX_Done:1;						// flag: 1 - receiving is done, 	0 - receiving isnt done	
 | 
			
		||||
	unsigned 									fTX_Done:1;						// flag: 1 - transmiting is done, 0 - transmiting isnt done	
 | 
			
		||||
		
 | 
			
		||||
	// setted by user
 | 
			
		||||
	unsigned 									fMessageHandled:1;		// flag: 1 - RS command is handled, 				0 - RS command isnt handled yet
 | 
			
		||||
	unsigned 									fEchoResponse:1;			// flag: 1 - response with received msg,		0 - response with own msg
 | 
			
		||||
	unsigned 									fDeferredResponse:1;	// flag: 1 - response not in interrupt, 		0 - response in interrupt
 | 
			
		||||
	unsigned 									fReInit_UART:1;				// flag: 1 - need to reinitialize uart, 		0 - nothing	
 | 
			
		||||
	
 | 
			
		||||
	/* RS STATUS */
 | 
			
		||||
	RS_StatusTypeDef 					RS_STATUS;						// RS status
 | 
			
		||||
}RS_HandleTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
//----------------FUNCTIONS FOR PROCESSING MESSAGE-------------------
 | 
			
		||||
/*--------------------Defined by users purposes--------------------*/
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Respond accord to received message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о результате ответа на комманду.
 | 
			
		||||
	* @note		Обработка принятой комманды и ответ на неё.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Collect message in buffer to transmit it.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
	* @return RS_RES				- статус о результате заполнения буфера.
 | 
			
		||||
	* @note		Заполнение буффера UART из структуры сообщения.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Parse message from buffer to process it.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 				- указатель на структуру сообщения.
 | 
			
		||||
	* @param 	msg_uart_buff	- указатель на буффер UART.
 | 
			
		||||
	* @return RS_RES				- статус о результате заполнения структуры.
 | 
			
		||||
	* @note		Заполнение структуры сообщения из буффера UART.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Define size of RX Message that need to be received.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	rx_data_size 	- указатель на переменную для записи кол-ва байт для принятия.
 | 
			
		||||
	* @return RS_RES				- статус о корректности рассчета кол-ва байт для принятия.
 | 
			
		||||
	* @note		Определение сколько байтов надо принять по протоколу.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------GENERAL FUNCTIONS-------------------------
 | 
			
		||||
/*-----------------Should be called from main code-----------------*/
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Start receive IT.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации приема.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Start transmit IT.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации передачи.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Initialize UART and handle RS stucture.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	suart 				- указатель на структуру с настройками UART.
 | 
			
		||||
	* @param 	stim 					- указатель на структуру с настройками таймера.
 | 
			
		||||
	* @param 	pRS_BufferPtr - указатель на буффер для приема-передачи по UART. Если он NULL, то поставиться библиотечный буфер.
 | 
			
		||||
	* @return RS_RES				- статус о состоянии RS после инициализации.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_SettingsTypeDef *suart, TIM_SettingsTypeDef *stim, uint8_t *pRS_BufferPtr);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	ReInitialize UART and RS receive.
 | 
			
		||||
	* @param 	hRS 					- указатель на хендлер RS.
 | 
			
		||||
	* @param 	suart 				- указатель на структуру с настройками UART.
 | 
			
		||||
	* @return RS_RES				- статус о состоянии RS после инициализации.
 | 
			
		||||
	*/
 | 
			
		||||
HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_SettingsTypeDef *suart);
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Abort RS/UART.
 | 
			
		||||
	* @param 	hRS 				- указатель на хендлер RS.
 | 
			
		||||
	* @param 	AbortMode 	- выбор, что надо отменить.
 | 
			
		||||
							- ABORT_TX:		 Отмена передачи по ЮАРТ, с очищением флагов TX,
 | 
			
		||||
							- ABORT_RX:		 Отмена приема по ЮАРТ, с очищением флагов RX,
 | 
			
		||||
							- ABORT_RX_TX: Отмена приема и передачи по ЮАРТ,
 | 
			
		||||
							- ABORT_RS: 	 Отмена приема-передачи RS, с очищением всей структуры.
 | 
			
		||||
	* @return RS_RES			- статус о состоянии RS после аборта.
 | 
			
		||||
	* @note		Отмена работы UART в целом или отмена приема/передачи RS. 
 | 
			
		||||
						Также очищается хендл hRS.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode);
 | 
			
		||||
//-------------------------GENERAL FUNCTIONS-------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
 | 
			
		||||
/**
 | 
			
		||||
	* @brief 	Handle for starting receive.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации приема или окончания общения.
 | 
			
		||||
	* @note		Определяет начинать прием команды/ответа или нет.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handle for starting transmit.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @param 	RS_msg 	- указатель на структуру сообщения.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после инициализации передачи.
 | 
			
		||||
	* @note		Определяет отвечать ли на команду или нет.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	UART RX Callback: define behaviour after receiving parts of message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после обработки приема.
 | 
			
		||||
	* @note		Контролирует прием сообщения: определяет размер принимаемой посылки и обрабатывает его.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	UART TX Callback: define behaviour after transmiting message.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @return RS_RES	- статус о состоянии RS после обработки приема.
 | 
			
		||||
	* @note		Определяет поведение RS после передачи сообщения.
 | 
			
		||||
	*/
 | 
			
		||||
RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handler for UART.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @note		Обрабатывает ошибки если есть и вызывает RS Коллбеки.
 | 
			
		||||
	*					Добавить вызов этой функции в UARTx_IRQHandler().
 | 
			
		||||
	*/
 | 
			
		||||
void RS_UART_Handler(RS_HandleTypeDef *hRS);
 | 
			
		||||
/**  
 | 
			
		||||
	* @brief 	Handler for TIM.
 | 
			
		||||
	* @param 	hRS 		- указатель на хендлер RS.
 | 
			
		||||
	* @note		Попадание сюда = таймаут и перезапуск RS приема
 | 
			
		||||
	*					Добавить вызов этой функции в TIMx_IRQHandler().
 | 
			
		||||
	*/
 | 
			
		||||
void RS_TIM_Handler(RS_HandleTypeDef *hRS);
 | 
			
		||||
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
 | 
			
		||||
///////////////////////////---FUNCTIONS---///////////////////////////
 | 
			
		||||
 | 
			
		||||
#endif // __RS_LIB_H_
 | 
			
		||||
@ -1,240 +0,0 @@
 | 
			
		||||
#include "pwm.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TIM_SettingsTypeDef TIM_CTRL = {0};
 | 
			
		||||
 | 
			
		||||
// variables for filling arrays
 | 
			
		||||
int Numb_Of_Peroids = 2;			// number of periods
 | 
			
		||||
int Samples_Per_Peroid = 0;		// how many samples in one period
 | 
			
		||||
int Size_Of_Log = 0;					// size of written data to log
 | 
			
		||||
int log_ind = 0;							// index of log arrays
 | 
			
		||||
int cnt_to_cnt_log = 0;				// counter for log_cnt
 | 
			
		||||
 | 
			
		||||
int sine_ind_prev = 0;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Filling logs.
 | 
			
		||||
	* @note 	Заполнение логов: синус, шим, пила.
 | 
			
		||||
	* @note		This called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Fill_Logs_with_Data(void)
 | 
			
		||||
{	
 | 
			
		||||
	// calc pwm duty from timer
 | 
			
		||||
	float PWM_Duty;
 | 
			
		||||
	if(PWM_Get_Mode(&hpwm1, PWM_DC_MODE) == 0) // if sinus need to be written
 | 
			
		||||
	{
 | 
			
		||||
		if(PWM_Get_Mode(&hpwm1, PWM_CH_MODE)) // if its signed sine mode (two channels)
 | 
			
		||||
		{
 | 
			
		||||
			if(hpwm1.Duty_Table_Ind < hpwm1.Duty_Table_Size/2) 	// first half get from channel 1
 | 
			
		||||
				PWM_Duty = (((float)PWM_Get_Compare1(&hpwm1))/(PWM_Get_Autoreload(&hpwm1)))+1;
 | 
			
		||||
			else																								// second half get from channel 2
 | 
			
		||||
				PWM_Duty = 1-(((float)PWM_Get_Compare2(&hpwm1))/(PWM_Get_Autoreload(&hpwm1)));
 | 
			
		||||
		}
 | 
			
		||||
		else // if its unsigned sine mode (single channel)
 | 
			
		||||
		{	// just get current pwm duty
 | 
			
		||||
			PWM_Duty = ((float)PWM_Get_Compare1(&hpwm1)/PWM_Get_Autoreload(&hpwm1));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else // if its dc pwm mode
 | 
			
		||||
	{ // just get current pwm duty
 | 
			
		||||
		if(PWM_Get_Mode(&hpwm1, PWM_CH_MODE)) // if its second channels mode
 | 
			
		||||
			PWM_Duty = ((float)PWM_Get_Compare2(&hpwm1)/PWM_Get_Autoreload(&hpwm1));
 | 
			
		||||
		else																	// if its first channel mode
 | 
			
		||||
			PWM_Duty = ((float)PWM_Get_Compare1(&hpwm1)/PWM_Get_Autoreload(&hpwm1));
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
	
 | 
			
		||||
	// WRITE SINUS TO WHOLE ARRAY
 | 
			
		||||
//	sine_log[log_ind] = sin_val;	
 | 
			
		||||
	if(PWM_Get_Mode(&hpwm1,PWM_DC_MODE) == 0)	// in table mode write PWM Duty (write sine) with scale 1/2 from sin table max value (0xFFFF/2)
 | 
			
		||||
		sine_log[log_ind] = PWM_Duty*(0x8000-1);
 | 
			
		||||
	else																			// in dc mode write PWM Duty (write sine)
 | 
			
		||||
		sine_log[log_ind] = 0;
 | 
			
		||||
		
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	// WRITE PWM
 | 
			
		||||
	if(PWM_Get_Mode(&hpwm1,PWM_DC_MODE)) // in DC mode
 | 
			
		||||
	{
 | 
			
		||||
		// write 1 - if log_ind < Size_Of_Period*PWM_Dury
 | 
			
		||||
		// write 0 - otherwise
 | 
			
		||||
		pwm_log[log_ind] = (log_ind%(Size_Of_Log/Numb_Of_Peroids) < (Size_Of_Log/Numb_Of_Peroids+1)*hpwm1.PWM_Value/100)? 1: 0;	
 | 
			
		||||
	}
 | 
			
		||||
	else // in table mode
 | 
			
		||||
	{
 | 
			
		||||
		// write fill whole pwm array at one interrupt
 | 
			
		||||
		int PWM_Period_End_Ind = (Size_Of_Log/Numb_Of_Peroids);
 | 
			
		||||
		int PWM_Step_End_Ind;
 | 
			
		||||
		if(PWM_Get_Mode(&hpwm1,PWM_CH_MODE))
 | 
			
		||||
			PWM_Step_End_Ind = PWM_Period_End_Ind*fabs(PWM_Duty-1);
 | 
			
		||||
		else
 | 
			
		||||
			PWM_Step_End_Ind = PWM_Period_End_Ind*PWM_Duty;
 | 
			
		||||
		for(int i = 0; i <= PWM_Step_End_Ind; i++)
 | 
			
		||||
		{
 | 
			
		||||
			for (int j = 0; j < Numb_Of_Peroids; j++)
 | 
			
		||||
				pwm_log[i+j*PWM_Period_End_Ind] = 1;
 | 
			
		||||
		}		
 | 
			
		||||
		for(int i = PWM_Step_End_Ind+1; i < PWM_Period_End_Ind; i++)
 | 
			
		||||
			for (int j = 0; j < Numb_Of_Peroids; j++)
 | 
			
		||||
				pwm_log[i+j*PWM_Period_End_Ind] = 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// WRITE COUNTER
 | 
			
		||||
	cnt_log[log_ind] = cnt_to_cnt_log;
 | 
			
		||||
	cnt_to_cnt_log++;
 | 
			
		||||
	if(cnt_to_cnt_log>=Size_Of_Log/2)
 | 
			
		||||
		cnt_to_cnt_log = 0;
 | 
			
		||||
	
 | 
			
		||||
	// INCREMENT AND RESET COUNTER
 | 
			
		||||
	log_ind++;
 | 
			
		||||
	if(PWM_Get_Mode(&hpwm1,PWM_DC_MODE) == 0) // if its PWM table mode
 | 
			
		||||
	{
 | 
			
		||||
		// SYNCHRONIZE PERIOD OF SIN IN LOG
 | 
			
		||||
		// (это надо, чтобы данные не съезжали из-за несинхронизированного периода)
 | 
			
		||||
		
 | 
			
		||||
		// wait until period ended
 | 
			
		||||
		if(log_ind>Size_Of_Log-1) // if logs are filled
 | 
			
		||||
		{	
 | 
			
		||||
			if((unsigned)hpwm1.Duty_Table_Ind < sine_ind_prev) // and if new period started
 | 
			
		||||
			{	
 | 
			
		||||
				log_ind = 0; // reset counter
 | 
			
		||||
				sine_ind_prev = (unsigned)hpwm1.Duty_Table_Ind;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// update prev variable only if log currently writing
 | 
			
		||||
		else
 | 
			
		||||
			sine_ind_prev = (unsigned)hpwm1.Duty_Table_Ind;
 | 
			
		||||
	}
 | 
			
		||||
	else // if its PWM DC mode
 | 
			
		||||
	{
 | 
			
		||||
		// if logs are filled
 | 
			
		||||
		if(log_ind>Size_Of_Log-1)
 | 
			
		||||
			log_ind = 0;		
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
	
 | 
			
		||||
	// if its overflow log array size - reset log_ind
 | 
			
		||||
	if(log_ind>LOG_SIZE-1)
 | 
			
		||||
	{
 | 
			
		||||
		log_ind = 0;
 | 
			
		||||
		sine_ind_prev = (unsigned)hpwm1.Duty_Table_Ind;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Update log parameters.
 | 
			
		||||
	* @note 	Проверка надо ли обновлять параметры логов, и если надо - обновляет их.
 | 
			
		||||
	* @note		This called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Update_Params_For_Log(void)
 | 
			
		||||
{	
 | 
			
		||||
	unsigned UpdateLog = 0;
 | 
			
		||||
 | 
			
		||||
	// READ	NUMB OF PERIOD IN LOGS
 | 
			
		||||
	if(Numb_Of_Peroids != log_ctrl[R_LOG_CTRL_LOG_PWM_NUMB])
 | 
			
		||||
	{
 | 
			
		||||
		Numb_Of_Peroids = log_ctrl[R_LOG_CTRL_LOG_PWM_NUMB];
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}	
 | 
			
		||||
	// READ	SIZE OF LOGS
 | 
			
		||||
	if(Size_Of_Log != log_ctrl[R_LOG_CTRL_LOG_SIZE])
 | 
			
		||||
	{
 | 
			
		||||
		Size_Of_Log = log_ctrl[R_LOG_CTRL_LOG_SIZE];
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// UPDATE LOG PARAMS
 | 
			
		||||
	if(UpdateLog)
 | 
			
		||||
	{
 | 
			
		||||
		// set logs params
 | 
			
		||||
		Set_Log_Params();	
 | 
			
		||||
	}	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set up log parameters.
 | 
			
		||||
	* @note 	Устанавливает настройки логов и проверяет их на корректность.
 | 
			
		||||
	*/
 | 
			
		||||
void Set_Log_Params(void)
 | 
			
		||||
{
 | 
			
		||||
	// SET LOG PARAMS
 | 
			
		||||
	log_ind = 0;
 | 
			
		||||
	Samples_Per_Peroid = TIM_CTRL.sTimFreqHz/hpwm1.PWM_Value;
 | 
			
		||||
	
 | 
			
		||||
	if(Size_Of_Log > LOG_SIZE) // if its too much data in log
 | 
			
		||||
	{
 | 
			
		||||
		Numb_Of_Peroids = (LOG_SIZE/Samples_Per_Peroid);
 | 
			
		||||
		log_ctrl[R_LOG_CTRL_LOG_SIZE] = Numb_Of_Peroids;
 | 
			
		||||
		Size_Of_Log = Numb_Of_Peroids*Samples_Per_Peroid;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// clear logs arrays
 | 
			
		||||
	for(int i = Size_Of_Log; i < LOG_SIZE; i++)
 | 
			
		||||
	{
 | 
			
		||||
		sine_log[i] = 0;
 | 
			
		||||
		pwm_log[i] = 0;
 | 
			
		||||
		cnt_log[i] = 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of control timer.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в log_ctrl.
 | 
			
		||||
	* @note		This called from main while
 | 
			
		||||
	*/
 | 
			
		||||
void Control_Timer_ReInit(TIM_SettingsTypeDef *stim)
 | 
			
		||||
{
 | 
			
		||||
	TIM_Base_MspDeInit(&stim->htim);
 | 
			
		||||
	hpwm1.stim.sTickBaseMHz = PROJSET.TIM_CTRL_TICKBASE;
 | 
			
		||||
	TIM_Base_Init(stim);
 | 
			
		||||
	
 | 
			
		||||
	HAL_TIM_Base_Start_IT(&stim->htim); // timer for sinus
 | 
			
		||||
  HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 1, 1);
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First initialization of Control Timer.
 | 
			
		||||
	* @note 	Первый управляющего таймера. Таймер записывает логи и обновляет параметры ШИМ.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void Control_Timer_FirstInit(void)
 | 
			
		||||
{
 | 
			
		||||
	//-------CONTROL TIMER INIT----------
 | 
			
		||||
	// tim settings
 | 
			
		||||
	TIM_CTRL.htim.Instance = TIM12;
 | 
			
		||||
	TIM_CTRL.sTimMode = TIM_IT_MODE;
 | 
			
		||||
	TIM_CTRL.sTickBaseMHz = PROJSET.TIM_CTRL_TICKBASE;
 | 
			
		||||
	TIM_CTRL.sTimAHBFreqMHz = PROJSET.TIM_CTRL_AHB_FREQ;
 | 
			
		||||
	TIM_CTRL.sTimFreqHz = HZ_TIMER_CTRL;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&TIM_CTRL);
 | 
			
		||||
  HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 1, 1);
 | 
			
		||||
	
 | 
			
		||||
	HAL_TIM_Base_Start_IT(&TIM_CTRL.htim); // timer for sinus
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// FILL TIME ARRAY WITH TIME
 | 
			
		||||
	for(int i = 0; i <= R_TIME_LOG_QNT; i++)
 | 
			
		||||
		time_log[i] = i;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//------------------------HANDLERS FUNCTIONS-------------------------
 | 
			
		||||
//-------------CONTROL TIMER---------------
 | 
			
		||||
void TIM8_BRK_TIM12_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
	Trace_CTRL_TIM_Enter();
 | 
			
		||||
  HAL_TIM_IRQHandler(&TIM_CTRL.htim);
 | 
			
		||||
	
 | 
			
		||||
	Fill_Logs_with_Data();
 | 
			
		||||
	Update_Params_For_Log();
 | 
			
		||||
	Update_Params_For_PWM(&hpwm1);
 | 
			
		||||
	
 | 
			
		||||
	WriteSettingsToMem();
 | 
			
		||||
	
 | 
			
		||||
	Trace_CTRL_TIM_Exit();	
 | 
			
		||||
}
 | 
			
		||||
@ -1,48 +0,0 @@
 | 
			
		||||
#ifndef __CONTROL_H_
 | 
			
		||||
#define __CONTROL_H_
 | 
			
		||||
 | 
			
		||||
#include "periph_general.h"
 | 
			
		||||
#include "modbus.h"
 | 
			
		||||
#include "math.h"
 | 
			
		||||
#include "settings.h"
 | 
			
		||||
 | 
			
		||||
#define M_PI           	3.14159265358979323846  /* pi */
 | 
			
		||||
 | 
			
		||||
extern TIM_SettingsTypeDef TIM_CTRL;
 | 
			
		||||
 | 
			
		||||
//---------------------this called from TIM_CTRL_Handler()-----------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Update log parameters.
 | 
			
		||||
	* @note 	Проверка надо ли обновлять параметры логов, и если надо - обновляет их.
 | 
			
		||||
	* @note		This called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Update_Params_For_Log(void);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Filling logs.
 | 
			
		||||
	* @note 	заполнение логов: синус, шим, пила.
 | 
			
		||||
	* @note		this called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Fill_Logs_with_Data(void);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set up log parameters.
 | 
			
		||||
	* @note 	Устанавливает настройки логов и проверяет их на корректность.
 | 
			
		||||
	*/
 | 
			
		||||
void Set_Log_Params(void);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First initialization of Control Timer.
 | 
			
		||||
	* @note 	Первый управляющего таймера. Таймер записывает логи и обновляет параметры ШИМ.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void Control_Timer_FirstInit(void);
 | 
			
		||||
 | 
			
		||||
// this called from main while(1)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of control timer.
 | 
			
		||||
	* @param	stim - указатель на настройки таймера.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в log_ctrl.
 | 
			
		||||
	* @note		This called from main while
 | 
			
		||||
	*/
 | 
			
		||||
void Control_Timer_ReInit(TIM_SettingsTypeDef *stim);
 | 
			
		||||
 | 
			
		||||
#endif // __CONTROL_H_
 | 
			
		||||
							
								
								
									
										855
									
								
								Code/PWM/pwm.c
									
									
									
									
									
								
							
							
						
						@ -1,855 +0,0 @@
 | 
			
		||||
#include "pwm.h"
 | 
			
		||||
//#include "rng.h"
 | 
			
		||||
 | 
			
		||||
PWM_HandleTypeDef hpwm1;
 | 
			
		||||
PWM_SlaveHandleTypeDef hpwm2;
 | 
			
		||||
PWM_SlaveHandleTypeDef hpwm3;
 | 
			
		||||
 | 
			
		||||
uint32_t sin_table[SIN_TABLE_SIZE_MAX];
 | 
			
		||||
unsigned 				ActiveChannelSHDW_Master;
 | 
			
		||||
float 					DeadTimeCnt_Master;
 | 
			
		||||
 | 
			
		||||
unsigned 				ActiveChannelSHDW_Slave2;
 | 
			
		||||
float 					DeadTimeCnt_Slave2;
 | 
			
		||||
 | 
			
		||||
unsigned 				ActiveChannelSHDW_Slave3;
 | 
			
		||||
float 					DeadTimeCnt_Slave3;
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First set up of PWM.
 | 
			
		||||
	* @note 	Первый инит ШИМ. Заполняет структуры и инициализирует таймер для генерации синуоидального ШИМ.
 | 
			
		||||
	* 				Скважность ШИМ меняется по закону синусоиды, каждый канал генерирует свой полупериод синуса (от -1 до 0 И от 0 до 1)
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Sine_FirstInit(void)
 | 
			
		||||
{
 | 
			
		||||
	hpwm1.pDuty_Table_Origin = SIN_TABLE_ORIGIN;
 | 
			
		||||
	
 | 
			
		||||
	//---------PWM TIMER1 INIT------------
 | 
			
		||||
	// channels settings
 | 
			
		||||
	hpwm1.sConfigOC.OCMode = TIM_OCMODE_PWM1;
 | 
			
		||||
  hpwm1.sConfigOC.Pulse = 0;
 | 
			
		||||
  hpwm1.sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 | 
			
		||||
  hpwm1.sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 | 
			
		||||
	
 | 
			
		||||
	// tim1 settings
 | 
			
		||||
	hpwm1.stim.htim.Instance = TIMER_PWM1_INSTANCE;
 | 
			
		||||
	hpwm1.stim.sTimMode = TIM_IT_MODE;
 | 
			
		||||
	hpwm1.stim.sTimFreqHz = HZ_TIMER_PWM;
 | 
			
		||||
	hpwm1.stim.sTickBaseMHz = 	PROJSET.TIM_PWM_TICKBASE;
 | 
			
		||||
	hpwm1.stim.sTimAHBFreqMHz = PROJSET.TIM_PWM_AHB_FREQ;
 | 
			
		||||
	hpwm1.GPIOx = 							TIMER_PWM1_GPIOx;
 | 
			
		||||
	hpwm1.GPIO_PIN_X1 = 				PROJSET.TIM_PWM1_GPIO_PIN_X1;
 | 
			
		||||
	hpwm1.GPIO_PIN_X2 = 				PROJSET.TIM_PWM1_GPIO_PIN_X2;
 | 
			
		||||
	hpwm1.PWM_Channel1 = 				PROJSET.TIM_PWM1_TIM_CHANNEL1;
 | 
			
		||||
	hpwm1.PWM_Channel2 = 				PROJSET.TIM_PWM1_TIM_CHANNEL2;
 | 
			
		||||
	hpwm1.hpwm2 = (void *)&hpwm2;
 | 
			
		||||
	hpwm1.hpwm3 = (void *)&hpwm3;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&hpwm1.stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm1.stim.htim, &hpwm1.sConfigOC, hpwm1.PWM_Channel1, hpwm1.GPIOx, hpwm1.GPIO_PIN_X1);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm1.stim.htim, &hpwm1.sConfigOC, hpwm1.PWM_Channel2, hpwm1.GPIOx, hpwm1.GPIO_PIN_X2);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// PWM SLAVES INIT
 | 
			
		||||
	hpwm2.hMasterPWM = &hpwm1;
 | 
			
		||||
	hpwm2.stim = hpwm1.stim;
 | 
			
		||||
	hpwm2.stim.htim.Instance = 	(TIM_TypeDef *)PROJSET.TIM_PWM2_INSTANCE;
 | 
			
		||||
	hpwm2.GPIOx = 							(GPIO_TypeDef *)PROJSET.TIM_PWM2_GPIOx;
 | 
			
		||||
	hpwm2.GPIO_PIN_X1 = 				PROJSET.TIM_PWM2_GPIO_PIN_X1;
 | 
			
		||||
	hpwm2.GPIO_PIN_X2 = 				PROJSET.TIM_PWM2_GPIO_PIN_X2;
 | 
			
		||||
	hpwm2.PWM_Channel1 = 				PROJSET.TIM_PWM2_TIM_CHANNEL1;
 | 
			
		||||
	hpwm2.PWM_Channel2 = 				PROJSET.TIM_PWM2_TIM_CHANNEL2;
 | 
			
		||||
	hpwm2.Duty_Shift_Ratio = (float)2/3;
 | 
			
		||||
	
 | 
			
		||||
	hpwm3.hMasterPWM = &hpwm1;
 | 
			
		||||
	hpwm3.stim = hpwm1.stim;
 | 
			
		||||
	hpwm3.stim.htim.Instance = 	(TIM_TypeDef *)PROJSET.TIM_PWM3_INSTANCE;
 | 
			
		||||
	hpwm3.GPIOx = 							(GPIO_TypeDef *)PROJSET.TIM_PWM3_GPIOx;
 | 
			
		||||
	hpwm3.GPIO_PIN_X1 = 				PROJSET.TIM_PWM3_GPIO_PIN_X1;
 | 
			
		||||
	hpwm3.GPIO_PIN_X2 = 				PROJSET.TIM_PWM3_GPIO_PIN_X2;
 | 
			
		||||
	hpwm3.PWM_Channel1 = 				PROJSET.TIM_PWM3_TIM_CHANNEL1;
 | 
			
		||||
	hpwm3.PWM_Channel2 = 				PROJSET.TIM_PWM3_TIM_CHANNEL2;
 | 
			
		||||
	hpwm3.Duty_Shift_Ratio = (float)-2/3;
 | 
			
		||||
	
 | 
			
		||||
	PWM_SlavePhase_Init(&hpwm2);
 | 
			
		||||
	PWM_SlavePhase_Init(&hpwm3);
 | 
			
		||||
	
 | 
			
		||||
	//----------TIMERS START-------------
 | 
			
		||||
	HAL_TIM_Base_Start_IT(&hpwm1.stim.htim); // timer for PWM
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm1.stim.htim, hpwm1.PWM_Channel1); // PWM channel 1
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm1.stim.htim, hpwm1.PWM_Channel2); // PWM channel 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	PWM Handler.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Управляет скважностью ШИМ.
 | 
			
		||||
	* @note		This called from TIM_PWM_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Handler(PWM_HandleTypeDef *hpwm)
 | 
			
		||||
{	
 | 
			
		||||
	//------------SINUS MODE-------------
 | 
			
		||||
	if(PWM_Get_Mode(&hpwm1,PWM_DC_MODE) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		if(hpwm->PWM_Value != 0) // if there some frequency
 | 
			
		||||
		{
 | 
			
		||||
			unsigned sin_ind = PWM_Get_Duty_Table_Ind(hpwm, hpwm->stim.sTimFreqHz);
 | 
			
		||||
			// overflow check
 | 
			
		||||
			if(sin_ind >= hpwm->Duty_Table_Size)
 | 
			
		||||
				sin_ind -= hpwm->Duty_Table_Size;
 | 
			
		||||
			if(sin_ind >= hpwm->Duty_Table_Size) // if its still overflow reset it
 | 
			
		||||
				sin_ind = 0;
 | 
			
		||||
			
 | 
			
		||||
			// if unsigned sine enabled
 | 
			
		||||
			if(PWM_Get_Mode(hpwm, PWM_CH_MODE) == 0) 
 | 
			
		||||
			{
 | 
			
		||||
				// set pwm duty
 | 
			
		||||
				PWM_Set_Duty_From_Table(hpwm, sin_ind);						// set first channel
 | 
			
		||||
				PWM_SlavePhase_Set_DutyTable_Unsigned(PWM_Set_pSlaveHandle(hpwm,hpwm2), sin_ind);
 | 
			
		||||
				PWM_SlavePhase_Set_DutyTable_Unsigned(PWM_Set_pSlaveHandle(hpwm,hpwm3), sin_ind);
 | 
			
		||||
			}	
 | 
			
		||||
			// if signed sine enabled
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				int Duty = PWM_Get_Table_Element_Signed(hpwm, sin_ind);	
 | 
			
		||||
				
 | 
			
		||||
				if(Duty >= 0)	
 | 
			
		||||
				{					
 | 
			
		||||
					PWM_Set_Compare1(hpwm, Duty);	// set first channel
 | 
			
		||||
					PWM_Set_Compare2(hpwm, 0);		// reset second channel
 | 
			
		||||
				}
 | 
			
		||||
				else																			// если это вторая полуволна
 | 
			
		||||
				{
 | 
			
		||||
					PWM_Set_Compare1(hpwm, 0);		// reset first channel
 | 
			
		||||
					PWM_Set_Compare2(hpwm, -Duty);	// set second channel
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				PWM_SlavePhase_Set_DutyTable_Signed(PWM_Set_pSlaveHandle(hpwm,hpwm2), sin_ind);
 | 
			
		||||
				PWM_SlavePhase_Set_DutyTable_Signed(PWM_Set_pSlaveHandle(hpwm,hpwm3), sin_ind);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else // if freq = 0 reset all channels
 | 
			
		||||
		{		
 | 
			
		||||
			PWM_Set_Compare1(hpwm, 0);	// reset first channel
 | 
			
		||||
			PWM_Set_Compare2(hpwm, 0);	// reset second channel
 | 
			
		||||
			PWM_Set_Compare1(PWM_Set_pSlaveHandle(hpwm,hpwm2), 0);	// reset first channel
 | 
			
		||||
			PWM_Set_Compare2(PWM_Set_pSlaveHandle(hpwm,hpwm2), 0);	// reset second channel
 | 
			
		||||
			PWM_Set_Compare1(PWM_Set_pSlaveHandle(hpwm,hpwm3), 0);	// reset first channel
 | 
			
		||||
			PWM_Set_Compare2(PWM_Set_pSlaveHandle(hpwm,hpwm3), 0);	// reset second channel
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
	}
 | 
			
		||||
	//-----------PWM DC MODE-------------
 | 
			
		||||
	else
 | 
			
		||||
	{		
 | 
			
		||||
		PWM_Set_Compare1(PWM_Set_pSlaveHandle(hpwm,hpwm2), 0);	// reset first channel
 | 
			
		||||
		PWM_Set_Compare2(PWM_Set_pSlaveHandle(hpwm,hpwm2), 0);	// reset second channel
 | 
			
		||||
		PWM_Set_Compare1(PWM_Set_pSlaveHandle(hpwm,hpwm3), 0);	// reset first channel
 | 
			
		||||
		PWM_Set_Compare2(PWM_Set_pSlaveHandle(hpwm,hpwm3), 0);	// reset second channel
 | 
			
		||||
//		uint32_t pwm_rng = 0;
 | 
			
		||||
//		HAL_RNG_GenerateRandomNumber(&hrng, &pwm_rng);
 | 
			
		||||
//		pwm_rng = ((pwm_rng&0xFFFF)/(0xFFFF/PWM_Get_Autoreload(hpwm)))/((float)100/hpwm->PWM_Value);
 | 
			
		||||
//		if (pwm_rng < PWM_Calc_Min_Duty(hpwm)) 
 | 
			
		||||
//			pwm_rng = PWM_Calc_Min_Duty(hpwm);
 | 
			
		||||
		// if second channel enabled
 | 
			
		||||
		if(PWM_Get_Mode(hpwm, PWM_CH_MODE)) 
 | 
			
		||||
		{
 | 
			
		||||
			PWM_Set_Compare1(hpwm, 0); 					// reset first channel
 | 
			
		||||
			PWM_Set_Duty_From_Percent(hpwm, hpwm->PWM_Channel2); 	// set second channel
 | 
			
		||||
//			__HAL_TIM_SET_COMPARE(&(hpwm->stim.htim), TIM_CHANNEL_2, pwm_rng); 	// set second channel
 | 
			
		||||
		}
 | 
			
		||||
		// if first channel enabled
 | 
			
		||||
		else 
 | 
			
		||||
		{
 | 
			
		||||
//			__HAL_TIM_SET_COMPARE(&(hpwm->stim.htim), TIM_CHANNEL_1, pwm_rng); 	// set second channel
 | 
			
		||||
			PWM_Set_Duty_From_Percent(hpwm, hpwm->PWM_Channel1); 	// set first channel
 | 
			
		||||
			PWM_Set_Compare2(hpwm, 0); 														// reset second channel
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//-----CHECK CHANNELS FOR ERRORS-----
 | 
			
		||||
	uint16_t min_duty = PWM_Calc_Min_Duty(hpwm);
 | 
			
		||||
	// IF FIRST CHANNEL IS ACRIVE
 | 
			
		||||
	if(PWM_Get_Compare1(hpwm) != 0)
 | 
			
		||||
	{
 | 
			
		||||
		// Duty shoud be bigger or equeal than min duration
 | 
			
		||||
		if (PWM_Get_Compare1(hpwm)<min_duty)
 | 
			
		||||
			PWM_Set_Compare1(hpwm, min_duty);		
 | 
			
		||||
		// Duty shoud be less or equeal than ARR-min duration
 | 
			
		||||
		if (PWM_Get_Compare1(hpwm)>PWM_Get_Autoreload(hpwm)-min_duty)
 | 
			
		||||
			PWM_Set_Compare1(hpwm, PWM_Get_Autoreload(hpwm)-min_duty);
 | 
			
		||||
	}
 | 
			
		||||
	// IF SECOND CHANNEL IS ACRIVE
 | 
			
		||||
	else if(PWM_Get_Compare2(hpwm) != 0)
 | 
			
		||||
	{
 | 
			
		||||
	// Duty shoud be bigger or equeal than min duration
 | 
			
		||||
	if (PWM_Get_Compare2(hpwm)<min_duty)
 | 
			
		||||
		PWM_Set_Compare2(hpwm, min_duty);
 | 
			
		||||
	// Duty shoud be less or equeal than ARR
 | 
			
		||||
	if (PWM_Get_Compare2(hpwm)>PWM_Get_Autoreload(hpwm)-min_duty)
 | 
			
		||||
		PWM_Set_Compare2(hpwm, PWM_Get_Autoreload(hpwm)-min_duty);
 | 
			
		||||
	}	
 | 
			
		||||
	// IF BOTH CHANNEL IS ACRIVE
 | 
			
		||||
	if((PWM_Get_Compare1(hpwm) != 0) && (PWM_Get_Compare2(hpwm) != 0))
 | 
			
		||||
	{
 | 
			
		||||
		// Only one channel shoud be active so disable all
 | 
			
		||||
		PWM_Set_Compare1(hpwm, 0);
 | 
			
		||||
		PWM_Set_Compare2(hpwm, 0);
 | 
			
		||||
	}
 | 
			
		||||
	PWM_SlavePhase_Check_Channels(PWM_Set_pSlaveHandle(hpwm,hpwm2));
 | 
			
		||||
	PWM_SlavePhase_Check_Channels(PWM_Set_pSlaveHandle(hpwm,hpwm3));
 | 
			
		||||
	
 | 
			
		||||
	if(hpwm->PWM_DeadTime)
 | 
			
		||||
	{
 | 
			
		||||
		PWM_CreateDeadTime(hpwm, &DeadTimeCnt_Master, &ActiveChannelSHDW_Master);
 | 
			
		||||
		PWM_SlavePhase_CreateDeadTime(PWM_Set_pSlaveHandle(hpwm,hpwm2), &DeadTimeCnt_Slave2, &ActiveChannelSHDW_Slave2);
 | 
			
		||||
		PWM_SlavePhase_CreateDeadTime(PWM_Set_pSlaveHandle(hpwm,hpwm3), &DeadTimeCnt_Slave3, &ActiveChannelSHDW_Slave3);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Update PWM parameters.
 | 
			
		||||
	* @note 	Проверка надо ли обновлять параметры ШИМ, и если надо - обновляет их.
 | 
			
		||||
	* @note		This called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Update_Params_For_PWM(PWM_HandleTypeDef *hpwm)
 | 
			
		||||
{
 | 
			
		||||
	unsigned UpdateModeParams = 0;
 | 
			
		||||
	unsigned UpdateLog = 0;
 | 
			
		||||
		
 | 
			
		||||
	// READ	PWM_DC_MODE
 | 
			
		||||
	if(PWM_Get_Mode(hpwm, PWM_DC_MODE) != (MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_DC_MODE) << PWM_DC_MODE_Pos))
 | 
			
		||||
	{	
 | 
			
		||||
		if(MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_DC_MODE))
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode |= PWM_DC_MODE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode &= ~PWM_DC_MODE;
 | 
			
		||||
		}		
 | 
			
		||||
		// update mode params
 | 
			
		||||
		UpdateModeParams = 1;
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// READ	PWM_CH_MODE
 | 
			
		||||
	if(PWM_Get_Mode(hpwm, PWM_CH_MODE) != (MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_CH_MODE) << PWM_CH_MODE_Pos))
 | 
			
		||||
	{	
 | 
			
		||||
		if(MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_CH_MODE))
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode |= PWM_CH_MODE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode &= ~PWM_CH_MODE;
 | 
			
		||||
		}		
 | 
			
		||||
		// update mode params
 | 
			
		||||
		UpdateModeParams = 1;
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
		
 | 
			
		||||
	// READ	PWM_CH_MODE
 | 
			
		||||
	if(PWM_Get_Mode(hpwm, PWM_PHASE_MODE) != (MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_PHASE_MODE) << PWM_PHASE_MODE_Pos))
 | 
			
		||||
	{	
 | 
			
		||||
		if(MB_Read_Coil_Local(&coils_regs[0], COIL_PWM_PHASE_MODE))
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode |= PWM_PHASE_MODE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->sPWM_Mode &= ~PWM_PHASE_MODE;
 | 
			
		||||
		}		
 | 
			
		||||
		// update mode params
 | 
			
		||||
		UpdateModeParams = 1;
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// READ	PWM_VALUE
 | 
			
		||||
	if(hpwm->PWM_Value != int_to_percent(pwm_ctrl[R_PWM_CTRL_PWM_VALUE]))
 | 
			
		||||
	{	
 | 
			
		||||
		hpwm->PWM_Value = int_to_percent(pwm_ctrl[R_PWM_CTRL_PWM_VALUE]);
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// READ	TABLE_SIZE
 | 
			
		||||
	if(hpwm->Duty_Table_Size != pwm_ctrl[R_PWM_CTRL_SIN_TABLE_SIZE])
 | 
			
		||||
	{
 | 
			
		||||
		hpwm->Duty_Table_Size = PWM_Fill_Sine_Table(&hpwm1, pwm_ctrl[R_PWM_CTRL_SIN_TABLE_SIZE]);
 | 
			
		||||
		pwm_ctrl[R_PWM_CTRL_SIN_TABLE_SIZE] = hpwm->Duty_Table_Size;
 | 
			
		||||
	}	
 | 
			
		||||
	
 | 
			
		||||
	// READ MIN PULSE DURATION
 | 
			
		||||
	if(hpwm->PWM_MinPulseDur != pwm_ctrl[R_PWM_CTRL_MIN_PULSE_DUR])
 | 
			
		||||
	{
 | 
			
		||||
		hpwm->PWM_MinPulseDur = pwm_ctrl[R_PWM_CTRL_MIN_PULSE_DUR];	
 | 
			
		||||
		// update mode params
 | 
			
		||||
		UpdateModeParams = 1;
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// READ DEAD TIME
 | 
			
		||||
	if(hpwm->PWM_DeadTime != pwm_ctrl[R_PWM_CTRL_DEAD_TIME])
 | 
			
		||||
	{
 | 
			
		||||
		hpwm->PWM_DeadTime = pwm_ctrl[R_PWM_CTRL_DEAD_TIME];
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// UPDATE PWM PARAMS
 | 
			
		||||
	if(UpdateModeParams)
 | 
			
		||||
	{			
 | 
			
		||||
		// UPDATE DUTY TABLE SCALE
 | 
			
		||||
		PWM_Update_DutyTableScale(hpwm);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		// update logs params
 | 
			
		||||
		UpdateLog = 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// UPDATE LOG PARAMS
 | 
			
		||||
	if(UpdateLog)
 | 
			
		||||
	{
 | 
			
		||||
		// set logs params
 | 
			
		||||
		Set_Log_Params();	
 | 
			
		||||
	}	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of PWM TIM.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в pwm_ctrl
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Sine_ReInit(PWM_HandleTypeDef *hpwm)
 | 
			
		||||
{
 | 
			
		||||
	Trace_PWM_reInit_Enter();
 | 
			
		||||
	TIM_Base_MspDeInit(&hpwm->stim.htim);
 | 
			
		||||
	hpwm1.stim.sTickBaseMHz = TIMER_PWM_TICKBASE;
 | 
			
		||||
	TIM_Base_Init(&hpwm->stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm->stim.htim, &hpwm->sConfigOC, hpwm->PWM_Channel1, hpwm->GPIOx, hpwm->GPIO_PIN_X1);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm->stim.htim, &hpwm->sConfigOC, hpwm->PWM_Channel2, hpwm->GPIOx, hpwm->GPIO_PIN_X2);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	PWM_Update_DutyTableScale(hpwm);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//----------TIMERS START-------------
 | 
			
		||||
	HAL_TIM_Base_Start_IT(&hpwm1.stim.htim); // timer for PWM
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm1.stim.htim, hpwm->PWM_Channel1); // PWM channel 1
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm1.stim.htim, hpwm->PWM_Channel2); // PWM channel 2
 | 
			
		||||
	
 | 
			
		||||
	Trace_PWM_reInit_Exit();
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Getting ind for Duty Table.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @param	FreqTIM - частота таймера ШИМ.
 | 
			
		||||
	* @note 	Рассчитывает индекс для таблицы скважностей.
 | 
			
		||||
	*					PWM_Value в hpwm - частота с которой эта таблица должна выводиться на ШИМ
 | 
			
		||||
	* @note		This called from TIM_PWM_Handler
 | 
			
		||||
	*/
 | 
			
		||||
uint32_t PWM_Get_Duty_Table_Ind(PWM_HandleTypeDef *hpwm, float FreqTIM)
 | 
			
		||||
{
 | 
			
		||||
	float sine_ind_step;
 | 
			
		||||
	uint32_t sine_ind;
 | 
			
		||||
	// calc ind for sin table
 | 
			
		||||
	sine_ind_step = hpwm->Duty_Table_Size/(FreqTIM/hpwm->PWM_Value);
 | 
			
		||||
	hpwm->Duty_Table_Ind += sine_ind_step;
 | 
			
		||||
	if(hpwm->Duty_Table_Ind >= hpwm->Duty_Table_Size)
 | 
			
		||||
		hpwm->Duty_Table_Ind -= hpwm->Duty_Table_Size;
 | 
			
		||||
	
 | 
			
		||||
	// if its too big (e.g. inf)
 | 
			
		||||
	if(hpwm->Duty_Table_Ind >= 0xFFFF)
 | 
			
		||||
		hpwm->Duty_Table_Ind = 0;
 | 
			
		||||
	
 | 
			
		||||
	return hpwm->Duty_Table_Ind;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Create Dead Time when switches channels.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_CreateDeadTime(PWM_HandleTypeDef *hpwm, float *LocalDeadTimeCnt, unsigned *LocalActiveChannel)
 | 
			
		||||
{	
 | 
			
		||||
	// get current active channel
 | 
			
		||||
	hpwm->fActiveChannel = (PWM_Get_Compare2(hpwm) != 0); // if channel two is active - write 1, otherwise - 0
 | 
			
		||||
	// when channels are swithed and no dead time currently active
 | 
			
		||||
	if(*LocalActiveChannel != hpwm->fActiveChannel)
 | 
			
		||||
	{	// update active channel
 | 
			
		||||
		*LocalActiveChannel = hpwm->fActiveChannel; 
 | 
			
		||||
		// set deadtime
 | 
			
		||||
		*LocalDeadTimeCnt = hpwm->PWM_DeadTime;
 | 
			
		||||
		Trace_PWM_DeadTime_Enter();
 | 
			
		||||
	}	
 | 
			
		||||
	// decrement dead time
 | 
			
		||||
	*LocalDeadTimeCnt -= (PWM_Get_Autoreload(hpwm)+1)*hpwm->stim.sTickBaseMHz;
 | 
			
		||||
	if(*LocalDeadTimeCnt > 0) // if dead time is still active
 | 
			
		||||
	{ // reset all channels 
 | 
			
		||||
		// reset channels
 | 
			
		||||
		PWM_Set_Compare1(hpwm, 0);
 | 
			
		||||
		PWM_Set_Compare2(hpwm, 0);
 | 
			
		||||
	}
 | 
			
		||||
	else // if dead time is done
 | 
			
		||||
	{ // set it to zero
 | 
			
		||||
		*LocalDeadTimeCnt = 0;		
 | 
			
		||||
		Trace_PWM_DeadTime_Exit();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Filling table with one period of sinus values.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @param	table_size - размер таблицы.
 | 
			
		||||
	* @note 	Формирует таблицу синусов размером table_size.
 | 
			
		||||
	*/
 | 
			
		||||
uint32_t PWM_Fill_Sine_Table(PWM_HandleTypeDef *hpwm, uint32_t table_size)
 | 
			
		||||
{
 | 
			
		||||
	if((hpwm == NULL) || (hpwm->pDuty_Table_Origin == NULL)  || (table_size == 0))
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	if (table_size > SIN_TABLE_SIZE_MAX)
 | 
			
		||||
		table_size = SIN_TABLE_SIZE_MAX;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	hpwm->Duty_Table_Size = table_size;
 | 
			
		||||
	float pi_step = 2*M_PI/(hpwm->Duty_Table_Size);
 | 
			
		||||
	float pi_val = 0;
 | 
			
		||||
	float sin_koef = 0;
 | 
			
		||||
	uint32_t sin_val = 0;
 | 
			
		||||
 | 
			
		||||
	// fill table with sinus
 | 
			
		||||
	for(int i = 0; i < hpwm->Duty_Table_Size; i++)
 | 
			
		||||
	{			
 | 
			
		||||
		// rotate pi
 | 
			
		||||
		pi_val += pi_step;	
 | 
			
		||||
		// calc sin value
 | 
			
		||||
		sin_koef = (float)0xFFFF;
 | 
			
		||||
		sin_val = (sin(pi_val)+1)*sin_koef/2;
 | 
			
		||||
		sin_table[i] = sin_val;	
 | 
			
		||||
	}	
 | 
			
		||||
	// fill rest of table with zeros
 | 
			
		||||
	for(int i = hpwm->Duty_Table_Size; i < SIN_TABLE_SIZE_MAX; i++)
 | 
			
		||||
		sin_table[i] = 0;	
 | 
			
		||||
	
 | 
			
		||||
	// if second channel is enabled
 | 
			
		||||
	PWM_Update_DutyTableScale(hpwm);
 | 
			
		||||
	
 | 
			
		||||
	return hpwm->Duty_Table_Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Calc and update new Duty Table Scale.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Используется, когда изменяется значение регистра ARR.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Update_DutyTableScale(PWM_HandleTypeDef *hpwm)
 | 
			
		||||
{
 | 
			
		||||
			// UPDATE DUTY TABLE SCALE
 | 
			
		||||
		if(PWM_Get_Mode(hpwm, PWM_CH_MODE)) // if second channel is enabled
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->Duty_Table_Scale = PWM_Calc_Duty_Scale(&hpwm1, 0x8000);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hpwm->Duty_Table_Scale = PWM_Calc_Duty_Scale(&hpwm1, 0xFFFF);
 | 
			
		||||
		}	
 | 
			
		||||
	// for case if min pulse dur is too big and scale is negative
 | 
			
		||||
		if (hpwm->Duty_Table_Scale < 0)
 | 
			
		||||
			hpwm->Duty_Table_Scale = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-----------------------THREEPHASE FUNCTIONS------------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Initialization of Slave PWM TIM.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note		Вызывает функции инициализации и включения слейв ШИМ.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Init(PWM_SlaveHandleTypeDef *hspwm)
 | 
			
		||||
{	
 | 
			
		||||
	TIM_Base_Init(&hspwm->stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hspwm->stim.htim, &hspwm->hMasterPWM->sConfigOC, hspwm->PWM_Channel1, hspwm->GPIOx, hspwm->GPIO_PIN_X1);
 | 
			
		||||
	TIM_Output_PWM_Init(&hspwm->stim.htim, &hspwm->hMasterPWM->sConfigOC, hspwm->PWM_Channel2, hspwm->GPIOx, hspwm->GPIO_PIN_X2);
 | 
			
		||||
	
 | 
			
		||||
	// if three phase enables
 | 
			
		||||
	//----------TIMERS START-------------
 | 
			
		||||
	HAL_TIM_Base_Start(&hspwm->stim.htim);
 | 
			
		||||
	HAL_TIM_PWM_Start(&hspwm->stim.htim, hspwm->PWM_Channel1); // PWM channel 1
 | 
			
		||||
	HAL_TIM_PWM_Start(&hspwm->stim.htim, hspwm->PWM_Channel2); // PWM channel 2
 | 
			
		||||
	
 | 
			
		||||
	if(PWM_Get_Mode(hspwm->hMasterPWM, PWM_PHASE_MODE) == 0) // if three phase disabled
 | 
			
		||||
	{
 | 
			
		||||
		PWM_Set_Compare1(hspwm, 0);	// reset first channel
 | 
			
		||||
		PWM_Set_Compare2(hspwm, 0);	// reset second channel
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of Slave PWM TIM.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в pwm_ctrl.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_reInit(PWM_SlaveHandleTypeDef *hspwm)
 | 
			
		||||
{	
 | 
			
		||||
	PWM_Slave_CopyTimSetting(hspwm, sTimFreqHz);
 | 
			
		||||
	TIM_Base_MspDeInit(&hspwm->stim.htim);
 | 
			
		||||
	
 | 
			
		||||
	PWM_SlavePhase_Init(hspwm);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Duty from table on Slave PWM at one channel by sin_ind of the Master PWM.
 | 
			
		||||
	* @param	hspwm 		- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	sin_ind 	- индекс таблицы для Мастер ШИМ.
 | 
			
		||||
	* @note		Индекс для свейл ШИМ расчитывается в самой функции.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Set_DutyTable_Unsigned(PWM_SlaveHandleTypeDef *hspwm, uint16_t sin_ind)
 | 
			
		||||
{
 | 
			
		||||
	// if three phase enables
 | 
			
		||||
	if (PWM_Get_Mode(hspwm->hMasterPWM, PWM_PHASE_MODE))
 | 
			
		||||
	{
 | 
			
		||||
		if(hspwm->Duty_Shift_Ratio > 0)
 | 
			
		||||
			sin_ind += hspwm->hMasterPWM->Duty_Table_Size*hspwm->Duty_Shift_Ratio;
 | 
			
		||||
		else
 | 
			
		||||
			sin_ind += hspwm->hMasterPWM->Duty_Table_Size*(1+hspwm->Duty_Shift_Ratio);
 | 
			
		||||
		
 | 
			
		||||
		// overflow check
 | 
			
		||||
		if(sin_ind > hspwm->hMasterPWM->Duty_Table_Size)
 | 
			
		||||
			sin_ind -= hspwm->hMasterPWM->Duty_Table_Size;
 | 
			
		||||
		
 | 
			
		||||
		PWM_Set_SlaveDuty_From_Table(hspwm, sin_ind);						// set first channel
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Duty from table on Slave PWM at two channel by sin_ind of the Master PWM.
 | 
			
		||||
	* @param	hspwm 		- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	sin_ind 	- индекс таблицы для Мастер ШИМ.
 | 
			
		||||
	* @note		Индекс для свейл ШИМ расчитывается в самой функции.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Set_DutyTable_Signed(PWM_SlaveHandleTypeDef *hspwm, uint16_t sin_ind)
 | 
			
		||||
{
 | 
			
		||||
	int Duty;
 | 
			
		||||
	// if three phase enables
 | 
			
		||||
	if (PWM_Get_Mode(hspwm->hMasterPWM, PWM_PHASE_MODE))
 | 
			
		||||
	{
 | 
			
		||||
		if(hspwm->Duty_Shift_Ratio > 0)
 | 
			
		||||
			sin_ind += hspwm->hMasterPWM->Duty_Table_Size*hspwm->Duty_Shift_Ratio;
 | 
			
		||||
		else
 | 
			
		||||
			sin_ind += hspwm->hMasterPWM->Duty_Table_Size*(1+hspwm->Duty_Shift_Ratio);
 | 
			
		||||
		
 | 
			
		||||
		// overflow check
 | 
			
		||||
		if(sin_ind >= hspwm->hMasterPWM->Duty_Table_Size)
 | 
			
		||||
			sin_ind -= hspwm->hMasterPWM->Duty_Table_Size;
 | 
			
		||||
		
 | 
			
		||||
		Duty = PWM_Get_Table_Element_Signed(hspwm->hMasterPWM, sin_ind);		
 | 
			
		||||
		// если это первая полуволна
 | 
			
		||||
		if(Duty > 0)		
 | 
			
		||||
		{		
 | 
			
		||||
			PWM_Set_Compare1(hspwm, Duty+PWM_Calc_Min_Duty(hspwm->hMasterPWM));	// set first channel
 | 
			
		||||
			PWM_Set_Compare2(hspwm, 0);			// reset second channel
 | 
			
		||||
		}
 | 
			
		||||
		else // если это вторая полуволна
 | 
			
		||||
		{
 | 
			
		||||
			PWM_Set_Compare1(hspwm, 0);			// reset first channel
 | 
			
		||||
			PWM_Set_Compare2(hspwm, (-Duty)+PWM_Calc_Min_Duty(hspwm->hMasterPWM));		// set second channel
 | 
			
		||||
		}
 | 
			
		||||
	//if(hspwm == &hpwm2)
 | 
			
		||||
		//__ASM("");
 | 
			
		||||
	}
 | 
			
		||||
	else // if three phase disabled
 | 
			
		||||
	{
 | 
			
		||||
		PWM_Set_Compare1(hspwm, 0);	// reset first channel
 | 
			
		||||
		PWM_Set_Compare2(hspwm, 0);	// reset second channel
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Check is all Slave channels works properly.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note		Проверка работает ли только один из каналов, и проверка чтобы CCRx <= ARR
 | 
			
		||||
	* @note		В мастере проверка происходит напрямую в PWM_Handler.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Check_Channels(PWM_SlaveHandleTypeDef *hspwm)
 | 
			
		||||
{	
 | 
			
		||||
	// if three phase enables
 | 
			
		||||
	if (PWM_Get_Mode(hspwm->hMasterPWM, PWM_PHASE_MODE))
 | 
			
		||||
	{
 | 
			
		||||
		uint16_t min_duty = PWM_Calc_Min_Duty(hspwm->hMasterPWM);
 | 
			
		||||
		// IF FIRST CHANNEL IS ACRIVE
 | 
			
		||||
		if(PWM_Get_Compare1(hspwm) != 0)
 | 
			
		||||
		{
 | 
			
		||||
			// Duty shoud be bigger or equeal than min duration
 | 
			
		||||
			if (PWM_Get_Compare1(hspwm)<min_duty)
 | 
			
		||||
				PWM_Set_Compare1(hspwm, min_duty);		
 | 
			
		||||
			// Duty shoud be less or equeal than ARR-min duration
 | 
			
		||||
			if (PWM_Get_Compare1(hspwm)>PWM_Get_Autoreload(hspwm)-min_duty)
 | 
			
		||||
				PWM_Set_Compare1(hspwm, PWM_Get_Autoreload(hspwm)-min_duty);
 | 
			
		||||
		}
 | 
			
		||||
		// IF SECOND CHANNEL IS ACRIVE
 | 
			
		||||
		else if(PWM_Get_Compare2(hspwm) != 0)
 | 
			
		||||
		// Duty shoud be bigger or equeal than min duration
 | 
			
		||||
		if (PWM_Get_Compare2(hspwm)<min_duty)
 | 
			
		||||
			PWM_Set_Compare2(hspwm, min_duty);
 | 
			
		||||
		// Duty shoud be less or equeal than ARR
 | 
			
		||||
		if (PWM_Get_Compare2(hspwm)>PWM_Get_Autoreload(hspwm)-min_duty)
 | 
			
		||||
			PWM_Set_Compare2(hspwm, PWM_Get_Autoreload(hspwm)-min_duty);	
 | 
			
		||||
		// IF BOTH CHANNEL IS ACRIVE
 | 
			
		||||
		if((PWM_Get_Compare1(hspwm) != 0) && (PWM_Get_Compare2(hspwm) != 0))
 | 
			
		||||
		{
 | 
			
		||||
			// Only one channel shoud be active so disable all
 | 
			
		||||
			PWM_Set_Compare1(hspwm, 0);
 | 
			
		||||
			PWM_Set_Compare2(hspwm, 0);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		// reset channels
 | 
			
		||||
		PWM_Set_Compare1(hspwm, 0);	// reset first channel
 | 
			
		||||
		PWM_Set_Compare2(hspwm, 0);	// reset second channel
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Create Dead Time for Slave PWM when switches channels.
 | 
			
		||||
	* @param	hspwm 							- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	LocalDeadTimeCnt 		- указатель на переменную для отсчитывания дедтайма.
 | 
			
		||||
	* @param	LocalActiveChannel 	- указатель на переменную для отслеживания смены канала.
 | 
			
		||||
	* @note		Аналог функции PWM_CreateDeadTime но для слейв ШИМов.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_CreateDeadTime(PWM_SlaveHandleTypeDef *hspwm, float *LocalDeadTimeCnt, unsigned *LocalActiveChannel)
 | 
			
		||||
{
 | 
			
		||||
	// get current active channel
 | 
			
		||||
	hspwm->fActiveChannel = (PWM_Get_Compare2(hspwm) != 0); // if channel two is active - write 1, otherwise - 0
 | 
			
		||||
	// when channels are swithed and no dead time currently active
 | 
			
		||||
	if(*LocalActiveChannel != hspwm->fActiveChannel)
 | 
			
		||||
	{	// update active channel
 | 
			
		||||
		*LocalActiveChannel = hspwm->fActiveChannel; 
 | 
			
		||||
		// set deadtime
 | 
			
		||||
		*LocalDeadTimeCnt = hspwm->hMasterPWM->PWM_DeadTime;
 | 
			
		||||
		Trace_PWM_DeadTime_Enter();
 | 
			
		||||
	}	
 | 
			
		||||
	// decrement dead time
 | 
			
		||||
	*LocalDeadTimeCnt -= (PWM_Get_Autoreload(hspwm)+1)*hspwm->hMasterPWM->stim.sTickBaseMHz;
 | 
			
		||||
	if(*LocalDeadTimeCnt > 0) // if dead time is still active
 | 
			
		||||
	{ // reset all channels 
 | 
			
		||||
		// reset channels
 | 
			
		||||
		PWM_Set_Compare1(hspwm, 0);
 | 
			
		||||
		PWM_Set_Compare2(hspwm, 0);
 | 
			
		||||
	}
 | 
			
		||||
	else // if dead time is done
 | 
			
		||||
	{ // set it to zero
 | 
			
		||||
		*LocalDeadTimeCnt = 0;		
 | 
			
		||||
		Trace_PWM_DeadTime_Exit();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//------------------------HANDLERS FUNCTIONS-------------------------
 | 
			
		||||
//---------------PWM TIMER-----------------
 | 
			
		||||
#if (PWM_MASTER_TIM_NUMB == 1) || (PWM_MASTER_TIM_NUMB == 10) // choose handler for TIM
 | 
			
		||||
void TIM1_UP_TIM10_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 2)
 | 
			
		||||
void TIM2_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 3)
 | 
			
		||||
void TIM3_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 4)
 | 
			
		||||
void TIM4_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 5)
 | 
			
		||||
void TIM5_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 6)
 | 
			
		||||
void TIM6_DAC_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 7)
 | 
			
		||||
void TIM7_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 8) || (PWM_MASTER_TIM_NUMB == 13)
 | 
			
		||||
void TIM8_UP_TIM13_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 1) || (PWM_MASTER_TIM_NUMB == 9)
 | 
			
		||||
void TIM1_BRK_TIM9_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 1) || (PWM_MASTER_TIM_NUMB == 11)
 | 
			
		||||
void TIM1_TRG_COM_TIM11_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 8) || (PWM_MASTER_TIM_NUMB == 12)
 | 
			
		||||
void TIM8_BRK_TIM12_IRQHandler(void)
 | 
			
		||||
#elif (PWM_MASTER_TIM_NUMB == 8) || (PWM_MASTER_TIM_NUMB == 14)
 | 
			
		||||
void TIM8_TRG_COM_TIM14_IRQHandler(void)
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
	Trace_PWM_TIM_Enter();
 | 
			
		||||
  HAL_TIM_IRQHandler(&hpwm1.stim.htim);
 | 
			
		||||
	PWM_Handler(&hpwm1);
 | 
			
		||||
	
 | 
			
		||||
	Trace_PWM_TIM_Exit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-------------------------------------------------------------------
 | 
			
		||||
//-----------------------------OUTDATE-------------------------------
 | 
			
		||||
#ifdef OUTDATE
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First set up of PWM Single Channel.
 | 
			
		||||
	* @note 	Первый инит ШИМ. Заполняет структуры и инициализирует таймер для генерации синуоидального ШИМ.
 | 
			
		||||
	* 				Скважность ШИМ меняется по закону синусоиды, сдвинутой в положительную область (от 0 до 2)
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	* @note		This called from main
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SineSingChannel_FirstInit(void)
 | 
			
		||||
{
 | 
			
		||||
	hpwm1.pDuty_Table_Origin = SIN_TABLE_ORIGIN;
 | 
			
		||||
	
 | 
			
		||||
	//---------PWM TIMER1 INIT------------
 | 
			
		||||
	// channel settings
 | 
			
		||||
	hpwm1.sConfigOC.OCMode = TIM_OCMODE_PWM1;
 | 
			
		||||
  hpwm1.sConfigOC.Pulse = 0;
 | 
			
		||||
  hpwm1.sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 | 
			
		||||
  hpwm1.sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 | 
			
		||||
	
 | 
			
		||||
	// tim1 settings
 | 
			
		||||
	hpwm1.stim.htim.Instance = TIMER_PWM1_INSTANCE;
 | 
			
		||||
	hpwm1.stim.sTimMode = TIM_IT_MODE;
 | 
			
		||||
	hpwm1.stim.sTickBaseMHz = TIM_TickBase_1US;
 | 
			
		||||
	hpwm1.stim.sTimAHBFreqMHz = 72;
 | 
			
		||||
	hpwm1.stim.sTimFreqHz = HZ_TIMER_PWM;
 | 
			
		||||
	hpwm1.GPIOx = GPIOD;
 | 
			
		||||
	hpwm1.GPIO_PIN_X1 = GPIO_PIN_12;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&hpwm1.stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm1.stim.htim, &hpwm1.sConfigOC, hpwm->PWM_Channel1, hpwm1.GPIOx, hpwm1.GPIO_PIN_X1);
 | 
			
		||||
		
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	//----------TIMERS START-------------
 | 
			
		||||
	HAL_TIM_PWM_Start_IT(&hpwm1.stim.htim, hpwm->PWM_Channel1); // timer for PWM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef SINE_THREE_PHASE_PWM_ENABLE
 | 
			
		||||
	
 | 
			
		||||
	//---------PWM TIMER2 INIT------------
 | 
			
		||||
	// tim2 settings
 | 
			
		||||
	hpwm2 = hpwm1;
 | 
			
		||||
	hpwm2.stim.htim.Instance = TIM5;
 | 
			
		||||
	hpwm2.GPIOx = GPIOA;
 | 
			
		||||
	hpwm2.GPIO_PIN_X = GPIO_PIN_0;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&hpwm2.stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm2.stim.htim, &hpwm2.sConfigOC, TIM_CHANNEL_1, hpwm2.GPIOx, hpwm2.GPIO_PIN_X);
 | 
			
		||||
	
 | 
			
		||||
	//---------PWM TIMER3 INIT------------
 | 
			
		||||
	// tim3 settings
 | 
			
		||||
	hpwm3 = hpwm2;
 | 
			
		||||
	hpwm3.stim.htim.Instance = TIM8;
 | 
			
		||||
	hpwm3.GPIOx = GPIOC;
 | 
			
		||||
	hpwm3.GPIO_PIN_X = GPIO_PIN_6;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&hpwm3.stim);
 | 
			
		||||
	TIM_Output_PWM_Init(&hpwm3.stim.htim, &hpwm3.sConfigOC, TIM_CHANNEL_1, hpwm3.GPIOx, hpwm3.GPIO_PIN_X);	
 | 
			
		||||
	
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm2.stim.htim, TIM_CHANNEL_1); // timer for PWM
 | 
			
		||||
	HAL_TIM_PWM_Start(&hpwm3.stim.htim, TIM_CHANNEL_1); // timer for PWM
 | 
			
		||||
#endif // SINE_THREE_PHASE_PWM_ENABLE
 | 
			
		||||
 | 
			
		||||
void PWM_Threephase_Init(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef INTERNAL_THREE_PHASE_PWM_ENABLE
 | 
			
		||||
  TIM_OC_InitTypeDef sPWMConfigOC = {0};
 | 
			
		||||
  TIM_OC_InitTypeDef sOCConfigOC = {0};
 | 
			
		||||
	int us100Time = 10000/TIM_CTRL.sTimFreqHz;								// 1/TIM_CTRL.sTimFreqHz * 10^6 - Sample time in us
 | 
			
		||||
	
 | 
			
		||||
	// PWM CHANNEL SETTINGS		
 | 
			
		||||
	sPWMConfigOC.OCMode = TIM_OCMODE_PWM1;
 | 
			
		||||
  sPWMConfigOC.Pulse = us100Time/2;
 | 
			
		||||
  sPWMConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
 | 
			
		||||
  sPWMConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 | 
			
		||||
		
 | 
			
		||||
	// CC CHANNEL SETTINGS
 | 
			
		||||
  sOCConfigOC.OCMode = TIM_OCMODE_ACTIVE;
 | 
			
		||||
  sOCConfigOC.Pulse = (2*us100Time-1) / 3;
 | 
			
		||||
  sOCConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// TIMER1 PWM MASTER INIT
 | 
			
		||||
	TIM_3PWM1.htim = &tim_3pwm1;
 | 
			
		||||
	TIM_3PWM1.htim->Instance = TIM1;
 | 
			
		||||
	TIM_3PWM1.htim->Init.Prescaler = 7200-1;		// 1 us
 | 
			
		||||
	TIM_3PWM1.htim->Init.Period = us100Time-1;	// period in us = Sample time in us
 | 
			
		||||
	
 | 
			
		||||
  TIM_3PWM1.sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC2REF;
 | 
			
		||||
  TIM_3PWM1.sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 | 
			
		||||
	
 | 
			
		||||
  TIM_3PWM1.sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&TIM_3PWM1);
 | 
			
		||||
	TIM_Output_PWM_Init(TIM_3PWM1.htim, &sPWMConfigOC, TIM_CHANNEL_1, GPIOE, GPIO_PIN_9);
 | 
			
		||||
	HAL_TIM_OC_ConfigChannel(TIM_3PWM1.htim, &sOCConfigOC, TIM_CHANNEL_2);
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	// TIMER2 PWM SLAVE INIT
 | 
			
		||||
	TIM_3PWM2 = TIM_3PWM1;
 | 
			
		||||
	TIM_3PWM2.htim = &tim_3pwm2;
 | 
			
		||||
	*TIM_3PWM2.htim = *TIM_3PWM1.htim;
 | 
			
		||||
	TIM_3PWM2.htim->Instance = TIM2;
 | 
			
		||||
	TIM_3PWM1.TIM_MODE = TIM_DEFAULT;
 | 
			
		||||
	
 | 
			
		||||
  TIM_3PWM2.sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
 | 
			
		||||
  TIM_3PWM2.sSlaveConfig.InputTrigger = TIM_TS_ITR0;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&TIM_3PWM2);
 | 
			
		||||
	TIM_Output_PWM_Init(TIM_3PWM2.htim, &sPWMConfigOC, TIM_CHANNEL_1, GPIOA, GPIO_PIN_5);
 | 
			
		||||
	HAL_TIM_OC_ConfigChannel(TIM_3PWM2.htim, &sOCConfigOC, TIM_CHANNEL_2);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
		
 | 
			
		||||
	// TIMER3 PWM SLAVE INIT
 | 
			
		||||
	TIM_3PWM3 = TIM_3PWM2;
 | 
			
		||||
	TIM_3PWM3.htim = &tim_3pwm3;
 | 
			
		||||
	*TIM_3PWM3.htim = *TIM_3PWM2.htim;
 | 
			
		||||
	TIM_3PWM3.htim->Instance = TIM3;
 | 
			
		||||
  TIM_3PWM3.sSlaveConfig.InputTrigger = TIM_TS_ITR1;
 | 
			
		||||
	
 | 
			
		||||
	TIM_Base_Init(&TIM_3PWM3);
 | 
			
		||||
	TIM_Output_PWM_Init(TIM_3PWM3.htim, &sPWMConfigOC, TIM_CHANNEL_1, GPIOA, GPIO_PIN_6);
 | 
			
		||||
	
 | 
			
		||||
	hpwm1.Duty_Table_Size = PWM_Fill_Sine_Table(&sin_table, SIN_TABLE_SIZE_MAX);
 | 
			
		||||
	
 | 
			
		||||
	// TIMERS START	
 | 
			
		||||
	HAL_TIM_OC_Start(TIM_3PWM3.htim, TIM_CHANNEL_2);
 | 
			
		||||
	HAL_TIM_PWM_Start(TIM_3PWM3.htim, TIM_CHANNEL_1);
 | 
			
		||||
	
 | 
			
		||||
	HAL_TIM_PWM_Start(TIM_3PWM2.htim, TIM_CHANNEL_1);
 | 
			
		||||
	HAL_TIM_OC_Start(TIM_3PWM2.htim, TIM_CHANNEL_2);
 | 
			
		||||
	
 | 
			
		||||
	HAL_TIM_OC_Start(TIM_3PWM1.htim, TIM_CHANNEL_2);
 | 
			
		||||
	HAL_TIM_PWM_Start(TIM_3PWM1.htim, TIM_CHANNEL_1);
 | 
			
		||||
#endif // INTERNAL_THREE_PHASE_PWM_ENABLE
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										324
									
								
								Code/PWM/pwm.h
									
									
									
									
									
								
							
							
						
						@ -1,324 +0,0 @@
 | 
			
		||||
/********************************MODBUS*************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для реализации 
 | 
			
		||||
MODBUS.
 | 
			
		||||
Данный файл необходимо подключить в rs_message.h. После подключать rs_message.h
 | 
			
		||||
к основному проекту.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __PWM_H_
 | 
			
		||||
#define __PWM_H_
 | 
			
		||||
#include "control.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern uint32_t sin_table[SIN_TABLE_SIZE_MAX];
 | 
			
		||||
 | 
			
		||||
#define int_to_percent(_int_)		((float)_int_/100)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
////////////////////////////---DEFINES---////////////////////////////
 | 
			
		||||
//----------------------------PWM HANDLE----------------------------//
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Calc duration of minimum pulse in ticks.
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @return _val_ 				- количество тиков кратчайшего импульса.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Calc_Min_Duty(_hpwm_)											((_hpwm_)->PWM_MinPulseDur/(_hpwm_)->stim.sTickBaseMHz)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Calc Scale Koef for Table & AUTORELOAD REGISTER
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_scale_ 			- верхняя граница диапазона значений.
 | 
			
		||||
	* @return _koef_ 				- коэффициент для масштабирования.
 | 
			
		||||
	* @note		Данный макрос рассчитывает коэффициент для приведения значений с диапазоном [0,_scale_]
 | 
			
		||||
						к регистру автозагрузки с диапазоном [0,ARR].
 | 
			
		||||
	* @note		Если задана минимальная длительность импульса в тактах n, она вычитается из ARR: [0, ARR-2*n]
 | 
			
		||||
						И потом регистр ARR заполняется так, что диапазон его значений будет [n, ARR-n] @ref PWM_Get_Table_Element_Unsigned
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Calc_Duty_Scale(_hpwm_, _scale_) 								((float)PWM_Get_Autoreload(_hpwm_))/(_scale_)
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Get Table Element Scaled corresponding to TIM ARR register
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_ind_ 				- номер элемента из таблицы скважностей.
 | 
			
		||||
	* @return _val_ 				- масштабированный под регистры таймера значение.
 | 
			
		||||
	* @note		Если задана минимальная длительность импульса в тактах n, 
 | 
			
		||||
						то регистр ARR заполняется так, что диапазон его значений будет [n, ARR-n]						
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Get_Table_Element_Unsigned(_hpwm_,_ind_) 				(*((_hpwm_)->pDuty_Table_Origin+_ind_)*((_hpwm_)->Duty_Table_Scale))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Get Table Element Scaled and Shifted corresponding to TIM ARR register
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_ind_ 				- номер элемента из таблицы скважностей.
 | 
			
		||||
	* @return _val_ 				- масштабированный под регистры таймера значение.
 | 
			
		||||
	* @note		По сути такая же как PWM_Get_Table_Element_Unsigned но добавляется сдвиг на одну амплитуду для учитывания знака.
 | 
			
		||||
						(если точнее, то сдвиг добавляется для компенсации сдвига, который имитирует знак)
 | 
			
		||||
	* @note		0x8000*(_hpwm_)->Duty_Table_Scale - т.к. первая полуволна находится в диапазоне (0x8000-0xFFFF) вычитаем константу 0x8000 с масштабированием
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Get_Table_Element_Signed(_hpwm_,_ind_)					((int)(*((_hpwm_)->pDuty_Table_Origin+_ind_)*((_hpwm_)->Duty_Table_Scale))-0x8000*(_hpwm_)->Duty_Table_Scale)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Create pointer to slave PWM from pointer to void in PWM_HandleTypeDef.
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_slavepwm_ 		- имя слейв pwm.
 | 
			
		||||
	* @return _pslavepwm_ 	- указатель на структуру PWM_SlaveHandleTypeDef.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Set_pSlaveHandle(_hpwm_,_slavepwm_)							((PWM_SlaveHandleTypeDef *)_hpwm_->_slavepwm_)
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Copy setting from master TIM_SettingsTypeDef to slave TIM_SettingsTypeDef.
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @return _set_ 				- имя настройки.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Slave_CopyTimSetting(_hspwm_, _set_)						((_hspwm_)->stim._set_ = (_hspwm_)->hMasterPWM->stim._set_)		
 | 
			
		||||
 | 
			
		||||
//---------------------------TIMER REGS----------------------------//
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set PWM autoreload value (max duty value).
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_val_ 				- значение, которое нужно записать в Compare.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Get_Autoreload(_hpwm_)													__HAL_TIM_GET_AUTORELOAD(&((_hpwm_)->stim.htim))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Get PWM Duty on corresponding channel.
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_val_ 				- значение, которое нужно записать в Compare.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Get_Compare1(_hpwm_)														__HAL_TIM_GET_COMPARE(&((_hpwm_)->stim.htim), (_hpwm_)->PWM_Channel1)
 | 
			
		||||
#define PWM_Get_Compare2(_hpwm_)														__HAL_TIM_GET_COMPARE(&((_hpwm_)->stim.htim), (_hpwm_)->PWM_Channel2)
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set PWM Duty on corresponding channel.
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_val_ 				- значение, которое нужно записать в Compare.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Set_Compare1(_hpwm_, _val_)											__HAL_TIM_SET_COMPARE(&((_hpwm_)->stim.htim), (_hpwm_)->PWM_Channel1, (_val_))
 | 
			
		||||
#define PWM_Set_Compare2(_hpwm_, _val_)											__HAL_TIM_SET_COMPARE(&((_hpwm_)->stim.htim), (_hpwm_)->PWM_Channel2, (_val_))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set PWM Duty From PWM_Value Percent
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_channel_ 		- канал для выставления скважности.
 | 
			
		||||
	* @param 	_ind_ 				- номер элемента из таблицы скважностей.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Set_Duty_From_Percent(_hpwm_, _channel_)				__HAL_TIM_SET_COMPARE(&((_hpwm_)->stim.htim), _channel_, ((_hpwm_)->PWM_Value/100)*(PWM_Get_Autoreload(_hpwm_)+1))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set PWM Duty From table
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_channel_ 		- канал для выставления скважности.
 | 
			
		||||
	* @param 	_ind_ 				- номер элемента из таблицы скважностей.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Set_Duty_From_Table(_hpwm_, _ind_)							(PWM_Set_Compare1(_hpwm_, (PWM_Get_Table_Element_Unsigned((_hpwm_), (_ind_))+1)))
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set PWM Duty From table
 | 
			
		||||
	* @param 	_hpwm_ 				- указатель на хендл pwm.
 | 
			
		||||
	* @param 	_channel_ 		- канал для выставления скважности.
 | 
			
		||||
	* @param 	_ind_ 				- номер элемента из таблицы скважностей.
 | 
			
		||||
	*/
 | 
			
		||||
#define PWM_Set_SlaveDuty_From_Table(_hpwm_, _ind_)					(PWM_Set_Compare1(_hpwm_, (PWM_Get_Table_Element_Unsigned((_hpwm_)->hMasterPWM, (_ind_))+1)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// MODE DEFINES
 | 
			
		||||
#define PWM_DC_MODE_Pos					(0)
 | 
			
		||||
#define PWM_CH_MODE_Pos					(1)
 | 
			
		||||
#define PWM_PHASE_MODE_Pos			(2)
 | 
			
		||||
 | 
			
		||||
#define PWM_DC_MODE							(1<<(PWM_DC_MODE_Pos))		// 0 - set pwm duty from table with PWM_Value period, 1 - set pwm duty PWM_Value (in percent)
 | 
			
		||||
#define PWM_CH_MODE							(1<<(PWM_CH_MODE_Pos))	
 | 
			
		||||
// DC MODE: 		0 - pwm on channel 1, 1 - pwm on channel 2
 | 
			
		||||
// TABLE MODE: 	0 - signed mode,	 		1 - unsigned mode
 | 
			
		||||
#define PWM_PHASE_MODE							(1<<(PWM_PHASE_MODE_Pos))	
 | 
			
		||||
 | 
			
		||||
#define PWM_Get_Mode(_hpwm_, _mode_)	((_hpwm_)->sPWM_Mode&(_mode_))
 | 
			
		||||
/* Structure for PWM modes */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
	PWM_TABLE_UNSIGN = 		0,													/* set pwm duty from table with PWM_Value period */
 | 
			
		||||
	PWM_TABLE_SIGN = 			PWM_CH_MODE,								/* set pwm duty from table with PWM_Value period on two channels (positive and negative halfes) */
 | 
			
		||||
	PWM_DC_POS = 					PWM_DC_MODE,								/* set pwm duty PWM_Value (in percent) on first channel */
 | 
			
		||||
	PWM_DC_NEG = 					PWM_DC_MODE|PWM_CH_MODE,		/* set pwm duty PWM_Value (in percent) on second channel */
 | 
			
		||||
	
 | 
			
		||||
	PWM_PHASE_UNSIGN = 		PWM_PHASE_MODE,								/* set pwm table duty on three pins, with requested shift */
 | 
			
		||||
	PWM_PHASE_SIGN = 			PWM_CH_MODE|PWM_PHASE_MODE,		/* set pwm table duty on six pins (two pins = one phase (positive and negative halfes)) */
 | 
			
		||||
}PWM_ModeTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Handle for PWM.
 | 
			
		||||
	* @note 	Prefixes: h - handle, s - settings, f - flag
 | 
			
		||||
	*/
 | 
			
		||||
typedef struct // PWM_HandleTypeDef
 | 
			
		||||
{
 | 
			
		||||
	/* PWM VARIABLES */
 | 
			
		||||
	PWM_ModeTypeDef 				sPWM_Mode;						/* PWM Mode: 0 - DC mode, 1 - Table mode */
 | 
			
		||||
	float 									PWM_Value;						/* DC mode: PWM duty, Table mode: frequency*/
 | 
			
		||||
	uint32_t 								PWM_MinPulseDur;			/* minimum pulse duration for PWM in us*/
 | 
			
		||||
	uint32_t 								PWM_DeadTime;					/* dead-Time between switches half waves (channels) in us */
 | 
			
		||||
	
 | 
			
		||||
	/* SETTINGS FOR TIMER */
 | 
			
		||||
	TIM_SettingsTypeDef 		stim;									/* settings for TIM */
 | 
			
		||||
	TIM_OC_InitTypeDef 			sConfigOC;						/* settings for oc channel */
 | 
			
		||||
	unsigned 								fActiveChannel;				/* flag for active oc channel: 0 - first channel, 1 - second channel */
 | 
			
		||||
	uint16_t 								PWM_Channel1;					/* instance of first channel */
 | 
			
		||||
	uint16_t 								PWM_Channel2;					/* instance of second channel */
 | 
			
		||||
	
 | 
			
		||||
	/* VARIABLES FOR TABLE DUTY PARAMETERS */
 | 
			
		||||
	uint32_t 								*pDuty_Table_Origin;	/* pointer to table of pwm duties */
 | 
			
		||||
	uint32_t 								Duty_Table_Size;			/* size of duty table */
 | 
			
		||||
	float 	 								Duty_Table_Ind;				/* current ind of duty table */
 | 
			
		||||
	float 	 								Duty_Table_Scale;			/* scale for TIM ARR register */
 | 
			
		||||
	
 | 
			
		||||
	/* SETTIGNS FOR PWM OUTPUT */
 | 
			
		||||
	GPIO_TypeDef  					*GPIOx;								/* GPIO port for PWM output */
 | 
			
		||||
	uint32_t 		  					GPIO_PIN_X1;					/* GPIO pin for PWM output */
 | 
			
		||||
	uint32_t 		  					GPIO_PIN_X2;					/* GPIO pin for PWM output (second half wave) */
 | 
			
		||||
	
 | 
			
		||||
	/* SLAVES PWM */
 | 
			
		||||
	void										*hpwm2;
 | 
			
		||||
	void										*hpwm3;
 | 
			
		||||
 | 
			
		||||
}PWM_HandleTypeDef;
 | 
			
		||||
extern PWM_HandleTypeDef hpwm1;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Handle for Slave PWM.
 | 
			
		||||
	* @note 	Prefixes: h - handle, s - settings, f - flag
 | 
			
		||||
	*/
 | 
			
		||||
typedef struct // PWM_SlaveHandleTypeDef
 | 
			
		||||
{
 | 
			
		||||
	/* MASTER PWM*/
 | 
			
		||||
	PWM_HandleTypeDef 			*hMasterPWM;					/* master pwm handle */
 | 
			
		||||
	
 | 
			
		||||
	/* SETTINGS FOR TIMER */
 | 
			
		||||
	TIM_SettingsTypeDef			stim;									/* slave tim handle */
 | 
			
		||||
	unsigned 								fActiveChannel;				/* flag for active oc channel: 0 - first channel, 1 - second channel */
 | 
			
		||||
	uint16_t 								PWM_Channel1;					/* instance of first channel */
 | 
			
		||||
	uint16_t 								PWM_Channel2;					/* instance of second channel */
 | 
			
		||||
	
 | 
			
		||||
	/* VARIABLES FOR TABLE DUTY PARAMETERS */
 | 
			
		||||
	float 	 								Duty_Table_Ind;				/* current ind of duty table */
 | 
			
		||||
	float 									Duty_Shift_Ratio;			/* Ratio of table shift: 0.5 shift - shift = Table_Size/2  */
 | 
			
		||||
	
 | 
			
		||||
	/* SETTIGNS FOR PWM OUTPUT */
 | 
			
		||||
	GPIO_TypeDef  					*GPIOx;								/* GPIO port for PWM output */
 | 
			
		||||
	uint32_t 		  					GPIO_PIN_X1;					/* GPIO pin for PWM output */
 | 
			
		||||
	uint32_t 		  					GPIO_PIN_X2;					/* GPIO pin for PWM output (second half wave) */
 | 
			
		||||
}PWM_SlaveHandleTypeDef;
 | 
			
		||||
extern PWM_SlaveHandleTypeDef hpwm2;
 | 
			
		||||
extern PWM_SlaveHandleTypeDef hpwm3;
 | 
			
		||||
 | 
			
		||||
//--------------------------------PWM FUNCTIONS----------------------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of PWM TIM.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в pwm_ctrl.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Sine_ReInit(PWM_HandleTypeDef *hpwm);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Initialization of Slave PWM TIM.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note		Вызывает функции инициализации и включения слейв ШИМ.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Init(PWM_SlaveHandleTypeDef *hspwm);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	reInitialization of Slave PWM TIM.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note 	Перенастраивает таймер согласно принятным настройкам в pwm_ctrl.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_reInit(PWM_SlaveHandleTypeDef *hspwm);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Filling table with one period of sinus values.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @param	table_size - размер таблицы.
 | 
			
		||||
	* @note 	Формирует таблицу синусов размером table_size.
 | 
			
		||||
	*/
 | 
			
		||||
uint32_t PWM_Fill_Sine_Table(PWM_HandleTypeDef *hpwm, uint32_t table_size);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Calc and update new Duty Table Scale.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Используется, когда изменяется значение регистра ARR.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Update_DutyTableScale(PWM_HandleTypeDef *hpwm);
 | 
			
		||||
//---------------------this called from TIM_PWM_Handler()------------------------
 | 
			
		||||
// MASTER PWM FUNCTIONS
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	PWM Handler.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Управляет скважность ШИМ в режиме PWM_TABLE.
 | 
			
		||||
	* @note		This called from TIM_PWM_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Handler(PWM_HandleTypeDef *hpwm);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Getting ind for Duty Table.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @param	FreqTIM - частота таймера ШИМ.
 | 
			
		||||
	* @note 	Рассчитывает индекс для таблицы скважностей.
 | 
			
		||||
	*					PWM_Value в hpwm - частота с которой эта таблица должна выводиться на ШИМ
 | 
			
		||||
	* @note		This called from TIM_PWM_Handler
 | 
			
		||||
	*/
 | 
			
		||||
uint32_t PWM_Get_Duty_Table_Ind(PWM_HandleTypeDef *hpwm, float FreqTIM);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Create Dead Time when switches channels.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @param	LocalDeadTimeCnt 		- указатель на переменную для отсчитывания дедтайма.
 | 
			
		||||
	* @param	LocalActiveChannel 	- указатель на переменную для отслеживания смены канала.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_CreateDeadTime(PWM_HandleTypeDef *hpwm, float *LocalDeadTimeCnt, unsigned *LocalActiveChannel);
 | 
			
		||||
 | 
			
		||||
// SLAVE PWM FUNCTIONS
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Duty from table on Slave PWM at one channel by sin_ind of the Master PWM.
 | 
			
		||||
	* @param	hspwm 		- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	sin_ind 	- индекс таблицы для Мастер ШИМ.
 | 
			
		||||
	* @note		Индекс для свейл ШИМ расчитывается в самой функции.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Set_DutyTable_Unsigned(PWM_SlaveHandleTypeDef *hspwm, uint16_t sin_ind);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Set Duty from table on Slave PWM at two channel by sin_ind of the Master PWM.
 | 
			
		||||
	* @param	hspwm 		- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	sin_ind 	- индекс таблицы для Мастер ШИМ.
 | 
			
		||||
	* @note		Индекс для свейл ШИМ расчитывается в самой функции.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Set_DutyTable_Signed(PWM_SlaveHandleTypeDef *hspwm, uint16_t sin_ind);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Check is all Slave channels works properly.
 | 
			
		||||
	* @param	hspwm - указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @note		Проверка работает ли только один из каналов, и проверка чтобы CCRx <= ARR
 | 
			
		||||
	* @note		В мастере проверка происходит напрямую в PWM_Handler.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_Check_Channels(PWM_SlaveHandleTypeDef *hspwm);
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Create Dead Time for Slave PWM when switches channels.
 | 
			
		||||
	* @param	hspwm 							- указатель на хендл слейв ШИМ.
 | 
			
		||||
	* @param	LocalDeadTimeCnt 		- указатель на переменную для отсчитывания дедтайма.
 | 
			
		||||
	* @param	LocalActiveChannel 	- указатель на переменную для отслеживания смены канала.
 | 
			
		||||
	* @note		Аналог функции PWM_CreateDeadTime но для слейв ШИМов.
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_SlavePhase_CreateDeadTime(PWM_SlaveHandleTypeDef *hspwm, float *LocalDeadTimeCnt, unsigned *LocalActiveChannel);
 | 
			
		||||
//---------------------this called from TIM_CTRL_Handler()-----------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	Update PWM parameters.
 | 
			
		||||
	* @param	hpwm - указатель на хендл ШИМ.
 | 
			
		||||
	* @note 	Проверка надо ли обновлять параметры ШИМ, и если надо - обновляет их.
 | 
			
		||||
	* @note		This called from TIM_CTRL_Handler
 | 
			
		||||
	*/
 | 
			
		||||
void Update_Params_For_PWM(PWM_HandleTypeDef *hpwm);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//---------------------------this called from main()-----------------------------
 | 
			
		||||
/** 
 | 
			
		||||
	* @brief 	First set up of PWM Two Channel.
 | 
			
		||||
	* @note 	Первый инит ШИМ. Заполняет структуры и инициализирует таймер для генерации синуоидального ШИМ.
 | 
			
		||||
	* 				Скважность ШИМ меняется по закону синусоиды, каждый канал генерирует свой полупериод синуса (от -1 до 0 И от 0 до 1)
 | 
			
		||||
	* 				ШИМ генерируется на одном канале.
 | 
			
		||||
	* @note		This called from main OR by setted coil
 | 
			
		||||
	*/
 | 
			
		||||
void PWM_Sine_FirstInit(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __PWM_H_
 | 
			
		||||
@ -1,265 +0,0 @@
 | 
			
		||||
#include "control.h"
 | 
			
		||||
ProjectSettings_TypeDef PROJSET;
 | 
			
		||||
uint32_t PageError = 0x00;
 | 
			
		||||
	uint8_t UpdateSettings = 0;
 | 
			
		||||
 | 
			
		||||
void WriteSettingsToMem(void)
 | 
			
		||||
{
 | 
			
		||||
	FillStructWithDefines();
 | 
			
		||||
	//HAL_FLASH_Unlock();
 | 
			
		||||
	//
 | 
			
		||||
	//CheckSettingsInFLASH();
 | 
			
		||||
	//
 | 
			
		||||
	//if(CheckIsSettingsValid(&PROJSET)) 	// if new settings are invalid
 | 
			
		||||
	//	PROJSET = *PROJSET_MEM;						// take the old settings from mem
 | 
			
		||||
	//else											 					// if new settings are valid
 | 
			
		||||
	//	SetFlagUpdateSettingsInMem();			// save the new settings in mem (set flag to do this)
 | 
			
		||||
	//	
 | 
			
		||||
	//HAL_FLASH_Lock();
 | 
			
		||||
		
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetFlagUpdateSettingsInMem(void)
 | 
			
		||||
{				
 | 
			
		||||
	//UpdateSettings = 0;
 | 
			
		||||
	//// MODBUS settings
 | 
			
		||||
	//if(PROJSET_MEM->MB_DEVICE_ID != PROJSET.MB_DEVICE_ID)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->MB_SPEED != PROJSET.MB_SPEED)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->MB_GPIOX != PROJSET.MB_GPIOX)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->MB_GPIO_PIN_RX != PROJSET.MB_GPIO_PIN_RX)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->MB_GPIO_PIN_RX != PROJSET.MB_GPIO_PIN_RX)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->MB_MAX_TIMEOUT != PROJSET.MB_MAX_TIMEOUT)	
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//
 | 
			
		||||
	//// PWM settings
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM_TICKBASE != PROJSET.TIM_PWM_TICKBASE)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM_AHB_FREQ != PROJSET.TIM_PWM_AHB_FREQ)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM1_TIM_CHANNEL1 != PROJSET.TIM_PWM1_TIM_CHANNEL1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM1_TIM_CHANNEL2 != PROJSET.TIM_PWM1_TIM_CHANNEL2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM1_GPIOx != PROJSET.TIM_PWM1_GPIOx)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM1_GPIO_PIN_X1 != PROJSET.TIM_PWM1_GPIO_PIN_X1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM1_GPIO_PIN_X2 != PROJSET.TIM_PWM1_GPIO_PIN_X2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_INSTANCE != PROJSET.TIM_PWM2_INSTANCE)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_TIM_CHANNEL1 != PROJSET.TIM_PWM2_TIM_CHANNEL1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_TIM_CHANNEL2 != PROJSET.TIM_PWM2_TIM_CHANNEL2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_GPIOx != PROJSET.TIM_PWM2_GPIOx)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_GPIO_PIN_X1 != PROJSET.TIM_PWM2_GPIO_PIN_X1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM2_GPIO_PIN_X2 != PROJSET.TIM_PWM2_GPIO_PIN_X2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_INSTANCE != PROJSET.TIM_PWM3_INSTANCE)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_TIM_CHANNEL1 != PROJSET.TIM_PWM3_TIM_CHANNEL1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_TIM_CHANNEL2 != PROJSET.TIM_PWM3_TIM_CHANNEL2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_GPIOx != PROJSET.TIM_PWM3_GPIOx)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_GPIO_PIN_X1 != PROJSET.TIM_PWM3_GPIO_PIN_X1)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_PWM3_GPIO_PIN_X2 != PROJSET.TIM_PWM3_GPIO_PIN_X2)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//	
 | 
			
		||||
	//// CTRL settings		
 | 
			
		||||
	//if(PROJSET_MEM->TIM_CTRL_TICKBASE != PROJSET.TIM_CTRL_TICKBASE)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
	//if(PROJSET_MEM->TIM_CTRL_AHB_FREQ != PROJSET.TIM_CTRL_AHB_FREQ)
 | 
			
		||||
	//	UpdateSettings = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UpdateSettingsInMem(void)
 | 
			
		||||
{	
 | 
			
		||||
	//if(UpdateSettings)
 | 
			
		||||
	//{
 | 
			
		||||
	//	FLASH_EraseInitTypeDef EraseInitStruct;
 | 
			
		||||
	//	PageError = 0x00;
 | 
			
		||||
	//	
 | 
			
		||||
	//	EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;// erase pages
 | 
			
		||||
	//	EraseInitStruct.Banks = FLASH_BANK_1;
 | 
			
		||||
	//	EraseInitStruct.Sector = FLASH_SECTOR_4;   //first sector for erase
 | 
			
		||||
	//	EraseInitStruct.NbSectors = 1;// num of sector that need to be erased
 | 
			
		||||
	//		
 | 
			
		||||
	//	HAL_FLASH_Unlock();
 | 
			
		||||
	//	HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);	
 | 
			
		||||
	//		
 | 
			
		||||
	//	
 | 
			
		||||
	//	/* Wait for last operation to be completed */
 | 
			
		||||
	//	if(FLASH_WaitForLastOperation((uint32_t)50000U) == HAL_OK)
 | 
			
		||||
	//	{
 | 
			
		||||
	//		/* If the previous operation is completed, proceed to program the new data */
 | 
			
		||||
	//		CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
 | 
			
		||||
	//		FLASH->CR |= FLASH_PSIZE_WORD;
 | 
			
		||||
	//		FLASH->CR |= FLASH_CR_PG;
 | 
			
		||||
	//		*PROJSET_MEM = PROJSET;						// save the new settings in mem
 | 
			
		||||
	//	}
 | 
			
		||||
	//	HAL_FLASH_Lock();
 | 
			
		||||
	//	UpdateSettings = 0;
 | 
			
		||||
	//}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FillSettingsWithDefines(void)
 | 
			
		||||
{
 | 
			
		||||
	// rewrite all setting corresponding to defines
 | 
			
		||||
		
 | 
			
		||||
	//FLASH_EraseInitTypeDef EraseInitStruct;
 | 
			
		||||
	//PageError = 0x00;
 | 
			
		||||
	//	
 | 
			
		||||
	//EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;// erase pages
 | 
			
		||||
	//EraseInitStruct.Banks = FLASH_BANK_1;
 | 
			
		||||
	//EraseInitStruct.Sector = FLASH_SECTOR_4;   //first sector for erase
 | 
			
		||||
	//EraseInitStruct.NbSectors = 1;// num of sector that need to be erased
 | 
			
		||||
	//	
 | 
			
		||||
	//HAL_FLASH_Unlock();
 | 
			
		||||
	//HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);		
 | 
			
		||||
	//// MODBUS settings
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_DEVICE_ID, 					MODBUS_DEVICE_ID);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_SPEED, 							MODBUS_SPEED);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_GPIOX, 							(uint32_t)MODBUS_GPIOX);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_GPIO_PIN_RX, 				MODBUS_GPIO_PIN_RX);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_GPIO_PIN_TX, 				MODBUS_GPIO_PIN_TX);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_MAX_TIMEOUT, 				MODBUS_MAX_TIMEOUT);	
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->MB_TIM_AHB_FREQ, 			MODBUS_TIM_AHB_FREQ);	
 | 
			
		||||
	//	
 | 
			
		||||
	//// PWM settings
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM_TICKBASE, 			TIMER_PWM_TICKBASE);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM_AHB_FREQ, 			TIMER_PWM_AHB_FREQ);
 | 
			
		||||
	//	
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM1_TIM_CHANNEL1, TIMER_PWM1_TIM_CHANNEL1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM1_TIM_CHANNEL2, TIMER_PWM1_TIM_CHANNEL2);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM1_GPIOx, 				(uint32_t)TIMER_PWM1_GPIOx);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM1_GPIO_PIN_X1, 	TIMER_PWM1_GPIO_PIN_X1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM1_GPIO_PIN_X2, 	TIMER_PWM1_GPIO_PIN_X2);
 | 
			
		||||
	//	
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_INSTANCE, 		(uint32_t)TIMER_PWM2_INSTANCE);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_TIM_CHANNEL1, TIMER_PWM2_TIM_CHANNEL1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_TIM_CHANNEL2, TIMER_PWM2_TIM_CHANNEL2);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_GPIOx, 				(uint32_t)TIMER_PWM2_GPIOx);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_GPIO_PIN_X1, 	TIMER_PWM2_GPIO_PIN_X1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM2_GPIO_PIN_X2, 	TIMER_PWM2_GPIO_PIN_X2);
 | 
			
		||||
	//	
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_INSTANCE, 		(uint32_t)TIMER_PWM3_INSTANCE);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_TIM_CHANNEL1, TIMER_PWM3_TIM_CHANNEL1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_TIM_CHANNEL2, TIMER_PWM3_TIM_CHANNEL2);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_GPIOx, 				(uint32_t)TIMER_PWM3_GPIOx);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_GPIO_PIN_X1, 	TIMER_PWM3_GPIO_PIN_X1);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_PWM3_GPIO_PIN_X2, 	TIMER_PWM3_GPIO_PIN_X2);
 | 
			
		||||
	//
 | 
			
		||||
	//// CTRL settings		
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_CTRL_TICKBASE, 			TIMER_CTRL_TICKBASE);
 | 
			
		||||
	//FLASH_WRITE_SETTING(PROJSET_MEM->TIM_CTRL_AHB_FREQ, 			TIMER_CTRL_AHB_FREQ);
 | 
			
		||||
	//HAL_FLASH_Lock();
 | 
			
		||||
		
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FillStructWithDefines(void)
 | 
			
		||||
{
 | 
			
		||||
	// rewrite all setting corresponding to defines
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	// MODBUS settings
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_DEVICE_ID, 					MODBUS_DEVICE_ID);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_SPEED, 							MODBUS_SPEED);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_GPIOX, 							MODBUS_GPIOX);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_GPIO_PIN_RX, 				MODBUS_GPIO_PIN_RX);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_GPIO_PIN_TX, 				MODBUS_GPIO_PIN_TX);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_MAX_TIMEOUT, 				MODBUS_MAX_TIMEOUT);	
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.MB_TIM_AHB_FREQ, 			MODBUS_TIM_AHB_FREQ);	
 | 
			
		||||
		
 | 
			
		||||
	// PWM settings
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM_TICKBASE, 			TIMER_PWM_TICKBASE);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM_AHB_FREQ, 			TIMER_PWM_AHB_FREQ);
 | 
			
		||||
		
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM1_TIM_CHANNEL1, TIMER_PWM1_TIM_CHANNEL1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM1_TIM_CHANNEL2, TIMER_PWM1_TIM_CHANNEL2);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM1_GPIOx, 				TIMER_PWM1_GPIOx);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM1_GPIO_PIN_X1, 	TIMER_PWM1_GPIO_PIN_X1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM1_GPIO_PIN_X2, 	TIMER_PWM1_GPIO_PIN_X2);
 | 
			
		||||
		
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_INSTANCE, 		TIMER_PWM2_INSTANCE);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_TIM_CHANNEL1, TIMER_PWM2_TIM_CHANNEL1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_TIM_CHANNEL2, TIMER_PWM2_TIM_CHANNEL2);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_GPIOx, 				TIMER_PWM2_GPIOx);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_GPIO_PIN_X1, 	TIMER_PWM2_GPIO_PIN_X1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM2_GPIO_PIN_X2, 	TIMER_PWM2_GPIO_PIN_X2);
 | 
			
		||||
		
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_INSTANCE, 		TIMER_PWM3_INSTANCE);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_TIM_CHANNEL1, TIMER_PWM3_TIM_CHANNEL1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_TIM_CHANNEL2, TIMER_PWM3_TIM_CHANNEL2);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_GPIOx, 				TIMER_PWM3_GPIOx);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_GPIO_PIN_X1, 	TIMER_PWM3_GPIO_PIN_X1);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_PWM3_GPIO_PIN_X2, 	TIMER_PWM3_GPIO_PIN_X2);
 | 
			
		||||
	
 | 
			
		||||
	// CTRL settings		
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_CTRL_TICKBASE, 			TIMER_CTRL_TICKBASE);
 | 
			
		||||
	STRUCT_WRITE_SETTING(PROJSET.TIM_CTRL_AHB_FREQ, 			TIMER_CTRL_AHB_FREQ);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
void CheckSettingsInFLASH(void)
 | 
			
		||||
{
 | 
			
		||||
	//if(CheckIsSettingsValid(PROJSET_MEM))
 | 
			
		||||
	//	FillSettingsWithDefines();
 | 
			
		||||
	//
 | 
			
		||||
	//PROJSET = *PROJSET_MEM;
 | 
			
		||||
}
 | 
			
		||||
int CheckIsSettingsValid(ProjectSettings_TypeDef *set_struct)
 | 
			
		||||
{
 | 
			
		||||
	// if some of setting are missing
 | 
			
		||||
	// chech MODBUS
 | 
			
		||||
	if((!IS_UART_BAUDRATE(set_struct->MB_SPEED) || (set_struct->MB_SPEED ) == 0)	||
 | 
			
		||||
	(!IS_GPIO_ALL_INSTANCE((GPIO_TypeDef *)set_struct->MB_GPIOX))									||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->MB_GPIO_PIN_TX))										||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->MB_GPIO_PIN_RX))	||
 | 
			
		||||
	((set_struct->MB_TIM_AHB_FREQ) == 0))
 | 
			
		||||
	{
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	// chech control tim
 | 
			
		||||
	if((set_struct->TIM_CTRL_AHB_FREQ) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	// chech PWM tims
 | 
			
		||||
	if((set_struct->TIM_PWM_AHB_FREQ) == 0															||
 | 
			
		||||
	(!IS_GPIO_ALL_INSTANCE((GPIO_TypeDef *)set_struct->TIM_PWM1_GPIOx))	||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM1_GPIO_PIN_X1))		||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM1_GPIO_PIN_X2))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM1_TIM_CHANNEL1))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM1_TIM_CHANNEL2))		||
 | 
			
		||||
	(!IS_TIM_INSTANCE((TIM_TypeDef *)set_struct->TIM_PWM2_INSTANCE))		||
 | 
			
		||||
	(!IS_GPIO_ALL_INSTANCE((GPIO_TypeDef *)set_struct->TIM_PWM2_GPIOx)) ||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM2_GPIO_PIN_X1))		||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM2_GPIO_PIN_X2))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM2_TIM_CHANNEL1))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM2_TIM_CHANNEL2))	||
 | 
			
		||||
	(!IS_TIM_INSTANCE((TIM_TypeDef *)set_struct->TIM_PWM3_INSTANCE))		||
 | 
			
		||||
	(!IS_GPIO_ALL_INSTANCE((GPIO_TypeDef *)set_struct->TIM_PWM3_GPIOx))	||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM3_GPIO_PIN_X1))		||
 | 
			
		||||
	(!IS_GPIO_PIN((GPIO_TypeDef *)set_struct->TIM_PWM3_GPIO_PIN_X2))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM3_TIM_CHANNEL1))		||
 | 
			
		||||
	(!IS_TIM_CHANNELS(set_struct->TIM_PWM3_TIM_CHANNEL2)))
 | 
			
		||||
	{
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -1,151 +0,0 @@
 | 
			
		||||
/********************************MODBUS*************************************
 | 
			
		||||
Данный файл содержит объявления базовых функции и дефайны для реализации 
 | 
			
		||||
MODBUS.
 | 
			
		||||
Данный файл необходимо подключить в rs_message.h. После подключать rs_message.h
 | 
			
		||||
к основному проекту.
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
#ifndef __PROJ_SETTINGS_H_
 | 
			
		||||
#define __PROJ_SETTINGS_H_
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
//--------DEFINES FOR SETTING OF SETTINGS-----------
 | 
			
		||||
#define SETTINGS_FLASH_ADDRESS_SHIFT			(0x10000)
 | 
			
		||||
#define SETTINGS_FLASH_ADDRESS						(FLASH_BASE + SETTINGS_FLASH_ADDRESS_SHIFT)
 | 
			
		||||
 | 
			
		||||
#define EEPROM_BASE							
 | 
			
		||||
#define SETTINGS_EEPROM_ADDRESS_SHIFT
 | 
			
		||||
#define SETTINGS_EEPROM_ADDRESS						(EEPROM_BASE + SETTINGS_EEPROM_ADDRESS_SHIFT)				
 | 
			
		||||
 | 
			
		||||
#ifdef USE_EEPROM
 | 
			
		||||
#define SETTINGS_ADDRESS									SETTINGS_EEPROM_ADDRESS
 | 
			
		||||
#else // USE_EEPROM
 | 
			
		||||
#define SETTINGS_ADDRESS									(SETTINGS_FLASH_ADDRESS)
 | 
			
		||||
#endif // USE_EEPROM
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
//------------DEFINES FOR PWM SETTING---------------
 | 
			
		||||
// settings defines
 | 
			
		||||
#define HZ_TIMER_CTRL	400
 | 
			
		||||
#define HZ_TIMER_PWM	1000
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// TIM PWM1 SETTINGS
 | 
			
		||||
#define PWM_MASTER_TIM_NUMB				4
 | 
			
		||||
#define TIMER_PWM_TICKBASE				TIM_TickBase_1US
 | 
			
		||||
#define TIMER_PWM_AHB_FREQ				72
 | 
			
		||||
 | 
			
		||||
#define TIMER_PWM1_INSTANCE				TIM4
 | 
			
		||||
#define TIMER_PWM1_TIM_CHANNEL1		TIM_CHANNEL_1
 | 
			
		||||
#define TIMER_PWM1_TIM_CHANNEL2		TIM_CHANNEL_2
 | 
			
		||||
#define TIMER_PWM1_GPIOx					GPIOD
 | 
			
		||||
#define TIMER_PWM1_GPIO_PIN_X1		GPIO_PIN_12
 | 
			
		||||
#define TIMER_PWM1_GPIO_PIN_X2		GPIO_PIN_13
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// TIM PWM2 SETTINGS
 | 
			
		||||
#define TIMER_PWM2_INSTANCE				TIM3
 | 
			
		||||
#define TIMER_PWM2_TIM_CHANNEL1		TIM_CHANNEL_3
 | 
			
		||||
#define TIMER_PWM2_TIM_CHANNEL2		TIM_CHANNEL_4
 | 
			
		||||
#define TIMER_PWM2_GPIOx					GPIOB
 | 
			
		||||
#define TIMER_PWM2_GPIO_PIN_X1		GPIO_PIN_0
 | 
			
		||||
#define TIMER_PWM2_GPIO_PIN_X2		GPIO_PIN_1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// TIM PWM3 SETTINGS
 | 
			
		||||
#define TIMER_PWM3_INSTANCE				TIM1
 | 
			
		||||
#define TIMER_PWM3_TIM_CHANNEL1		TIM_CHANNEL_1
 | 
			
		||||
#define TIMER_PWM3_TIM_CHANNEL2		TIM_CHANNEL_2
 | 
			
		||||
#define TIMER_PWM3_GPIOx					GPIOE
 | 
			
		||||
#define TIMER_PWM3_GPIO_PIN_X1		GPIO_PIN_9
 | 
			
		||||
#define TIMER_PWM3_GPIO_PIN_X2		GPIO_PIN_11
 | 
			
		||||
 | 
			
		||||
// TIM CTRL SETTINGS
 | 
			
		||||
#define TIMER_CTRL_TICKBASE				TIM_TickBase_1US
 | 
			
		||||
#define TIMER_CTRL_AHB_FREQ				72
 | 
			
		||||
 | 
			
		||||
// PWM SETTINGS
 | 
			
		||||
#define SIN_TABLE_ORIGIN 					sin_table
 | 
			
		||||
#define SIN_TABLE_SIZE_MAX 				1000
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//----------DEFINES FOR MODBUS SETTING--------------
 | 
			
		||||
#define MODBUS_UART_NUMB 					3			// number of used uart
 | 
			
		||||
#define MODBUS_SPEED							115200
 | 
			
		||||
#define MODBUS_GPIOX							GPIOB
 | 
			
		||||
#define MODBUS_GPIO_PIN_RX				GPIO_PIN_11
 | 
			
		||||
#define MODBUS_GPIO_PIN_TX				GPIO_PIN_10
 | 
			
		||||
/* accord to this define sets define USED_MB_UART = USARTx */
 | 
			
		||||
#define MODBUS_TIM_NUMB 					7			// number of used uart
 | 
			
		||||
#define MODBUS_TIM_AHB_FREQ				72
 | 
			
		||||
/* accord to this define sets define USED_MB_TIM = TIMx */
 | 
			
		||||
 | 
			
		||||
/* defines for modbus behaviour */
 | 
			
		||||
#define MODBUS_DEVICE_ID 					1			// number of used uart
 | 
			
		||||
#define MODBUS_MAX_TIMEOUT 				5000 	// is ms
 | 
			
		||||
// custom define for size of receive message 
 | 
			
		||||
//--------------------------------------------------
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	// ctrl periph settings 
 | 
			
		||||
	uint64_t TIM_CTRL_TICKBASE;
 | 
			
		||||
	uint64_t TIM_CTRL_AHB_FREQ;
 | 
			
		||||
	// pwm peripth settings
 | 
			
		||||
	uint64_t TIM_PWM_TICKBASE;
 | 
			
		||||
	uint64_t TIM_PWM_AHB_FREQ;
 | 
			
		||||
	
 | 
			
		||||
//	uint64_t TIM_PWM1_INSTANCE;
 | 
			
		||||
	uint64_t TIM_PWM1_TIM_CHANNEL1;
 | 
			
		||||
	uint64_t TIM_PWM1_TIM_CHANNEL2;
 | 
			
		||||
	uint64_t TIM_PWM1_GPIOx;
 | 
			
		||||
	uint64_t TIM_PWM1_GPIO_PIN_X1;
 | 
			
		||||
	uint64_t TIM_PWM1_GPIO_PIN_X2;
 | 
			
		||||
	
 | 
			
		||||
	uint64_t TIM_PWM2_INSTANCE;
 | 
			
		||||
	uint64_t TIM_PWM2_TIM_CHANNEL1;
 | 
			
		||||
	uint64_t TIM_PWM2_TIM_CHANNEL2;
 | 
			
		||||
	uint64_t TIM_PWM2_GPIOx;
 | 
			
		||||
	uint64_t TIM_PWM2_GPIO_PIN_X1;
 | 
			
		||||
	uint64_t TIM_PWM2_GPIO_PIN_X2;
 | 
			
		||||
	
 | 
			
		||||
	uint64_t TIM_PWM3_INSTANCE;
 | 
			
		||||
	uint64_t TIM_PWM3_TIM_CHANNEL1;
 | 
			
		||||
	uint64_t TIM_PWM3_TIM_CHANNEL2;
 | 
			
		||||
	uint64_t TIM_PWM3_GPIOx;
 | 
			
		||||
	uint64_t TIM_PWM3_GPIO_PIN_X1;
 | 
			
		||||
	uint64_t TIM_PWM3_GPIO_PIN_X2;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// modbus peripth settings
 | 
			
		||||
	uint64_t MB_DEVICE_ID;
 | 
			
		||||
	uint64_t MB_SPEED;
 | 
			
		||||
	uint64_t MB_GPIOX;
 | 
			
		||||
	uint64_t MB_GPIO_PIN_RX;
 | 
			
		||||
	uint64_t MB_GPIO_PIN_TX;
 | 
			
		||||
	uint64_t MB_MAX_TIMEOUT;	
 | 
			
		||||
	uint64_t MB_TIM_AHB_FREQ;
 | 
			
		||||
	
 | 
			
		||||
//	uint32_t MB_UART_NUMB;
 | 
			
		||||
//	uint32_t MB_TIM_NUMB;
 | 
			
		||||
}ProjectSettings_TypeDef;
 | 
			
		||||
extern ProjectSettings_TypeDef PROJSET;
 | 
			
		||||
	
 | 
			
		||||
//#define PROJSET_MEM		((ProjectSettings_TypeDef *)SETTINGS_ADDRESS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//#define HAL_FLASH_GET_TYPEPROGRAM(_val_) 						(sizeof(PROJSET_MEM->MB_DEVICE_ID)/2 - 1)
 | 
			
		||||
#define HAL_FLASH_GET_TYPEPROGRAM(_val_) 						FLASH_TYPEPROGRAM_WORD
 | 
			
		||||
#define FLASH_WRITE_SETTING(_setting_, _val_)				HAL_FLASH_Program(HAL_FLASH_GET_TYPEPROGRAM(_setting_), (uint32_t)(&_setting_), (uint32_t)_val_);
 | 
			
		||||
#define STRUCT_WRITE_SETTING(_setting_, _val_)				(_setting_ = _val_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void FillStructWithDefines(void);
 | 
			
		||||
void SetFlagUpdateSettingsInMem(void);
 | 
			
		||||
void UpdateSettingsInMem(void);
 | 
			
		||||
void WriteSettingsToMem(void);
 | 
			
		||||
void FillSettingsWithDefines(void);
 | 
			
		||||
void CheckSettingsInFLASH(void);
 | 
			
		||||
int CheckIsSettingsValid(ProjectSettings_TypeDef *set_struct);
 | 
			
		||||
 | 
			
		||||
#endif // __PROJ_SETTINGS_H_
 | 
			
		||||
							
								
								
									
										2906
									
								
								DOCS/Doxyfile
									
									
									
									
									
								
							
							
						
						@ -1,174 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper/MCU.c File Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_5bc05bcf5fafad3c8688aee149210d07.html">MCU_Wrapper</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="summary">
 | 
			
		||||
<a href="#define-members">Macros</a> |
 | 
			
		||||
<a href="#func-members">Functions</a>  </div>
 | 
			
		||||
  <div class="headertitle"><div class="title">MCU.c File Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
 | 
			
		||||
<p>Исходный код S-Function.  
 | 
			
		||||
<a href="#details">More...</a></p>
 | 
			
		||||
<div class="textblock"><code>#include "<a class="el" href="mcu__wrapper__conf_8h_source.html">mcu_wrapper_conf.h</a>"</code><br />
 | 
			
		||||
<code>#include "cg_sfun.h"</code><br />
 | 
			
		||||
</div><div class="textblock"><div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Include dependency graph for MCU.c:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="_m_c_u_8c__incl.png" border="0" usemap="#a_f_1_2_work_2_projects_2_m_a_t_l_a_b_2matlab__stm__emulate_2_m_c_u___wrapper_2_m_c_u_8c" alt=""/></div>
 | 
			
		||||
<map name="a_f_1_2_work_2_projects_2_m_a_t_l_a_b_2matlab__stm__emulate_2_m_c_u___wrapper_2_m_c_u_8c" id="a_f_1_2_work_2_projects_2_m_a_t_l_a_b_2matlab__stm__emulate_2_m_c_u___wrapper_2_m_c_u_8c">
 | 
			
		||||
<area shape="rect" title="Исходный код S-Function." alt="" coords="405,5,586,64"/>
 | 
			
		||||
<area shape="rect" href="mcu__wrapper__conf_8h.html" title="Заголовочный файл для оболочки МК." alt="" coords="358,112,500,139"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="476,66,450,101,445,98,472,63"/>
 | 
			
		||||
<area shape="rect" title=" " alt="" coords="524,112,603,139"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="520,63,547,98,542,101,515,66"/>
 | 
			
		||||
<area shape="rect" href="stm32f4xx__matlab__conf_8h.html" title="Заголовочный файл для конфигурации симулятора МК." alt="" coords="192,187,364,213"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="404,142,319,182,317,177,401,137"/>
 | 
			
		||||
<area shape="rect" title=" " alt="" coords="534,336,617,363"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="450,137,510,186,542,220,567,260,577,291,579,320,574,321,571,292,562,262,537,224,506,189,446,141"/>
 | 
			
		||||
<area shape="rect" title=" " alt="" coords="627,187,705,213"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="471,137,613,180,611,185,469,142"/>
 | 
			
		||||
<area shape="rect" href="stm32f4xx__matlab__rcc_8h.html" title="Заголовочный файл для симулятора клока." alt="" coords="5,261,170,288"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="246,216,136,258,134,253,244,211"/>
 | 
			
		||||
<area shape="rect" href="stm32f4xx__matlab__gpio_8h.html" title="Заголовочный файл для симулятора портов." alt="" coords="382,261,553,288"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="312,211,421,253,419,258,310,216"/>
 | 
			
		||||
<area shape="rect" href="stm32f4xx__matlab__tim_8h.html" title="Заголовочный файл для симулятора таймеров." alt="" coords="193,261,358,288"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="280,214,279,246,274,246,275,214"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="95,259,129,222,153,202,180,184,219,166,261,152,342,134,343,139,263,157,221,171,182,189,156,206,133,226,99,263"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="462,262,433,154,439,153,467,260"/>
 | 
			
		||||
<area shape="rect" title=" " alt="" coords="380,336,497,363"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="465,290,451,323,446,321,460,288"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="488,286,545,325,542,329,485,291"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="303,258,339,239,374,211,397,182,415,152,419,154,402,185,377,215,342,243,306,263"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="305,286,397,327,395,332,303,291"/>
 | 
			
		||||
<area shape="rect" title=" " alt="" coords="222,336,329,363"/>
 | 
			
		||||
<area shape="poly" title=" " alt="" coords="278,289,278,320,273,320,273,289"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
<p><a href="_m_c_u_8c_source.html">Go to the source code of this file.</a></p>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
 | 
			
		||||
Macros</h2></td></tr>
 | 
			
		||||
<tr class="memitem:ga0f61df833e166c743295eebf43f0b142" id="r_ga0f61df833e166c743295eebf43f0b142"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0f61df833e166c743295eebf43f0b142">S_FUNCTION_NAME</a>   MCU</td></tr>
 | 
			
		||||
<tr class="separator:ga0f61df833e166c743295eebf43f0b142"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga9a4ab27953070e39249f3fad28e93749" id="r_ga9a4ab27953070e39249f3fad28e93749"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga9a4ab27953070e39249f3fad28e93749">S_FUNCTION_LEVEL</a>   2</td></tr>
 | 
			
		||||
<tr class="separator:ga9a4ab27953070e39249f3fad28e93749"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga7556dbbf5cb7f9946d3e39bcda40c63b" id="r_ga7556dbbf5cb7f9946d3e39bcda40c63b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga7556dbbf5cb7f9946d3e39bcda40c63b">MDL_UPDATE</a></td></tr>
 | 
			
		||||
<tr class="memdesc:ga7556dbbf5cb7f9946d3e39bcda40c63b"><td class="mdescLeft"> </td><td class="mdescRight">для подключения <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec" title="Update S-Function at every step of simulation.">mdlUpdate()</a>  <br /></td></tr>
 | 
			
		||||
<tr class="separator:ga7556dbbf5cb7f9946d3e39bcda40c63b"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga4936bd489281a5a9b9a2e081de0f003e" id="r_ga4936bd489281a5a9b9a2e081de0f003e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4936bd489281a5a9b9a2e081de0f003e">MDL_CHECK_PARAMETERS</a>   /* Change to #undef to remove function */</td></tr>
 | 
			
		||||
<tr class="separator:ga4936bd489281a5a9b9a2e081de0f003e"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:gac032abbf580c891fb0c11e63e9bc668a" id="r_gac032abbf580c891fb0c11e63e9bc668a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gac032abbf580c891fb0c11e63e9bc668a">MDL_START</a>   /* Change to #undef to remove function */</td></tr>
 | 
			
		||||
<tr class="separator:gac032abbf580c891fb0c11e63e9bc668a"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table><table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
 | 
			
		||||
Functions</h2></td></tr>
 | 
			
		||||
<tr class="memitem:gad3d5b495abad2acd2ae68febd1d2c5ec" id="r_gad3d5b495abad2acd2ae68febd1d2c5ec"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">mdlUpdate</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="memdesc:gad3d5b495abad2acd2ae68febd1d2c5ec"><td class="mdescLeft"> </td><td class="mdescRight">Update S-Function at every step of simulation.  <br /></td></tr>
 | 
			
		||||
<tr class="separator:gad3d5b495abad2acd2ae68febd1d2c5ec"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga52f81157111c2436496e1a9630bdce5b" id="r_ga52f81157111c2436496e1a9630bdce5b"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">mdlOutputs</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="memdesc:ga52f81157111c2436496e1a9630bdce5b"><td class="mdescLeft"> </td><td class="mdescRight">Writting outputs of S-Function.  <br /></td></tr>
 | 
			
		||||
<tr class="separator:ga52f81157111c2436496e1a9630bdce5b"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:gab500fc17ae5e95797926ac770d903b84" id="r_gab500fc17ae5e95797926ac770d903b84"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">mdlInitializeSizes</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="separator:gab500fc17ae5e95797926ac770d903b84"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga0dd07daf338cf84d1aee4bb8b6771720" id="r_ga0dd07daf338cf84d1aee4bb8b6771720"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">mdlStart</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="memdesc:ga0dd07daf338cf84d1aee4bb8b6771720"><td class="mdescLeft"> </td><td class="mdescRight">Initialize S-Function at start of simulation.  <br /></td></tr>
 | 
			
		||||
<tr class="separator:ga0dd07daf338cf84d1aee4bb8b6771720"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga4308a5a20d9c7060391059b1dfce872e" id="r_ga4308a5a20d9c7060391059b1dfce872e"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">mdlInitializeSampleTimes</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="memdesc:ga4308a5a20d9c7060391059b1dfce872e"><td class="mdescLeft"> </td><td class="mdescRight">Initialize Sample Time of Simulation.  <br /></td></tr>
 | 
			
		||||
<tr class="separator:ga4308a5a20d9c7060391059b1dfce872e"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:ga343acfd8b3b5308d6c94bbf40efbbac5" id="r_ga343acfd8b3b5308d6c94bbf40efbbac5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">mdlTerminate</a> (SimStruct *S)</td></tr>
 | 
			
		||||
<tr class="memdesc:ga343acfd8b3b5308d6c94bbf40efbbac5"><td class="mdescLeft"> </td><td class="mdescRight">Terminate S-Function at the end of simulation.  <br /></td></tr>
 | 
			
		||||
<tr class="separator:ga343acfd8b3b5308d6c94bbf40efbbac5"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 | 
			
		||||
<div class="textblock"><p>Исходный код S-Function. </p>
 | 
			
		||||
<p>Данный файл содержит функции S-Function, который вызывает MATLAB.</p>
 | 
			
		||||
<dl class="section note"><dt>Note</dt><dd>Описание функций по большей части сгенерировано MATLAB'ом, поэтому на английском </dd></dl>
 | 
			
		||||
 | 
			
		||||
<p class="definition">Definition in file <a class="el" href="_m_c_u_8c_source.html">MCU.c</a>.</p>
 | 
			
		||||
</div></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,28 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper/MCU.c" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper/MCU.c">
 | 
			
		||||
<area shape="rect" id="Node000001" title="Исходный код S-Function." alt="" coords="405,5,586,64"/>
 | 
			
		||||
<area shape="rect" id="Node000002" href="$mcu__wrapper__conf_8h.html" title="Заголовочный файл для оболочки МК." alt="" coords="358,112,500,139"/>
 | 
			
		||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="476,66,450,101,445,98,472,63"/>
 | 
			
		||||
<area shape="rect" id="Node000011" title=" " alt="" coords="524,112,603,139"/>
 | 
			
		||||
<area shape="poly" id="edge15_Node000001_Node000011" title=" " alt="" coords="520,63,547,98,542,101,515,66"/>
 | 
			
		||||
<area shape="rect" id="Node000003" href="$stm32f4xx__matlab__conf_8h.html" title="Заголовочный файл для конфигурации симулятора МК." alt="" coords="192,187,364,213"/>
 | 
			
		||||
<area shape="poly" id="edge2_Node000002_Node000003" title=" " alt="" coords="404,142,319,182,317,177,401,137"/>
 | 
			
		||||
<area shape="rect" id="Node000007" title=" " alt="" coords="534,336,617,363"/>
 | 
			
		||||
<area shape="poly" id="edge13_Node000002_Node000007" title=" " alt="" coords="450,137,510,186,542,220,567,260,577,291,579,320,574,321,571,292,562,262,537,224,506,189,446,141"/>
 | 
			
		||||
<area shape="rect" id="Node000010" title=" " alt="" coords="627,187,705,213"/>
 | 
			
		||||
<area shape="poly" id="edge14_Node000002_Node000010" title=" " alt="" coords="471,137,613,180,611,185,469,142"/>
 | 
			
		||||
<area shape="rect" id="Node000004" href="$stm32f4xx__matlab__rcc_8h.html" title="Заголовочный файл для симулятора клока." alt="" coords="5,261,170,288"/>
 | 
			
		||||
<area shape="poly" id="edge3_Node000003_Node000004" title=" " alt="" coords="246,216,136,258,134,253,244,211"/>
 | 
			
		||||
<area shape="rect" id="Node000005" href="$stm32f4xx__matlab__gpio_8h.html" title="Заголовочный файл для симулятора портов." alt="" coords="382,261,553,288"/>
 | 
			
		||||
<area shape="poly" id="edge5_Node000003_Node000005" title=" " alt="" coords="312,211,421,253,419,258,310,216"/>
 | 
			
		||||
<area shape="rect" id="Node000008" href="$stm32f4xx__matlab__tim_8h.html" title="Заголовочный файл для симулятора таймеров." alt="" coords="193,261,358,288"/>
 | 
			
		||||
<area shape="poly" id="edge9_Node000003_Node000008" title=" " alt="" coords="280,214,279,246,274,246,275,214"/>
 | 
			
		||||
<area shape="poly" id="edge4_Node000004_Node000002" title=" " alt="" coords="95,259,129,222,153,202,180,184,219,166,261,152,342,134,343,139,263,157,221,171,182,189,156,206,133,226,99,263"/>
 | 
			
		||||
<area shape="poly" id="edge8_Node000005_Node000002" title=" " alt="" coords="462,262,433,154,439,153,467,260"/>
 | 
			
		||||
<area shape="rect" id="Node000006" title=" " alt="" coords="380,336,497,363"/>
 | 
			
		||||
<area shape="poly" id="edge6_Node000005_Node000006" title=" " alt="" coords="465,290,451,323,446,321,460,288"/>
 | 
			
		||||
<area shape="poly" id="edge7_Node000005_Node000007" title=" " alt="" coords="488,286,545,325,542,329,485,291"/>
 | 
			
		||||
<area shape="poly" id="edge12_Node000008_Node000002" title=" " alt="" coords="303,258,339,239,374,211,397,182,415,152,419,154,402,185,377,215,342,243,306,263"/>
 | 
			
		||||
<area shape="poly" id="edge10_Node000008_Node000006" title=" " alt="" coords="305,286,397,327,395,332,303,291"/>
 | 
			
		||||
<area shape="rect" id="Node000009" title=" " alt="" coords="222,336,329,363"/>
 | 
			
		||||
<area shape="poly" id="edge11_Node000008_Node000009" title=" " alt="" coords="278,289,278,320,273,320,273,289"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
f2a5f97f943f4a05da982fbe5376cfc8
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 26 KiB  | 
@ -1,331 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper/MCU.c Source File</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() { codefold.init(0); });
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_5bc05bcf5fafad3c8688aee149210d07.html">MCU_Wrapper</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">MCU.c</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<a href="_m_c_u_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/**</span></div>
 | 
			
		||||
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment">**************************************************************************</span></div>
 | 
			
		||||
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment">* @file MCU.c</span></div>
 | 
			
		||||
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment">* @brief Исходный код S-Function.</span></div>
 | 
			
		||||
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment">**************************************************************************</span></div>
 | 
			
		||||
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment">@details</span></div>
 | 
			
		||||
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment">Данный файл содержит функции S-Function, который вызывает MATLAB.</span></div>
 | 
			
		||||
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment">**************************************************************************</span></div>
 | 
			
		||||
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment">@note </span></div>
 | 
			
		||||
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment">Описание функций по большей части сгенерировано MATLAB'ом, поэтому на английском</span></div>
 | 
			
		||||
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment">**************************************************************************/</span></div>
 | 
			
		||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"></span> </div>
 | 
			
		||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment">/**</span></div>
 | 
			
		||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment">  * @addtogroup     WRAPPER_SFUNC    S-Function funtions</span></div>
 | 
			
		||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment">  * @ingroup        MCU_WRAPPER</span></div>
 | 
			
		||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment">  * @brief          Дефайны и функции блока S-Function</span></div>
 | 
			
		||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment">  * @details        Здесь собраны функции, с которыми непосредственно работает S-Function</span></div>
 | 
			
		||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment">  * @note           Описание функций по большей части сгенерировано MATLAB'ом, поэтому на английском</span></div>
 | 
			
		||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="comment">  * @{</span></div>
 | 
			
		||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="comment">  */</span></div>
 | 
			
		||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span> </div>
 | 
			
		||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0f61df833e166c743295eebf43f0b142">   22</a></span><span class="preprocessor">#define S_FUNCTION_NAME     MCU</span></div>
 | 
			
		||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga9a4ab27953070e39249f3fad28e93749">   23</a></span><span class="preprocessor">#define S_FUNCTION_LEVEL    2</span></div>
 | 
			
		||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
 | 
			
		||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include "<a class="code" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a>"</span></div>
 | 
			
		||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
 | 
			
		||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga7556dbbf5cb7f9946d3e39bcda40c63b">   27</a></span><span class="preprocessor">#define MDL_UPDATE </span><span class="comment">///< для подключения mdlUpdate()</span><span class="comment"></span></div>
 | 
			
		||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="comment">/** </span></div>
 | 
			
		||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="comment"> *  @brief      Update S-Function at every step of simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="comment"> *  @param      S - pointer to S-Function (library struct from "simstruc.h")</span></div>
 | 
			
		||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="comment"> *  @details    Abstract:</span></div>
 | 
			
		||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="comment"> *    This function is called once for every major integration time step.</span></div>
 | 
			
		||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="comment"> *    Discrete states are typically updated here, but this function is useful</span></div>
 | 
			
		||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="comment"> *    for performing any tasks that should only take place once per</span></div>
 | 
			
		||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span><span class="comment"> *    integration step.</span></div>
 | 
			
		||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="comment"> */</span><span class="preprocessor"></span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00037" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">   37</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">mdlUpdate</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>{ </div>
 | 
			
		||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="comment">// get time of simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>    time_T TIME = ssGetT(S);</div>
 | 
			
		||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span> </div>
 | 
			
		||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="comment">//---------------SIMULATE MCU---------------</span></div>
 | 
			
		||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>    <a class="code hl_function" href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">MCU_Step_Simulation</a>(S, TIME); <span class="comment">// SIMULATE MCU</span></div>
 | 
			
		||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="comment">//------------------------------------------</span></div>
 | 
			
		||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>}<span class="comment">//end mdlUpdate</span></div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="comment"></span> </div>
 | 
			
		||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="comment">/** </span></div>
 | 
			
		||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="comment"> *  @brief      Writting outputs of S-Function </span></div>
 | 
			
		||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment"> *  @param      S - pointer to S-Function (library struct from "simstruc.h")</span></div>
 | 
			
		||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="comment"> *  @details    Abstract:</span></div>
 | 
			
		||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="comment"> *    In this function, you compute the outputs of your S-function</span></div>
 | 
			
		||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="comment"> *    block. Generally outputs are placed in the output vector(s),</span></div>
 | 
			
		||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span><span class="comment"> *    ssGetOutputPortSignal.</span></div>
 | 
			
		||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="comment"> */</span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00055" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">   55</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">mdlOutputs</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>{</div>
 | 
			
		||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    <a class="code hl_function" href="mcu__wrapper_8c.html#a47b40a9825bcaeb3a1dfba8b27a0be3f">SIM_writeOutputs</a>(S);</div>
 | 
			
		||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>}<span class="comment">//end mdlOutputs</span></div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span> </div>
 | 
			
		||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4936bd489281a5a9b9a2e081de0f003e">   60</a></span><span class="preprocessor">#define MDL_CHECK_PARAMETERS   </span><span class="comment">/* Change to #undef to remove function */</span><span class="preprocessor"></span></div>
 | 
			
		||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span><span class="preprocessor">#if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE)</span></div>
 | 
			
		||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span><span class="keyword">static</span> <span class="keywordtype">void</span> mdlCheckParameters(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>{</div>
 | 
			
		||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>    <span class="keywordtype">int</span> i;</div>
 | 
			
		||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span> </div>
 | 
			
		||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>    <span class="comment">// Проверяем и принимаем параметры и разрешаем или запрещаем их менять</span></div>
 | 
			
		||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>    <span class="comment">// в процессе моделирования</span></div>
 | 
			
		||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>    <span class="keywordflow">for</span> (i=0; i<1; i++)</div>
 | 
			
		||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    {</div>
 | 
			
		||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>        <span class="comment">// Input parameter must be scalar or vector of type double</span></div>
 | 
			
		||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>        <span class="keywordflow">if</span> (!mxIsDouble(ssGetSFcnParam(S,i)) || mxIsComplex(ssGetSFcnParam(S,i)) ||</div>
 | 
			
		||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>            mxIsEmpty(ssGetSFcnParam(S,i)))</div>
 | 
			
		||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>        {</div>
 | 
			
		||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>            ssSetErrorStatus(S,<span class="stringliteral">"Input parameter must be of type double"</span>);</div>
 | 
			
		||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>            <span class="keywordflow">return</span>;</div>
 | 
			
		||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>        }</div>
 | 
			
		||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>        <span class="comment">// Параметр м.б. только скаляром, вектором или матрицей</span></div>
 | 
			
		||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>        <span class="keywordflow">if</span> (mxGetNumberOfDimensions(ssGetSFcnParam(S,i)) > 2)</div>
 | 
			
		||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>        {</div>
 | 
			
		||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>            ssSetErrorStatus(S,<span class="stringliteral">"Параметр м.б. только скаляром, вектором или матрицей"</span>);</div>
 | 
			
		||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>            <span class="keywordflow">return</span>;</div>
 | 
			
		||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>        }</div>
 | 
			
		||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="comment">//         sim_dt = mxGetPr(ssGetSFcnParam(S,0))[0];</span></div>
 | 
			
		||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>        <span class="comment">// Parameter not tunable</span></div>
 | 
			
		||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span><span class="comment">//      ssSetSFcnParamTunable(S, i, SS_PRM_NOT_TUNABLE);</span></div>
 | 
			
		||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>        <span class="comment">// Parameter tunable (we must create a corresponding run-time parameter)</span></div>
 | 
			
		||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>        ssSetSFcnParamTunable(S, i, SS_PRM_TUNABLE);</div>
 | 
			
		||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>        <span class="comment">// Parameter tunable only during simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span><span class="comment">//      ssSetSFcnParamTunable(S, i, SS_PRM_SIM_ONLY_TUNABLE);</span></div>
 | 
			
		||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span> </div>
 | 
			
		||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>    }<span class="comment">//for (i=0; i<NPARAMS; i++)</span></div>
 | 
			
		||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
 | 
			
		||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>}<span class="comment">//end mdlCheckParameters</span></div>
 | 
			
		||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span><span class="preprocessor">#endif </span><span class="comment">//MDL_CHECK_PARAMETERS</span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00095" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">   95</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">mdlInitializeSizes</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>{    </div>
 | 
			
		||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>    ssSetNumSFcnParams(S, 1);</div>
 | 
			
		||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>    <span class="comment">// Кол-во ожидаемых и фактических параметров должно совпадать</span></div>
 | 
			
		||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>    <span class="keywordflow">if</span>(ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S))</div>
 | 
			
		||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>    {</div>
 | 
			
		||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>        <span class="comment">// Проверяем и принимаем параметры</span></div>
 | 
			
		||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>        mdlCheckParameters(S);</div>
 | 
			
		||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    }</div>
 | 
			
		||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>    <span class="keywordflow">else</span></div>
 | 
			
		||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>    {</div>
 | 
			
		||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>        <span class="keywordflow">return</span>;<span class="comment">// Parameter mismatch will be reported by Simulink</span></div>
 | 
			
		||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>    }</div>
 | 
			
		||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span> </div>
 | 
			
		||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>    <span class="comment">// set up discrete states</span></div>
 | 
			
		||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    ssSetNumContStates(S, 0);               <span class="comment">// number of continuous states</span></div>
 | 
			
		||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>    ssSetNumDiscStates(S, <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gaaed909ba8fd0e4f7a3c2533836dae5d9">DISC_STATES_WIDTH</a>);   <span class="comment">// number of discrete states</span></div>
 | 
			
		||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span> </div>
 | 
			
		||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>    <span class="comment">// set up input port</span></div>
 | 
			
		||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>    <span class="keywordflow">if</span> (!ssSetNumInputPorts(S, 1)) <span class="keywordflow">return</span>; </div>
 | 
			
		||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga25be09b98d138ff8c740bece06e1bcc6">IN_PORT_NUMB</a>; i++)</div>
 | 
			
		||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>        ssSetInputPortWidth(S, i, <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac41471250c3d92da182a969e378addfc">IN_PORT_WIDTH</a>);</div>
 | 
			
		||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>    ssSetInputPortDirectFeedThrough(S, 0, 0);</div>
 | 
			
		||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>    ssSetInputPortRequiredContiguous(S, 0, 1); <span class="comment">// direct input signal access</span></div>
 | 
			
		||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span> </div>
 | 
			
		||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>    <span class="comment">// set up output port</span></div>
 | 
			
		||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>    <span class="keywordflow">if</span> (!ssSetNumOutputPorts(S, <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga9fa483e805a6570c4793b1e0ff9719ac">OUT_PORT_NUMB</a>)) <span class="keywordflow">return</span>; </div>
 | 
			
		||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga9fa483e805a6570c4793b1e0ff9719ac">OUT_PORT_NUMB</a>; i++)</div>
 | 
			
		||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>        ssSetOutputPortWidth(S, i, <a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac90b37686b0abfe29835c9632310897a">OUT_PORT_WIDTH</a>);</div>
 | 
			
		||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
 | 
			
		||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span> </div>
 | 
			
		||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>    ssSetNumSampleTimes(S, 1);</div>
 | 
			
		||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span> </div>
 | 
			
		||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span> </div>
 | 
			
		||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>    ssSetNumRWork(         S, 5);   <span class="comment">// number of real work vector elements</span></div>
 | 
			
		||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>    ssSetNumIWork(         S, 5);   <span class="comment">// number of integer work vector elements</span></div>
 | 
			
		||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>    ssSetNumPWork(         S, 0);   <span class="comment">// number of pointer work vector elements</span></div>
 | 
			
		||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>    ssSetNumModes(         S, 0);   <span class="comment">// number of mode work vector elements</span></div>
 | 
			
		||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>    ssSetNumNonsampledZCs( S, 0);   <span class="comment">// number of nonsampled zero crossings</span></div>
 | 
			
		||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span> </div>
 | 
			
		||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span> </div>
 | 
			
		||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>    ssSetRuntimeThreadSafetyCompliance(S, RUNTIME_THREAD_SAFETY_COMPLIANCE_TRUE);</div>
 | 
			
		||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>    <span class="comment">/* Take care when specifying exception free code - see sfuntmpl.doc */</span></div>
 | 
			
		||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>    ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);</div>
 | 
			
		||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span> </div>
 | 
			
		||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span> </div>
 | 
			
		||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>}</div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span> </div>
 | 
			
		||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gac032abbf580c891fb0c11e63e9bc668a">  143</a></span><span class="preprocessor">#define MDL_START  </span><span class="comment">/* Change to #undef to remove function */</span><span class="preprocessor"></span></div>
 | 
			
		||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span><span class="preprocessor">#if defined(MDL_START)</span><span class="comment"></span></div>
 | 
			
		||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span><span class="comment">/** </span></div>
 | 
			
		||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span><span class="comment"> *  @brief      Initialize S-Function at start of simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span><span class="comment"> *  @param      S - pointer to S-Function (library struct from "simstruc.h")</span></div>
 | 
			
		||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span><span class="comment"> *  @details    Abstract:</span></div>
 | 
			
		||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span><span class="comment"> *    This function is called once at start of model execution. If you</span></div>
 | 
			
		||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span><span class="comment"> *    have states that should be initialized once, this is the place</span></div>
 | 
			
		||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span><span class="comment"> *    to do it.</span></div>
 | 
			
		||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span><span class="comment"> */</span><span class="preprocessor"></span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00153" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">  153</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">mdlStart</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>{</div>
 | 
			
		||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>    <a class="code hl_function" href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">SIM_Initialize_Simulation</a>();</div>
 | 
			
		||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>}</div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span><span class="preprocessor">#endif </span><span class="comment">// MDL_START</span></div>
 | 
			
		||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span><span class="comment"></span> </div>
 | 
			
		||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span><span class="comment">/** </span></div>
 | 
			
		||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span><span class="comment"> *  @brief      Initialize Sample Time of Simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span><span class="comment"> *  @param      S - pointer to S-Function (library struct from "simstruc.h")</span></div>
 | 
			
		||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span><span class="comment"> *  @details    Abstract:</span></div>
 | 
			
		||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span><span class="comment"> *    This function is used to specify the sample time(s) for your</span></div>
 | 
			
		||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span><span class="comment"> *    S-function. You must register the same number of sample times as</span></div>
 | 
			
		||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span><span class="comment"> *    specified in ssSetNumSampleTimes.</span></div>
 | 
			
		||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span><span class="comment"> */</span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00167" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">  167</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">mdlInitializeSampleTimes</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>{   </div>
 | 
			
		||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>    <span class="comment">// Шаг дискретизации</span></div>
 | 
			
		||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>    <a class="code hl_variable" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a>.<a class="code hl_variable" href="struct_s_i_m_____m_c_u_handle_type_def.html#ab19a05224f30fab089c5d5e18fdcca36">SIM_Sample_Time</a> = mxGetPr(ssGetSFcnParam(S,<a class="code hl_define" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gae468832efa6adf5e9a96cabd8f878b47">NPARAMS</a>-1))[0];</div>
 | 
			
		||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
 | 
			
		||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>    <span class="comment">// Register one pair for each sample time</span></div>
 | 
			
		||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>    ssSetSampleTime(S, 0, <a class="code hl_variable" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a>.<a class="code hl_variable" href="struct_s_i_m_____m_c_u_handle_type_def.html#ab19a05224f30fab089c5d5e18fdcca36">SIM_Sample_Time</a>);</div>
 | 
			
		||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>    ssSetOffsetTime(S, 0, 0.0);</div>
 | 
			
		||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>}</div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span><span class="comment"></span> </div>
 | 
			
		||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span><span class="comment">/** </span></div>
 | 
			
		||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span><span class="comment"> *  @brief      Terminate S-Function at the end of simulation</span></div>
 | 
			
		||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span><span class="comment"> *  @param      S - pointer to S-Function (library struct from "simstruc.h")</span></div>
 | 
			
		||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span><span class="comment"> *  @details    Abstract:</span></div>
 | 
			
		||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span><span class="comment"> *    In this function, you should perform any actions that are necessary</span></div>
 | 
			
		||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span><span class="comment"> *    at the termination of a simulation.  For example, if memory was</span></div>
 | 
			
		||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span><span class="comment"> *    allocated in mdlStart, this is the place to free it.</span></div>
 | 
			
		||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span><span class="comment"> */</span></div>
 | 
			
		||||
<div class="foldopen" id="foldopen00185" data-start="{" data-end="}">
 | 
			
		||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"><a class="line" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">  185</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">mdlTerminate</a>(SimStruct *S)</div>
 | 
			
		||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>{</div>
 | 
			
		||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>    <a class="code hl_variable" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a>.<a class="code hl_variable" href="struct_s_i_m_____m_c_u_handle_type_def.html#ad81f091fd8c1ad2908a5dd5967f3322e">fMCU_Stop</a> = 1;</div>
 | 
			
		||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>    ResumeThread(<a class="code hl_variable" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a>.<a class="code hl_variable" href="struct_s_i_m_____m_c_u_handle_type_def.html#af2b1efce882c9bc0926c715c16773afb">hMCUThread</a>);</div>
 | 
			
		||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>    WaitForSingleObject(<a class="code hl_variable" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a>.<a class="code hl_variable" href="struct_s_i_m_____m_c_u_handle_type_def.html#af2b1efce882c9bc0926c715c16773afb">hMCUThread</a>, 10000);</div>
 | 
			
		||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>    <a class="code hl_function" href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">SIM_deInitialize_Simulation</a>();</div>
 | 
			
		||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>    mexUnlock();</div>
 | 
			
		||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>}</div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span> </div>
 | 
			
		||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span><span class="comment"></span> </div>
 | 
			
		||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span><span class="comment">/** WRAPPER_SFUNC</span></div>
 | 
			
		||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span><span class="comment">    * @}</span></div>
 | 
			
		||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span><span class="comment">    */</span></div>
 | 
			
		||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span> </div>
 | 
			
		||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span><span class="preprocessor">#ifdef MATLAB_MEX_FILE    </span><span class="comment">/* Is this file being compiled as a </span></div>
 | 
			
		||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span><span class="comment">                             MEX-file? */</span><span class="preprocessor"></span></div>
 | 
			
		||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span><span class="preprocessor">#include "simulink.c"</span>     <span class="comment">/* MEX-file interface mechanism */</span></div>
 | 
			
		||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span><span class="preprocessor">#else</span></div>
 | 
			
		||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span><span class="preprocessor">#include "cg_sfun.h"</span>      <span class="comment">/* Code generation registration </span></div>
 | 
			
		||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span><span class="comment">                             function */</span></div>
 | 
			
		||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span><span class="preprocessor">#endif</span></div>
 | 
			
		||||
<div class="ttc" id="agroup___m_c_u___w_r_a_p_p_e_r_html_ga54429d6d68b1d72ce16bab374e3ffa08"><div class="ttname"><a href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">SIM_Initialize_Simulation</a></div><div class="ttdeci">void SIM_Initialize_Simulation(void)</div><div class="ttdoc">Инициализация симуляции МК.</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper_8c_source.html#l00145">mcu_wrapper.c:145</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___m_c_u___w_r_a_p_p_e_r_html_ga6f04b162923bada308d9668743425b92"><div class="ttname"><a href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">SIM_deInitialize_Simulation</a></div><div class="ttdeci">void SIM_deInitialize_Simulation(void)</div><div class="ttdoc">Деинициализация симуляции МК.</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper_8c_source.html#l00162">mcu_wrapper.c:162</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___m_c_u___w_r_a_p_p_e_r_html_gad3c4ea41584d0367dfbfb697f5e57456"><div class="ttname"><a href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">MCU_Step_Simulation</a></div><div class="ttdeci">void MCU_Step_Simulation(SimStruct *S, time_T time)</div><div class="ttdoc">Симуляция МК на один такт симуляции.</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper_8c_source.html#l00053">mcu_wrapper.c:53</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_ga25be09b98d138ff8c740bece06e1bcc6"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga25be09b98d138ff8c740bece06e1bcc6">IN_PORT_NUMB</a></div><div class="ttdeci">#define IN_PORT_NUMB</div><div class="ttdoc">number of input ports</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00056">mcu_wrapper_conf.h:56</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_ga7bd77e7f9825a3661f357e430246bfe8"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">hmcu</a></div><div class="ttdeci">SIM__MCUHandleTypeDef hmcu</div><div class="ttdoc">Хендл для управления потоком программы МК</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper_8c_source.html#l00016">mcu_wrapper.c:16</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_ga9fa483e805a6570c4793b1e0ff9719ac"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga9fa483e805a6570c4793b1e0ff9719ac">OUT_PORT_NUMB</a></div><div class="ttdeci">#define OUT_PORT_NUMB</div><div class="ttdoc">number of output ports</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00058">mcu_wrapper_conf.h:58</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_gaaed909ba8fd0e4f7a3c2533836dae5d9"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#gaaed909ba8fd0e4f7a3c2533836dae5d9">DISC_STATES_WIDTH</a></div><div class="ttdeci">#define DISC_STATES_WIDTH</div><div class="ttdoc">width of discrete states array</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00059">mcu_wrapper_conf.h:59</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_gac41471250c3d92da182a969e378addfc"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac41471250c3d92da182a969e378addfc">IN_PORT_WIDTH</a></div><div class="ttdeci">#define IN_PORT_WIDTH</div><div class="ttdoc">width of input ports</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00055">mcu_wrapper_conf.h:55</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_gac90b37686b0abfe29835c9632310897a"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac90b37686b0abfe29835c9632310897a">OUT_PORT_WIDTH</a></div><div class="ttdeci">#define OUT_PORT_WIDTH</div><div class="ttdoc">width of output ports</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00057">mcu_wrapper_conf.h:57</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___c_o_n_f_html_gae468832efa6adf5e9a96cabd8f878b47"><div class="ttname"><a href="group___w_r_a_p_p_e_r___c_o_n_f.html#gae468832efa6adf5e9a96cabd8f878b47">NPARAMS</a></div><div class="ttdeci">#define NPARAMS</div><div class="ttdoc">number of input parametrs (only Ts)</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00054">mcu_wrapper_conf.h:54</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_ga0dd07daf338cf84d1aee4bb8b6771720"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">mdlStart</a></div><div class="ttdeci">static void mdlStart(SimStruct *S)</div><div class="ttdoc">Initialize S-Function at start of simulation.</div><div class="ttdef"><b>Definition</b> <a href="#l00153">MCU.c:153</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_ga343acfd8b3b5308d6c94bbf40efbbac5"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">mdlTerminate</a></div><div class="ttdeci">static void mdlTerminate(SimStruct *S)</div><div class="ttdoc">Terminate S-Function at the end of simulation.</div><div class="ttdef"><b>Definition</b> <a href="#l00185">MCU.c:185</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_ga4308a5a20d9c7060391059b1dfce872e"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">mdlInitializeSampleTimes</a></div><div class="ttdeci">static void mdlInitializeSampleTimes(SimStruct *S)</div><div class="ttdoc">Initialize Sample Time of Simulation.</div><div class="ttdef"><b>Definition</b> <a href="#l00167">MCU.c:167</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_ga52f81157111c2436496e1a9630bdce5b"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">mdlOutputs</a></div><div class="ttdeci">static void mdlOutputs(SimStruct *S)</div><div class="ttdoc">Writting outputs of S-Function.</div><div class="ttdef"><b>Definition</b> <a href="#l00055">MCU.c:55</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_gab500fc17ae5e95797926ac770d903b84"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">mdlInitializeSizes</a></div><div class="ttdeci">static void mdlInitializeSizes(SimStruct *S)</div><div class="ttdef"><b>Definition</b> <a href="#l00095">MCU.c:95</a></div></div>
 | 
			
		||||
<div class="ttc" id="agroup___w_r_a_p_p_e_r___s_f_u_n_c_html_gad3d5b495abad2acd2ae68febd1d2c5ec"><div class="ttname"><a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">mdlUpdate</a></div><div class="ttdeci">static void mdlUpdate(SimStruct *S)</div><div class="ttdoc">Update S-Function at every step of simulation.</div><div class="ttdef"><b>Definition</b> <a href="#l00037">MCU.c:37</a></div></div>
 | 
			
		||||
<div class="ttc" id="amcu__wrapper_8c_html_a47b40a9825bcaeb3a1dfba8b27a0be3f"><div class="ttname"><a href="mcu__wrapper_8c.html#a47b40a9825bcaeb3a1dfba8b27a0be3f">SIM_writeOutputs</a></div><div class="ttdeci">void SIM_writeOutputs(SimStruct *S)</div><div class="ttdoc">Формирование выходов S-Function.</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper_8c_source.html#l00122">mcu_wrapper.c:122</a></div></div>
 | 
			
		||||
<div class="ttc" id="amcu__wrapper__conf_8h_html"><div class="ttname"><a href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></div><div class="ttdoc">Заголовочный файл для оболочки МК.</div></div>
 | 
			
		||||
<div class="ttc" id="astruct_s_i_m_____m_c_u_handle_type_def_html_ab19a05224f30fab089c5d5e18fdcca36"><div class="ttname"><a href="struct_s_i_m_____m_c_u_handle_type_def.html#ab19a05224f30fab089c5d5e18fdcca36">SIM__MCUHandleTypeDef::SIM_Sample_Time</a></div><div class="ttdeci">double SIM_Sample_Time</div><div class="ttdoc">sample time of simulation</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00083">mcu_wrapper_conf.h:83</a></div></div>
 | 
			
		||||
<div class="ttc" id="astruct_s_i_m_____m_c_u_handle_type_def_html_ad81f091fd8c1ad2908a5dd5967f3322e"><div class="ttname"><a href="struct_s_i_m_____m_c_u_handle_type_def.html#ad81f091fd8c1ad2908a5dd5967f3322e">SIM__MCUHandleTypeDef::fMCU_Stop</a></div><div class="ttdeci">unsigned fMCU_Stop</div><div class="ttdoc">флаг для выхода из потока программы МК</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00082">mcu_wrapper_conf.h:82</a></div></div>
 | 
			
		||||
<div class="ttc" id="astruct_s_i_m_____m_c_u_handle_type_def_html_af2b1efce882c9bc0926c715c16773afb"><div class="ttname"><a href="struct_s_i_m_____m_c_u_handle_type_def.html#af2b1efce882c9bc0926c715c16773afb">SIM__MCUHandleTypeDef::hMCUThread</a></div><div class="ttdeci">HANDLE hMCUThread</div><div class="ttdoc">Хендл для потока МК</div><div class="ttdef"><b>Definition</b> <a href="mcu__wrapper__conf_8h_source.html#l00079">mcu_wrapper_conf.h:79</a></div></div>
 | 
			
		||||
</div><!-- fragment --></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,84 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/README.md File Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">F:/Work/Projects/MATLAB/matlab_stm_emulate/README.md File Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,94 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Data Structures</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">Data Structures</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
 | 
			
		||||
<table class="directory">
 | 
			
		||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct__cortex__memory.html" target="_self">_cortex_memory</a></td><td class="desc"></td></tr>
 | 
			
		||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct__memory.html" target="_self">_memory</a></td><td class="desc"></td></tr>
 | 
			
		||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_channels___sim.html" target="_self">Channels_Sim</a></td><td class="desc">Структура для моделирования каналов таймера </td></tr>
 | 
			
		||||
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html" target="_self">SIM__MCUHandleTypeDef</a></td><td class="desc">MCU handle Structure definition </td></tr>
 | 
			
		||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_slave_channels.html" target="_self">SlaveChannels</a></td><td class="desc">Структура для управления Слейв Таймерами </td></tr>
 | 
			
		||||
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_t_i_m___sim.html" target="_self">TIM_Sim</a></td><td class="desc">Структура для моделирования таймера </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
</div><!-- directory -->
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 676 B  | 
| 
		 Before Width: | Height: | Size: 635 B  | 
@ -1,99 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Data Structure Index</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">Data Structure Index</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="qindex"><a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter__">_</a></div>
 | 
			
		||||
<div class="classindex">
 | 
			
		||||
<dl class="classindex even">
 | 
			
		||||
<dt class="alphachar"><a id="letter_C" name="letter_C">C</a></dt>
 | 
			
		||||
<dd><a class="el" href="struct_channels___sim.html">Channels_Sim</a></dd></dl>
 | 
			
		||||
<dl class="classindex odd">
 | 
			
		||||
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
 | 
			
		||||
<dd><a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html">SIM__MCUHandleTypeDef</a></dd><dd><a class="el" href="struct_slave_channels.html">SlaveChannels</a></dd></dl>
 | 
			
		||||
<dl class="classindex even">
 | 
			
		||||
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
 | 
			
		||||
<dd><a class="el" href="struct_t_i_m___sim.html">TIM_Sim</a></dd></dl>
 | 
			
		||||
<dl class="classindex odd">
 | 
			
		||||
<dt class="alphachar"><a id="letter__" name="letter__">_</a></dt>
 | 
			
		||||
<dd><a class="el" href="struct__cortex__memory.html">_cortex_memory</a></dd><dd><a class="el" href="struct__memory.html">_memory</a></dd></dl>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,61 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
The code below is based on the Doxygen Awesome project, see
 | 
			
		||||
https://github.com/jothepro/doxygen-awesome-css
 | 
			
		||||
 | 
			
		||||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2021 - 2022 jothepro
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
let clipboard_title = "Copy to clipboard"
 | 
			
		||||
let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
 | 
			
		||||
let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
 | 
			
		||||
let clipboard_successDuration = 1000
 | 
			
		||||
 | 
			
		||||
$(function() {
 | 
			
		||||
  if(navigator.clipboard) {
 | 
			
		||||
    const fragments = document.getElementsByClassName("fragment")
 | 
			
		||||
    for(const fragment of fragments) {
 | 
			
		||||
      const clipboard_div = document.createElement("div")
 | 
			
		||||
      clipboard_div.classList.add("clipboard")
 | 
			
		||||
      clipboard_div.innerHTML = clipboard_icon
 | 
			
		||||
      clipboard_div.title = clipboard_title
 | 
			
		||||
      $(clipboard_div).click(function() {
 | 
			
		||||
        const content = this.parentNode.cloneNode(true)
 | 
			
		||||
        // filter out line number and folded fragments from file listings
 | 
			
		||||
        content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() })
 | 
			
		||||
        let text = content.textContent
 | 
			
		||||
        // remove trailing newlines and trailing spaces from empty lines
 | 
			
		||||
        text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'')
 | 
			
		||||
        navigator.clipboard.writeText(text);
 | 
			
		||||
        this.classList.add("success")
 | 
			
		||||
        this.innerHTML = clipboard_successIcon
 | 
			
		||||
        window.setTimeout(() => { // switch back to normal icon after timeout
 | 
			
		||||
            this.classList.remove("success")
 | 
			
		||||
            this.innerHTML = clipboard_icon
 | 
			
		||||
        }, clipboard_successDuration);
 | 
			
		||||
      })
 | 
			
		||||
      fragment.insertBefore(clipboard_div, fragment.firstChild)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 132 B  | 
@ -1,58 +0,0 @@
 | 
			
		||||
/*!
 | 
			
		||||
 Cookie helper functions
 | 
			
		||||
 Copyright (c) 2023 Dimitri van Heesch
 | 
			
		||||
 Released under MIT license.
 | 
			
		||||
*/
 | 
			
		||||
let Cookie = {
 | 
			
		||||
  cookie_namespace: 'doxygen_',
 | 
			
		||||
 | 
			
		||||
  readSetting(cookie,defVal) {
 | 
			
		||||
    if (window.chrome) {
 | 
			
		||||
      const val = localStorage.getItem(this.cookie_namespace+cookie) ||
 | 
			
		||||
                  sessionStorage.getItem(this.cookie_namespace+cookie);
 | 
			
		||||
      if (val) return val;
 | 
			
		||||
    } else {
 | 
			
		||||
      let myCookie = this.cookie_namespace+cookie+"=";
 | 
			
		||||
      if (document.cookie) {
 | 
			
		||||
        const index = document.cookie.indexOf(myCookie);
 | 
			
		||||
        if (index != -1) {
 | 
			
		||||
          const valStart = index + myCookie.length;
 | 
			
		||||
          let valEnd = document.cookie.indexOf(";", valStart);
 | 
			
		||||
          if (valEnd == -1) {
 | 
			
		||||
            valEnd = document.cookie.length;
 | 
			
		||||
          }
 | 
			
		||||
          return document.cookie.substring(valStart, valEnd);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return defVal;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete
 | 
			
		||||
    if (window.chrome) {
 | 
			
		||||
      if (days==0) {
 | 
			
		||||
        sessionStorage.setItem(this.cookie_namespace+cookie,val);
 | 
			
		||||
      } else {
 | 
			
		||||
        localStorage.setItem(this.cookie_namespace+cookie,val);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      let date = new Date();
 | 
			
		||||
      date.setTime(date.getTime()+(days*24*60*60*1000));
 | 
			
		||||
      const expiration = days!=0 ? "expires="+date.toGMTString()+";" : "";
 | 
			
		||||
      document.cookie = this.cookie_namespace + cookie + "=" +
 | 
			
		||||
                        val + "; SameSite=Lax;" + expiration + "path=/";
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  eraseSetting(cookie) {
 | 
			
		||||
    if (window.chrome) {
 | 
			
		||||
      if (localStorage.getItem(this.cookie_namespace+cookie)) {
 | 
			
		||||
        localStorage.removeItem(this.cookie_namespace+cookie);
 | 
			
		||||
      } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) {
 | 
			
		||||
        sessionStorage.removeItem(this.cookie_namespace+cookie);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      this.writeSetting(cookie,'',-1);
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
@ -1,222 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
The code below is based on the Doxygen Awesome project with some minor modifications
 | 
			
		||||
https://github.com/jothepro/doxygen-awesome-css
 | 
			
		||||
 | 
			
		||||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2021 - 2022 jothepro
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
class DarkModeToggle extends HTMLElement {
 | 
			
		||||
 | 
			
		||||
    static darkmode_cookie_name = ''+'prefers-dark';
 | 
			
		||||
    static lightmode_cookie_name = ''+'prefers-light';
 | 
			
		||||
 | 
			
		||||
    static icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="1em" width="1em"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"></path><rect width="1" height="3" x="12" fill="currentColor" rx=".5"></rect><rect width="1" height="3" x="12" y="21" fill="currentColor" rx=".5"></rect><rect width="1" height="3" x="22" y="10.5" fill="currentColor" rx=".5" transform="rotate(90 22.5 12)"></rect><rect width="1" height="3" x="1" y="10.5" fill="currentColor" rx=".5" transform="rotate(90 1.5 12)"></rect><rect width="1" height="3" x="19" y="3" fill="currentColor" rx=".5" transform="rotate(-135 19.5 4.5)"></rect><rect width="1" height="3" x="19" y="18" fill="currentColor" rx=".5" transform="rotate(135 19.5 19.5)"></rect><rect width="1" height="3" x="4" y="3" fill="currentColor" rx=".5" transform="scale(1 -1) rotate(45 15.37 0)"></rect><rect width="1" height="3" x="4" y="18" fill="currentColor" rx=".5" transform="scale(1 -1) rotate(-45 -42.57 0)"></rect><circle cx="12" cy="12" r="6.5" stroke="currentColor"></circle><path fill="currentColor" stroke="currentColor" d="M12.5 18.48V5.52a6.5 6.5 0 010 12.96z"></path></g></svg>';
 | 
			
		||||
    static title = "Toggle Light/Dark Mode"
 | 
			
		||||
 | 
			
		||||
    static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
 | 
			
		||||
    static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
 | 
			
		||||
 | 
			
		||||
    static _staticConstructor = function() {
 | 
			
		||||
        DarkModeToggle.enableDarkMode(DarkModeToggle.userPreference)
 | 
			
		||||
        // Update the color scheme when the browsers preference changes
 | 
			
		||||
        // without user interaction on the website.
 | 
			
		||||
        window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
 | 
			
		||||
            DarkModeToggle.onSystemPreferenceChanged()
 | 
			
		||||
        })
 | 
			
		||||
        // Update the color scheme when the tab is made visible again.
 | 
			
		||||
        // It is possible that the appearance was changed in another tab 
 | 
			
		||||
        // while this tab was in the background.
 | 
			
		||||
        document.addEventListener("visibilitychange", visibilityState => {
 | 
			
		||||
            if (document.visibilityState === 'visible') {
 | 
			
		||||
                DarkModeToggle.onSystemPreferenceChanged()
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }()
 | 
			
		||||
 | 
			
		||||
    static init() {
 | 
			
		||||
        $(function() {
 | 
			
		||||
            $(document).ready(function() {
 | 
			
		||||
                const toggleButton = document.createElement('dark-mode-toggle')
 | 
			
		||||
                toggleButton.title = DarkModeToggle.title
 | 
			
		||||
                toggleButton.innerHTML = DarkModeToggle.icon
 | 
			
		||||
                toggleButton.tabIndex = 0;
 | 
			
		||||
 | 
			
		||||
                function addButton() {
 | 
			
		||||
                  const titleArea = document.getElementById("titlearea");
 | 
			
		||||
                  const searchBox = document.getElementById("MSearchBox");
 | 
			
		||||
                  const mainMenu  = document.getElementById("main-menu");
 | 
			
		||||
                  const navRow1   = document.getElementById("navrow1");
 | 
			
		||||
                  let mainMenuVisible = false;
 | 
			
		||||
                  if (mainMenu) {
 | 
			
		||||
                    const menuStyle = window.getComputedStyle(mainMenu);
 | 
			
		||||
                    mainMenuVisible = menuStyle.display!=='none'
 | 
			
		||||
                  }
 | 
			
		||||
                  const searchBoxPos1 = document.getElementById("searchBoxPos1");
 | 
			
		||||
                  if (searchBox) { // (1) search box visible
 | 
			
		||||
                    searchBox.parentNode.appendChild(toggleButton)
 | 
			
		||||
                  } else if (navRow1) { // (2) no search box, static menu bar
 | 
			
		||||
                    const li = document.createElement('li');
 | 
			
		||||
                    li.style = 'float: right;'
 | 
			
		||||
                    li.appendChild(toggleButton);
 | 
			
		||||
                    toggleButton.style = 'width: 24px; height: 25px; padding-top: 11px; float: right;';
 | 
			
		||||
                    const row = document.querySelector('#navrow1 > ul:first-of-type');
 | 
			
		||||
                    row.appendChild(li)
 | 
			
		||||
                  } else if (mainMenu && mainMenuVisible) { // (3) no search box + dynamic menu bar expanded
 | 
			
		||||
                    const li = document.createElement('li');
 | 
			
		||||
                    li.style = 'float: right;'
 | 
			
		||||
                    li.appendChild(toggleButton);
 | 
			
		||||
                    toggleButton.style = 'width: 14px; height: 36px; padding-top: 10px; float: right;';
 | 
			
		||||
                    mainMenu.appendChild(li)
 | 
			
		||||
                  } else if (searchBoxPos1) { // (4) no search box + dynamic menu bar collapsed
 | 
			
		||||
                    toggleButton.style = 'width: 24px; height: 36px; padding-top: 10px; float: right;';
 | 
			
		||||
                    searchBoxPos1.style = 'top: 0px;'
 | 
			
		||||
                    searchBoxPos1.appendChild(toggleButton);
 | 
			
		||||
                  } else if (titleArea) { // (5) no search box and no navigation tabs
 | 
			
		||||
                    toggleButton.style = 'width: 24px; height: 24px; position: absolute; right: 0px; top: 34px;';
 | 
			
		||||
                    titleArea.append(toggleButton);
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $(document).ready(() => addButton());
 | 
			
		||||
                $(window).resize(() => addButton());
 | 
			
		||||
                let inFocus = false;
 | 
			
		||||
                $(document).focusin(() => inFocus = true);
 | 
			
		||||
                $(document).focusout(() => inFocus = false);
 | 
			
		||||
                $(document).keyup(function(e) {
 | 
			
		||||
                    if (e.keyCode==27 && !inFocus) { // escape key maps to keycode `27`
 | 
			
		||||
                       e.stopPropagation();
 | 
			
		||||
                       DarkModeToggle.userPreference = !DarkModeToggle.userPreference
 | 
			
		||||
                   }
 | 
			
		||||
                })
 | 
			
		||||
                DarkModeToggle.setDarkModeVisibility(DarkModeToggle.darkModeEnabled)
 | 
			
		||||
            })
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        super();
 | 
			
		||||
        this.onclick=this.toggleDarkMode
 | 
			
		||||
        this.onkeypress=function(e){if (e.keyCode==13) { this.toggleDarkMode(); }};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns `true` for dark-mode, `false` for light-mode system preference
 | 
			
		||||
     */
 | 
			
		||||
    static get systemPreference() {
 | 
			
		||||
        return window.matchMedia('(prefers-color-scheme: dark)').matches
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static get prefersDarkModeInLightMode() {
 | 
			
		||||
        return Cookie.readSetting(DarkModeToggle.darkmode_cookie_name,'0')=='1';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static set prefersDarkModeInLightMode(preference) {
 | 
			
		||||
        if (preference) {
 | 
			
		||||
          Cookie.writeSetting(DarkModeToggle.darkmode_cookie_name,'1');
 | 
			
		||||
        } else {
 | 
			
		||||
          Cookie.eraseSetting(DarkModeToggle.darkmode_cookie_name);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static get prefersLightModeInDarkMode() {
 | 
			
		||||
        return Cookie.readSetting(DarkModeToggle.lightmode_cookie_name,'0')=='1'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static set prefersLightModeInDarkMode(preference) {
 | 
			
		||||
        if (preference) {
 | 
			
		||||
          Cookie.writeSetting(DarkModeToggle.lightmode_cookie_name,'1');
 | 
			
		||||
        } else {
 | 
			
		||||
          Cookie.eraseSetting(DarkModeToggle.lightmode_cookie_name);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns `true` for dark-mode, `false` for light-mode user preference
 | 
			
		||||
     */
 | 
			
		||||
    static get userPreference() {
 | 
			
		||||
        return (!DarkModeToggle.systemPreference && DarkModeToggle.prefersDarkModeInLightMode) ||
 | 
			
		||||
        (DarkModeToggle.systemPreference && !DarkModeToggle.prefersLightModeInDarkMode)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static set userPreference(userPreference) {
 | 
			
		||||
        DarkModeToggle.darkModeEnabled = userPreference
 | 
			
		||||
        if (!userPreference) {
 | 
			
		||||
            if (DarkModeToggle.systemPreference) {
 | 
			
		||||
                DarkModeToggle.prefersLightModeInDarkMode = true
 | 
			
		||||
            } else {
 | 
			
		||||
                DarkModeToggle.prefersDarkModeInLightMode = false
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            if (!DarkModeToggle.systemPreference) {
 | 
			
		||||
                DarkModeToggle.prefersDarkModeInLightMode = true
 | 
			
		||||
            } else {
 | 
			
		||||
                DarkModeToggle.prefersLightModeInDarkMode = false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        DarkModeToggle.onUserPreferenceChanged()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static setDarkModeVisibility(enable) {
 | 
			
		||||
        let darkModeStyle, lightModeStyle;
 | 
			
		||||
        if(enable) {
 | 
			
		||||
          darkModeStyle  = 'inline-block';
 | 
			
		||||
          lightModeStyle = 'none'
 | 
			
		||||
        } else {
 | 
			
		||||
          darkModeStyle  = 'none';
 | 
			
		||||
          lightModeStyle = 'inline-block'
 | 
			
		||||
        }
 | 
			
		||||
        document.querySelectorAll('.dark-mode-visible' ).forEach(el => el.style.display = darkModeStyle);
 | 
			
		||||
        document.querySelectorAll('.light-mode-visible').forEach(el => el.style.display = lightModeStyle);
 | 
			
		||||
    }
 | 
			
		||||
    static enableDarkMode(enable) {
 | 
			
		||||
        if(enable) {
 | 
			
		||||
            DarkModeToggle.darkModeEnabled = true
 | 
			
		||||
            document.documentElement.classList.add("dark-mode")
 | 
			
		||||
            document.documentElement.classList.remove("light-mode")
 | 
			
		||||
        } else {
 | 
			
		||||
            DarkModeToggle.darkModeEnabled = false
 | 
			
		||||
            document.documentElement.classList.remove("dark-mode")
 | 
			
		||||
            document.documentElement.classList.add("light-mode")
 | 
			
		||||
        }
 | 
			
		||||
        DarkModeToggle.setDarkModeVisibility(enable)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static onSystemPreferenceChanged() {
 | 
			
		||||
        DarkModeToggle.darkModeEnabled = DarkModeToggle.userPreference
 | 
			
		||||
        DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static onUserPreferenceChanged() {
 | 
			
		||||
        DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    toggleDarkMode() {
 | 
			
		||||
        DarkModeToggle.userPreference = !DarkModeToggle.userPreference
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
customElements.define("dark-mode-toggle", DarkModeToggle);
 | 
			
		||||
 | 
			
		||||
DarkModeToggle.init();
 | 
			
		||||
@ -1,85 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab -> MCU_Wrapper Relation</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<h3>MCU_STM32F4xx_Matlab → MCU_Wrapper Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in MCU_STM32F4xx_Matlab</th><th class="dirtab">Includes file in MCU_Wrapper</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__conf_8c.html">stm32f4xx_matlab_conf.c</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a> / <a class="el" href="stm32f4xx__matlab__gpio_8h.html">stm32f4xx_matlab_gpio.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a> / <a class="el" href="stm32f4xx__matlab__rcc_8h.html">stm32f4xx_matlab_rcc.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a> / <a class="el" href="stm32f4xx__matlab__tim_8h.html">stm32f4xx_matlab_tim.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr></table></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,85 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab -> STM32F4xx_SIMULINK Relation</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<h3>MCU_STM32F4xx_Matlab → STM32F4xx_SIMULINK Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in MCU_STM32F4xx_Matlab</th><th class="dirtab">Includes file in MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__conf_8h.html">stm32f4xx_matlab_conf.h</a></td><td class="dirtab"><a class="el" href="stm32f4xx__matlab__gpio_8h.html">stm32f4xx_matlab_gpio.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__conf_8h.html">stm32f4xx_matlab_conf.h</a></td><td class="dirtab"><a class="el" href="stm32f4xx__matlab__rcc_8h.html">stm32f4xx_matlab_rcc.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__conf_8h.html">stm32f4xx_matlab_conf.h</a></td><td class="dirtab"><a class="el" href="stm32f4xx__matlab__tim_8h.html">stm32f4xx_matlab_tim.h</a></td></tr></table></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,85 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper -> MCU_STM32F4xx_Matlab Relation</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_5bc05bcf5fafad3c8688aee149210d07.html">MCU_Wrapper</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<h3>MCU_Wrapper → MCU_STM32F4xx_Matlab Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in MCU_Wrapper</th><th class="dirtab">Includes file in MCU_STM32F4xx_Matlab</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td><td class="dirtab"><a class="el" href="stm32f4xx__matlab__conf_8h.html">stm32f4xx_matlab_conf.h</a></td></tr></table></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,85 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK -> MCU_Wrapper Relation</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li><li class="navelem"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<h3>STM32F4xx_SIMULINK → MCU_Wrapper Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK</th><th class="dirtab">Includes file in MCU_Wrapper</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__gpio_8h.html">stm32f4xx_matlab_gpio.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__rcc_8h.html">stm32f4xx_matlab_rcc.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="stm32f4xx__matlab__tim_8h.html">stm32f4xx_matlab_tim.h</a></td><td class="dirtab"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr></table></div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,106 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers/CMSIS Directory Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li><li class="navelem"><a class="el" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html">Drivers</a></li><li class="navelem"><a class="el" href="dir_30f2d142c55236add84215456f0e2b1c.html">CMSIS</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">CMSIS Directory Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Directory dependency graph for CMSIS:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="dir_30f2d142c55236add84215456f0e2b1c_dep.png" border="0" usemap="#adir__30f2d142c55236add84215456f0e2b1c__dep" alt="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers/CMSIS"/></div>
 | 
			
		||||
<map name="adir__30f2d142c55236add84215456f0e2b1c__dep" id="adir__30f2d142c55236add84215456f0e2b1c__dep">
 | 
			
		||||
<area shape="rect" href="dir_30f2d142c55236add84215456f0e2b1c.html" title="CMSIS" alt="" coords="26,53,91,80"/>
 | 
			
		||||
<area shape="rect" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" title="Drivers" alt="" coords="16,16,101,91"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
 | 
			
		||||
Files</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f407xx__matlab__memory_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f407xx__matlab__memory_8h.html">stm32f407xx_matlab_memory.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f407xx__matlab__memory_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для определения памяти МК STM32F4xx. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers/CMSIS" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers/CMSIS">
 | 
			
		||||
<area shape="rect" id="node1" href="dir_30f2d142c55236add84215456f0e2b1c.html" title="CMSIS" alt="" coords="26,53,91,80"/>
 | 
			
		||||
<area shape="rect" id="clust1" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" title="Drivers" alt="" coords="16,16,101,91"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
c709a31c7491ec3efb3f17707f6c67ce
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1005 B  | 
@ -1,124 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper Directory Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_5bc05bcf5fafad3c8688aee149210d07.html">MCU_Wrapper</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">MCU_Wrapper Directory Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
 | 
			
		||||
<p><p><b> Папка с исходным кодом оболочки МК. </b> </p>
 | 
			
		||||
 
 | 
			
		||||
<a href="#details">More...</a></p>
 | 
			
		||||
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Directory dependency graph for MCU_Wrapper:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="dir_5bc05bcf5fafad3c8688aee149210d07_dep.png" border="0" usemap="#adir__5bc05bcf5fafad3c8688aee149210d07__dep" alt="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper"/></div>
 | 
			
		||||
<map name="adir__5bc05bcf5fafad3c8688aee149210d07__dep" id="adir__5bc05bcf5fafad3c8688aee149210d07__dep">
 | 
			
		||||
<area shape="rect" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="40,5,147,32"/>
 | 
			
		||||
<area shape="rect" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="5,80,182,107"/>
 | 
			
		||||
<area shape="poly" href="dir_000003_000002.html" alt="" coords="96,33,96,64,91,64,91,33"/>
 | 
			
		||||
<area shape="rect" href="dir_000003_000002.html" title="1" alt="" coords="98,53,105,69"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
 | 
			
		||||
Files</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="_m_c_u_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="_m_c_u_8c.html">MCU.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:_m_c_u_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код S-Function. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="mcu__wrapper_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mcu__wrapper_8c.html">mcu_wrapper.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:mcu__wrapper_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код оболочки МК. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="mcu__wrapper__conf_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mcu__wrapper__conf_8h.html">mcu_wrapper_conf.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:mcu__wrapper__conf_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для оболочки МК. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="run__mex_8bat_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="run__mex_8bat.html">run_mex.bat</a></td></tr>
 | 
			
		||||
<tr class="memdesc:run__mex_8bat"><td class="mdescLeft"> </td><td class="mdescRight">Батник для компиляции оболочки МК. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 | 
			
		||||
<p><b> Папка с исходным кодом оболочки МК. </b> </p>
 | 
			
		||||
<p>В этой папке содержаться оболочка(англ. wrapper) для запуска и контроля эмуляции микроконтроллеров в MATLAB (любого МК, не только STM). Оболочка представляет собой S-Function - блок в Simulink, который работает по скомпилированому коду. Компиляция происходит с помощью MSVC-компилятора. </p>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,6 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_Wrapper">
 | 
			
		||||
<area shape="rect" id="node1" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="40,5,147,32"/>
 | 
			
		||||
<area shape="rect" id="node2" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="5,80,182,107"/>
 | 
			
		||||
<area shape="poly" id="edge1" href="dir_000003_000002.html" alt="" coords="96,33,96,64,91,64,91,33"/>
 | 
			
		||||
<area shape="rect" id="edge1-headlabel" href="dir_000003_000002.html" title="1" alt="" coords="98,53,105,69"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
8968987f0c27ecbf57ecf6f640d2c2e1
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
@ -1,135 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab Directory Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">MCU_STM32F4xx_Matlab Directory Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
 | 
			
		||||
<p><p><b> Папка с исходным кодом для симуляции МК. </b> </p>
 | 
			
		||||
 
 | 
			
		||||
<a href="#details">More...</a></p>
 | 
			
		||||
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Directory dependency graph for MCU_STM32F4xx_Matlab:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="dir_9609623a411adcd586e91350a30aa9d5_dep.png" border="0" usemap="#adir__9609623a411adcd586e91350a30aa9d5__dep" alt="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab"/></div>
 | 
			
		||||
<map name="adir__9609623a411adcd586e91350a30aa9d5__dep" id="adir__9609623a411adcd586e91350a30aa9d5__dep">
 | 
			
		||||
<area shape="rect" href="dir_df8c7f866fb3beabf246989867a8aa90.html" title="Папка с исходным кодом симулятора МК." alt="" coords="29,101,192,128"/>
 | 
			
		||||
<area shape="poly" href="dir_000002_000004.html" alt="" coords="117,53,115,86,110,85,111,53"/>
 | 
			
		||||
<area shape="rect" href="dir_000002_000004.html" title="3" alt="" coords="117,75,124,91"/>
 | 
			
		||||
<area shape="rect" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="116,176,223,203"/>
 | 
			
		||||
<area shape="poly" href="dir_000002_000003.html" alt="" coords="148,51,180,70,195,84,206,100,211,117,208,135,192,166,188,163,203,133,206,117,202,102,191,87,177,75,145,56"/>
 | 
			
		||||
<area shape="rect" href="dir_000002_000003.html" title="4" alt="" coords="195,159,202,175"/>
 | 
			
		||||
<area shape="rect" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" title="Drivers" alt="" coords="227,27,290,53"/>
 | 
			
		||||
<area shape="poly" href="dir_000004_000003.html" alt="" coords="123,127,152,162,148,165,119,130"/>
 | 
			
		||||
<area shape="rect" href="dir_000004_000003.html" title="3" alt="" coords="151,148,158,164"/>
 | 
			
		||||
<area shape="rect" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,301,139"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
 | 
			
		||||
Directories</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span> </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html">Drivers</a></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span> </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a></td></tr>
 | 
			
		||||
<tr class="memdesc:dir_df8c7f866fb3beabf246989867a8aa90"><td class="mdescLeft"> </td><td class="mdescRight"><b> Папка с исходным кодом симулятора МК. </b> <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table><table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
 | 
			
		||||
Files</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__conf_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__conf_8c.html">stm32f4xx_matlab_conf.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__conf_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код для конфигурации симулятора МК. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__conf_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__conf_8h.html">stm32f4xx_matlab_conf.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__conf_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для конфигурации симулятора МК. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 | 
			
		||||
<p><b> Папка с исходным кодом для симуляции МК. </b> </p>
 | 
			
		||||
<p>В данной папке содержаться модули для симуляции МК в MATLAB:</p><ul>
 | 
			
		||||
<li>Драйверы МК - они переделаны так, чтобы запускаться и работать в MATLAB.</li>
 | 
			
		||||
<li>Симулятор МК - он моделирует работу нужной периферии в MATLAB </li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab">
 | 
			
		||||
<area shape="rect" id="node3" href="dir_df8c7f866fb3beabf246989867a8aa90.html" title="Папка с исходным кодом симулятора МК." alt="" coords="29,101,192,128"/>
 | 
			
		||||
<area shape="poly" id="edge2" href="dir_000002_000004.html" alt="" coords="117,53,115,86,110,85,111,53"/>
 | 
			
		||||
<area shape="rect" id="edge2-headlabel" href="dir_000002_000004.html" title="3" alt="" coords="117,75,124,91"/>
 | 
			
		||||
<area shape="rect" id="node4" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="116,176,223,203"/>
 | 
			
		||||
<area shape="poly" id="edge1" href="dir_000002_000003.html" alt="" coords="148,51,180,70,195,84,206,100,211,117,208,135,192,166,188,163,203,133,206,117,202,102,191,87,177,75,145,56"/>
 | 
			
		||||
<area shape="rect" id="edge1-headlabel" href="dir_000002_000003.html" title="4" alt="" coords="195,159,202,175"/>
 | 
			
		||||
<area shape="rect" id="node2" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" title="Drivers" alt="" coords="227,27,290,53"/>
 | 
			
		||||
<area shape="poly" id="edge3" href="dir_000004_000003.html" alt="" coords="123,127,152,162,148,165,119,130"/>
 | 
			
		||||
<area shape="rect" id="edge3-headlabel" href="dir_000004_000003.html" title="3" alt="" coords="151,148,158,164"/>
 | 
			
		||||
<area shape="rect" id="clust1" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,301,139"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
e6f61ee8219fbd3292fce4ebb5612313
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 6.0 KiB  | 
@ -1,106 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers Directory Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li><li class="navelem"><a class="el" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html">Drivers</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">Drivers Directory Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Directory dependency graph for Drivers:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="dir_afe59ba76eea2f90e4e37233dbf4f6f2_dep.png" border="0" usemap="#adir__afe59ba76eea2f90e4e37233dbf4f6f2__dep" alt="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers"/></div>
 | 
			
		||||
<map name="adir__afe59ba76eea2f90e4e37233dbf4f6f2__dep" id="adir__afe59ba76eea2f90e4e37233dbf4f6f2__dep">
 | 
			
		||||
<area shape="rect" href="dir_30f2d142c55236add84215456f0e2b1c.html" title="CMSIS" alt="" coords="125,64,190,91"/>
 | 
			
		||||
<area shape="rect" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" alt="" coords="27,53,200,101"/>
 | 
			
		||||
<area shape="rect" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,211,112"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
 | 
			
		||||
Directories</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span> </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_30f2d142c55236add84215456f0e2b1c.html">CMSIS</a></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/Drivers">
 | 
			
		||||
<area shape="rect" id="node2" href="dir_30f2d142c55236add84215456f0e2b1c.html" title="CMSIS" alt="" coords="125,64,190,91"/>
 | 
			
		||||
<area shape="rect" id="clust2" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" alt="" coords="27,53,200,101"/>
 | 
			
		||||
<area shape="rect" id="clust1" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,211,112"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
8818a3371f5e32165b9e177200a07e98
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
@ -1,138 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK Directory Reference</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div id="nav-path" class="navpath">
 | 
			
		||||
  <ul>
 | 
			
		||||
<li class="navelem"><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html">MCU_STM32F4xx_Matlab</a></li><li class="navelem"><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html">STM32F4xx_SIMULINK</a></li>  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">STM32F4xx_SIMULINK Directory Reference</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
 | 
			
		||||
<p><p><b> Папка с исходным кодом симулятора МК. </b> </p>
 | 
			
		||||
 
 | 
			
		||||
<a href="#details">More...</a></p>
 | 
			
		||||
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
 | 
			
		||||
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Directory dependency graph for STM32F4xx_SIMULINK:</div>
 | 
			
		||||
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
 | 
			
		||||
</div>
 | 
			
		||||
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 | 
			
		||||
<div class="center"><img src="dir_df8c7f866fb3beabf246989867a8aa90_dep.png" border="0" usemap="#adir__df8c7f866fb3beabf246989867a8aa90__dep" alt="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK"/></div>
 | 
			
		||||
<map name="adir__df8c7f866fb3beabf246989867a8aa90__dep" id="adir__df8c7f866fb3beabf246989867a8aa90__dep">
 | 
			
		||||
<area shape="rect" href="dir_df8c7f866fb3beabf246989867a8aa90.html" title="Папка с исходным кодом симулятора МК." alt="" coords="26,53,190,80"/>
 | 
			
		||||
<area shape="rect" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="54,128,162,155"/>
 | 
			
		||||
<area shape="poly" href="dir_000004_000003.html" alt="" coords="111,81,111,112,105,112,105,81"/>
 | 
			
		||||
<area shape="rect" href="dir_000004_000003.html" title="3" alt="" coords="113,101,120,117"/>
 | 
			
		||||
<area shape="rect" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,200,91"/>
 | 
			
		||||
</map>
 | 
			
		||||
</div>
 | 
			
		||||
<table class="memberdecls">
 | 
			
		||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
 | 
			
		||||
Files</h2></td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__gpio_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__gpio_8c.html">stm32f4xx_matlab_gpio.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__gpio_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код симулятора портов. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__gpio_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__gpio_8h.html">stm32f4xx_matlab_gpio.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__gpio_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для симулятора портов. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__rcc_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__rcc_8c.html">stm32f4xx_matlab_rcc.c</a></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__rcc_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__rcc_8h.html">stm32f4xx_matlab_rcc.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__rcc_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для симулятора клока. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__tim_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__tim_8c.html">stm32f4xx_matlab_tim.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__tim_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код симулятора таймеров. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__matlab__tim_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__matlab__tim_8h.html">stm32f4xx_matlab_tim.h</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__matlab__tim_8h"><td class="mdescLeft"> </td><td class="mdescRight">Заголовочный файл для симулятора таймеров. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="stm32f4xx__periph__registers_8c_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="stm32f4xx__periph__registers_8c.html">stm32f4xx_periph_registers.c</a></td></tr>
 | 
			
		||||
<tr class="memdesc:stm32f4xx__periph__registers_8c"><td class="mdescLeft"> </td><td class="mdescRight">Исходный код с переменными регистров периферии. <br /></td></tr>
 | 
			
		||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 | 
			
		||||
<p><b> Папка с исходным кодом симулятора МК. </b> </p>
 | 
			
		||||
<p>В этой папке содержаться файлы для эмуляции периферии STM32 в MATLAB. Структура файлов такая же, как в библиотеке HAL:</p><ul>
 | 
			
		||||
<li>название серии МК, который эмулируется (stm32f4xx),</li>
 | 
			
		||||
<li>идентификатор, что это для MATLAB (matlab),</li>
 | 
			
		||||
<li>периферия, функции для эмуляции которой содержит конкретный файл (gpio, tim).</li>
 | 
			
		||||
</ul>
 | 
			
		||||
<p>Пример: "stm32f4xx_matlab_tim.c/.h" </p>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
<map id="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK" name="F:/Work/Projects/MATLAB/matlab_stm_emulate/MCU_STM32F4xx_Matlab/STM32F4xx_SIMULINK">
 | 
			
		||||
<area shape="rect" id="node1" href="dir_df8c7f866fb3beabf246989867a8aa90.html" title="Папка с исходным кодом симулятора МК." alt="" coords="26,53,190,80"/>
 | 
			
		||||
<area shape="rect" id="node2" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" title="Папка с исходным кодом оболочки МК." alt="" coords="54,128,162,155"/>
 | 
			
		||||
<area shape="poly" id="edge1" href="dir_000004_000003.html" alt="" coords="111,81,111,112,105,112,105,81"/>
 | 
			
		||||
<area shape="rect" id="edge1-headlabel" href="dir_000004_000003.html" title="3" alt="" coords="113,101,120,117"/>
 | 
			
		||||
<area shape="rect" id="clust1" href="dir_9609623a411adcd586e91350a30aa9d5.html" title="Папка с исходным кодом для симуляции МК." alt="" coords="16,16,200,91"/>
 | 
			
		||||
</map>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
3dd5c2b9029a39c4bd6a040ec2534660
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
@ -1,12 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#4665A2">
 | 
			
		||||
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#D8DFEE;stroke-width:0">
 | 
			
		||||
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
 | 
			
		||||
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
@ -1,12 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#C4CFE5">
 | 
			
		||||
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#4665A2;stroke-width:0">
 | 
			
		||||
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
 | 
			
		||||
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB  | 
@ -1,160 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<title>Validator / crawler helper</title>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<a href="stm32f407xx__matlab__memory_8h_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__conf_8c_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__conf_8h_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__gpio_8c_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__gpio_8h_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__rcc_8c_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__rcc_8h_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__tim_8c_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__tim_8h_source.html"/>
 | 
			
		||||
<a href="stm32f4xx__periph__registers_8c_source.html"/>
 | 
			
		||||
<a href="_m_c_u_8c_source.html"/>
 | 
			
		||||
<a href="mcu__wrapper_8c_source.html"/>
 | 
			
		||||
<a href="mcu__wrapper__conf_8h_source.html"/>
 | 
			
		||||
<a href="run__mex_8bat_source.html"/>
 | 
			
		||||
<a href="mexing_8m_source.html"/>
 | 
			
		||||
<a href="stm32f407xx__matlab__memory_8h.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__conf_8c.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__conf_8h.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__gpio_8c.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__gpio_8h.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__rcc_8c.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__rcc_8h.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__tim_8c.html"/>
 | 
			
		||||
<a href="stm32f4xx__matlab__tim_8h.html"/>
 | 
			
		||||
<a href="stm32f4xx__periph__registers_8c.html"/>
 | 
			
		||||
<a href="_m_c_u_8c.html"/>
 | 
			
		||||
<a href="mcu__wrapper_8c.html"/>
 | 
			
		||||
<a href="mcu__wrapper__conf_8h.html"/>
 | 
			
		||||
<a href="run__mex_8bat.html"/>
 | 
			
		||||
<a href="mexing_8m.html"/>
 | 
			
		||||
<a href="_r_e_a_d_m_e_8md.html"/>
 | 
			
		||||
<a href="group___m_c_u___w_r_a_p_p_e_r.html"/>
 | 
			
		||||
<a href="group___c_m_s_i_s__core__base.html"/>
 | 
			
		||||
<a href="group___w_r_a_p_p_e_r___s_f_u_n_c.html"/>
 | 
			
		||||
<a href="group___w_r_a_p_p_e_r___c_o_n_f.html"/>
 | 
			
		||||
<a href="group___s_t_m___s_i_m_u_l_a_t_i_o_n.html"/>
 | 
			
		||||
<a href="group___m_a_i_n___s_i_m_u_l_a_t_o_r.html"/>
 | 
			
		||||
<a href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html"/>
 | 
			
		||||
<a href="group___peripheral__memory__map.html"/>
 | 
			
		||||
<a href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html"/>
 | 
			
		||||
<a href="group___r_c_c___s_i_m_u_l_a_t_o_r.html"/>
 | 
			
		||||
<a href="group___t_i_m___s_i_m_u_l_a_t_o_r.html"/>
 | 
			
		||||
<a href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html"/>
 | 
			
		||||
<a href="struct__cortex__memory.html"/>
 | 
			
		||||
<a href="struct__memory.html"/>
 | 
			
		||||
<a href="struct_channels___sim.html"/>
 | 
			
		||||
<a href="struct_s_i_m_____m_c_u_handle_type_def.html"/>
 | 
			
		||||
<a href="struct_slave_channels.html"/>
 | 
			
		||||
<a href="struct_t_i_m___sim.html"/>
 | 
			
		||||
<a href="graph_legend.html"/>
 | 
			
		||||
<a href="dir_30f2d142c55236add84215456f0e2b1c.html"/>
 | 
			
		||||
<a href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html"/>
 | 
			
		||||
<a href="dir_9609623a411adcd586e91350a30aa9d5.html"/>
 | 
			
		||||
<a href="dir_5bc05bcf5fafad3c8688aee149210d07.html"/>
 | 
			
		||||
<a href="dir_df8c7f866fb3beabf246989867a8aa90.html"/>
 | 
			
		||||
<a href="dir_000002_000003.html"/>
 | 
			
		||||
<a href="dir_000002_000004.html"/>
 | 
			
		||||
<a href="dir_000004_000003.html"/>
 | 
			
		||||
<a href="dir_000003_000002.html"/>
 | 
			
		||||
<a href="index.html"/>
 | 
			
		||||
<a href="doxygen_crawl.html"/>
 | 
			
		||||
<a href="topics.html"/>
 | 
			
		||||
<a href="annotated.html"/>
 | 
			
		||||
<a href="classes.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="functions_vars.html"/>
 | 
			
		||||
<a href="files.html"/>
 | 
			
		||||
<a href="globals.html"/>
 | 
			
		||||
<a href="globals_a.html"/>
 | 
			
		||||
<a href="globals_b.html"/>
 | 
			
		||||
<a href="globals_c.html"/>
 | 
			
		||||
<a href="globals_d.html"/>
 | 
			
		||||
<a href="globals_e.html"/>
 | 
			
		||||
<a href="globals_f.html"/>
 | 
			
		||||
<a href="globals_g.html"/>
 | 
			
		||||
<a href="globals_h.html"/>
 | 
			
		||||
<a href="globals_i.html"/>
 | 
			
		||||
<a href="globals_m.html"/>
 | 
			
		||||
<a href="globals_n.html"/>
 | 
			
		||||
<a href="globals_o.html"/>
 | 
			
		||||
<a href="globals_p.html"/>
 | 
			
		||||
<a href="globals_r.html"/>
 | 
			
		||||
<a href="globals_s.html"/>
 | 
			
		||||
<a href="globals_t.html"/>
 | 
			
		||||
<a href="globals_u.html"/>
 | 
			
		||||
<a href="globals_w.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_func.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_vars.html"/>
 | 
			
		||||
<a href="globals_type.html"/>
 | 
			
		||||
<a href="globals_type.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
<a href="globals_defs.html"/>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,201 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 @licstart  The following is the entire license notice for the JavaScript code in this file.
 | 
			
		||||
 | 
			
		||||
 The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 1997-2020 by Dimitri van Heesch
 | 
			
		||||
 | 
			
		||||
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 | 
			
		||||
 and associated documentation files (the "Software"), to deal in the Software without restriction,
 | 
			
		||||
 including without limitation the rights to use, copy, modify, merge, publish, distribute,
 | 
			
		||||
 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
 furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
 The above copyright notice and this permission notice shall be included in all copies or
 | 
			
		||||
 substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 | 
			
		||||
 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
			
		||||
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 | 
			
		||||
 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
 @licend  The above is the entire license notice for the JavaScript code in this file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
let dynsection = {
 | 
			
		||||
 | 
			
		||||
  // helper function
 | 
			
		||||
  updateStripes : function() {
 | 
			
		||||
    $('table.directory tr').
 | 
			
		||||
      removeClass('even').filter(':visible:even').addClass('even');
 | 
			
		||||
    $('table.directory tr').
 | 
			
		||||
      removeClass('odd').filter(':visible:odd').addClass('odd');
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  toggleVisibility : function(linkObj) {
 | 
			
		||||
    const base = $(linkObj).attr('id');
 | 
			
		||||
    const summary = $('#'+base+'-summary');
 | 
			
		||||
    const content = $('#'+base+'-content');
 | 
			
		||||
    const trigger = $('#'+base+'-trigger');
 | 
			
		||||
    const src=$(trigger).attr('src');
 | 
			
		||||
    if (content.is(':visible')===true) {
 | 
			
		||||
      content.hide();
 | 
			
		||||
      summary.show();
 | 
			
		||||
      $(linkObj).addClass('closed').removeClass('opened');
 | 
			
		||||
      $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
 | 
			
		||||
    } else {
 | 
			
		||||
      content.show();
 | 
			
		||||
      summary.hide();
 | 
			
		||||
      $(linkObj).removeClass('closed').addClass('opened');
 | 
			
		||||
      $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  toggleLevel : function(level) {
 | 
			
		||||
    $('table.directory tr').each(function() {
 | 
			
		||||
      const l = this.id.split('_').length-1;
 | 
			
		||||
      const i = $('#img'+this.id.substring(3));
 | 
			
		||||
      const a = $('#arr'+this.id.substring(3));
 | 
			
		||||
      if (l<level+1) {
 | 
			
		||||
        i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
 | 
			
		||||
        a.html('▼');
 | 
			
		||||
        $(this).show();
 | 
			
		||||
      } else if (l==level+1) {
 | 
			
		||||
        i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
 | 
			
		||||
        a.html('►');
 | 
			
		||||
        $(this).show();
 | 
			
		||||
      } else {
 | 
			
		||||
        $(this).hide();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    this.updateStripes();
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  toggleFolder : function(id) {
 | 
			
		||||
    // the clicked row
 | 
			
		||||
    const currentRow = $('#row_'+id);
 | 
			
		||||
 | 
			
		||||
    // all rows after the clicked row
 | 
			
		||||
    const rows = currentRow.nextAll("tr");
 | 
			
		||||
 | 
			
		||||
    const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
 | 
			
		||||
 | 
			
		||||
    // only match elements AFTER this one (can't hide elements before)
 | 
			
		||||
    const childRows = rows.filter(function() { return this.id.match(re); });
 | 
			
		||||
 | 
			
		||||
    // first row is visible we are HIDING
 | 
			
		||||
    if (childRows.filter(':first').is(':visible')===true) {
 | 
			
		||||
      // replace down arrow by right arrow for current row
 | 
			
		||||
      const currentRowSpans = currentRow.find("span");
 | 
			
		||||
      currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
 | 
			
		||||
      currentRowSpans.filter(".arrow").html('►');
 | 
			
		||||
      rows.filter("[id^=row_"+id+"]").hide(); // hide all children
 | 
			
		||||
    } else { // we are SHOWING
 | 
			
		||||
      // replace right arrow by down arrow for current row
 | 
			
		||||
      const currentRowSpans = currentRow.find("span");
 | 
			
		||||
      currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
 | 
			
		||||
      currentRowSpans.filter(".arrow").html('▼');
 | 
			
		||||
      // replace down arrows by right arrows for child rows
 | 
			
		||||
      const childRowsSpans = childRows.find("span");
 | 
			
		||||
      childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
 | 
			
		||||
      childRowsSpans.filter(".arrow").html('►');
 | 
			
		||||
      childRows.show(); //show all children
 | 
			
		||||
    }
 | 
			
		||||
    this.updateStripes();
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  toggleInherit : function(id) {
 | 
			
		||||
    const rows = $('tr.inherit.'+id);
 | 
			
		||||
    const img = $('tr.inherit_header.'+id+' img');
 | 
			
		||||
    const src = $(img).attr('src');
 | 
			
		||||
    if (rows.filter(':first').is(':visible')===true) {
 | 
			
		||||
      rows.css('display','none');
 | 
			
		||||
      $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
 | 
			
		||||
    } else {
 | 
			
		||||
      rows.css('display','table-row'); // using show() causes jump in firefox
 | 
			
		||||
      $(img).attr('src',src.substring(0,src.length-10)+'open.png');
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
let codefold = {
 | 
			
		||||
  opened : true,
 | 
			
		||||
 | 
			
		||||
  // in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
 | 
			
		||||
  plusImg:  [ "var(--fold-plus-image)",  "var(--fold-plus-image-relpath)" ],
 | 
			
		||||
  minusImg: [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ],
 | 
			
		||||
 | 
			
		||||
  // toggle all folding blocks
 | 
			
		||||
  toggle_all : function(relPath) {
 | 
			
		||||
    if (this.opened) {
 | 
			
		||||
      $('#fold_all').css('background-image',this.plusImg[relPath]);
 | 
			
		||||
      $('div[id^=foldopen]').hide();
 | 
			
		||||
      $('div[id^=foldclosed]').show();
 | 
			
		||||
    } else {
 | 
			
		||||
      $('#fold_all').css('background-image',this.minusImg[relPath]);
 | 
			
		||||
      $('div[id^=foldopen]').show();
 | 
			
		||||
      $('div[id^=foldclosed]').hide();
 | 
			
		||||
    }
 | 
			
		||||
    this.opened=!this.opened;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // toggle single folding block
 | 
			
		||||
  toggle : function(id) {
 | 
			
		||||
    $('#foldopen'+id).toggle();
 | 
			
		||||
    $('#foldclosed'+id).toggle();
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  init : function(relPath) {
 | 
			
		||||
    $('span[class=lineno]').css({
 | 
			
		||||
      'padding-right':'4px',
 | 
			
		||||
      'margin-right':'2px',
 | 
			
		||||
      'display':'inline-block',
 | 
			
		||||
      'width':'54px',
 | 
			
		||||
      'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
 | 
			
		||||
    });
 | 
			
		||||
    // add global toggle to first line
 | 
			
		||||
    $('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
 | 
			
		||||
      'onclick="javascript:codefold.toggle_all('+relPath+');" '+
 | 
			
		||||
      'style="background-image:'+this.minusImg[relPath]+';"></span>');
 | 
			
		||||
    // add vertical lines to other rows
 | 
			
		||||
    $('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
 | 
			
		||||
    // add toggle controls to lines with fold divs
 | 
			
		||||
    $('div[class=foldopen]').each(function() {
 | 
			
		||||
      // extract specific id to use
 | 
			
		||||
      const id    = $(this).attr('id').replace('foldopen','');
 | 
			
		||||
      // extract start and end foldable fragment attributes
 | 
			
		||||
      const start = $(this).attr('data-start');
 | 
			
		||||
      const end   = $(this).attr('data-end');
 | 
			
		||||
      // replace normal fold span with controls for the first line of a foldable fragment
 | 
			
		||||
      $(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
 | 
			
		||||
                   'onclick="javascript:codefold.toggle(\''+id+'\');" '+
 | 
			
		||||
                   'style="background-image:'+codefold.minusImg[relPath]+';"></span>');
 | 
			
		||||
      // append div for folded (closed) representation
 | 
			
		||||
      $(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
 | 
			
		||||
      // extract the first line from the "open" section to represent closed content
 | 
			
		||||
      const line = $(this).children().first().clone();
 | 
			
		||||
      // remove any glow that might still be active on the original line
 | 
			
		||||
      $(line).removeClass('glow');
 | 
			
		||||
      if (start) {
 | 
			
		||||
        // if line already ends with a start marker (e.g. trailing {), remove it
 | 
			
		||||
        $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
 | 
			
		||||
      }
 | 
			
		||||
      // replace minus with plus symbol
 | 
			
		||||
      $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]);
 | 
			
		||||
      // append ellipsis
 | 
			
		||||
      $(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">…</a>'+end);
 | 
			
		||||
      // insert constructed line into closed div
 | 
			
		||||
      $('#foldclosed'+id).html(line);
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
/* @license-end */
 | 
			
		||||
$(function() {
 | 
			
		||||
  $('.code,.codeRef').each(function() {
 | 
			
		||||
    $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
 | 
			
		||||
    $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ];
 | 
			
		||||
    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -1,108 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: File List</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <div class="headertitle"><div class="title">File List</div></div>
 | 
			
		||||
</div><!--header-->
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
 | 
			
		||||
<div class="levels">[detail level <span onclick="javascript:dynsection.toggleLevel(1);">1</span><span onclick="javascript:dynsection.toggleLevel(2);">2</span><span onclick="javascript:dynsection.toggleLevel(3);">3</span><span onclick="javascript:dynsection.toggleLevel(4);">4</span>]</div><table class="directory">
 | 
			
		||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="dynsection.toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="dynsection.toggleFolder('0_')"> </span><a class="el" href="dir_9609623a411adcd586e91350a30aa9d5.html" target="_self">MCU_STM32F4xx_Matlab</a></td><td class="desc"><b> Папка с исходным кодом для симуляции МК. </b> </td></tr>
 | 
			
		||||
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_0_" class="arrow" onclick="dynsection.toggleFolder('0_0_')">▼</span><span id="img_0_0_" class="iconfopen" onclick="dynsection.toggleFolder('0_0_')"> </span><a class="el" href="dir_afe59ba76eea2f90e4e37233dbf4f6f2.html" target="_self">Drivers</a></td><td class="desc"></td></tr>
 | 
			
		||||
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span id="arr_0_0_0_" class="arrow" onclick="dynsection.toggleFolder('0_0_0_')">▼</span><span id="img_0_0_0_" class="iconfopen" onclick="dynsection.toggleFolder('0_0_0_')"> </span><a class="el" href="dir_30f2d142c55236add84215456f0e2b1c.html" target="_self">CMSIS</a></td><td class="desc"></td></tr>
 | 
			
		||||
<tr id="row_0_0_0_0_" class="odd"><td class="entry"><span style="width:64px;display:inline-block;"> </span><a href="stm32f407xx__matlab__memory_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f407xx__matlab__memory_8h.html" target="_self">stm32f407xx_matlab_memory.h</a></td><td class="desc">Заголовочный файл для определения памяти МК STM32F4xx </td></tr>
 | 
			
		||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_1_" class="arrow" onclick="dynsection.toggleFolder('0_1_')">▼</span><span id="img_0_1_" class="iconfopen" onclick="dynsection.toggleFolder('0_1_')"> </span><a class="el" href="dir_df8c7f866fb3beabf246989867a8aa90.html" target="_self">STM32F4xx_SIMULINK</a></td><td class="desc"><b> Папка с исходным кодом симулятора МК. </b> </td></tr>
 | 
			
		||||
<tr id="row_0_1_0_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__gpio_8c_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__gpio_8c.html" target="_self">stm32f4xx_matlab_gpio.c</a></td><td class="desc">Исходный код симулятора портов </td></tr>
 | 
			
		||||
<tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__gpio_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__gpio_8h.html" target="_self">stm32f4xx_matlab_gpio.h</a></td><td class="desc">Заголовочный файл для симулятора портов </td></tr>
 | 
			
		||||
<tr id="row_0_1_2_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__rcc_8c_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__rcc_8c.html" target="_self">stm32f4xx_matlab_rcc.c</a></td><td class="desc"></td></tr>
 | 
			
		||||
<tr id="row_0_1_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__rcc_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__rcc_8h.html" target="_self">stm32f4xx_matlab_rcc.h</a></td><td class="desc">Заголовочный файл для симулятора клока </td></tr>
 | 
			
		||||
<tr id="row_0_1_4_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__tim_8c_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__tim_8c.html" target="_self">stm32f4xx_matlab_tim.c</a></td><td class="desc">Исходный код симулятора таймеров </td></tr>
 | 
			
		||||
<tr id="row_0_1_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__matlab__tim_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__tim_8h.html" target="_self">stm32f4xx_matlab_tim.h</a></td><td class="desc">Заголовочный файл для симулятора таймеров </td></tr>
 | 
			
		||||
<tr id="row_0_1_6_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stm32f4xx__periph__registers_8c_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__periph__registers_8c.html" target="_self">stm32f4xx_periph_registers.c</a></td><td class="desc">Исходный код с переменными регистров периферии </td></tr>
 | 
			
		||||
<tr id="row_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="stm32f4xx__matlab__conf_8c_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__conf_8c.html" target="_self">stm32f4xx_matlab_conf.c</a></td><td class="desc">Исходный код для конфигурации симулятора МК </td></tr>
 | 
			
		||||
<tr id="row_0_3_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="stm32f4xx__matlab__conf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stm32f4xx__matlab__conf_8h.html" target="_self">stm32f4xx_matlab_conf.h</a></td><td class="desc">Заголовочный файл для конфигурации симулятора МК </td></tr>
 | 
			
		||||
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="dynsection.toggleFolder('1_')">▼</span><span id="img_1_" class="iconfopen" onclick="dynsection.toggleFolder('1_')"> </span><a class="el" href="dir_5bc05bcf5fafad3c8688aee149210d07.html" target="_self">MCU_Wrapper</a></td><td class="desc"><b> Папка с исходным кодом оболочки МК. </b> </td></tr>
 | 
			
		||||
<tr id="row_1_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="_m_c_u_8c_source.html"><span class="icondoc"></span></a><a class="el" href="_m_c_u_8c.html" target="_self">MCU.c</a></td><td class="desc">Исходный код S-Function </td></tr>
 | 
			
		||||
<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="mcu__wrapper_8c_source.html"><span class="icondoc"></span></a><a class="el" href="mcu__wrapper_8c.html" target="_self">mcu_wrapper.c</a></td><td class="desc">Исходный код оболочки МК </td></tr>
 | 
			
		||||
<tr id="row_1_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="mcu__wrapper__conf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mcu__wrapper__conf_8h.html" target="_self">mcu_wrapper_conf.h</a></td><td class="desc">Заголовочный файл для оболочки МК </td></tr>
 | 
			
		||||
<tr id="row_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="run__mex_8bat_source.html"><span class="icondoc"></span></a><a class="el" href="run__mex_8bat.html" target="_self">run_mex.bat</a></td><td class="desc">Батник для компиляции оболочки МК </td></tr>
 | 
			
		||||
<tr id="row_2_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="mexing_8m_source.html"><span class="icondoc"></span></a><a class="el" href="mexing_8m.html" target="_self">mexing.m</a></td><td class="desc"></td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
</div><!-- directory -->
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#4665A2;">
 | 
			
		||||
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#D8DFEE;stroke-width:0;">
 | 
			
		||||
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
@ -1,11 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#C4CFE5;">
 | 
			
		||||
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#4665A2;stroke-width:0;">
 | 
			
		||||
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
@ -1,17 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#4665A2;">
 | 
			
		||||
<path
 | 
			
		||||
   d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
 | 
			
		||||
   id="path2" />
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#D8DFEE;stroke-width:0;">
 | 
			
		||||
<path
 | 
			
		||||
   d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
 | 
			
		||||
   id="path199" /><path
 | 
			
		||||
   d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
 | 
			
		||||
   id="path201" />
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 3.2 KiB  | 
@ -1,12 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
			
		||||
 "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 | 
			
		||||
<g style="fill:#C4CFE5;">
 | 
			
		||||
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g style="fill:#4665A2;stroke-width:0;">
 | 
			
		||||
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
 | 
			
		||||
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 3.1 KiB  | 
@ -1,167 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Data Fields</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
 | 
			
		||||
<li>BKPSRAM_BASE : <a class="el" href="struct__memory.html#ae20eaf17d134d9c2136072bca05f36c0">_memory</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE : <a class="el" href="struct__memory.html#a90eb3fc2642288d3e7ca2416493bf8ae">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 | 
			
		||||
<li>CCMDATARAM_BASE : <a class="el" href="struct__memory.html#acd6db2394f2b493a873059464d5b0e18">_memory</a></li>
 | 
			
		||||
<li>Channels : <a class="el" href="struct_t_i_m___sim.html#a41f21d0d1bfe0fb45e3f643ece9cdcee">TIM_Sim</a></li>
 | 
			
		||||
<li>CORTEX_PERIPH_BASE : <a class="el" href="struct__cortex__memory.html#a33c7ca027b61cba4b327fcad1c1cb7aa">_cortex_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
 | 
			
		||||
<li>DEBUG_MCU_BASE : <a class="el" href="struct__memory.html#a3b7f188430e83671b314657c1033f0e4">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
 | 
			
		||||
<li>FLASH_BASE : <a class="el" href="struct__memory.html#a84303738f0e64d5303c027932c055d87">_memory</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE : <a class="el" href="struct__memory.html#ace5daae0e2da2f05a6b63f3f68109284">_memory</a></li>
 | 
			
		||||
<li>fMCU_Stop : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#ad81f091fd8c1ad2908a5dd5967f3322e">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
<li>FSMC_R_BASE : <a class="el" href="struct__memory.html#aeb17f07e5976d0674b1afe60cffc79d4">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
 | 
			
		||||
<li>hMCUThread : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#af2b1efce882c9bc0926c715c16773afb">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
 | 
			
		||||
<li>idMCUThread : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#a52fe34944579ff4b1b6d3e85fae96546">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
 | 
			
		||||
<li>OC1_GPIOx : <a class="el" href="struct_channels___sim.html#a48f9b22f7e44d1b56aa793c2344e06d1">Channels_Sim</a></li>
 | 
			
		||||
<li>OC1_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#a2d558fbd100d8052eb0e235ad9b1edfe">Channels_Sim</a></li>
 | 
			
		||||
<li>OC1REF : <a class="el" href="struct_channels___sim.html#aae6762f43d55e99c3076c9f7e5cda5d9">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2_GPIOx : <a class="el" href="struct_channels___sim.html#a095026a66ff13e090dae52ee17263f2d">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#ac2fdf8c4e985eee4ab2e6c82251c12cf">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2REF : <a class="el" href="struct_channels___sim.html#aa038da4ce5b26f3d86cda283a9cd749e">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3_GPIOx : <a class="el" href="struct_channels___sim.html#a7d239c94641795d3caf5c28f8b7cc68d">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#ac15bcebfa2102716c5b6a4f80b2d51ab">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3REF : <a class="el" href="struct_channels___sim.html#abbea161f1b685a5d353d453fc9b56284">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4_GPIOx : <a class="el" href="struct_channels___sim.html#a851558373b04d1a8a5dbb3c0da9279d8">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#aa87736409f5ca9986200fcb480920c5b">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4REF : <a class="el" href="struct_channels___sim.html#a1c6c166d70bfe9597717f6892da4f446">Channels_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
 | 
			
		||||
<li>PERIPH_BASE : <a class="el" href="struct__memory.html#a535f5001cfe9967fb7040cd5b081d944">_memory</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE : <a class="el" href="struct__memory.html#a9fbcd0d73c2b2229b9f95743f280382c">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
 | 
			
		||||
<li>RELOAD : <a class="el" href="struct_t_i_m___sim.html#a1798863b8849972c8e0cf75abbbd116b">TIM_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
 | 
			
		||||
<li>SIM_Sample_Time : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#ab19a05224f30fab089c5d5e18fdcca36">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
<li>SRAM1_BASE : <a class="el" href="struct__memory.html#ac7c83f52956da4c75f4946348f7bfa1a">_memory</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE : <a class="el" href="struct__memory.html#ac88d0add27755615a9390fec8c64dafc">_memory</a></li>
 | 
			
		||||
<li>SRAM2_BASE : <a class="el" href="struct__memory.html#a57bfa1d7c82d97792cbb6c2d366dd48d">_memory</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE : <a class="el" href="struct__memory.html#a5db33a541cebb596c2976d4fc409a611">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
 | 
			
		||||
<li>TIM1_TRGO : <a class="el" href="struct_slave_channels.html#a1bb1d8089ac5eff5af1df34649b50a94">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM2_TRGO : <a class="el" href="struct_slave_channels.html#a7b0ea9ba4357a49b11b9c1ef79252613">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM3_TRGO : <a class="el" href="struct_slave_channels.html#aab5be57f956df4be03effc282a0479e5">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM4_TRGO : <a class="el" href="struct_slave_channels.html#ab9bff03506a4f82f55b13a1065bccaa6">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM5_TRGO : <a class="el" href="struct_slave_channels.html#a9780a406b85390dddcc18d4c6e606462">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM6_TRGO : <a class="el" href="struct_slave_channels.html#a2b1207a49068c13e3257396b4f369932">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM7_TRGO : <a class="el" href="struct_slave_channels.html#a8a06a1b3f32a6abaf0a7ad38e27cf0e1">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM8_TRGO : <a class="el" href="struct_slave_channels.html#a591c0247b983b782f88fb92aea40f0c7">SlaveChannels</a></li>
 | 
			
		||||
<li>tx_cnt : <a class="el" href="struct_t_i_m___sim.html#a369177ee20a3798f0d7b98cf7c549498">TIM_Sim</a></li>
 | 
			
		||||
<li>tx_step : <a class="el" href="struct_t_i_m___sim.html#a838a96dee1a1980434ae35295f85141e">TIM_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,167 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Data Fields - Variables</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all variables with links to the structures/unions they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
 | 
			
		||||
<li>BKPSRAM_BASE : <a class="el" href="struct__memory.html#ae20eaf17d134d9c2136072bca05f36c0">_memory</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE : <a class="el" href="struct__memory.html#a90eb3fc2642288d3e7ca2416493bf8ae">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 | 
			
		||||
<li>CCMDATARAM_BASE : <a class="el" href="struct__memory.html#acd6db2394f2b493a873059464d5b0e18">_memory</a></li>
 | 
			
		||||
<li>Channels : <a class="el" href="struct_t_i_m___sim.html#a41f21d0d1bfe0fb45e3f643ece9cdcee">TIM_Sim</a></li>
 | 
			
		||||
<li>CORTEX_PERIPH_BASE : <a class="el" href="struct__cortex__memory.html#a33c7ca027b61cba4b327fcad1c1cb7aa">_cortex_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
 | 
			
		||||
<li>DEBUG_MCU_BASE : <a class="el" href="struct__memory.html#a3b7f188430e83671b314657c1033f0e4">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
 | 
			
		||||
<li>FLASH_BASE : <a class="el" href="struct__memory.html#a84303738f0e64d5303c027932c055d87">_memory</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE : <a class="el" href="struct__memory.html#ace5daae0e2da2f05a6b63f3f68109284">_memory</a></li>
 | 
			
		||||
<li>fMCU_Stop : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#ad81f091fd8c1ad2908a5dd5967f3322e">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
<li>FSMC_R_BASE : <a class="el" href="struct__memory.html#aeb17f07e5976d0674b1afe60cffc79d4">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
 | 
			
		||||
<li>hMCUThread : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#af2b1efce882c9bc0926c715c16773afb">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
 | 
			
		||||
<li>idMCUThread : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#a52fe34944579ff4b1b6d3e85fae96546">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
 | 
			
		||||
<li>OC1_GPIOx : <a class="el" href="struct_channels___sim.html#a48f9b22f7e44d1b56aa793c2344e06d1">Channels_Sim</a></li>
 | 
			
		||||
<li>OC1_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#a2d558fbd100d8052eb0e235ad9b1edfe">Channels_Sim</a></li>
 | 
			
		||||
<li>OC1REF : <a class="el" href="struct_channels___sim.html#aae6762f43d55e99c3076c9f7e5cda5d9">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2_GPIOx : <a class="el" href="struct_channels___sim.html#a095026a66ff13e090dae52ee17263f2d">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#ac2fdf8c4e985eee4ab2e6c82251c12cf">Channels_Sim</a></li>
 | 
			
		||||
<li>OC2REF : <a class="el" href="struct_channels___sim.html#aa038da4ce5b26f3d86cda283a9cd749e">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3_GPIOx : <a class="el" href="struct_channels___sim.html#a7d239c94641795d3caf5c28f8b7cc68d">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#ac15bcebfa2102716c5b6a4f80b2d51ab">Channels_Sim</a></li>
 | 
			
		||||
<li>OC3REF : <a class="el" href="struct_channels___sim.html#abbea161f1b685a5d353d453fc9b56284">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4_GPIOx : <a class="el" href="struct_channels___sim.html#a851558373b04d1a8a5dbb3c0da9279d8">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4_PIN_SHIFT : <a class="el" href="struct_channels___sim.html#aa87736409f5ca9986200fcb480920c5b">Channels_Sim</a></li>
 | 
			
		||||
<li>OC4REF : <a class="el" href="struct_channels___sim.html#a1c6c166d70bfe9597717f6892da4f446">Channels_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
 | 
			
		||||
<li>PERIPH_BASE : <a class="el" href="struct__memory.html#a535f5001cfe9967fb7040cd5b081d944">_memory</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE : <a class="el" href="struct__memory.html#a9fbcd0d73c2b2229b9f95743f280382c">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
 | 
			
		||||
<li>RELOAD : <a class="el" href="struct_t_i_m___sim.html#a1798863b8849972c8e0cf75abbbd116b">TIM_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
 | 
			
		||||
<li>SIM_Sample_Time : <a class="el" href="struct_s_i_m_____m_c_u_handle_type_def.html#ab19a05224f30fab089c5d5e18fdcca36">SIM__MCUHandleTypeDef</a></li>
 | 
			
		||||
<li>SRAM1_BASE : <a class="el" href="struct__memory.html#ac7c83f52956da4c75f4946348f7bfa1a">_memory</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE : <a class="el" href="struct__memory.html#ac88d0add27755615a9390fec8c64dafc">_memory</a></li>
 | 
			
		||||
<li>SRAM2_BASE : <a class="el" href="struct__memory.html#a57bfa1d7c82d97792cbb6c2d366dd48d">_memory</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE : <a class="el" href="struct__memory.html#a5db33a541cebb596c2976d4fc409a611">_memory</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
 | 
			
		||||
<li>TIM1_TRGO : <a class="el" href="struct_slave_channels.html#a1bb1d8089ac5eff5af1df34649b50a94">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM2_TRGO : <a class="el" href="struct_slave_channels.html#a7b0ea9ba4357a49b11b9c1ef79252613">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM3_TRGO : <a class="el" href="struct_slave_channels.html#aab5be57f956df4be03effc282a0479e5">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM4_TRGO : <a class="el" href="struct_slave_channels.html#ab9bff03506a4f82f55b13a1065bccaa6">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM5_TRGO : <a class="el" href="struct_slave_channels.html#a9780a406b85390dddcc18d4c6e606462">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM6_TRGO : <a class="el" href="struct_slave_channels.html#a2b1207a49068c13e3257396b4f369932">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM7_TRGO : <a class="el" href="struct_slave_channels.html#a8a06a1b3f32a6abaf0a7ad38e27cf0e1">SlaveChannels</a></li>
 | 
			
		||||
<li>TIM8_TRGO : <a class="el" href="struct_slave_channels.html#a591c0247b983b782f88fb92aea40f0c7">SlaveChannels</a></li>
 | 
			
		||||
<li>tx_cnt : <a class="el" href="struct_t_i_m___sim.html#a369177ee20a3798f0d7b98cf7c549498">TIM_Sim</a></li>
 | 
			
		||||
<li>tx_step : <a class="el" href="struct_t_i_m___sim.html#a838a96dee1a1980434ae35295f85141e">TIM_Sim</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,87 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul>
 | 
			
		||||
<li>_RCC_CLEAR_FLAG : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gafedee1520e942548e0b8818122ecef97">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>_RCC_SET_FLAG : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gae06dd862c75ec6de931ae3c350d61325">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,94 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
 | 
			
		||||
<li>ABP1_TIMS_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga516b1b0b440a3d8a0a97f99dcccfd631">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP1_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gabce7fd8ef9ea39fb4f77b5a0016338ea">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP2_TIMS_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gab8af0c48743a9c568167d7d99c377861">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP2_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga142081f515cc585408786f7745733ef5">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>adc : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gac69e5457edf5f5639c4532688de406ae">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>adc1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaf1cc5fa4068a793827866bc4be7e3799">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>adc123_common : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gad98be8090528df1e3edb79ec46438b0a">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>adc2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaa94271247e5f041f9097ef16d6450c68">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>adc3 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga6f330240512375fb7e4e23ba73e4b612">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,90 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
 | 
			
		||||
<li>BKPSRAM_BASE : <a class="el" href="group___peripheral__memory__map.html#ga52e57051bdf8909222b36e5408a48f32">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gabac8d912551188d0039d016d16f7c0b0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gaee19a30c9fa326bb10b547e4eaf4e250">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gaa850b97b5338b2a9891acbf23788fd14">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_SIZE : <a class="el" href="group___peripheral__memory__map.html#gafe7470549838cd29d6f2d7245f17176c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,108 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 | 
			
		||||
<li>call_IRQHandller() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaa2b3ab4507a894ffa6e4487d42054e67">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaa2b3ab4507a894ffa6e4487d42054e67">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>can1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga047c365ed69ab08e79c499adcedff87b">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>can2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gae4b5c771c41468ea4ffa1af4de9ce39e">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>CC_PWM_Ch1_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga609dd2da1a15ffb80256e85942ed2671">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga609dd2da1a15ffb80256e85942ed2671">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch2_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaef90da33b410dcd77d9cdb58363d729c">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaef90da33b410dcd77d9cdb58363d729c">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch3_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga99db7a05808ca9b5aa12df01745ed2ef">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga99db7a05808ca9b5aa12df01745ed2ef">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch4_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gad51e3fbb47f5768c33876ad803fbef20">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gad51e3fbb47f5768c33876ad803fbef20">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_BASE : <a class="el" href="group___peripheral__memory__map.html#gabea1f1810ebeac402164b42ab54bcdf9">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga2d06a3566d8983055baf9e883e0198ef">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_END : <a class="el" href="group___peripheral__memory__map.html#ga9fbe263946209e6f09faf93512bd2f9a">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga86d258a24d1cef85ee0333fcaf6398a8">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga71542ecbf91e5a2e4e7657ebf4743bb0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>Channels_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga63dc3b53fe4b165b4c70e4d600258d50">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga63dc3b53fe4b165b4c70e4d600258d50">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC1_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga819ef3dc9ad489178802ed1dcb0e6b41">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC2_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gab05cf435dbdfc0a827fc6cf093d27694">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC3_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga1303da0a61cb89d0952378d46b1be2a3">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC4_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gadd3fec5a120bcd59e8396435da2cb639">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OCx_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga332e5c16b48c0bc5a7c1f978442ef49f">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Clear_Flag_If_Its_Expected : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga5dc1d225a53e67cc732ca9069ffb1f0d">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>CoreDebug_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga680604dbcda9e9b31a1639fcffe5230b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CoreDebug_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga3b760f7bd0c5082d2d0db746f778c329">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>crc : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga0be4a4f92234a92301b5dea4ef762a83">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>CREATE_SUSPENDED : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga98a12c757c95bd7c8ae75999092af30f">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,118 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
 | 
			
		||||
<li>dac : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gad8051cafe91bba5f5a52af50cd3a11da">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dac1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gac2a5eec34721432ce7d7dec940c4a105">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dbgmcu : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gacecf2f30be3d1243af9c27921727cb3d">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>DBGMCU_BASE : <a class="el" href="group___peripheral__memory__map.html#ga4adaf4fd82ccc3a538f1f27a70cdbbef">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>dcmi : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga7acb73c38792037a032e8a1a05247546">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>DEBUG_MCU : <a class="el" href="stm32f4xx__matlab__conf_8c.html#a85a080726cb1ade56443b458fc49404b">stm32f4xx_matlab_conf.c</a></li>
 | 
			
		||||
<li>DEBUG_MCU_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga378fbcdeb200dba6b14c9ac7b02471f3">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>deInitialize_MCU() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#ad7d9ddf99be97748bc7417425271d85e">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#ad7d9ddf99be97748bc7417425271d85e">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>deInitialize_Periph_Sim() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#aff389f4df35953d82d9d30ae161a8cf9">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#aff389f4df35953d82d9d30ae161a8cf9">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>DEKSTOP_CYCLES_FOR_MCU_APP : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gafc876c6cc8fa4255636740b201ac1d66">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>delete() : <a class="el" href="mexing_8m.html#a079ba1759372ad0dafb30bfb334998cc">mexing.m</a></li>
 | 
			
		||||
<li>DISC_STATES_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gaaed909ba8fd0e4f7a3c2533836dae5d9">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>dma1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gad75f4f486cddcbba8bd891fdffea63ff">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream0 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga327e8fb8c3fdda29762971a665beb6eb">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga9696aa3317c6d4e58bd31545db1a3791">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaf1e2d204d4c7f13213bc4cdece346a9f">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream3 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga67575d2b3cf487db91535889ed5802c4">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream4 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga0da31a3af45097d4b4a136c5d74d6000">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream5 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga160109a05c1a572c5911c1a0633e2cb1">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream6 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga52167e4b4ae32ee99aca493b07ec2cf0">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma1_stream7 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaeb5a72f1dde2596da84347544d59f3ea">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga797194bf8715329824161a98d1b2a236">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream0 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaeff8718ce310afab98873eccba9ff245">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga0fb8b4583868b79144561ef45c93637a">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga33cbc3fc9b89c29e722fc4e4973d6058">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream3 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gadcd0980342e18d51ce08021a0d1abfdd">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream4 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga14e0e20b296df9eea835441023807c15">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream5 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga8fc00e6429450f48f22fddb4040d1e2d">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream6 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga8d4903dcdae5a8f4c0b7b2678b2cf5b4">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>dma2_stream7 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga19770af0d338f06fbb1ffa09150909b4">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>DWT : <a class="el" href="group___c_m_s_i_s__core__base.html#gabbe5a060185e1d5afa3f85b14e10a6ce">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DWT_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gafdab534f961bf8935eb456cb7700dcd2">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DWT_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#gaecf34cb76daeb0ed1854efbc8c1bacf7">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,252 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all macros with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul>
 | 
			
		||||
<li>_RCC_CLEAR_FLAG : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gafedee1520e942548e0b8818122ecef97">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>_RCC_SET_FLAG : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gae06dd862c75ec6de931ae3c350d61325">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
 | 
			
		||||
<li>ABP1_TIMS_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga516b1b0b440a3d8a0a97f99dcccfd631">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP1_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gabce7fd8ef9ea39fb4f77b5a0016338ea">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP2_TIMS_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gab8af0c48743a9c568167d7d99c377861">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>ABP2_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga142081f515cc585408786f7745733ef5">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
 | 
			
		||||
<li>BKPSRAM_BASE : <a class="el" href="group___peripheral__memory__map.html#ga52e57051bdf8909222b36e5408a48f32">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gabac8d912551188d0039d016d16f7c0b0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gaee19a30c9fa326bb10b547e4eaf4e250">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gaa850b97b5338b2a9891acbf23788fd14">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>BKPSRAM_SIZE : <a class="el" href="group___peripheral__memory__map.html#gafe7470549838cd29d6f2d7245f17176c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 | 
			
		||||
<li>CCMDATARAM_BASE : <a class="el" href="group___peripheral__memory__map.html#gabea1f1810ebeac402164b42ab54bcdf9">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga2d06a3566d8983055baf9e883e0198ef">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_END : <a class="el" href="group___peripheral__memory__map.html#ga9fbe263946209e6f09faf93512bd2f9a">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga86d258a24d1cef85ee0333fcaf6398a8">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CCMDATARAM_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga71542ecbf91e5a2e4e7657ebf4743bb0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>Check_OC1_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga819ef3dc9ad489178802ed1dcb0e6b41">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC2_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gab05cf435dbdfc0a827fc6cf093d27694">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC3_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga1303da0a61cb89d0952378d46b1be2a3">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OC4_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gadd3fec5a120bcd59e8396435da2cb639">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Check_OCx_GPIO_Output : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga332e5c16b48c0bc5a7c1f978442ef49f">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Clear_Flag_If_Its_Expected : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga5dc1d225a53e67cc732ca9069ffb1f0d">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>CoreDebug_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga680604dbcda9e9b31a1639fcffe5230b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CoreDebug_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga3b760f7bd0c5082d2d0db746f778c329">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>CREATE_SUSPENDED : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga98a12c757c95bd7c8ae75999092af30f">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
 | 
			
		||||
<li>DBGMCU_BASE : <a class="el" href="group___peripheral__memory__map.html#ga4adaf4fd82ccc3a538f1f27a70cdbbef">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DEBUG_MCU_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga378fbcdeb200dba6b14c9ac7b02471f3">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DEKSTOP_CYCLES_FOR_MCU_APP : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gafc876c6cc8fa4255636740b201ac1d66">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>DISC_STATES_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gaaed909ba8fd0e4f7a3c2533836dae5d9">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>DWT : <a class="el" href="group___c_m_s_i_s__core__base.html#gabbe5a060185e1d5afa3f85b14e10a6ce">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DWT_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gafdab534f961bf8935eb456cb7700dcd2">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>DWT_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#gaecf34cb76daeb0ed1854efbc8c1bacf7">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
 | 
			
		||||
<li>FLASH_BASE : <a class="el" href="group___peripheral__memory__map.html#ga23a9099a5f8fc9c6e253c0eecb2be8db">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga4a1f7e664b3e091fee94976b33bbf7b9">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_END : <a class="el" href="group___peripheral__memory__map.html#ga8be554f354e5aa65370f6db63d4f3ee4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga77155e7666b070a9653f0a43d11f2004">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE : <a class="el" href="group___peripheral__memory__map.html#ga91d296a67aec0da8f31c368cbc0eea94">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1ea2ceeb2a729bb1072d98cf7c3ceb6e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_END : <a class="el" href="group___peripheral__memory__map.html#ga5bec9c5a91e312fca36f256f508ceee1">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga46ebe9214ddc2503af753a11fd5ccb80">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_SIZE : <a class="el" href="group___peripheral__memory__map.html#gacb3e2951c91f038686e0cbcd4321814b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_SIZE : <a class="el" href="group___peripheral__memory__map.html#gae69620948dea1b76e0ab7843ab719db7">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FPU : <a class="el" href="group___c_m_s_i_s__core__base.html#gabc7c93f2594e85ece1e1a24f10591428">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FPU_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga4dcad4027118c098c07bcd575f1fbb28">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FSMC_R_BASE : <a class="el" href="group___peripheral__memory__map.html#gaddf0e199dccba83272b20c9fb4d3aaed">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FSMC_R_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gae359dc044d8a99c9634a01abdbab704b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FSMC_R_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga36147b9ef36c5be4745a45162cd85be4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
 | 
			
		||||
<li>HCLK_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga28d73042ad2f34965a12d5dca1c72c7d">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
 | 
			
		||||
<li>IN_PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga25be09b98d138ff8c740bece06e1bcc6">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>IN_PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac41471250c3d92da182a969e378addfc">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>ITM : <a class="el" href="group___c_m_s_i_s__core__base.html#gabae7cdf882def602cb787bb039ff6a43">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>ITM_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gadd76251e412a195ec0a8f47227a8359e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>ITM_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga13157bf906d2f9c99e0942ce1e79f8d4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
 | 
			
		||||
<li>MCU_MEM_END : <a class="el" href="group___peripheral__memory__map.html#ga4ddc1e9172ba6fe724328595a3fadcf2">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MDL_CHECK_PARAMETERS : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4936bd489281a5a9b9a2e081de0f003e">MCU.c</a></li>
 | 
			
		||||
<li>MDL_START : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gac032abbf580c891fb0c11e63e9bc668a">MCU.c</a></li>
 | 
			
		||||
<li>MDL_UPDATE : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga7556dbbf5cb7f9946d3e39bcda40c63b">MCU.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
 | 
			
		||||
<li>native_while : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gabaad5b5eb9243ab531775be5eda6ee02">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>NPARAMS : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gae468832efa6adf5e9a96cabd8f878b47">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>NVIC : <a class="el" href="group___c_m_s_i_s__core__base.html#gac8e97e8ce56ae9f57da1363a937f8a17">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>NVIC_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gaa0288691785a5f868238e0468b39523d">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
 | 
			
		||||
<li>OUT_PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga9fa483e805a6570c4793b1e0ff9719ac">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>OUT_PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac90b37686b0abfe29835c9632310897a">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
 | 
			
		||||
<li>PERIPH_BASE : <a class="el" href="group___peripheral__memory__map.html#ga9171f49478fa86d932f89e78e73b88b0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1294c8e27eb23b591c5195504e4dfd23">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gaed7efc100877000845c236ccdc9e144a">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga33c4df718741b5cb60ca3fffe8969672">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga16c53e8ec3bcf87a7d170220d774956c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_SIZE : <a class="el" href="group___peripheral__memory__map.html#gaf91d23524f40a61d32fea568949043d0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gab59d8303ff443409a05cef11e3e7176e">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga80d9b6ce1525c1148d94c021f0b8c83e">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
 | 
			
		||||
<li>S_FUNCTION_LEVEL : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga9a4ab27953070e39249f3fad28e93749">MCU.c</a></li>
 | 
			
		||||
<li>S_FUNCTION_NAME : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0f61df833e166c743295eebf43f0b142">MCU.c</a></li>
 | 
			
		||||
<li>SCB : <a class="el" href="group___c_m_s_i_s__core__base.html#gaaaf6477c2bde2f00f99e3c2fd1060b01">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCB_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gad55a7ddb8d4b2398b0c1cfec76c0d9fd">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCnSCB : <a class="el" href="group___c_m_s_i_s__core__base.html#ga9fe0cd2eef83a8adad94490d9ecca63f">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCS_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga3c14ed93192c8d9143322bbf77ebf770">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCS_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga48d67e0906624018a8dc1ff5409f31ca">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>Set_Flag_If_Its_Expected : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gadf8f9d228ec9091df7d092a298f11b17">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>sim_while : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga1fef2893362ee1f5032b523ff8c7fd9d">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SRAM1_BASE : <a class="el" href="group___peripheral__memory__map.html#ga7d0fbfb8894012dbbb96754b95e562cd">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gac53e3a39a0ebd3520aaa373ae44ff838">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gac4c4f61082e4b168f29d9cf97dc3ca5c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga9d4c99653d22992b3b4b1537ade15d21">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga4d759a2722aeeb47a81dd047d4e1790e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_SIZE : <a class="el" href="group___peripheral__memory__map.html#gacf1c7f7eb345f8e1b617fd1b16320111">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BASE : <a class="el" href="group___peripheral__memory__map.html#gadbb42a3d0a8a90a79d2146e4014241b1">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gaff8892343768799209d59c2c33848222">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gac33cb6edadf184ab9860d77089503922">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1654496a485d04270e2208afa8e4fd5c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga146845582d93b1fa90c52f43f704c178">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_SIZE : <a class="el" href="group___peripheral__memory__map.html#gad89e757d25db6160b1aedeb58fcdac09">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SysTick : <a class="el" href="group___c_m_s_i_s__core__base.html#gacd96c53beeaff8f603fcda425eb295de">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SysTick_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga58effaac0b93006b756d33209e814646">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
 | 
			
		||||
<li>TIM_OCMODE_SECOND_SHIFT : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gae44a51b8c43872a8186ef4740d8f83d4">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>TPI : <a class="el" href="group___c_m_s_i_s__core__base.html#ga8b4dd00016aed25a0ea54e9a9acd1239">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>TPI_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga2b1eeff850a7e418844ca847145a1a68">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>TPI_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga688b0af5b023485e742d8906117e0dcb">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
 | 
			
		||||
<li>USE_TIM1 : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga54a98c21365e0bc45b81555d2b101f2b">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM12 : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga4e2b0e6cdf9eed74581b575c3fd9516b">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM3 : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga5b5685a43273b6e37242a4aba3ee0617">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM4 : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga1493b39c9214501180b81b4c892f9be0">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM4_HANDLER : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#gae500122af1918af2cf69bc107315d15f">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM7 : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga7cdc54cc8cbbb6e9f60001f1e3e6ec67">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM7_HANDLER : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#ga989acf15c18c3016a65fcc888d2f641b">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>USE_TIM8_BRK_TIM12_HANDLER : <a class="el" href="group___s_i_m_u_l_a_t_o_r___c_o_n_f.html#gae38cd8ed529da5815f8619b9bad8c97d">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
 | 
			
		||||
<li>while : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga866c2dad3e54488a018e859b3dc6feba">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,87 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
 | 
			
		||||
<li>eth : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga8b57579963e46439e92cb241151cec09">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>exti : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga5db1038489ccf5ec54a585b08226b84d">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,105 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
 | 
			
		||||
<li>FLASH_BASE : <a class="el" href="group___peripheral__memory__map.html#ga23a9099a5f8fc9c6e253c0eecb2be8db">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga4a1f7e664b3e091fee94976b33bbf7b9">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_END : <a class="el" href="group___peripheral__memory__map.html#ga8be554f354e5aa65370f6db63d4f3ee4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga77155e7666b070a9653f0a43d11f2004">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE : <a class="el" href="group___peripheral__memory__map.html#ga91d296a67aec0da8f31c368cbc0eea94">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1ea2ceeb2a729bb1072d98cf7c3ceb6e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_END : <a class="el" href="group___peripheral__memory__map.html#ga5bec9c5a91e312fca36f256f508ceee1">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_END_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga46ebe9214ddc2503af753a11fd5ccb80">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FLASH_OTP_SIZE : <a class="el" href="group___peripheral__memory__map.html#gacb3e2951c91f038686e0cbcd4321814b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>flash_r : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga9005724fdcdcbb61e849a94a8068d0a5">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>FLASH_SIZE : <a class="el" href="group___peripheral__memory__map.html#gae69620948dea1b76e0ab7843ab719db7">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FPU : <a class="el" href="group___c_m_s_i_s__core__base.html#gabc7c93f2594e85ece1e1a24f10591428">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FPU_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga4dcad4027118c098c07bcd575f1fbb28">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>fsmc_bank1_r : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gabc182d46d8d7866f89db2e17f7d67496">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>fsmc_bank1e_r : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gac5d854d8ad94b3865847d64044c9bec8">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>fsmc_bank2_3_r : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga337be35abe408bd089d87060903b944f">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>fsmc_bank4_r : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga86a7b6923c554282c949627ccaaee51b">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>FSMC_R_BASE : <a class="el" href="group___peripheral__memory__map.html#gaddf0e199dccba83272b20c9fb4d3aaed">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FSMC_R_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gae359dc044d8a99c9634a01abdbab704b">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>FSMC_R_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga36147b9ef36c5be4745a45162cd85be4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,167 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 | 
			
		||||
<li>call_IRQHandller() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaa2b3ab4507a894ffa6e4487d42054e67">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaa2b3ab4507a894ffa6e4487d42054e67">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch1_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga609dd2da1a15ffb80256e85942ed2671">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga609dd2da1a15ffb80256e85942ed2671">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch2_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaef90da33b410dcd77d9cdb58363d729c">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gaef90da33b410dcd77d9cdb58363d729c">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch3_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga99db7a05808ca9b5aa12df01745ed2ef">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga99db7a05808ca9b5aa12df01745ed2ef">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>CC_PWM_Ch4_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gad51e3fbb47f5768c33876ad803fbef20">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#gad51e3fbb47f5768c33876ad803fbef20">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Channels_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga63dc3b53fe4b165b4c70e4d600258d50">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga63dc3b53fe4b165b4c70e4d600258d50">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
 | 
			
		||||
<li>deInitialize_MCU() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#ad7d9ddf99be97748bc7417425271d85e">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#ad7d9ddf99be97748bc7417425271d85e">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>deInitialize_Periph_Sim() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#aff389f4df35953d82d9d30ae161a8cf9">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#aff389f4df35953d82d9d30ae161a8cf9">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>delete() : <a class="el" href="mexing_8m.html#a079ba1759372ad0dafb30bfb334998cc">mexing.m</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
 | 
			
		||||
<li>getCompilerConfigurations() : <a class="el" href="mexing_8m.html#a8c4063b39743b0fdb6cbd8100456a07d">mexing.m</a></li>
 | 
			
		||||
<li>GPIO_to_SFUNC() : <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga487177c90297da30ee8ec0dca0ce3067">stm32f4xx_matlab_gpio.c</a>, <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga487177c90297da30ee8ec0dca0ce3067">stm32f4xx_matlab_gpio.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
 | 
			
		||||
<li>Init_TIM_SIM() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#a617bc2e624bea041e844a0ac0c6a50f9">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#a617bc2e624bea041e844a0ac0c6a50f9">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>Initialize_Periph_Sim() : <a class="el" href="group___m_a_i_n___s_i_m_u_l_a_t_o_r.html#gab020a77f89d6c0ea99c7559cfa7e3ba0">stm32f4xx_matlab_conf.c</a>, <a class="el" href="group___m_a_i_n___s_i_m_u_l_a_t_o_r.html#gab020a77f89d6c0ea99c7559cfa7e3ba0">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
 | 
			
		||||
<li>main() : <a class="el" href="mcu__wrapper_8c.html#a840291bc02cba5474a4cb46a9b9566fe">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>MCU_App_Thread() : <a class="el" href="mcu__wrapper_8c.html#a1ea76a95b9b28061fb34ece9f6f0a85f">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>MCU_Periph_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gaccdef5b45f3d1646f248304e02b00e54">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gaccdef5b45f3d1646f248304e02b00e54">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_readInputs() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga15045e0feba8ddf08e20958fd1e36cd5">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga15045e0feba8ddf08e20958fd1e36cd5">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_Step_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_writeOutputs() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad6b7bb9233d746d7709276f9ea1914c2">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad6b7bb9233d746d7709276f9ea1914c2">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>mdlInitializeSampleTimes() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">MCU.c</a></li>
 | 
			
		||||
<li>mdlInitializeSizes() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">MCU.c</a></li>
 | 
			
		||||
<li>mdlOutputs() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">MCU.c</a></li>
 | 
			
		||||
<li>mdlStart() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">MCU.c</a></li>
 | 
			
		||||
<li>mdlTerminate() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">MCU.c</a></li>
 | 
			
		||||
<li>mdlUpdate() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">MCU.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
 | 
			
		||||
<li>Overflow_Check() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga05b798408f2179ae27731f231cf4b620">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga05b798408f2179ae27731f231cf4b620">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
 | 
			
		||||
<li>SFUNC_to_GPIO() : <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga368334de2e425bc656526d2f42671454">stm32f4xx_matlab_gpio.c</a>, <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga368334de2e425bc656526d2f42671454">stm32f4xx_matlab_gpio.h</a></li>
 | 
			
		||||
<li>SIM_deInitialize_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_Initialize_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_writeOutput() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad38bfad0ee1e186c0663565abb6bc71a">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_writeOutputs() : <a class="el" href="mcu__wrapper_8c.html#a47b40a9825bcaeb3a1dfba8b27a0be3f">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>Simulate_TIMs() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3128cf64eeea541a8e25a72ce10da335">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3128cf64eeea541a8e25a72ce10da335">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Slave_Mode_Check_Source() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga60fe7ff05dcbc30ca3c35aa08e87de21">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga60fe7ff05dcbc30ca3c35aa08e87de21">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
 | 
			
		||||
<li>TIM1_BRK_TIM9_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a3b60f6118cdd3449f4ed29fde4704236">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM1_TRG_COM_TIM11_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a098245bf4e2f8844b22692b034a266fb">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM1_UP_TIM10_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#ad1fd361bc5ad89facee67c76d1ff8dc0">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM2_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a38ad4725462bdc5e86c4ead4f04b9fc2">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM3_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#ac8e51d2183b5230cbd5481f8867adce9">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM4_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a7133f3f78767503641d307386e68bd28">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM5_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a5e66446caf21dd90191dc07a13ce2378">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM6_DAC_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a0839a45f331c4c067939b9c4533bbf4d">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM7_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a98cff83252098363b2dbca9608df964e">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM8_BRK_TIM12_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a301e0d3520f05f672ce047976f75ff6a">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM8_TRG_COM_TIM14_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a4c8359a023f7ede4a9d9f94ea6fb92da">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM8_UP_TIM13_IRQHandler() : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a7fb516f8826d882ac91cfc093884fcf5">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>TIM_SIM_DEINIT() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga52ac5ac026ea57787d19cd1a8611abba">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga52ac5ac026ea57787d19cd1a8611abba">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>TIM_Simulation() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3fcb4dd48557c21fdd6c379ad16bd229">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3fcb4dd48557c21fdd6c379ad16bd229">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>TIMx_Count() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga55e7ce9aae452502d5104acbe8fa4237">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga55e7ce9aae452502d5104acbe8fa4237">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
 | 
			
		||||
<li>Write_OC_to_GPIO() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga28ab1124ab4cfbd21acb613cb0873d2d">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga28ab1124ab4cfbd21acb613cb0873d2d">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Write_OC_to_TRGO() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga4ac3f9a63d2433519bd5137bab286080">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga4ac3f9a63d2433519bd5137bab286080">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,96 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
 | 
			
		||||
<li>getCompilerConfigurations() : <a class="el" href="mexing_8m.html#a8c4063b39743b0fdb6cbd8100456a07d">mexing.m</a></li>
 | 
			
		||||
<li>GPIO_to_SFUNC() : <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga487177c90297da30ee8ec0dca0ce3067">stm32f4xx_matlab_gpio.c</a>, <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga487177c90297da30ee8ec0dca0ce3067">stm32f4xx_matlab_gpio.h</a></li>
 | 
			
		||||
<li>gpioa : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gafe2a610b007523788505f398360469f5">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpiob : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gade602c9d7c12472827a033d5b2e8aa23">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpioc : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga2dab7cbce8521c60951c6342c19bb501">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpiod : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gad48004dee1cfc09b9c68d896ea43be11">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpioe : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga179dea27e5a083e03fc241f28043becf">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpiof : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga655c6a3fda1e8cc9126d4a2070d7e462">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpiog : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaed4e2f21f491ff70becdc5a582a2ad67">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpioh : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga9d4756994de85ee04d0086406c01c00b">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>gpioi : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga4fa8522689e49acbf45dc4e5a49d19ef">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,88 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
 | 
			
		||||
<li>HANDLE : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gaa8c0374618b33785ccb02f74bcfebc46">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>HCLK_Value : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#ga28d73042ad2f34965a12d5dca1c72c7d">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>hmcu : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga7bd77e7f9825a3661f357e430246bfe8">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga7bd77e7f9825a3661f357e430246bfe8">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,98 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
 | 
			
		||||
<li>i2c1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga71aad08961ac03edca6186fa9bc61b8e">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>i2c2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaf4f631faa01cf5bb61ddc01eeb90d522">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>i2c3 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gac651c52b4ae02ee475e7babe47132f15">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>i2s2ext : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga06974a33ee50f86662415a0c4af114a8">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>i2s3ext : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gadc6636f1a31d3d480e01c46ffa6edddf">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>IN_PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga25be09b98d138ff8c740bece06e1bcc6">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>IN_PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac41471250c3d92da182a969e378addfc">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>Init_TIM_SIM() : <a class="el" href="stm32f4xx__matlab__conf_8c.html#a617bc2e624bea041e844a0ac0c6a50f9">stm32f4xx_matlab_conf.c</a>, <a class="el" href="stm32f4xx__matlab__conf_8h.html#a617bc2e624bea041e844a0ac0c6a50f9">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>Initialize_Periph_Sim() : <a class="el" href="group___m_a_i_n___s_i_m_u_l_a_t_o_r.html#gab020a77f89d6c0ea99c7559cfa7e3ba0">stm32f4xx_matlab_conf.c</a>, <a class="el" href="group___m_a_i_n___s_i_m_u_l_a_t_o_r.html#gab020a77f89d6c0ea99c7559cfa7e3ba0">stm32f4xx_matlab_conf.h</a></li>
 | 
			
		||||
<li>ITM : <a class="el" href="group___c_m_s_i_s__core__base.html#gabae7cdf882def602cb787bb039ff6a43">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>ITM_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gadd76251e412a195ec0a8f47227a8359e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>ITM_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga13157bf906d2f9c99e0942ce1e79f8d4">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>iwdg : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaa40a4f8558a3a1b0ed98bad7ea997a8b">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,105 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
 | 
			
		||||
<li>main() : <a class="el" href="mcu__wrapper_8c.html#a840291bc02cba5474a4cb46a9b9566fe">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>MCU_App_Thread() : <a class="el" href="mcu__wrapper_8c.html#a1ea76a95b9b28061fb34ece9f6f0a85f">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>MCU_CORTEX_MEM : <a class="el" href="group___c_m_s_i_s__core__base.html#ga47e1165d2b04b61b504f52b9f4782708">stm32f4xx_matlab_conf.c</a>, <a class="el" href="group___c_m_s_i_s__core__base.html#ga47e1165d2b04b61b504f52b9f4782708">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MCU_CortexMemoryTypeDef : <a class="el" href="group___c_m_s_i_s__core__base.html#ga2283564fd240ac8b420f104dc381ce94">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MCU_MEM : <a class="el" href="group___peripheral__memory__map.html#gaf157a51d290d1383d493a6a2fe0241fc">stm32f4xx_matlab_conf.c</a>, <a class="el" href="group___peripheral__memory__map.html#gaf157a51d290d1383d493a6a2fe0241fc">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MCU_MEM_END : <a class="el" href="group___peripheral__memory__map.html#ga4ddc1e9172ba6fe724328595a3fadcf2">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MCU_MemoryTypeDef : <a class="el" href="group___peripheral__memory__map.html#ga304d35aeeebef1445af976d8a5248d57">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>MCU_Periph_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gaccdef5b45f3d1646f248304e02b00e54">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gaccdef5b45f3d1646f248304e02b00e54">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_readInputs() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga15045e0feba8ddf08e20958fd1e36cd5">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga15045e0feba8ddf08e20958fd1e36cd5">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_Step_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad3c4ea41584d0367dfbfb697f5e57456">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MCU_writeOutputs() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad6b7bb9233d746d7709276f9ea1914c2">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad6b7bb9233d746d7709276f9ea1914c2">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>MDL_CHECK_PARAMETERS : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4936bd489281a5a9b9a2e081de0f003e">MCU.c</a></li>
 | 
			
		||||
<li>MDL_START : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gac032abbf580c891fb0c11e63e9bc668a">MCU.c</a></li>
 | 
			
		||||
<li>MDL_UPDATE : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga7556dbbf5cb7f9946d3e39bcda40c63b">MCU.c</a></li>
 | 
			
		||||
<li>mdlInitializeSampleTimes() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga4308a5a20d9c7060391059b1dfce872e">MCU.c</a></li>
 | 
			
		||||
<li>mdlInitializeSizes() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gab500fc17ae5e95797926ac770d903b84">MCU.c</a></li>
 | 
			
		||||
<li>mdlOutputs() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga52f81157111c2436496e1a9630bdce5b">MCU.c</a></li>
 | 
			
		||||
<li>mdlStart() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0dd07daf338cf84d1aee4bb8b6771720">MCU.c</a></li>
 | 
			
		||||
<li>mdlTerminate() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga343acfd8b3b5308d6c94bbf40efbbac5">MCU.c</a></li>
 | 
			
		||||
<li>mdlUpdate() : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#gad3d5b495abad2acd2ae68febd1d2c5ec">MCU.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,89 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
 | 
			
		||||
<li>native_while : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gabaad5b5eb9243ab531775be5eda6ee02">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>NPARAMS : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gae468832efa6adf5e9a96cabd8f878b47">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>NVIC : <a class="el" href="group___c_m_s_i_s__core__base.html#gac8e97e8ce56ae9f57da1363a937f8a17">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>NVIC_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gaa0288691785a5f868238e0468b39523d">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,88 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
 | 
			
		||||
<li>OUT_PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga9fa483e805a6570c4793b1e0ff9719ac">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>OUT_PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gac90b37686b0abfe29835c9632310897a">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>Overflow_Check() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga05b798408f2179ae27731f231cf4b620">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga05b798408f2179ae27731f231cf4b620">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,94 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
 | 
			
		||||
<li>PERIPH_BASE : <a class="el" href="group___peripheral__memory__map.html#ga9171f49478fa86d932f89e78e73b88b0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1294c8e27eb23b591c5195504e4dfd23">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gaed7efc100877000845c236ccdc9e144a">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga33c4df718741b5cb60ca3fffe8969672">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga16c53e8ec3bcf87a7d170220d774956c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PERIPH_SIZE : <a class="el" href="group___peripheral__memory__map.html#gaf91d23524f40a61d32fea568949043d0">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>PORT_NUMB : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gab59d8303ff443409a05cef11e3e7176e">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>PORT_WIDTH : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga80d9b6ce1525c1148d94c021f0b8c83e">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>pwr : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaba54a48e7552e8a1301cc87cdfcacfee">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,88 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
 | 
			
		||||
<li>rcc : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga33f5f83bbcee4994fef4f29192860875">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>rng : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gae5244ff1d33b8f1c69abb81fda62b538">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>rtc : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga423742450422a8873970b076a7e25028">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,125 +0,0 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 | 
			
		||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
 | 
			
		||||
<meta name="generator" content="Doxygen 1.10.0"/>
 | 
			
		||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
 | 
			
		||||
<title>STM MATLAB Simulator: Globals</title>
 | 
			
		||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="dynsections.js"></script>
 | 
			
		||||
<script type="text/javascript" src="clipboard.js"></script>
 | 
			
		||||
<script type="text/javascript" src="cookie.js"></script>
 | 
			
		||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 | 
			
		||||
<script type="text/javascript" src="search/searchdata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="search/search.js"></script>
 | 
			
		||||
<script type="text/javascript" src="darkmode_toggle.js"></script>
 | 
			
		||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 | 
			
		||||
<div id="titlearea">
 | 
			
		||||
<table cellspacing="0" cellpadding="0">
 | 
			
		||||
 <tbody>
 | 
			
		||||
 <tr id="projectrow">
 | 
			
		||||
  <td id="projectalign">
 | 
			
		||||
   <div id="projectname">STM MATLAB Simulator
 | 
			
		||||
   </div>
 | 
			
		||||
  </td>
 | 
			
		||||
 </tr>
 | 
			
		||||
 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- end header part -->
 | 
			
		||||
<!-- Generated by Doxygen 1.10.0 -->
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="menudata.js"></script>
 | 
			
		||||
<script type="text/javascript" src="menu.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
 | 
			
		||||
$(function() {
 | 
			
		||||
  initMenu('',true,false,'search.php','Search');
 | 
			
		||||
  $(function() { init_search(); });
 | 
			
		||||
});
 | 
			
		||||
/* @license-end */
 | 
			
		||||
</script>
 | 
			
		||||
<div id="main-nav"></div>
 | 
			
		||||
</div><!-- top -->
 | 
			
		||||
<!-- window showing the filter options -->
 | 
			
		||||
<div id="MSearchSelectWindow"
 | 
			
		||||
     onmouseover="return searchBox.OnSearchSelectShow()"
 | 
			
		||||
     onmouseout="return searchBox.OnSearchSelectHide()"
 | 
			
		||||
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- iframe showing the search results (closed by default) -->
 | 
			
		||||
<div id="MSearchResultsWindow">
 | 
			
		||||
<div id="MSearchResults">
 | 
			
		||||
<div class="SRPage">
 | 
			
		||||
<div id="SRIndex">
 | 
			
		||||
<div id="SRResults"></div>
 | 
			
		||||
<div class="SRStatus" id="Loading">Loading...</div>
 | 
			
		||||
<div class="SRStatus" id="Searching">Searching...</div>
 | 
			
		||||
<div class="SRStatus" id="NoMatches">No Matches</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="contents">
 | 
			
		||||
<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
 | 
			
		||||
 | 
			
		||||
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
 | 
			
		||||
<li>S_FUNCTION_LEVEL : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga9a4ab27953070e39249f3fad28e93749">MCU.c</a></li>
 | 
			
		||||
<li>S_FUNCTION_NAME : <a class="el" href="group___w_r_a_p_p_e_r___s_f_u_n_c.html#ga0f61df833e166c743295eebf43f0b142">MCU.c</a></li>
 | 
			
		||||
<li>SCB : <a class="el" href="group___c_m_s_i_s__core__base.html#gaaaf6477c2bde2f00f99e3c2fd1060b01">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCB_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#gad55a7ddb8d4b2398b0c1cfec76c0d9fd">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCnSCB : <a class="el" href="group___c_m_s_i_s__core__base.html#ga9fe0cd2eef83a8adad94490d9ecca63f">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCS_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga3c14ed93192c8d9143322bbf77ebf770">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SCS_BASE_SHIFT : <a class="el" href="group___c_m_s_i_s__core__base.html#ga48d67e0906624018a8dc1ff5409f31ca">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>sdio : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga8b6edf2e7d9debf95d77d172c8c32cb7">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>Set_Flag_If_Its_Expected : <a class="el" href="group___r_c_c___s_i_m_u_l_a_t_o_r.html#gadf8f9d228ec9091df7d092a298f11b17">stm32f4xx_matlab_rcc.h</a></li>
 | 
			
		||||
<li>SFUNC_to_GPIO() : <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga368334de2e425bc656526d2f42671454">stm32f4xx_matlab_gpio.c</a>, <a class="el" href="group___g_p_i_o___s_i_m_u_l_a_t_o_r.html#ga368334de2e425bc656526d2f42671454">stm32f4xx_matlab_gpio.h</a></li>
 | 
			
		||||
<li>SIM_deInitialize_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga6f04b162923bada308d9668743425b92">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_Initialize_Simulation() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">mcu_wrapper.c</a>, <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga54429d6d68b1d72ce16bab374e3ffa08">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>sim_while : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#ga1fef2893362ee1f5032b523ff8c7fd9d">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_writeOutput() : <a class="el" href="group___m_c_u___w_r_a_p_p_e_r.html#gad38bfad0ee1e186c0663565abb6bc71a">mcu_wrapper_conf.h</a></li>
 | 
			
		||||
<li>SIM_writeOutputs() : <a class="el" href="mcu__wrapper_8c.html#a47b40a9825bcaeb3a1dfba8b27a0be3f">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>Simulate_TIMs() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3128cf64eeea541a8e25a72ce10da335">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga3128cf64eeea541a8e25a72ce10da335">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>Slave_Channels : <a class="el" href="stm32f4xx__matlab__tim_8c.html#a66e48ba3c30d98536e05b7f5435e9828">stm32f4xx_matlab_tim.c</a></li>
 | 
			
		||||
<li>Slave_Mode_Check_Source() : <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga60fe7ff05dcbc30ca3c35aa08e87de21">stm32f4xx_matlab_tim.c</a>, <a class="el" href="group___t_i_m___s_i_m_u_l_a_t_o_r.html#ga60fe7ff05dcbc30ca3c35aa08e87de21">stm32f4xx_matlab_tim.h</a></li>
 | 
			
		||||
<li>spi1 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga8cc3430b6591549759eb42cc2004a889">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>spi2 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#gaafd9bde301b8cacea574ec4eea0e474f">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>spi3 : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga050e08b3b630957cd79c0e69968308bd">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>SRAM1_BASE : <a class="el" href="group___peripheral__memory__map.html#ga7d0fbfb8894012dbbb96754b95e562cd">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gac53e3a39a0ebd3520aaa373ae44ff838">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gac4c4f61082e4b168f29d9cf97dc3ca5c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga9d4c99653d22992b3b4b1537ade15d21">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga4d759a2722aeeb47a81dd047d4e1790e">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM1_SIZE : <a class="el" href="group___peripheral__memory__map.html#gacf1c7f7eb345f8e1b617fd1b16320111">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BASE : <a class="el" href="group___peripheral__memory__map.html#gadbb42a3d0a8a90a79d2146e4014241b1">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#gaff8892343768799209d59c2c33848222">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE : <a class="el" href="group___peripheral__memory__map.html#gac33cb6edadf184ab9860d77089503922">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_BASE_SHIFT : <a class="el" href="group___peripheral__memory__map.html#ga1654496a485d04270e2208afa8e4fd5c">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_BB_SIZE : <a class="el" href="group___peripheral__memory__map.html#ga146845582d93b1fa90c52f43f704c178">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SRAM2_SIZE : <a class="el" href="group___peripheral__memory__map.html#gad89e757d25db6160b1aedeb58fcdac09">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>status : <a class="el" href="mexing_8m.html#ab1dc10c44c3fef32dbb7508037a5a3d6">mexing.m</a></li>
 | 
			
		||||
<li>syscfg : <a class="el" href="group___p_e_r_i_p_h___v_a_r_s___f_o_r___d_e_b_u_g.html#ga973efd19b15b8e1452258c3a02fda513">stm32f4xx_periph_registers.c</a></li>
 | 
			
		||||
<li>SystemClock : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#ga6a1676e08289f73141f9fa8419311385">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>SystemClock_step : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gae50392991204ce9a89dd9aa8bf43634f">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>SystemClockDouble : <a class="el" href="group___w_r_a_p_p_e_r___c_o_n_f.html#gaf1cb3ba542e380d1f12d30579598c48c">mcu_wrapper.c</a></li>
 | 
			
		||||
<li>SysTick : <a class="el" href="group___c_m_s_i_s__core__base.html#gacd96c53beeaff8f603fcda425eb295de">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
<li>SysTick_BASE : <a class="el" href="group___c_m_s_i_s__core__base.html#ga58effaac0b93006b756d33209e814646">stm32f407xx_matlab_memory.h</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</div><!-- contents -->
 | 
			
		||||
<!-- start footer part -->
 | 
			
		||||
<hr class="footer"/><address class="footer"><small>
 | 
			
		||||
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
 | 
			
		||||
</small></address>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||