1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file           : main.c
5   * @brief          : Main program body
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 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 
22 /* Private includes ----------------------------------------------------------*/
23 /* USER CODE BEGIN Includes */
24 
25 /* USER CODE END Includes */
26 
27 /* Private typedef -----------------------------------------------------------*/
28 /* USER CODE BEGIN PTD */
29 
30 /* USER CODE END PTD */
31 
32 /* Private define ------------------------------------------------------------*/
33 /* USER CODE BEGIN PD */
34 
35 /* USER CODE END PD */
36 
37 /* Private macro -------------------------------------------------------------*/
38 /* USER CODE BEGIN PM */
39 
40 /* USER CODE END PM */
41 
42 /* Private variables ---------------------------------------------------------*/
43 ADC_HandleTypeDef hadc1;
44 
45 TIM_HandleTypeDef htim1;
46 TIM_HandleTypeDef htim2;
47 TIM_HandleTypeDef htim3;
48 
49 UART_HandleTypeDef huart1;
50 UART_HandleTypeDef huart3;
51 
52 PCD_HandleTypeDef hpcd_USB_DRD_FS;
53 
54 /* USER CODE BEGIN PV */
55 
56 /* USER CODE END PV */
57 
58 /* Private function prototypes -----------------------------------------------*/
59 void SystemClock_Config(void);
60 static void MX_GPIO_Init(void);
61 static void MX_ICACHE_Init(void);
62 static void MX_USART1_UART_Init(void);
63 static void MX_USART3_UART_Init(void);
64 static void MX_USB_PCD_Init(void);
65 static void MX_MEMORYMAP_Init(void);
66 static void MX_ADC1_Init(void);
67 static void MX_TIM1_Init(void);
68 static void MX_TIM2_Init(void);
69 static void MX_TIM3_Init(void);
70 /* USER CODE BEGIN PFP */
71 
72 /* USER CODE END PFP */
73 
74 /* Private user code ---------------------------------------------------------*/
75 /* USER CODE BEGIN 0 */
76 
77 /* USER CODE END 0 */
78 
79 /**
80   * @brief  The application entry point.
81   * @retval int
82   */
main(void)83 int main(void)
84 {
85   /* USER CODE BEGIN 1 */
86 
87   /* USER CODE END 1 */
88 
89   /* MCU Configuration--------------------------------------------------------*/
90 
91   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
92   HAL_Init();
93 
94   /* USER CODE BEGIN Init */
95 
96   /* USER CODE END Init */
97 
98   /* Configure the system clock */
99   SystemClock_Config();
100 
101   /* USER CODE BEGIN SysInit */
102 
103   /* USER CODE END SysInit */
104 
105   /* Initialize all configured peripherals */
106   MX_GPIO_Init();
107   MX_ICACHE_Init();
108   MX_USART1_UART_Init();
109   MX_USART3_UART_Init();
110   MX_USB_PCD_Init();
111   MX_MEMORYMAP_Init();
112   MX_ADC1_Init();
113   MX_TIM1_Init();
114   MX_TIM2_Init();
115   MX_TIM3_Init();
116   /* USER CODE BEGIN 2 */
117 
118   /* USER CODE END 2 */
119 
120   /* Infinite loop */
121   /* USER CODE BEGIN WHILE */
122   while (1)
123   {
124     /* USER CODE END WHILE */
125 
126     /* USER CODE BEGIN 3 */
127   }
128   /* USER CODE END 3 */
129 }
130 
131 /**
132   * @brief System Clock Configuration
133   * @retval None
134   */
SystemClock_Config(void)135 void SystemClock_Config(void)
136 {
137   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
138   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
139 
140   /** Configure the main internal regulator output voltage
141   */
142   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
143 
144   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
145 
146   /** Initializes the RCC Oscillators according to the specified parameters
147   * in the RCC_OscInitTypeDef structure.
148   */
149   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
150   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
151   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
152   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
153   RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
154   RCC_OscInitStruct.PLL.PLLM = 12;
155   RCC_OscInitStruct.PLL.PLLN = 250;
156   RCC_OscInitStruct.PLL.PLLP = 2;
157   RCC_OscInitStruct.PLL.PLLQ = 2;
158   RCC_OscInitStruct.PLL.PLLR = 2;
159   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
160   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
161   RCC_OscInitStruct.PLL.PLLFRACN = 0;
162   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
163   {
164     Error_Handler();
165   }
166 
167   /** Initializes the CPU, AHB and APB buses clocks
168   */
169   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
170                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
171                               |RCC_CLOCKTYPE_PCLK3;
172   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
173   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
174   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
175   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
176   RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
177 
178   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
179   {
180     Error_Handler();
181   }
182 }
183 
184 /**
185   * @brief ADC1 Initialization Function
186   * @param None
187   * @retval None
188   */
MX_ADC1_Init(void)189 static void MX_ADC1_Init(void)
190 {
191 
192   /* USER CODE BEGIN ADC1_Init 0 */
193 
194   /* USER CODE END ADC1_Init 0 */
195 
196   ADC_ChannelConfTypeDef sConfig = {0};
197 
198   /* USER CODE BEGIN ADC1_Init 1 */
199 
200   /* USER CODE END ADC1_Init 1 */
201 
202   /** Common config
203   */
204   hadc1.Instance = ADC1;
205   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
206   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
207   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
208   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
209   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
210   hadc1.Init.LowPowerAutoWait = DISABLE;
211   hadc1.Init.ContinuousConvMode = DISABLE;
212   hadc1.Init.NbrOfConversion = 1;
213   hadc1.Init.DiscontinuousConvMode = DISABLE;
214   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
215   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
216   hadc1.Init.DMAContinuousRequests = DISABLE;
217   hadc1.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
218   hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
219   hadc1.Init.OversamplingMode = DISABLE;
220   if (HAL_ADC_Init(&hadc1) != HAL_OK)
221   {
222     Error_Handler();
223   }
224 
225   /** Configure Regular Channel
226   */
227   sConfig.Channel = ADC_CHANNEL_0;
228   sConfig.Rank = ADC_REGULAR_RANK_1;
229   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
230   sConfig.SingleDiff = ADC_SINGLE_ENDED;
231   sConfig.OffsetNumber = ADC_OFFSET_NONE;
232   sConfig.Offset = 0;
233   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
234   {
235     Error_Handler();
236   }
237   /* USER CODE BEGIN ADC1_Init 2 */
238 
239   /* USER CODE END ADC1_Init 2 */
240 
241 }
242 
243 /**
244   * @brief ICACHE Initialization Function
245   * @param None
246   * @retval None
247   */
MX_ICACHE_Init(void)248 static void MX_ICACHE_Init(void)
249 {
250 
251   /* USER CODE BEGIN ICACHE_Init 0 */
252 
253   /* USER CODE END ICACHE_Init 0 */
254 
255   /* USER CODE BEGIN ICACHE_Init 1 */
256 
257   /* USER CODE END ICACHE_Init 1 */
258 
259   /** Enable instruction cache (default 2-ways set associative cache)
260   */
261   if (HAL_ICACHE_Enable() != HAL_OK)
262   {
263     Error_Handler();
264   }
265   /* USER CODE BEGIN ICACHE_Init 2 */
266 
267   /* USER CODE END ICACHE_Init 2 */
268 
269 }
270 
271 /**
272   * @brief MEMORYMAP Initialization Function
273   * @param None
274   * @retval None
275   */
MX_MEMORYMAP_Init(void)276 static void MX_MEMORYMAP_Init(void)
277 {
278 
279   /* USER CODE BEGIN MEMORYMAP_Init 0 */
280 
281   /* USER CODE END MEMORYMAP_Init 0 */
282 
283   /* USER CODE BEGIN MEMORYMAP_Init 1 */
284 
285   /* USER CODE END MEMORYMAP_Init 1 */
286   /* USER CODE BEGIN MEMORYMAP_Init 2 */
287 
288   /* USER CODE END MEMORYMAP_Init 2 */
289 
290 }
291 
292 /**
293   * @brief TIM1 Initialization Function
294   * @param None
295   * @retval None
296   */
MX_TIM1_Init(void)297 static void MX_TIM1_Init(void)
298 {
299 
300   /* USER CODE BEGIN TIM1_Init 0 */
301 
302   /* USER CODE END TIM1_Init 0 */
303 
304   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
305   TIM_MasterConfigTypeDef sMasterConfig = {0};
306   TIM_OC_InitTypeDef sConfigOC = {0};
307   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
308 
309   /* USER CODE BEGIN TIM1_Init 1 */
310 
311   /* USER CODE END TIM1_Init 1 */
312   htim1.Instance = TIM1;
313   htim1.Init.Prescaler = 0;
314   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
315   htim1.Init.Period = 65535;
316   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
317   htim1.Init.RepetitionCounter = 0;
318   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
319   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
320   {
321     Error_Handler();
322   }
323   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
324   if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
325   {
326     Error_Handler();
327   }
328   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
329   {
330     Error_Handler();
331   }
332   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
333   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
334   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
335   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
336   {
337     Error_Handler();
338   }
339   sConfigOC.OCMode = TIM_OCMODE_PWM1;
340   sConfigOC.Pulse = 0;
341   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
342   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
343   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
344   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
345   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
346   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
347   {
348     Error_Handler();
349   }
350   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
351   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
352   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
353   sBreakDeadTimeConfig.DeadTime = 0;
354   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
355   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
356   sBreakDeadTimeConfig.BreakFilter = 0;
357   sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
358   sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
359   sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
360   sBreakDeadTimeConfig.Break2Filter = 0;
361   sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
362   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
363   if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
364   {
365     Error_Handler();
366   }
367   /* USER CODE BEGIN TIM1_Init 2 */
368 
369   /* USER CODE END TIM1_Init 2 */
370   HAL_TIM_MspPostInit(&htim1);
371 
372 }
373 
374 /**
375   * @brief TIM2 Initialization Function
376   * @param None
377   * @retval None
378   */
MX_TIM2_Init(void)379 static void MX_TIM2_Init(void)
380 {
381 
382   /* USER CODE BEGIN TIM2_Init 0 */
383 
384   /* USER CODE END TIM2_Init 0 */
385 
386   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
387   TIM_MasterConfigTypeDef sMasterConfig = {0};
388   TIM_OC_InitTypeDef sConfigOC = {0};
389 
390   /* USER CODE BEGIN TIM2_Init 1 */
391 
392   /* USER CODE END TIM2_Init 1 */
393   htim2.Instance = TIM2;
394   htim2.Init.Prescaler = 0;
395   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
396   htim2.Init.Period = 4.294967295E9;
397   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
398   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
399   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
400   {
401     Error_Handler();
402   }
403   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
404   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
405   {
406     Error_Handler();
407   }
408   if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
409   {
410     Error_Handler();
411   }
412   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
413   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
414   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
415   {
416     Error_Handler();
417   }
418   sConfigOC.OCMode = TIM_OCMODE_PWM1;
419   sConfigOC.Pulse = 0;
420   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
421   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
422   if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
423   {
424     Error_Handler();
425   }
426   /* USER CODE BEGIN TIM2_Init 2 */
427 
428   /* USER CODE END TIM2_Init 2 */
429   HAL_TIM_MspPostInit(&htim2);
430 
431 }
432 
433 /**
434   * @brief TIM3 Initialization Function
435   * @param None
436   * @retval None
437   */
MX_TIM3_Init(void)438 static void MX_TIM3_Init(void)
439 {
440 
441   /* USER CODE BEGIN TIM3_Init 0 */
442 
443   /* USER CODE END TIM3_Init 0 */
444 
445   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
446   TIM_MasterConfigTypeDef sMasterConfig = {0};
447   TIM_OC_InitTypeDef sConfigOC = {0};
448 
449   /* USER CODE BEGIN TIM3_Init 1 */
450 
451   /* USER CODE END TIM3_Init 1 */
452   htim3.Instance = TIM3;
453   htim3.Init.Prescaler = 0;
454   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
455   htim3.Init.Period = 65535;
456   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
457   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
458   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
459   {
460     Error_Handler();
461   }
462   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
463   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
464   {
465     Error_Handler();
466   }
467   if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
468   {
469     Error_Handler();
470   }
471   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
472   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
473   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
474   {
475     Error_Handler();
476   }
477   sConfigOC.OCMode = TIM_OCMODE_PWM1;
478   sConfigOC.Pulse = 0;
479   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
480   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
481   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
482   {
483     Error_Handler();
484   }
485   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
486   {
487     Error_Handler();
488   }
489   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
490   {
491     Error_Handler();
492   }
493   /* USER CODE BEGIN TIM3_Init 2 */
494 
495   /* USER CODE END TIM3_Init 2 */
496   HAL_TIM_MspPostInit(&htim3);
497 
498 }
499 
500 /**
501   * @brief USART1 Initialization Function
502   * @param None
503   * @retval None
504   */
MX_USART1_UART_Init(void)505 static void MX_USART1_UART_Init(void)
506 {
507 
508   /* USER CODE BEGIN USART1_Init 0 */
509 
510   /* USER CODE END USART1_Init 0 */
511 
512   /* USER CODE BEGIN USART1_Init 1 */
513 
514   /* USER CODE END USART1_Init 1 */
515   huart1.Instance = USART1;
516   huart1.Init.BaudRate = 115200;
517   huart1.Init.WordLength = UART_WORDLENGTH_8B;
518   huart1.Init.StopBits = UART_STOPBITS_1;
519   huart1.Init.Parity = UART_PARITY_NONE;
520   huart1.Init.Mode = UART_MODE_TX_RX;
521   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
522   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
523   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
524   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
525   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
526   if (HAL_UART_Init(&huart1) != HAL_OK)
527   {
528     Error_Handler();
529   }
530   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
531   {
532     Error_Handler();
533   }
534   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
535   {
536     Error_Handler();
537   }
538   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
539   {
540     Error_Handler();
541   }
542   /* USER CODE BEGIN USART1_Init 2 */
543 
544   /* USER CODE END USART1_Init 2 */
545 
546 }
547 
548 /**
549   * @brief USART3 Initialization Function
550   * @param None
551   * @retval None
552   */
MX_USART3_UART_Init(void)553 static void MX_USART3_UART_Init(void)
554 {
555 
556   /* USER CODE BEGIN USART3_Init 0 */
557 
558   /* USER CODE END USART3_Init 0 */
559 
560   /* USER CODE BEGIN USART3_Init 1 */
561 
562   /* USER CODE END USART3_Init 1 */
563   huart3.Instance = USART3;
564   huart3.Init.BaudRate = 115200;
565   huart3.Init.WordLength = UART_WORDLENGTH_8B;
566   huart3.Init.StopBits = UART_STOPBITS_1;
567   huart3.Init.Parity = UART_PARITY_NONE;
568   huart3.Init.Mode = UART_MODE_TX_RX;
569   huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
570   huart3.Init.OverSampling = UART_OVERSAMPLING_16;
571   huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
572   huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
573   huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
574   if (HAL_UART_Init(&huart3) != HAL_OK)
575   {
576     Error_Handler();
577   }
578   if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
579   {
580     Error_Handler();
581   }
582   if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
583   {
584     Error_Handler();
585   }
586   if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
587   {
588     Error_Handler();
589   }
590   /* USER CODE BEGIN USART3_Init 2 */
591 
592   /* USER CODE END USART3_Init 2 */
593 
594 }
595 
596 /**
597   * @brief USB Initialization Function
598   * @param None
599   * @retval None
600   */
MX_USB_PCD_Init(void)601 static void MX_USB_PCD_Init(void)
602 {
603 
604   /* USER CODE BEGIN USB_Init 0 */
605 
606   /* USER CODE END USB_Init 0 */
607 
608   /* USER CODE BEGIN USB_Init 1 */
609 
610   /* USER CODE END USB_Init 1 */
611   hpcd_USB_DRD_FS.Instance = USB_DRD_FS;
612   hpcd_USB_DRD_FS.Init.dev_endpoints = 8;
613   hpcd_USB_DRD_FS.Init.speed = USBD_FS_SPEED;
614   hpcd_USB_DRD_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
615   hpcd_USB_DRD_FS.Init.Sof_enable = DISABLE;
616   hpcd_USB_DRD_FS.Init.low_power_enable = DISABLE;
617   hpcd_USB_DRD_FS.Init.lpm_enable = DISABLE;
618   hpcd_USB_DRD_FS.Init.battery_charging_enable = DISABLE;
619   hpcd_USB_DRD_FS.Init.vbus_sensing_enable = DISABLE;
620   hpcd_USB_DRD_FS.Init.bulk_doublebuffer_enable = DISABLE;
621   hpcd_USB_DRD_FS.Init.iso_singlebuffer_enable = DISABLE;
622   if (HAL_PCD_Init(&hpcd_USB_DRD_FS) != HAL_OK)
623   {
624     Error_Handler();
625   }
626   /* USER CODE BEGIN USB_Init 2 */
627 
628   /* USER CODE END USB_Init 2 */
629 
630 }
631 
632 /**
633   * @brief GPIO Initialization Function
634   * @param None
635   * @retval None
636   */
MX_GPIO_Init(void)637 static void MX_GPIO_Init(void)
638 {
639   GPIO_InitTypeDef GPIO_InitStruct = {0};
640 /* USER CODE BEGIN MX_GPIO_Init_1 */
641 /* USER CODE END MX_GPIO_Init_1 */
642 
643   /* GPIO Ports Clock Enable */
644   __HAL_RCC_GPIOC_CLK_ENABLE();
645   __HAL_RCC_GPIOH_CLK_ENABLE();
646   __HAL_RCC_GPIOA_CLK_ENABLE();
647   __HAL_RCC_GPIOB_CLK_ENABLE();
648   __HAL_RCC_GPIOD_CLK_ENABLE();
649 
650   /*Configure GPIO pin Output Level */
651   HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, GPIO_PIN_RESET);
652 
653   /*Configure GPIO pin Output Level */
654   HAL_GPIO_WritePin(USB_FS_PWR_EN_GPIO_Port, USB_FS_PWR_EN_Pin, GPIO_PIN_RESET);
655 
656   /*Configure GPIO pin : B1_BLUE_USER_BUTTON_Pin */
657   GPIO_InitStruct.Pin = B1_BLUE_USER_BUTTON_Pin;
658   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
659   GPIO_InitStruct.Pull = GPIO_NOPULL;
660   HAL_GPIO_Init(B1_BLUE_USER_BUTTON_GPIO_Port, &GPIO_InitStruct);
661 
662   /*Configure GPIO pin : USER_LED_Pin */
663   GPIO_InitStruct.Pin = USER_LED_Pin;
664   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
665   GPIO_InitStruct.Pull = GPIO_NOPULL;
666   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
667   HAL_GPIO_Init(USER_LED_GPIO_Port, &GPIO_InitStruct);
668 
669   /*Configure GPIO pin : USB_FS_VBUS_Pin */
670   GPIO_InitStruct.Pin = USB_FS_VBUS_Pin;
671   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
672   GPIO_InitStruct.Pull = GPIO_NOPULL;
673   HAL_GPIO_Init(USB_FS_VBUS_GPIO_Port, &GPIO_InitStruct);
674 
675   /*Configure GPIO pin : USB_FS_PWR_EN_Pin */
676   GPIO_InitStruct.Pin = USB_FS_PWR_EN_Pin;
677   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
678   GPIO_InitStruct.Pull = GPIO_NOPULL;
679   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
680   HAL_GPIO_Init(USB_FS_PWR_EN_GPIO_Port, &GPIO_InitStruct);
681 
682   /*Configure GPIO pin : USB_FS_OVCR_Pin */
683   GPIO_InitStruct.Pin = USB_FS_OVCR_Pin;
684   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
685   GPIO_InitStruct.Pull = GPIO_NOPULL;
686   HAL_GPIO_Init(USB_FS_OVCR_GPIO_Port, &GPIO_InitStruct);
687 
688   /*Configure GPIO pins : PB6 PB7 */
689   GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
690   GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
691   GPIO_InitStruct.Pull = GPIO_NOPULL;
692   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
693   GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
694   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
695 
696 /* USER CODE BEGIN MX_GPIO_Init_2 */
697 /* USER CODE END MX_GPIO_Init_2 */
698 }
699 
700 /* USER CODE BEGIN 4 */
701 
702 /* USER CODE END 4 */
703 
704 /**
705   * @brief  This function is executed in case of error occurrence.
706   * @retval None
707   */
Error_Handler(void)708 void Error_Handler(void)
709 {
710   /* USER CODE BEGIN Error_Handler_Debug */
711   /* User can add his own implementation to report the HAL error return state */
712   __disable_irq();
713   while (1)
714   {
715   }
716   /* USER CODE END Error_Handler_Debug */
717 }
718 
719 #ifdef  USE_FULL_ASSERT
720 /**
721   * @brief  Reports the name of the source file and the source line number
722   *         where the assert_param error has occurred.
723   * @param  file: pointer to the source file name
724   * @param  line: assert_param error line source number
725   * @retval None
726   */
assert_failed(uint8_t * file,uint32_t line)727 void assert_failed(uint8_t *file, uint32_t line)
728 {
729   /* USER CODE BEGIN 6 */
730   /* User can add his own implementation to report the file name and line number,
731      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
732   /* USER CODE END 6 */
733 }
734 #endif /* USE_FULL_ASSERT */
735