1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file           : main.c
5   * @brief          : Main program body
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2024 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 /* USER CODE END Header */
19 /* Includes ------------------------------------------------------------------*/
20 #include "main.h"
21 #include "string.h"
22 
23 /* Private includes ----------------------------------------------------------*/
24 /* USER CODE BEGIN Includes */
25 
26 /* USER CODE END Includes */
27 
28 /* Private typedef -----------------------------------------------------------*/
29 /* USER CODE BEGIN PTD */
30 
31 /* USER CODE END PTD */
32 
33 /* Private define ------------------------------------------------------------*/
34 /* USER CODE BEGIN PD */
35 
36 /* USER CODE END PD */
37 
38 /* Private macro -------------------------------------------------------------*/
39 /* USER CODE BEGIN PM */
40 
41 /* USER CODE END PM */
42 
43 /* Private variables ---------------------------------------------------------*/
44 
45 ETH_TxPacketConfig TxConfig;
46 ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
47 ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
48 
49 ADC_HandleTypeDef hadc1;
50 ADC_HandleTypeDef hadc2;
51 
52 ETH_HandleTypeDef heth;
53 
54 UART_HandleTypeDef hlpuart1;
55 UART_HandleTypeDef huart3;
56 
57 TIM_HandleTypeDef htim1;
58 TIM_HandleTypeDef htim3;
59 TIM_HandleTypeDef htim4;
60 
61 PCD_HandleTypeDef hpcd_USB_DRD_FS;
62 
63 /* USER CODE BEGIN PV */
64 
65 /* USER CODE END PV */
66 
67 /* Private function prototypes -----------------------------------------------*/
68 void SystemClock_Config(void);
69 static void MX_GPIO_Init(void);
70 static void MX_ADC1_Init(void);
71 static void MX_ETH_Init(void);
72 static void MX_ICACHE_Init(void);
73 static void MX_LPUART1_UART_Init(void);
74 static void MX_USART3_UART_Init(void);
75 static void MX_UCPD1_Init(void);
76 static void MX_USB_PCD_Init(void);
77 static void MX_ADC2_Init(void);
78 static void MX_TIM1_Init(void);
79 static void MX_TIM3_Init(void);
80 static void MX_TIM4_Init(void);
81 /* USER CODE BEGIN PFP */
82 
83 /* USER CODE END PFP */
84 
85 /* Private user code ---------------------------------------------------------*/
86 /* USER CODE BEGIN 0 */
87 
88 /* USER CODE END 0 */
89 
90 /**
91   * @brief  The application entry point.
92   * @retval int
93   */
main(void)94 int main(void)
95 {
96   /* USER CODE BEGIN 1 */
97 
98   /* USER CODE END 1 */
99 
100   /* MCU Configuration--------------------------------------------------------*/
101 
102   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
103   HAL_Init();
104 
105   /* USER CODE BEGIN Init */
106 
107   /* USER CODE END Init */
108 
109   /* Configure the system clock */
110   SystemClock_Config();
111 
112   /* USER CODE BEGIN SysInit */
113 
114   /* USER CODE END SysInit */
115 
116   /* Initialize all configured peripherals */
117   MX_GPIO_Init();
118   MX_ADC1_Init();
119   MX_ETH_Init();
120   MX_ICACHE_Init();
121   MX_LPUART1_UART_Init();
122   MX_USART3_UART_Init();
123   MX_UCPD1_Init();
124   MX_USB_PCD_Init();
125   MX_ADC2_Init();
126   MX_TIM1_Init();
127   MX_TIM3_Init();
128   MX_TIM4_Init();
129   /* USER CODE BEGIN 2 */
130 
131   /* USER CODE END 2 */
132 
133   /* Infinite loop */
134   /* USER CODE BEGIN WHILE */
135   while (1)
136   {
137     /* USER CODE END WHILE */
138 
139     /* USER CODE BEGIN 3 */
140   }
141   /* USER CODE END 3 */
142 }
143 
144 /**
145   * @brief System Clock Configuration
146   * @retval None
147   */
SystemClock_Config(void)148 void SystemClock_Config(void)
149 {
150   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
151   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
152 
153   /** Configure the main internal regulator output voltage
154   */
155   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
156 
157   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
158 
159   /** Initializes the RCC Oscillators according to the specified parameters
160   * in the RCC_OscInitTypeDef structure.
161   */
162   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI
163                               |RCC_OSCILLATORTYPE_HSE;
164   RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIGITAL;
165   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
166   RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;
167   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
168   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
169   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
170   RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
171   RCC_OscInitStruct.PLL.PLLM = 4;
172   RCC_OscInitStruct.PLL.PLLN = 250;
173   RCC_OscInitStruct.PLL.PLLP = 2;
174   RCC_OscInitStruct.PLL.PLLQ = 2;
175   RCC_OscInitStruct.PLL.PLLR = 2;
176   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
177   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
178   RCC_OscInitStruct.PLL.PLLFRACN = 0;
179   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
180   {
181     Error_Handler();
182   }
183 
184   /** Initializes the CPU, AHB and APB buses clocks
185   */
186   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
187                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
188                               |RCC_CLOCKTYPE_PCLK3;
189   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
190   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
191   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
192   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
193   RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
194 
195   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
196   {
197     Error_Handler();
198   }
199 }
200 
201 /**
202   * @brief ADC1 Initialization Function
203   * @param None
204   * @retval None
205   */
MX_ADC1_Init(void)206 static void MX_ADC1_Init(void)
207 {
208 
209   /* USER CODE BEGIN ADC1_Init 0 */
210 
211   /* USER CODE END ADC1_Init 0 */
212 
213   ADC_ChannelConfTypeDef sConfig = {0};
214 
215   /* USER CODE BEGIN ADC1_Init 1 */
216 
217   /* USER CODE END ADC1_Init 1 */
218 
219   /** Common config
220   */
221   hadc1.Instance = ADC1;
222   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
223   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
224   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
225   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
226   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
227   hadc1.Init.LowPowerAutoWait = DISABLE;
228   hadc1.Init.ContinuousConvMode = DISABLE;
229   hadc1.Init.NbrOfConversion = 1;
230   hadc1.Init.DiscontinuousConvMode = DISABLE;
231   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
232   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
233   hadc1.Init.DMAContinuousRequests = DISABLE;
234   hadc1.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
235   hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
236   hadc1.Init.OversamplingMode = DISABLE;
237   if (HAL_ADC_Init(&hadc1) != HAL_OK)
238   {
239     Error_Handler();
240   }
241 
242   /** Configure Regular Channel
243   */
244   sConfig.Channel = ADC_CHANNEL_18;
245   sConfig.Rank = ADC_REGULAR_RANK_1;
246   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
247   sConfig.SingleDiff = ADC_SINGLE_ENDED;
248   sConfig.OffsetNumber = ADC_OFFSET_NONE;
249   sConfig.Offset = 0;
250   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
251   {
252     Error_Handler();
253   }
254   /* USER CODE BEGIN ADC1_Init 2 */
255 
256   /* USER CODE END ADC1_Init 2 */
257 
258 }
259 
260 /**
261   * @brief ADC2 Initialization Function
262   * @param None
263   * @retval None
264   */
MX_ADC2_Init(void)265 static void MX_ADC2_Init(void)
266 {
267 
268   /* USER CODE BEGIN ADC2_Init 0 */
269 
270   /* USER CODE END ADC2_Init 0 */
271 
272   ADC_ChannelConfTypeDef sConfig = {0};
273 
274   /* USER CODE BEGIN ADC2_Init 1 */
275 
276   /* USER CODE END ADC2_Init 1 */
277 
278   /** Common config
279   */
280   hadc2.Instance = ADC2;
281   hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
282   hadc2.Init.Resolution = ADC_RESOLUTION_12B;
283   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
284   hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
285   hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
286   hadc2.Init.LowPowerAutoWait = DISABLE;
287   hadc2.Init.ContinuousConvMode = DISABLE;
288   hadc2.Init.NbrOfConversion = 1;
289   hadc2.Init.DiscontinuousConvMode = DISABLE;
290   hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
291   hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
292   hadc2.Init.DMAContinuousRequests = DISABLE;
293   hadc2.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
294   hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
295   hadc2.Init.OversamplingMode = DISABLE;
296   if (HAL_ADC_Init(&hadc2) != HAL_OK)
297   {
298     Error_Handler();
299   }
300 
301   /** Configure Regular Channel
302   */
303   sConfig.Channel = ADC_CHANNEL_3;
304   sConfig.Rank = ADC_REGULAR_RANK_1;
305   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
306   sConfig.SingleDiff = ADC_SINGLE_ENDED;
307   sConfig.OffsetNumber = ADC_OFFSET_NONE;
308   sConfig.Offset = 0;
309   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
310   {
311     Error_Handler();
312   }
313   /* USER CODE BEGIN ADC2_Init 2 */
314 
315   /* USER CODE END ADC2_Init 2 */
316 
317 }
318 
319 /**
320   * @brief ETH Initialization Function
321   * @param None
322   * @retval None
323   */
MX_ETH_Init(void)324 static void MX_ETH_Init(void)
325 {
326 
327   /* USER CODE BEGIN ETH_Init 0 */
328 
329   /* USER CODE END ETH_Init 0 */
330 
331    static uint8_t MACAddr[6];
332 
333   /* USER CODE BEGIN ETH_Init 1 */
334 
335   /* USER CODE END ETH_Init 1 */
336   heth.Instance = ETH;
337   MACAddr[0] = 0x00;
338   MACAddr[1] = 0x80;
339   MACAddr[2] = 0xE1;
340   MACAddr[3] = 0x00;
341   MACAddr[4] = 0x00;
342   MACAddr[5] = 0x00;
343   heth.Init.MACAddr = &MACAddr[0];
344   heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
345   heth.Init.TxDesc = DMATxDscrTab;
346   heth.Init.RxDesc = DMARxDscrTab;
347   heth.Init.RxBuffLen = 1524;
348 
349   /* USER CODE BEGIN MACADDRESS */
350 
351   /* USER CODE END MACADDRESS */
352 
353   if (HAL_ETH_Init(&heth) != HAL_OK)
354   {
355     Error_Handler();
356   }
357 
358   memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
359   TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
360   TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
361   TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
362   /* USER CODE BEGIN ETH_Init 2 */
363 
364   /* USER CODE END ETH_Init 2 */
365 
366 }
367 
368 /**
369   * @brief ICACHE Initialization Function
370   * @param None
371   * @retval None
372   */
MX_ICACHE_Init(void)373 static void MX_ICACHE_Init(void)
374 {
375 
376   /* USER CODE BEGIN ICACHE_Init 0 */
377 
378   /* USER CODE END ICACHE_Init 0 */
379 
380   /* USER CODE BEGIN ICACHE_Init 1 */
381 
382   /* USER CODE END ICACHE_Init 1 */
383 
384   /** Enable instruction cache (default 2-ways set associative cache)
385   */
386   if (HAL_ICACHE_Enable() != HAL_OK)
387   {
388     Error_Handler();
389   }
390   /* USER CODE BEGIN ICACHE_Init 2 */
391 
392   /* USER CODE END ICACHE_Init 2 */
393 
394 }
395 
396 /**
397   * @brief LPUART1 Initialization Function
398   * @param None
399   * @retval None
400   */
MX_LPUART1_UART_Init(void)401 static void MX_LPUART1_UART_Init(void)
402 {
403 
404   /* USER CODE BEGIN LPUART1_Init 0 */
405 
406   /* USER CODE END LPUART1_Init 0 */
407 
408   /* USER CODE BEGIN LPUART1_Init 1 */
409 
410   /* USER CODE END LPUART1_Init 1 */
411   hlpuart1.Instance = LPUART1;
412   hlpuart1.Init.BaudRate = 209700;
413   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
414   hlpuart1.Init.StopBits = UART_STOPBITS_1;
415   hlpuart1.Init.Parity = UART_PARITY_NONE;
416   hlpuart1.Init.Mode = UART_MODE_TX_RX;
417   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
418   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
419   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
420   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
421   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
422   {
423     Error_Handler();
424   }
425   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
426   {
427     Error_Handler();
428   }
429   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
430   {
431     Error_Handler();
432   }
433   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
434   {
435     Error_Handler();
436   }
437   /* USER CODE BEGIN LPUART1_Init 2 */
438 
439   /* USER CODE END LPUART1_Init 2 */
440 
441 }
442 
443 /**
444   * @brief USART3 Initialization Function
445   * @param None
446   * @retval None
447   */
MX_USART3_UART_Init(void)448 static void MX_USART3_UART_Init(void)
449 {
450 
451   /* USER CODE BEGIN USART3_Init 0 */
452 
453   /* USER CODE END USART3_Init 0 */
454 
455   /* USER CODE BEGIN USART3_Init 1 */
456 
457   /* USER CODE END USART3_Init 1 */
458   huart3.Instance = USART3;
459   huart3.Init.BaudRate = 115200;
460   huart3.Init.WordLength = UART_WORDLENGTH_8B;
461   huart3.Init.StopBits = UART_STOPBITS_1;
462   huart3.Init.Parity = UART_PARITY_NONE;
463   huart3.Init.Mode = UART_MODE_TX_RX;
464   huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
465   huart3.Init.OverSampling = UART_OVERSAMPLING_8;
466   huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
467   huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
468   huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
469   huart3.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
470   if (HAL_UART_Init(&huart3) != HAL_OK)
471   {
472     Error_Handler();
473   }
474   if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
475   {
476     Error_Handler();
477   }
478   if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
479   {
480     Error_Handler();
481   }
482   if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
483   {
484     Error_Handler();
485   }
486   /* USER CODE BEGIN USART3_Init 2 */
487 
488   /* USER CODE END USART3_Init 2 */
489 
490 }
491 
492 /**
493   * @brief TIM1 Initialization Function
494   * @param None
495   * @retval None
496   */
MX_TIM1_Init(void)497 static void MX_TIM1_Init(void)
498 {
499 
500   /* USER CODE BEGIN TIM1_Init 0 */
501 
502   /* USER CODE END TIM1_Init 0 */
503 
504   TIM_MasterConfigTypeDef sMasterConfig = {0};
505   TIM_OC_InitTypeDef sConfigOC = {0};
506   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
507 
508   /* USER CODE BEGIN TIM1_Init 1 */
509 
510   /* USER CODE END TIM1_Init 1 */
511   htim1.Instance = TIM1;
512   htim1.Init.Prescaler = 0;
513   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
514   htim1.Init.Period = 65535;
515   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
516   htim1.Init.RepetitionCounter = 0;
517   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
518   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
519   {
520     Error_Handler();
521   }
522   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
523   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
524   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
525   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
526   {
527     Error_Handler();
528   }
529   sConfigOC.OCMode = TIM_OCMODE_PWM1;
530   sConfigOC.Pulse = 0;
531   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
532   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
533   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
534   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
535   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
536   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
537   {
538     Error_Handler();
539   }
540   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
541   {
542     Error_Handler();
543   }
544   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
545   {
546     Error_Handler();
547   }
548   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
549   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
550   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
551   sBreakDeadTimeConfig.DeadTime = 0;
552   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
553   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
554   sBreakDeadTimeConfig.BreakFilter = 0;
555   sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
556   sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
557   sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
558   sBreakDeadTimeConfig.Break2Filter = 0;
559   sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
560   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
561   if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
562   {
563     Error_Handler();
564   }
565   /* USER CODE BEGIN TIM1_Init 2 */
566 
567   /* USER CODE END TIM1_Init 2 */
568   HAL_TIM_MspPostInit(&htim1);
569 
570 }
571 
572 /**
573   * @brief TIM3 Initialization Function
574   * @param None
575   * @retval None
576   */
MX_TIM3_Init(void)577 static void MX_TIM3_Init(void)
578 {
579 
580   /* USER CODE BEGIN TIM3_Init 0 */
581 
582   /* USER CODE END TIM3_Init 0 */
583 
584   TIM_MasterConfigTypeDef sMasterConfig = {0};
585   TIM_OC_InitTypeDef sConfigOC = {0};
586 
587   /* USER CODE BEGIN TIM3_Init 1 */
588 
589   /* USER CODE END TIM3_Init 1 */
590   htim3.Instance = TIM3;
591   htim3.Init.Prescaler = 0;
592   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
593   htim3.Init.Period = 65535;
594   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
595   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
596   if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
597   {
598     Error_Handler();
599   }
600   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
601   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
602   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
603   {
604     Error_Handler();
605   }
606   sConfigOC.OCMode = TIM_OCMODE_PWM1;
607   sConfigOC.Pulse = 0;
608   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
609   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
610   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
611   {
612     Error_Handler();
613   }
614   /* USER CODE BEGIN TIM3_Init 2 */
615 
616   /* USER CODE END TIM3_Init 2 */
617   HAL_TIM_MspPostInit(&htim3);
618 
619 }
620 
621 /**
622   * @brief TIM4 Initialization Function
623   * @param None
624   * @retval None
625   */
MX_TIM4_Init(void)626 static void MX_TIM4_Init(void)
627 {
628 
629   /* USER CODE BEGIN TIM4_Init 0 */
630 
631   /* USER CODE END TIM4_Init 0 */
632 
633   TIM_MasterConfigTypeDef sMasterConfig = {0};
634   TIM_OC_InitTypeDef sConfigOC = {0};
635 
636   /* USER CODE BEGIN TIM4_Init 1 */
637 
638   /* USER CODE END TIM4_Init 1 */
639   htim4.Instance = TIM4;
640   htim4.Init.Prescaler = 0;
641   htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
642   htim4.Init.Period = 65535;
643   htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
644   htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
645   if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
646   {
647     Error_Handler();
648   }
649   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
650   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
651   if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
652   {
653     Error_Handler();
654   }
655   sConfigOC.OCMode = TIM_OCMODE_PWM1;
656   sConfigOC.Pulse = 0;
657   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
658   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
659   if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
660   {
661     Error_Handler();
662   }
663   if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
664   {
665     Error_Handler();
666   }
667   /* USER CODE BEGIN TIM4_Init 2 */
668 
669   /* USER CODE END TIM4_Init 2 */
670   HAL_TIM_MspPostInit(&htim4);
671 
672 }
673 
674 /**
675   * @brief UCPD1 Initialization Function
676   * @param None
677   * @retval None
678   */
MX_UCPD1_Init(void)679 static void MX_UCPD1_Init(void)
680 {
681 
682   /* USER CODE BEGIN UCPD1_Init 0 */
683 
684   /* USER CODE END UCPD1_Init 0 */
685 
686   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
687 
688   /* Peripheral clock enable */
689   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_UCPD1);
690 
691   LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
692   /**UCPD1 GPIO Configuration
693   PB13   ------> UCPD1_CC1
694   PB14   ------> UCPD1_CC2
695   */
696   GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14;
697   GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
698   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
699   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
700 
701   /* USER CODE BEGIN UCPD1_Init 1 */
702 
703   /* USER CODE END UCPD1_Init 1 */
704   /* USER CODE BEGIN UCPD1_Init 2 */
705 
706   /* USER CODE END UCPD1_Init 2 */
707 
708 }
709 
710 /**
711   * @brief USB Initialization Function
712   * @param None
713   * @retval None
714   */
MX_USB_PCD_Init(void)715 static void MX_USB_PCD_Init(void)
716 {
717 
718   /* USER CODE BEGIN USB_Init 0 */
719 
720   /* USER CODE END USB_Init 0 */
721 
722   /* USER CODE BEGIN USB_Init 1 */
723 
724   /* USER CODE END USB_Init 1 */
725   hpcd_USB_DRD_FS.Instance = USB_DRD_FS;
726   hpcd_USB_DRD_FS.Init.dev_endpoints = 8;
727   hpcd_USB_DRD_FS.Init.speed = USBD_FS_SPEED;
728   hpcd_USB_DRD_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
729   hpcd_USB_DRD_FS.Init.Sof_enable = DISABLE;
730   hpcd_USB_DRD_FS.Init.low_power_enable = DISABLE;
731   hpcd_USB_DRD_FS.Init.lpm_enable = DISABLE;
732   hpcd_USB_DRD_FS.Init.battery_charging_enable = DISABLE;
733   hpcd_USB_DRD_FS.Init.vbus_sensing_enable = DISABLE;
734   hpcd_USB_DRD_FS.Init.bulk_doublebuffer_enable = DISABLE;
735   hpcd_USB_DRD_FS.Init.iso_singlebuffer_enable = DISABLE;
736   if (HAL_PCD_Init(&hpcd_USB_DRD_FS) != HAL_OK)
737   {
738     Error_Handler();
739   }
740   /* USER CODE BEGIN USB_Init 2 */
741 
742   /* USER CODE END USB_Init 2 */
743 
744 }
745 
746 /**
747   * @brief GPIO Initialization Function
748   * @param None
749   * @retval None
750   */
MX_GPIO_Init(void)751 static void MX_GPIO_Init(void)
752 {
753   GPIO_InitTypeDef GPIO_InitStruct = {0};
754 /* USER CODE BEGIN MX_GPIO_Init_1 */
755 /* USER CODE END MX_GPIO_Init_1 */
756 
757   /* GPIO Ports Clock Enable */
758   __HAL_RCC_GPIOE_CLK_ENABLE();
759   __HAL_RCC_GPIOC_CLK_ENABLE();
760   __HAL_RCC_GPIOF_CLK_ENABLE();
761   __HAL_RCC_GPIOH_CLK_ENABLE();
762   __HAL_RCC_GPIOA_CLK_ENABLE();
763   __HAL_RCC_GPIOB_CLK_ENABLE();
764   __HAL_RCC_GPIOD_CLK_ENABLE();
765   __HAL_RCC_GPIOG_CLK_ENABLE();
766 
767   /*Configure GPIO pin Output Level */
768   HAL_GPIO_WritePin(LED2_YELLOW_GPIO_Port, LED2_YELLOW_Pin, GPIO_PIN_RESET);
769 
770   /*Configure GPIO pin Output Level */
771   HAL_GPIO_WritePin(LED1_GREEN_GPIO_Port, LED1_GREEN_Pin, GPIO_PIN_RESET);
772 
773   /*Configure GPIO pin Output Level */
774   HAL_GPIO_WritePin(LED3_RED_GPIO_Port, LED3_RED_Pin, GPIO_PIN_RESET);
775 
776   /*Configure GPIO pin : USER_BUTTON_Pin */
777   GPIO_InitStruct.Pin = USER_BUTTON_Pin;
778   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
779   GPIO_InitStruct.Pull = GPIO_NOPULL;
780   HAL_GPIO_Init(USER_BUTTON_GPIO_Port, &GPIO_InitStruct);
781 
782   /*Configure GPIO pin : LED2_YELLOW_Pin */
783   GPIO_InitStruct.Pin = LED2_YELLOW_Pin;
784   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
785   GPIO_InitStruct.Pull = GPIO_NOPULL;
786   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
787   HAL_GPIO_Init(LED2_YELLOW_GPIO_Port, &GPIO_InitStruct);
788 
789   /*Configure GPIO pin : LED1_GREEN_Pin */
790   GPIO_InitStruct.Pin = LED1_GREEN_Pin;
791   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
792   GPIO_InitStruct.Pull = GPIO_NOPULL;
793   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
794   HAL_GPIO_Init(LED1_GREEN_GPIO_Port, &GPIO_InitStruct);
795 
796   /*Configure GPIO pin : LED3_RED_Pin */
797   GPIO_InitStruct.Pin = LED3_RED_Pin;
798   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
799   GPIO_InitStruct.Pull = GPIO_NOPULL;
800   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
801   HAL_GPIO_Init(LED3_RED_GPIO_Port, &GPIO_InitStruct);
802 
803   /*Configure GPIO pin : UCPD_FLT_Pin */
804   GPIO_InitStruct.Pin = UCPD_FLT_Pin;
805   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
806   GPIO_InitStruct.Pull = GPIO_NOPULL;
807   HAL_GPIO_Init(UCPD_FLT_GPIO_Port, &GPIO_InitStruct);
808 
809 /* USER CODE BEGIN MX_GPIO_Init_2 */
810 /* USER CODE END MX_GPIO_Init_2 */
811 }
812 
813 /* USER CODE BEGIN 4 */
814 
815 /* USER CODE END 4 */
816 
817 /**
818   * @brief  This function is executed in case of error occurrence.
819   * @retval None
820   */
Error_Handler(void)821 void Error_Handler(void)
822 {
823   /* USER CODE BEGIN Error_Handler_Debug */
824   /* User can add his own implementation to report the HAL error return state */
825   __disable_irq();
826   while (1)
827   {
828   }
829   /* USER CODE END Error_Handler_Debug */
830 }
831 
832 #ifdef  USE_FULL_ASSERT
833 /**
834   * @brief  Reports the name of the source file and the source line number
835   *         where the assert_param error has occurred.
836   * @param  file: pointer to the source file name
837   * @param  line: assert_param error line source number
838   * @retval None
839   */
assert_failed(uint8_t * file,uint32_t line)840 void assert_failed(uint8_t *file, uint32_t line)
841 {
842   /* USER CODE BEGIN 6 */
843   /* User can add his own implementation to report the file name and line number,
844      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
845   /* USER CODE END 6 */
846 }
847 #endif /* USE_FULL_ASSERT */
848