 ab07bfb104
			
		
	
	
		ab07bfb104
		
			
		
	
	
	
	
		
			
			* Fix target_f1 build * restore build for F1 target * change default LED pin state * add real hw gif Co-authored-by: Vadim Kaushan <admin@disasm.info>
		
			
				
	
	
		
			860 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			860 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* USER CODE BEGIN Header */
 | |
| /**
 | |
|   ******************************************************************************
 | |
|   * @file           : main.c
 | |
|   * @brief          : Main program body
 | |
|   ******************************************************************************
 | |
|   * @attention
 | |
|   *
 | |
|   * <h2><center>© Copyright (c) 2020 STMicroelectronics.
 | |
|   * All rights reserved.</center></h2>
 | |
|   *
 | |
|   * This software component is licensed by ST under Ultimate Liberty license
 | |
|   * SLA0044, the "License"; You may not use this file except in compliance with
 | |
|   * the License. You may obtain a copy of the License at:
 | |
|   *                             www.st.com/SLA0044
 | |
|   *
 | |
|   ******************************************************************************
 | |
|   */
 | |
| /* USER CODE END Header */
 | |
| 
 | |
| /* Includes ------------------------------------------------------------------*/
 | |
| #include "main.h"
 | |
| #include "cmsis_os.h"
 | |
| #include "usb_device.h"
 | |
| 
 | |
| /* Private includes ----------------------------------------------------------*/
 | |
| /* USER CODE BEGIN Includes */
 | |
| 
 | |
| /* USER CODE END Includes */
 | |
| 
 | |
| /* Private typedef -----------------------------------------------------------*/
 | |
| /* USER CODE BEGIN PTD */
 | |
| 
 | |
| /* USER CODE END PTD */
 | |
| 
 | |
| /* Private define ------------------------------------------------------------*/
 | |
| /* USER CODE BEGIN PD */
 | |
| /* USER CODE END PD */
 | |
| 
 | |
| /* Private macro -------------------------------------------------------------*/
 | |
| /* USER CODE BEGIN PM */
 | |
| 
 | |
| /* USER CODE END PM */
 | |
| 
 | |
| /* Private variables ---------------------------------------------------------*/
 | |
| ADC_HandleTypeDef hadc1;
 | |
| 
 | |
| COMP_HandleTypeDef hcomp1;
 | |
| 
 | |
| DAC_HandleTypeDef hdac1;
 | |
| 
 | |
| SPI_HandleTypeDef hspi1;
 | |
| SPI_HandleTypeDef hspi3;
 | |
| 
 | |
| TIM_HandleTypeDef htim5;
 | |
| TIM_HandleTypeDef htim8;
 | |
| TIM_HandleTypeDef htim15;
 | |
| 
 | |
| UART_HandleTypeDef huart1;
 | |
| 
 | |
| osThreadId defaultTaskHandle;
 | |
| /* USER CODE BEGIN PV */
 | |
| 
 | |
| /* USER CODE END PV */
 | |
| 
 | |
| /* Private function prototypes -----------------------------------------------*/
 | |
| void SystemClock_Config(void);
 | |
| static void MX_GPIO_Init(void);
 | |
| static void MX_SPI1_Init(void);
 | |
| static void MX_SPI3_Init(void);
 | |
| static void MX_ADC1_Init(void);
 | |
| static void MX_COMP1_Init(void);
 | |
| static void MX_DAC1_Init(void);
 | |
| static void MX_TIM5_Init(void);
 | |
| static void MX_TIM15_Init(void);
 | |
| static void MX_USART1_UART_Init(void);
 | |
| static void MX_TIM8_Init(void);
 | |
| void StartDefaultTask(void const * argument);
 | |
| 
 | |
| /* USER CODE BEGIN PFP */
 | |
| 
 | |
| /* USER CODE END PFP */
 | |
| 
 | |
| /* Private user code ---------------------------------------------------------*/
 | |
| /* USER CODE BEGIN 0 */
 | |
| 
 | |
| /* USER CODE END 0 */
 | |
| 
 | |
| /**
 | |
|   * @brief  The application entry point.
 | |
|   * @retval int
 | |
|   */
 | |
| int main(void)
 | |
| {
 | |
|   /* USER CODE BEGIN 1 */
 | |
| 
 | |
|   /* USER CODE END 1 */
 | |
|   
 | |
| 
 | |
|   /* MCU Configuration--------------------------------------------------------*/
 | |
| 
 | |
|   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 | |
|   HAL_Init();
 | |
| 
 | |
|   /* USER CODE BEGIN Init */
 | |
| 
 | |
|   /* USER CODE END Init */
 | |
| 
 | |
|   /* Configure the system clock */
 | |
|   SystemClock_Config();
 | |
| 
 | |
|   /* USER CODE BEGIN SysInit */
 | |
| 
 | |
|   /* USER CODE END SysInit */
 | |
| 
 | |
|   /* Initialize all configured peripherals */
 | |
|   MX_GPIO_Init();
 | |
|   MX_SPI1_Init();
 | |
|   MX_SPI3_Init();
 | |
|   MX_ADC1_Init();
 | |
|   MX_COMP1_Init();
 | |
|   MX_DAC1_Init();
 | |
|   MX_TIM5_Init();
 | |
|   MX_TIM15_Init();
 | |
|   MX_USART1_UART_Init();
 | |
|   MX_TIM8_Init();
 | |
|   /* USER CODE BEGIN 2 */
 | |
| 
 | |
|   /* USER CODE END 2 */
 | |
| 
 | |
|   /* USER CODE BEGIN RTOS_MUTEX */
 | |
|   /* add mutexes, ... */
 | |
|   /* USER CODE END RTOS_MUTEX */
 | |
| 
 | |
|   /* USER CODE BEGIN RTOS_SEMAPHORES */
 | |
|   /* add semaphores, ... */
 | |
|   /* USER CODE END RTOS_SEMAPHORES */
 | |
| 
 | |
|   /* USER CODE BEGIN RTOS_TIMERS */
 | |
|   /* start timers, add new ones, ... */
 | |
|   /* USER CODE END RTOS_TIMERS */
 | |
| 
 | |
|   /* USER CODE BEGIN RTOS_QUEUES */
 | |
|   /* add queues, ... */
 | |
|   /* USER CODE END RTOS_QUEUES */
 | |
| 
 | |
|   /* Create the thread(s) */
 | |
|   /* definition and creation of defaultTask */
 | |
|   osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 1024);
 | |
|   defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
 | |
| 
 | |
|   /* USER CODE BEGIN RTOS_THREADS */
 | |
|   /* add threads, ... */
 | |
|   /* USER CODE END RTOS_THREADS */
 | |
| 
 | |
|   /* Start scheduler */
 | |
|   osKernelStart();
 | |
|   
 | |
|   /* We should never get here as control is now taken by the scheduler */
 | |
| 
 | |
|   /* Infinite loop */
 | |
|   /* USER CODE BEGIN WHILE */
 | |
|   while (1)
 | |
|   {
 | |
|     /* USER CODE END WHILE */
 | |
| 
 | |
|     /* USER CODE BEGIN 3 */
 | |
|   }
 | |
|   /* USER CODE END 3 */
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief System Clock Configuration
 | |
|   * @retval None
 | |
|   */
 | |
| void SystemClock_Config(void)
 | |
| {
 | |
|   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 | |
|   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 | |
|   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 | |
| 
 | |
|   /** Initializes the CPU, AHB and APB busses clocks 
 | |
|   */
 | |
|   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 | |
|   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 | |
|   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | |
|   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 | |
|   RCC_OscInitStruct.PLL.PLLM = 2;
 | |
|   RCC_OscInitStruct.PLL.PLLN = 16;
 | |
|   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
 | |
|   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
 | |
|   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
 | |
|   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /** Initializes the CPU, AHB and APB busses 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_DIV1;
 | |
|   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 | |
| 
 | |
|   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USB
 | |
|                               |RCC_PERIPHCLK_ADC;
 | |
|   PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
 | |
|   PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK;
 | |
|   PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSE;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1M = 2;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1N = 12;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
 | |
|   PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_48M2CLK;
 | |
|   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /** Configure the main internal regulator output voltage 
 | |
|   */
 | |
|   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief ADC1 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_ADC1_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN ADC1_Init 0 */
 | |
| 
 | |
|   /* USER CODE END ADC1_Init 0 */
 | |
| 
 | |
|   ADC_MultiModeTypeDef multimode = {0};
 | |
|   ADC_ChannelConfTypeDef sConfig = {0};
 | |
| 
 | |
|   /* USER CODE BEGIN ADC1_Init 1 */
 | |
| 
 | |
|   /* USER CODE END ADC1_Init 1 */
 | |
|   /** Common config 
 | |
|   */
 | |
|   hadc1.Instance = ADC1;
 | |
|   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
 | |
|   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
 | |
|   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
 | |
|   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
 | |
|   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
 | |
|   hadc1.Init.LowPowerAutoWait = DISABLE;
 | |
|   hadc1.Init.ContinuousConvMode = DISABLE;
 | |
|   hadc1.Init.NbrOfConversion = 1;
 | |
|   hadc1.Init.DiscontinuousConvMode = DISABLE;
 | |
|   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
 | |
|   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
 | |
|   hadc1.Init.DMAContinuousRequests = DISABLE;
 | |
|   hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
 | |
|   hadc1.Init.OversamplingMode = DISABLE;
 | |
|   if (HAL_ADC_Init(&hadc1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /** Configure the ADC multi-mode 
 | |
|   */
 | |
|   multimode.Mode = ADC_MODE_INDEPENDENT;
 | |
|   if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /** Configure Regular Channel 
 | |
|   */
 | |
|   sConfig.Channel = ADC_CHANNEL_4;
 | |
|   sConfig.Rank = ADC_REGULAR_RANK_1;
 | |
|   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
 | |
|   sConfig.SingleDiff = ADC_SINGLE_ENDED;
 | |
|   sConfig.OffsetNumber = ADC_OFFSET_NONE;
 | |
|   sConfig.Offset = 0;
 | |
|   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN ADC1_Init 2 */
 | |
| 
 | |
|   /* USER CODE END ADC1_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief COMP1 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_COMP1_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN COMP1_Init 0 */
 | |
| 
 | |
|   /* USER CODE END COMP1_Init 0 */
 | |
| 
 | |
|   /* USER CODE BEGIN COMP1_Init 1 */
 | |
| 
 | |
|   /* USER CODE END COMP1_Init 1 */
 | |
|   hcomp1.Instance = COMP1;
 | |
|   hcomp1.Init.InvertingInput = COMP_INPUT_MINUS_DAC1_CH1;
 | |
|   hcomp1.Init.NonInvertingInput = COMP_INPUT_PLUS_IO1;
 | |
|   hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
 | |
|   hcomp1.Init.Hysteresis = COMP_HYSTERESIS_NONE;
 | |
|   hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
 | |
|   hcomp1.Init.Mode = COMP_POWERMODE_HIGHSPEED;
 | |
|   hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
 | |
|   hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
 | |
|   if (HAL_COMP_Init(&hcomp1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN COMP1_Init 2 */
 | |
| 
 | |
|   /* USER CODE END COMP1_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief DAC1 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_DAC1_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN DAC1_Init 0 */
 | |
| 
 | |
|   /* USER CODE END DAC1_Init 0 */
 | |
| 
 | |
|   DAC_ChannelConfTypeDef sConfig = {0};
 | |
| 
 | |
|   /* USER CODE BEGIN DAC1_Init 1 */
 | |
| 
 | |
|   /* USER CODE END DAC1_Init 1 */
 | |
|   /** DAC Initialization 
 | |
|   */
 | |
|   hdac1.Instance = DAC1;
 | |
|   if (HAL_DAC_Init(&hdac1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /** DAC channel OUT1 config 
 | |
|   */
 | |
|   sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
 | |
|   sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
 | |
|   sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
 | |
|   sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_ENABLE;
 | |
|   sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
 | |
|   if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN DAC1_Init 2 */
 | |
| 
 | |
|   /* USER CODE END DAC1_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief SPI1 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_SPI1_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN SPI1_Init 0 */
 | |
| 
 | |
|   /* USER CODE END SPI1_Init 0 */
 | |
| 
 | |
|   /* USER CODE BEGIN SPI1_Init 1 */
 | |
| 
 | |
|   /* USER CODE END SPI1_Init 1 */
 | |
|   /* SPI1 parameter configuration*/
 | |
|   hspi1.Instance = SPI1;
 | |
|   hspi1.Init.Mode = SPI_MODE_MASTER;
 | |
|   hspi1.Init.Direction = SPI_DIRECTION_2LINES;
 | |
|   hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
 | |
|   hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
 | |
|   hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 | |
|   hspi1.Init.NSS = SPI_NSS_SOFT;
 | |
|   hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
 | |
|   hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 | |
|   hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
 | |
|   hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 | |
|   hspi1.Init.CRCPolynomial = 7;
 | |
|   hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 | |
|   hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
 | |
|   if (HAL_SPI_Init(&hspi1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN SPI1_Init 2 */
 | |
| 
 | |
|   /* USER CODE END SPI1_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief SPI3 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_SPI3_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN SPI3_Init 0 */
 | |
| 
 | |
|   /* USER CODE END SPI3_Init 0 */
 | |
| 
 | |
|   /* USER CODE BEGIN SPI3_Init 1 */
 | |
| 
 | |
|   /* USER CODE END SPI3_Init 1 */
 | |
|   /* SPI3 parameter configuration*/
 | |
|   hspi3.Instance = SPI3;
 | |
|   hspi3.Init.Mode = SPI_MODE_MASTER;
 | |
|   hspi3.Init.Direction = SPI_DIRECTION_2LINES;
 | |
|   hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
 | |
|   hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
 | |
|   hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
 | |
|   hspi3.Init.NSS = SPI_NSS_SOFT;
 | |
|   hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
 | |
|   hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
 | |
|   hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
 | |
|   hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 | |
|   hspi3.Init.CRCPolynomial = 7;
 | |
|   hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 | |
|   hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
 | |
|   if (HAL_SPI_Init(&hspi3) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN SPI3_Init 2 */
 | |
| 
 | |
|   /* USER CODE END SPI3_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief TIM5 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_TIM5_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN TIM5_Init 0 */
 | |
| 
 | |
|   /* USER CODE END TIM5_Init 0 */
 | |
| 
 | |
|   TIM_MasterConfigTypeDef sMasterConfig = {0};
 | |
|   TIM_OC_InitTypeDef sConfigOC = {0};
 | |
| 
 | |
|   /* USER CODE BEGIN TIM5_Init 1 */
 | |
| 
 | |
|   /* USER CODE END TIM5_Init 1 */
 | |
|   htim5.Instance = TIM5;
 | |
|   htim5.Init.Prescaler = 500 - 1;
 | |
|   htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
 | |
|   htim5.Init.Period = 291;
 | |
|   htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 | |
|   htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 | |
|   if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 | |
|   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 | |
|   if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sConfigOC.OCMode = TIM_OCMODE_PWM1;
 | |
|   sConfigOC.Pulse = 145;
 | |
|   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 | |
|   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 | |
|   if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN TIM5_Init 2 */
 | |
| 
 | |
|   /* USER CODE END TIM5_Init 2 */
 | |
|   HAL_TIM_MspPostInit(&htim5);
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief TIM8 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_TIM8_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN TIM8_Init 0 */
 | |
| 
 | |
|   /* USER CODE END TIM8_Init 0 */
 | |
| 
 | |
|   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 | |
|   TIM_MasterConfigTypeDef sMasterConfig = {0};
 | |
|   TIM_IC_InitTypeDef sConfigIC = {0};
 | |
| 
 | |
|   /* USER CODE BEGIN TIM8_Init 1 */
 | |
| 
 | |
|   /* USER CODE END TIM8_Init 1 */
 | |
|   htim8.Instance = TIM8;
 | |
|   htim8.Init.Prescaler = 64-1;
 | |
|   htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
 | |
|   htim8.Init.Period = 32768-1;
 | |
|   htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 | |
|   htim8.Init.RepetitionCounter = 0;
 | |
|   htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 | |
|   if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
 | |
|   if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   if (HAL_TIM_IC_Init(&htim8) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 | |
|   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
 | |
|   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 | |
|   if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
 | |
|   sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
 | |
|   sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
 | |
|   sConfigIC.ICFilter = 0;
 | |
|   if (HAL_TIM_IC_ConfigChannel(&htim8, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN TIM8_Init 2 */
 | |
| 
 | |
|   /* USER CODE END TIM8_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief TIM15 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_TIM15_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN TIM15_Init 0 */
 | |
| 
 | |
|   /* USER CODE END TIM15_Init 0 */
 | |
| 
 | |
|   TIM_MasterConfigTypeDef sMasterConfig = {0};
 | |
|   TIM_OC_InitTypeDef sConfigOC = {0};
 | |
|   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
 | |
| 
 | |
|   /* USER CODE BEGIN TIM15_Init 1 */
 | |
| 
 | |
|   /* USER CODE END TIM15_Init 1 */
 | |
|   htim15.Instance = TIM15;
 | |
|   htim15.Init.Prescaler = 0;
 | |
|   htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
 | |
|   htim15.Init.Period = 0;
 | |
|   htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 | |
|   htim15.Init.RepetitionCounter = 0;
 | |
|   htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 | |
|   if (HAL_TIM_OC_Init(&htim15) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 | |
|   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 | |
|   if (HAL_TIMEx_MasterConfigSynchronization(&htim15, &sMasterConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sConfigOC.OCMode = TIM_OCMODE_TIMING;
 | |
|   sConfigOC.Pulse = 0;
 | |
|   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 | |
|   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
 | |
|   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 | |
|   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
 | |
|   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
 | |
|   if (HAL_TIM_OC_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   if (HAL_TIM_OC_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
 | |
|   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
 | |
|   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
 | |
|   sBreakDeadTimeConfig.DeadTime = 0;
 | |
|   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
 | |
|   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
 | |
|   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
 | |
|   if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, &sBreakDeadTimeConfig) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN TIM15_Init 2 */
 | |
| 
 | |
|   /* USER CODE END TIM15_Init 2 */
 | |
|   HAL_TIM_MspPostInit(&htim15);
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief USART1 Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_USART1_UART_Init(void)
 | |
| {
 | |
| 
 | |
|   /* USER CODE BEGIN USART1_Init 0 */
 | |
| 
 | |
|   /* USER CODE END USART1_Init 0 */
 | |
| 
 | |
|   /* USER CODE BEGIN USART1_Init 1 */
 | |
| 
 | |
|   /* USER CODE END USART1_Init 1 */
 | |
|   huart1.Instance = USART1;
 | |
|   huart1.Init.BaudRate = 115200;
 | |
|   huart1.Init.WordLength = UART_WORDLENGTH_8B;
 | |
|   huart1.Init.StopBits = UART_STOPBITS_1;
 | |
|   huart1.Init.Parity = UART_PARITY_NONE;
 | |
|   huart1.Init.Mode = UART_MODE_TX_RX;
 | |
|   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 | |
|   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
 | |
|   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
 | |
|   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 | |
|   if (HAL_UART_Init(&huart1) != HAL_OK)
 | |
|   {
 | |
|     Error_Handler();
 | |
|   }
 | |
|   /* USER CODE BEGIN USART1_Init 2 */
 | |
| 
 | |
|   /* USER CODE END USART1_Init 2 */
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @brief GPIO Initialization Function
 | |
|   * @param None
 | |
|   * @retval None
 | |
|   */
 | |
| static void MX_GPIO_Init(void)
 | |
| {
 | |
|   GPIO_InitTypeDef GPIO_InitStruct = {0};
 | |
| 
 | |
|   /* GPIO Ports Clock Enable */
 | |
|   __HAL_RCC_GPIOC_CLK_ENABLE();
 | |
|   __HAL_RCC_GPIOH_CLK_ENABLE();
 | |
|   __HAL_RCC_GPIOA_CLK_ENABLE();
 | |
|   __HAL_RCC_GPIOB_CLK_ENABLE();
 | |
|   __HAL_RCC_GPIOD_CLK_ENABLE();
 | |
| 
 | |
|   /*Configure GPIO pin Output Level */
 | |
|   HAL_GPIO_WritePin(GPIOA, DISPLAY_DI_Pin|CC1101_CS_Pin, GPIO_PIN_RESET);
 | |
| 
 | |
|   /*Configure GPIO pin Output Level */
 | |
|   HAL_GPIO_WritePin(GPIOB, LED_BLUE_Pin|LED_GREEN_Pin, GPIO_PIN_SET);
 | |
| 
 | |
|   /*Configure GPIO pin Output Level */
 | |
|   HAL_GPIO_WritePin(GPIOB, DISPLAY_RST_Pin|IR_TX_Pin|DISPLAY_BACKLIGHT_Pin, GPIO_PIN_RESET);
 | |
| 
 | |
|   /*Configure GPIO pin Output Level */
 | |
|   HAL_GPIO_WritePin(GPIOC, VIBRO_Pin|DISPLAY_CS_Pin, GPIO_PIN_RESET);
 | |
| 
 | |
|   /*Configure GPIO pin Output Level */
 | |
|   HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
 | |
| 
 | |
|   /*Configure GPIO pins : PC13 PC0 PC1 PC9 */
 | |
|   GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_9;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pin : CHRG_Pin */
 | |
|   GPIO_InitStruct.Pin = CHRG_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
 | |
|   GPIO_InitStruct.Pull = GPIO_PULLUP;
 | |
|   HAL_GPIO_Init(CHRG_GPIO_Port, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : BUTTON_DOWN_Pin BUTTON_BACK_Pin */
 | |
|   GPIO_InitStruct.Pin = BUTTON_DOWN_Pin|BUTTON_BACK_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
 | |
|   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 | |
|   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : DISPLAY_DI_Pin CC1101_CS_Pin */
 | |
|   GPIO_InitStruct.Pin = DISPLAY_DI_Pin|CC1101_CS_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | |
|   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : PA5 PA7 */
 | |
|   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : BUTTON_UP_Pin BUTTON_RIGHT_Pin BUTTON_OK_Pin */
 | |
|   GPIO_InitStruct.Pin = BUTTON_UP_Pin|BUTTON_RIGHT_Pin|BUTTON_OK_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
 | |
|   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 | |
|   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : LED_BLUE_Pin LED_GREEN_Pin */
 | |
|   GPIO_InitStruct.Pin = LED_BLUE_Pin|LED_GREEN_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
 | |
|   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : PB2 PB12 */
 | |
|   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_12;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : DISPLAY_RST_Pin IR_TX_Pin DISPLAY_BACKLIGHT_Pin */
 | |
|   GPIO_InitStruct.Pin = DISPLAY_RST_Pin|IR_TX_Pin|DISPLAY_BACKLIGHT_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | |
|   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pins : VIBRO_Pin DISPLAY_CS_Pin */
 | |
|   GPIO_InitStruct.Pin = VIBRO_Pin|DISPLAY_CS_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | |
|   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pin : LED_RED_Pin */
 | |
|   GPIO_InitStruct.Pin = LED_RED_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
 | |
|   HAL_GPIO_Init(LED_RED_GPIO_Port, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pin : PD2 */
 | |
|   GPIO_InitStruct.Pin = GPIO_PIN_2;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pin : BUTTON_LEFT_Pin */
 | |
|   GPIO_InitStruct.Pin = BUTTON_LEFT_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
 | |
|   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 | |
|   HAL_GPIO_Init(BUTTON_LEFT_GPIO_Port, &GPIO_InitStruct);
 | |
| 
 | |
|   /*Configure GPIO pin : CC1101_G0_Pin */
 | |
|   GPIO_InitStruct.Pin = CC1101_G0_Pin;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 | |
|   GPIO_InitStruct.Pull = GPIO_NOPULL;
 | |
|   HAL_GPIO_Init(CC1101_G0_GPIO_Port, &GPIO_InitStruct);
 | |
| 
 | |
|   /* EXTI interrupt init*/
 | |
|   HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
 | |
|   HAL_NVIC_EnableIRQ(EXTI0_IRQn);
 | |
| 
 | |
|   HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
 | |
|   HAL_NVIC_EnableIRQ(EXTI1_IRQn);
 | |
| 
 | |
|   HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
 | |
|   HAL_NVIC_EnableIRQ(EXTI2_IRQn);
 | |
| 
 | |
|   HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
 | |
|   HAL_NVIC_EnableIRQ(EXTI4_IRQn);
 | |
| 
 | |
|   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
 | |
|   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
 | |
| 
 | |
| }
 | |
| 
 | |
| /* USER CODE BEGIN 4 */
 | |
| void app();
 | |
| /* USER CODE END 4 */
 | |
| 
 | |
| /* USER CODE BEGIN Header_StartDefaultTask */
 | |
| /**
 | |
|   * @brief  Function implementing the defaultTask thread.
 | |
|   * @param  argument: Not used 
 | |
|   * @retval None
 | |
|   */
 | |
| /* USER CODE END Header_StartDefaultTask */
 | |
| void StartDefaultTask(void const * argument)
 | |
| {
 | |
|   /* init code for USB_DEVICE */
 | |
|   MX_USB_DEVICE_Init();
 | |
|   /* USER CODE BEGIN 5 */
 | |
|   /* Infinite loop */
 | |
|   app();
 | |
|   
 | |
|   for(;;)
 | |
|   {
 | |
|     osDelay(1);
 | |
|   }
 | |
|   /* USER CODE END 5 */ 
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @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 */
 | |
| 
 | |
|   /* 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(char *file, uint32_t line)
 | |
| { 
 | |
|   /* USER CODE BEGIN 6 */
 | |
|   /* User can add his own implementation to report the file name and line number,
 | |
|      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 | |
|   /* USER CODE END 6 */
 | |
| }
 | |
| #endif /* USE_FULL_ASSERT */
 | |
| 
 | |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 |