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 #include "usb_device.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 ADC_HandleTypeDef hadc1;
45 ADC_HandleTypeDef hadc2;
46 ADC_HandleTypeDef hadc3;
47
48 DCMI_HandleTypeDef hdcmi;
49
50 DFSDM_Channel_HandleTypeDef hdfsdm1_channel1;
51 DFSDM_Channel_HandleTypeDef hdfsdm1_channel2;
52
53 I2C_HandleTypeDef hi2c1;
54 I2C_HandleTypeDef hi2c2;
55
56 UART_HandleTypeDef hlpuart1;
57 UART_HandleTypeDef huart1;
58 UART_HandleTypeDef huart2;
59
60 QSPI_HandleTypeDef hqspi;
61
62 SAI_HandleTypeDef hsai_BlockA1;
63 SAI_HandleTypeDef hsai_BlockB1;
64
65 SD_HandleTypeDef hsd1;
66
67 SPI_HandleTypeDef hspi1;
68 SPI_HandleTypeDef hspi2;
69
70 SRAM_HandleTypeDef hsram1;
71 SRAM_HandleTypeDef hsram2;
72
73 /* USER CODE BEGIN PV */
74
75 /* USER CODE END PV */
76
77 /* Private function prototypes -----------------------------------------------*/
78 void SystemClock_Config(void);
79 void PeriphCommonClock_Config(void);
80 static void MX_GPIO_Init(void);
81 static void MX_ADC1_Init(void);
82 static void MX_ADC2_Init(void);
83 static void MX_ADC3_Init(void);
84 static void MX_DCMI_Init(void);
85 static void MX_DFSDM1_Init(void);
86 static void MX_FMC_Init(void);
87 static void MX_I2C1_Init(void);
88 static void MX_I2C2_Init(void);
89 static void MX_LPUART1_UART_Init(void);
90 static void MX_USART1_UART_Init(void);
91 static void MX_USART2_UART_Init(void);
92 static void MX_QUADSPI_Init(void);
93 static void MX_SAI1_Init(void);
94 static void MX_SDMMC1_SD_Init(void);
95 static void MX_SPI1_Init(void);
96 static void MX_SPI2_Init(void);
97 /* USER CODE BEGIN PFP */
98
99 /* USER CODE END PFP */
100
101 /* Private user code ---------------------------------------------------------*/
102 /* USER CODE BEGIN 0 */
103
104 /* USER CODE END 0 */
105
106 /**
107 * @brief The application entry point.
108 * @retval int
109 */
main(void)110 int main(void)
111 {
112 /* USER CODE BEGIN 1 */
113
114 /* USER CODE END 1 */
115
116 /* MCU Configuration--------------------------------------------------------*/
117
118 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
119 HAL_Init();
120
121 /* USER CODE BEGIN Init */
122
123 /* USER CODE END Init */
124
125 /* Configure the system clock */
126 SystemClock_Config();
127
128 /* Configure the peripherals common clocks */
129 PeriphCommonClock_Config();
130
131 /* USER CODE BEGIN SysInit */
132
133 /* USER CODE END SysInit */
134
135 /* Initialize all configured peripherals */
136 MX_GPIO_Init();
137 MX_ADC1_Init();
138 MX_ADC2_Init();
139 MX_ADC3_Init();
140 MX_DCMI_Init();
141 MX_DFSDM1_Init();
142 MX_FMC_Init();
143 MX_I2C1_Init();
144 MX_I2C2_Init();
145 MX_LPUART1_UART_Init();
146 MX_USART1_UART_Init();
147 MX_USART2_UART_Init();
148 MX_QUADSPI_Init();
149 MX_SAI1_Init();
150 MX_SDMMC1_SD_Init();
151 MX_SPI1_Init();
152 MX_SPI2_Init();
153 MX_USB_DEVICE_Init();
154 /* USER CODE BEGIN 2 */
155
156 /* USER CODE END 2 */
157
158 /* Infinite loop */
159 /* USER CODE BEGIN WHILE */
160 while (1)
161 {
162 /* USER CODE END WHILE */
163
164 /* USER CODE BEGIN 3 */
165 }
166 /* USER CODE END 3 */
167 }
168
169 /**
170 * @brief System Clock Configuration
171 * @retval None
172 */
SystemClock_Config(void)173 void SystemClock_Config(void)
174 {
175 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
176 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
177
178 /** Configure the main internal regulator output voltage
179 */
180 if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
181 {
182 Error_Handler();
183 }
184
185 /** Configure LSE Drive Capability
186 */
187 HAL_PWR_EnableBkUpAccess();
188 __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
189
190 /** Initializes the RCC Oscillators according to the specified parameters
191 * in the RCC_OscInitTypeDef structure.
192 */
193 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
194 RCC_OscInitStruct.LSEState = RCC_LSE_ON;
195 RCC_OscInitStruct.MSIState = RCC_MSI_ON;
196 RCC_OscInitStruct.MSICalibrationValue = 0;
197 RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_9;
198 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
199 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
200 RCC_OscInitStruct.PLL.PLLM = 5;
201 RCC_OscInitStruct.PLL.PLLN = 71;
202 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
203 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
204 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV6;
205 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
206 {
207 Error_Handler();
208 }
209
210 /** Initializes the CPU, AHB and APB buses clocks
211 */
212 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
213 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
214 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
215 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV4;
216 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
217 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
218
219 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
220 {
221 Error_Handler();
222 }
223
224 /** Enable MSI Auto calibration
225 */
226 HAL_RCCEx_EnableMSIPLLMode();
227 }
228
229 /**
230 * @brief Peripherals Common Clock Configuration
231 * @retval None
232 */
PeriphCommonClock_Config(void)233 void PeriphCommonClock_Config(void)
234 {
235 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
236
237 /** Initializes the peripherals clock
238 */
239 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SAI1|RCC_PERIPHCLK_USB
240 |RCC_PERIPHCLK_SDMMC1|RCC_PERIPHCLK_ADC;
241 PeriphClkInit.Sai1ClockSelection = RCC_SAI1CLKSOURCE_PLLSAI1;
242 PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
243 PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
244 PeriphClkInit.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_PLLSAI1;
245 PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_MSI;
246 PeriphClkInit.PLLSAI1.PLLSAI1M = 5;
247 PeriphClkInit.PLLSAI1.PLLSAI1N = 20;
248 PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV2;
249 PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
250 PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
251 PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_SAI1CLK|RCC_PLLSAI1_48M2CLK
252 |RCC_PLLSAI1_ADC1CLK;
253 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
254 {
255 Error_Handler();
256 }
257 }
258
259 /**
260 * @brief ADC1 Initialization Function
261 * @param None
262 * @retval None
263 */
MX_ADC1_Init(void)264 static void MX_ADC1_Init(void)
265 {
266
267 /* USER CODE BEGIN ADC1_Init 0 */
268
269 /* USER CODE END ADC1_Init 0 */
270
271 ADC_MultiModeTypeDef multimode = {0};
272 ADC_ChannelConfTypeDef sConfig = {0};
273
274 /* USER CODE BEGIN ADC1_Init 1 */
275
276 /* USER CODE END ADC1_Init 1 */
277
278 /** Common config
279 */
280 hadc1.Instance = ADC1;
281 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
282 hadc1.Init.Resolution = ADC_RESOLUTION_12B;
283 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
284 hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
285 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
286 hadc1.Init.LowPowerAutoWait = DISABLE;
287 hadc1.Init.ContinuousConvMode = DISABLE;
288 hadc1.Init.NbrOfConversion = 1;
289 hadc1.Init.DiscontinuousConvMode = DISABLE;
290 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
291 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
292 hadc1.Init.DMAContinuousRequests = DISABLE;
293 hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
294 hadc1.Init.OversamplingMode = DISABLE;
295 if (HAL_ADC_Init(&hadc1) != HAL_OK)
296 {
297 Error_Handler();
298 }
299
300 /** Configure the ADC multi-mode
301 */
302 multimode.Mode = ADC_MODE_INDEPENDENT;
303 if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
304 {
305 Error_Handler();
306 }
307
308 /** Configure Regular Channel
309 */
310 sConfig.Channel = ADC_CHANNEL_4;
311 sConfig.Rank = ADC_REGULAR_RANK_1;
312 sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
313 sConfig.SingleDiff = ADC_SINGLE_ENDED;
314 sConfig.OffsetNumber = ADC_OFFSET_NONE;
315 sConfig.Offset = 0;
316 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
317 {
318 Error_Handler();
319 }
320 /* USER CODE BEGIN ADC1_Init 2 */
321
322 /* USER CODE END ADC1_Init 2 */
323
324 }
325
326 /**
327 * @brief ADC2 Initialization Function
328 * @param None
329 * @retval None
330 */
MX_ADC2_Init(void)331 static void MX_ADC2_Init(void)
332 {
333
334 /* USER CODE BEGIN ADC2_Init 0 */
335
336 /* USER CODE END ADC2_Init 0 */
337
338 ADC_ChannelConfTypeDef sConfig = {0};
339
340 /* USER CODE BEGIN ADC2_Init 1 */
341
342 /* USER CODE END ADC2_Init 1 */
343
344 /** Common config
345 */
346 hadc2.Instance = ADC2;
347 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
348 hadc2.Init.Resolution = ADC_RESOLUTION_12B;
349 hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
350 hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
351 hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
352 hadc2.Init.LowPowerAutoWait = DISABLE;
353 hadc2.Init.ContinuousConvMode = DISABLE;
354 hadc2.Init.NbrOfConversion = 1;
355 hadc2.Init.DiscontinuousConvMode = DISABLE;
356 hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
357 hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
358 hadc2.Init.DMAContinuousRequests = DISABLE;
359 hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
360 hadc2.Init.OversamplingMode = DISABLE;
361 if (HAL_ADC_Init(&hadc2) != HAL_OK)
362 {
363 Error_Handler();
364 }
365
366 /** Configure Regular Channel
367 */
368 sConfig.Channel = ADC_CHANNEL_9;
369 sConfig.Rank = ADC_REGULAR_RANK_1;
370 sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
371 sConfig.SingleDiff = ADC_SINGLE_ENDED;
372 sConfig.OffsetNumber = ADC_OFFSET_NONE;
373 sConfig.Offset = 0;
374 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
375 {
376 Error_Handler();
377 }
378 /* USER CODE BEGIN ADC2_Init 2 */
379
380 /* USER CODE END ADC2_Init 2 */
381
382 }
383
384 /**
385 * @brief ADC3 Initialization Function
386 * @param None
387 * @retval None
388 */
MX_ADC3_Init(void)389 static void MX_ADC3_Init(void)
390 {
391
392 /* USER CODE BEGIN ADC3_Init 0 */
393
394 /* USER CODE END ADC3_Init 0 */
395
396 ADC_ChannelConfTypeDef sConfig = {0};
397
398 /* USER CODE BEGIN ADC3_Init 1 */
399
400 /* USER CODE END ADC3_Init 1 */
401
402 /** Common config
403 */
404 hadc3.Instance = ADC3;
405 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
406 hadc3.Init.Resolution = ADC_RESOLUTION_12B;
407 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
408 hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
409 hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
410 hadc3.Init.LowPowerAutoWait = DISABLE;
411 hadc3.Init.ContinuousConvMode = DISABLE;
412 hadc3.Init.NbrOfConversion = 1;
413 hadc3.Init.DiscontinuousConvMode = DISABLE;
414 hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
415 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
416 hadc3.Init.DMAContinuousRequests = DISABLE;
417 hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
418 hadc3.Init.OversamplingMode = DISABLE;
419 if (HAL_ADC_Init(&hadc3) != HAL_OK)
420 {
421 Error_Handler();
422 }
423
424 /** Configure Regular Channel
425 */
426 sConfig.Channel = ADC_CHANNEL_13;
427 sConfig.Rank = ADC_REGULAR_RANK_1;
428 sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
429 sConfig.SingleDiff = ADC_SINGLE_ENDED;
430 sConfig.OffsetNumber = ADC_OFFSET_NONE;
431 sConfig.Offset = 0;
432 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
433 {
434 Error_Handler();
435 }
436 /* USER CODE BEGIN ADC3_Init 2 */
437
438 /* USER CODE END ADC3_Init 2 */
439
440 }
441
442 /**
443 * @brief DCMI Initialization Function
444 * @param None
445 * @retval None
446 */
MX_DCMI_Init(void)447 static void MX_DCMI_Init(void)
448 {
449
450 /* USER CODE BEGIN DCMI_Init 0 */
451
452 /* USER CODE END DCMI_Init 0 */
453
454 /* USER CODE BEGIN DCMI_Init 1 */
455
456 /* USER CODE END DCMI_Init 1 */
457 hdcmi.Instance = DCMI;
458 hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
459 hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
460 hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
461 hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
462 hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
463 hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
464 hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;
465 hdcmi.Init.ByteSelectMode = DCMI_BSM_ALL;
466 hdcmi.Init.ByteSelectStart = DCMI_OEBS_ODD;
467 hdcmi.Init.LineSelectMode = DCMI_LSM_ALL;
468 hdcmi.Init.LineSelectStart = DCMI_OELS_ODD;
469 if (HAL_DCMI_Init(&hdcmi) != HAL_OK)
470 {
471 Error_Handler();
472 }
473 /* USER CODE BEGIN DCMI_Init 2 */
474
475 /* USER CODE END DCMI_Init 2 */
476
477 }
478
479 /**
480 * @brief DFSDM1 Initialization Function
481 * @param None
482 * @retval None
483 */
MX_DFSDM1_Init(void)484 static void MX_DFSDM1_Init(void)
485 {
486
487 /* USER CODE BEGIN DFSDM1_Init 0 */
488
489 /* USER CODE END DFSDM1_Init 0 */
490
491 /* USER CODE BEGIN DFSDM1_Init 1 */
492
493 /* USER CODE END DFSDM1_Init 1 */
494 hdfsdm1_channel1.Instance = DFSDM1_Channel1;
495 hdfsdm1_channel1.Init.OutputClock.Activation = ENABLE;
496 hdfsdm1_channel1.Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
497 hdfsdm1_channel1.Init.OutputClock.Divider = 2;
498 hdfsdm1_channel1.Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS;
499 hdfsdm1_channel1.Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE;
500 hdfsdm1_channel1.Init.Input.Pins = DFSDM_CHANNEL_SAME_CHANNEL_PINS;
501 hdfsdm1_channel1.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING;
502 hdfsdm1_channel1.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
503 hdfsdm1_channel1.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER;
504 hdfsdm1_channel1.Init.Awd.Oversampling = 1;
505 hdfsdm1_channel1.Init.Offset = 0;
506 hdfsdm1_channel1.Init.RightBitShift = 0x00;
507 if (HAL_DFSDM_ChannelInit(&hdfsdm1_channel1) != HAL_OK)
508 {
509 Error_Handler();
510 }
511 hdfsdm1_channel2.Instance = DFSDM1_Channel2;
512 hdfsdm1_channel2.Init.OutputClock.Activation = ENABLE;
513 hdfsdm1_channel2.Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
514 hdfsdm1_channel2.Init.OutputClock.Divider = 2;
515 hdfsdm1_channel2.Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS;
516 hdfsdm1_channel2.Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE;
517 hdfsdm1_channel2.Init.Input.Pins = DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS;
518 hdfsdm1_channel2.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING;
519 hdfsdm1_channel2.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
520 hdfsdm1_channel2.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER;
521 hdfsdm1_channel2.Init.Awd.Oversampling = 1;
522 hdfsdm1_channel2.Init.Offset = 0;
523 hdfsdm1_channel2.Init.RightBitShift = 0x00;
524 if (HAL_DFSDM_ChannelInit(&hdfsdm1_channel2) != HAL_OK)
525 {
526 Error_Handler();
527 }
528 /* USER CODE BEGIN DFSDM1_Init 2 */
529
530 /* USER CODE END DFSDM1_Init 2 */
531
532 }
533
534 /**
535 * @brief I2C1 Initialization Function
536 * @param None
537 * @retval None
538 */
MX_I2C1_Init(void)539 static void MX_I2C1_Init(void)
540 {
541
542 /* USER CODE BEGIN I2C1_Init 0 */
543
544 /* USER CODE END I2C1_Init 0 */
545
546 /* USER CODE BEGIN I2C1_Init 1 */
547
548 /* USER CODE END I2C1_Init 1 */
549 hi2c1.Instance = I2C1;
550 hi2c1.Init.Timing = 0x00000E14;
551 hi2c1.Init.OwnAddress1 = 0;
552 hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
553 hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
554 hi2c1.Init.OwnAddress2 = 0;
555 hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
556 hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
557 hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
558 if (HAL_I2C_Init(&hi2c1) != HAL_OK)
559 {
560 Error_Handler();
561 }
562
563 /** Configure Analogue filter
564 */
565 if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
566 {
567 Error_Handler();
568 }
569
570 /** Configure Digital filter
571 */
572 if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
573 {
574 Error_Handler();
575 }
576 /* USER CODE BEGIN I2C1_Init 2 */
577
578 /* USER CODE END I2C1_Init 2 */
579
580 }
581
582 /**
583 * @brief I2C2 Initialization Function
584 * @param None
585 * @retval None
586 */
MX_I2C2_Init(void)587 static void MX_I2C2_Init(void)
588 {
589
590 /* USER CODE BEGIN I2C2_Init 0 */
591
592 /* USER CODE END I2C2_Init 0 */
593
594 /* USER CODE BEGIN I2C2_Init 1 */
595
596 /* USER CODE END I2C2_Init 1 */
597 hi2c2.Instance = I2C2;
598 hi2c2.Init.Timing = 0x00000E14;
599 hi2c2.Init.OwnAddress1 = 0;
600 hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
601 hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
602 hi2c2.Init.OwnAddress2 = 0;
603 hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
604 hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
605 hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
606 if (HAL_I2C_Init(&hi2c2) != HAL_OK)
607 {
608 Error_Handler();
609 }
610
611 /** Configure Analogue filter
612 */
613 if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
614 {
615 Error_Handler();
616 }
617
618 /** Configure Digital filter
619 */
620 if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
621 {
622 Error_Handler();
623 }
624 /* USER CODE BEGIN I2C2_Init 2 */
625
626 /* USER CODE END I2C2_Init 2 */
627
628 }
629
630 /**
631 * @brief LPUART1 Initialization Function
632 * @param None
633 * @retval None
634 */
MX_LPUART1_UART_Init(void)635 static void MX_LPUART1_UART_Init(void)
636 {
637
638 /* USER CODE BEGIN LPUART1_Init 0 */
639
640 /* USER CODE END LPUART1_Init 0 */
641
642 /* USER CODE BEGIN LPUART1_Init 1 */
643
644 /* USER CODE END LPUART1_Init 1 */
645 hlpuart1.Instance = LPUART1;
646 hlpuart1.Init.BaudRate = 209700;
647 hlpuart1.Init.WordLength = UART_WORDLENGTH_7B;
648 hlpuart1.Init.StopBits = UART_STOPBITS_1;
649 hlpuart1.Init.Parity = UART_PARITY_NONE;
650 hlpuart1.Init.Mode = UART_MODE_TX_RX;
651 hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
652 hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
653 hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
654 if (HAL_UART_Init(&hlpuart1) != HAL_OK)
655 {
656 Error_Handler();
657 }
658 /* USER CODE BEGIN LPUART1_Init 2 */
659
660 /* USER CODE END LPUART1_Init 2 */
661
662 }
663
664 /**
665 * @brief USART1 Initialization Function
666 * @param None
667 * @retval None
668 */
MX_USART1_UART_Init(void)669 static void MX_USART1_UART_Init(void)
670 {
671
672 /* USER CODE BEGIN USART1_Init 0 */
673
674 /* USER CODE END USART1_Init 0 */
675
676 /* USER CODE BEGIN USART1_Init 1 */
677
678 /* USER CODE END USART1_Init 1 */
679 huart1.Instance = USART1;
680 huart1.Init.BaudRate = 115200;
681 huart1.Init.WordLength = UART_WORDLENGTH_8B;
682 huart1.Init.StopBits = UART_STOPBITS_1;
683 huart1.Init.Parity = UART_PARITY_NONE;
684 huart1.Init.Mode = UART_MODE_TX_RX;
685 huart1.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
686 huart1.Init.OverSampling = UART_OVERSAMPLING_16;
687 huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
688 huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
689 if (HAL_UART_Init(&huart1) != HAL_OK)
690 {
691 Error_Handler();
692 }
693 /* USER CODE BEGIN USART1_Init 2 */
694
695 /* USER CODE END USART1_Init 2 */
696
697 }
698
699 /**
700 * @brief USART2 Initialization Function
701 * @param None
702 * @retval None
703 */
MX_USART2_UART_Init(void)704 static void MX_USART2_UART_Init(void)
705 {
706
707 /* USER CODE BEGIN USART2_Init 0 */
708
709 /* USER CODE END USART2_Init 0 */
710
711 /* USER CODE BEGIN USART2_Init 1 */
712
713 /* USER CODE END USART2_Init 1 */
714 huart2.Instance = USART2;
715 huart2.Init.BaudRate = 115200;
716 huart2.Init.WordLength = UART_WORDLENGTH_8B;
717 huart2.Init.StopBits = UART_STOPBITS_1;
718 huart2.Init.Parity = UART_PARITY_NONE;
719 huart2.Init.Mode = UART_MODE_TX_RX;
720 huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
721 huart2.Init.OverSampling = UART_OVERSAMPLING_16;
722 huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
723 huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
724 if (HAL_UART_Init(&huart2) != HAL_OK)
725 {
726 Error_Handler();
727 }
728 /* USER CODE BEGIN USART2_Init 2 */
729
730 /* USER CODE END USART2_Init 2 */
731
732 }
733
734 /**
735 * @brief QUADSPI Initialization Function
736 * @param None
737 * @retval None
738 */
MX_QUADSPI_Init(void)739 static void MX_QUADSPI_Init(void)
740 {
741
742 /* USER CODE BEGIN QUADSPI_Init 0 */
743
744 /* USER CODE END QUADSPI_Init 0 */
745
746 /* USER CODE BEGIN QUADSPI_Init 1 */
747
748 /* USER CODE END QUADSPI_Init 1 */
749 /* QUADSPI parameter configuration*/
750 hqspi.Instance = QUADSPI;
751 hqspi.Init.ClockPrescaler = 2;
752 hqspi.Init.FifoThreshold = 4;
753 hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
754 hqspi.Init.FlashSize = 23;
755 hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
756 hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
757 hqspi.Init.FlashID = QSPI_FLASH_ID_1;
758 hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
759 if (HAL_QSPI_Init(&hqspi) != HAL_OK)
760 {
761 Error_Handler();
762 }
763 /* USER CODE BEGIN QUADSPI_Init 2 */
764
765 /* USER CODE END QUADSPI_Init 2 */
766
767 }
768
769 /**
770 * @brief SAI1 Initialization Function
771 * @param None
772 * @retval None
773 */
MX_SAI1_Init(void)774 static void MX_SAI1_Init(void)
775 {
776
777 /* USER CODE BEGIN SAI1_Init 0 */
778
779 /* USER CODE END SAI1_Init 0 */
780
781 /* USER CODE BEGIN SAI1_Init 1 */
782
783 /* USER CODE END SAI1_Init 1 */
784 hsai_BlockA1.Instance = SAI1_Block_A;
785 hsai_BlockA1.Init.Protocol = SAI_FREE_PROTOCOL;
786 hsai_BlockA1.Init.AudioMode = SAI_MODEMASTER_TX;
787 hsai_BlockA1.Init.DataSize = SAI_DATASIZE_8;
788 hsai_BlockA1.Init.FirstBit = SAI_FIRSTBIT_MSB;
789 hsai_BlockA1.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
790 hsai_BlockA1.Init.Synchro = SAI_ASYNCHRONOUS;
791 hsai_BlockA1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
792 hsai_BlockA1.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;
793 hsai_BlockA1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
794 hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_192K;
795 hsai_BlockA1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
796 hsai_BlockA1.Init.MonoStereoMode = SAI_STEREOMODE;
797 hsai_BlockA1.Init.CompandingMode = SAI_NOCOMPANDING;
798 hsai_BlockA1.Init.TriState = SAI_OUTPUT_NOTRELEASED;
799 hsai_BlockA1.FrameInit.FrameLength = 8;
800 hsai_BlockA1.FrameInit.ActiveFrameLength = 1;
801 hsai_BlockA1.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
802 hsai_BlockA1.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
803 hsai_BlockA1.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
804 hsai_BlockA1.SlotInit.FirstBitOffset = 0;
805 hsai_BlockA1.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
806 hsai_BlockA1.SlotInit.SlotNumber = 1;
807 hsai_BlockA1.SlotInit.SlotActive = 0x00000000;
808 if (HAL_SAI_Init(&hsai_BlockA1) != HAL_OK)
809 {
810 Error_Handler();
811 }
812 hsai_BlockB1.Instance = SAI1_Block_B;
813 hsai_BlockB1.Init.Protocol = SAI_FREE_PROTOCOL;
814 hsai_BlockB1.Init.AudioMode = SAI_MODESLAVE_RX;
815 hsai_BlockB1.Init.DataSize = SAI_DATASIZE_8;
816 hsai_BlockB1.Init.FirstBit = SAI_FIRSTBIT_MSB;
817 hsai_BlockB1.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
818 hsai_BlockB1.Init.Synchro = SAI_SYNCHRONOUS;
819 hsai_BlockB1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
820 hsai_BlockB1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
821 hsai_BlockB1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
822 hsai_BlockB1.Init.MonoStereoMode = SAI_STEREOMODE;
823 hsai_BlockB1.Init.CompandingMode = SAI_NOCOMPANDING;
824 hsai_BlockB1.Init.TriState = SAI_OUTPUT_NOTRELEASED;
825 hsai_BlockB1.FrameInit.FrameLength = 8;
826 hsai_BlockB1.FrameInit.ActiveFrameLength = 1;
827 hsai_BlockB1.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
828 hsai_BlockB1.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
829 hsai_BlockB1.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
830 hsai_BlockB1.SlotInit.FirstBitOffset = 0;
831 hsai_BlockB1.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
832 hsai_BlockB1.SlotInit.SlotNumber = 1;
833 hsai_BlockB1.SlotInit.SlotActive = 0x00000000;
834 if (HAL_SAI_Init(&hsai_BlockB1) != HAL_OK)
835 {
836 Error_Handler();
837 }
838 /* USER CODE BEGIN SAI1_Init 2 */
839
840 /* USER CODE END SAI1_Init 2 */
841
842 }
843
844 /**
845 * @brief SDMMC1 Initialization Function
846 * @param None
847 * @retval None
848 */
MX_SDMMC1_SD_Init(void)849 static void MX_SDMMC1_SD_Init(void)
850 {
851
852 /* USER CODE BEGIN SDMMC1_Init 0 */
853
854 /* USER CODE END SDMMC1_Init 0 */
855
856 /* USER CODE BEGIN SDMMC1_Init 1 */
857
858 /* USER CODE END SDMMC1_Init 1 */
859 hsd1.Instance = SDMMC1;
860 hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
861 hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
862 hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
863 hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
864 hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
865 hsd1.Init.ClockDiv = 0;
866 if (HAL_SD_Init(&hsd1) != HAL_OK)
867 {
868 Error_Handler();
869 }
870 if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK)
871 {
872 Error_Handler();
873 }
874 /* USER CODE BEGIN SDMMC1_Init 2 */
875
876 /* USER CODE END SDMMC1_Init 2 */
877
878 }
879
880 /**
881 * @brief SPI1 Initialization Function
882 * @param None
883 * @retval None
884 */
MX_SPI1_Init(void)885 static void MX_SPI1_Init(void)
886 {
887
888 /* USER CODE BEGIN SPI1_Init 0 */
889
890 /* USER CODE END SPI1_Init 0 */
891
892 /* USER CODE BEGIN SPI1_Init 1 */
893
894 /* USER CODE END SPI1_Init 1 */
895 /* SPI1 parameter configuration*/
896 hspi1.Instance = SPI1;
897 hspi1.Init.Mode = SPI_MODE_MASTER;
898 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
899 hspi1.Init.DataSize = SPI_DATASIZE_4BIT;
900 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
901 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
902 hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
903 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
904 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
905 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
906 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
907 hspi1.Init.CRCPolynomial = 7;
908 hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
909 hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
910 if (HAL_SPI_Init(&hspi1) != HAL_OK)
911 {
912 Error_Handler();
913 }
914 /* USER CODE BEGIN SPI1_Init 2 */
915
916 /* USER CODE END SPI1_Init 2 */
917
918 }
919
920 /**
921 * @brief SPI2 Initialization Function
922 * @param None
923 * @retval None
924 */
MX_SPI2_Init(void)925 static void MX_SPI2_Init(void)
926 {
927
928 /* USER CODE BEGIN SPI2_Init 0 */
929
930 /* USER CODE END SPI2_Init 0 */
931
932 /* USER CODE BEGIN SPI2_Init 1 */
933
934 /* USER CODE END SPI2_Init 1 */
935 /* SPI2 parameter configuration*/
936 hspi2.Instance = SPI2;
937 hspi2.Init.Mode = SPI_MODE_MASTER;
938 hspi2.Init.Direction = SPI_DIRECTION_2LINES;
939 hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
940 hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
941 hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
942 hspi2.Init.NSS = SPI_NSS_SOFT;
943 hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
944 hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
945 hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
946 hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
947 hspi2.Init.CRCPolynomial = 7;
948 hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
949 hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
950 if (HAL_SPI_Init(&hspi2) != HAL_OK)
951 {
952 Error_Handler();
953 }
954 /* USER CODE BEGIN SPI2_Init 2 */
955
956 /* USER CODE END SPI2_Init 2 */
957
958 }
959
960 /* FMC initialization function */
MX_FMC_Init(void)961 static void MX_FMC_Init(void)
962 {
963
964 /* USER CODE BEGIN FMC_Init 0 */
965
966 /* USER CODE END FMC_Init 0 */
967
968 FMC_NORSRAM_TimingTypeDef Timing = {0};
969
970 /* USER CODE BEGIN FMC_Init 1 */
971
972 /* USER CODE END FMC_Init 1 */
973
974 /** Perform the SRAM1 memory initialization sequence
975 */
976 hsram1.Instance = FMC_NORSRAM_DEVICE;
977 hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
978 /* hsram1.Init */
979 hsram1.Init.NSBank = FMC_NORSRAM_BANK2;
980 hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
981 hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
982 hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
983 hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
984 hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
985 hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
986 hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;
987 hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
988 hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
989 hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
990 hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
991 hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
992 hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
993 hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
994 /* Timing */
995 Timing.AddressSetupTime = 15;
996 Timing.AddressHoldTime = 15;
997 Timing.DataSetupTime = 255;
998 Timing.BusTurnAroundDuration = 15;
999 Timing.CLKDivision = 16;
1000 Timing.DataLatency = 17;
1001 Timing.AccessMode = FMC_ACCESS_MODE_A;
1002 /* ExtTiming */
1003
1004 if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
1005 {
1006 Error_Handler( );
1007 }
1008
1009 /** Perform the SRAM2 memory initialization sequence
1010 */
1011 hsram2.Instance = FMC_NORSRAM_DEVICE;
1012 hsram2.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
1013 /* hsram2.Init */
1014 hsram2.Init.NSBank = FMC_NORSRAM_BANK1;
1015 hsram2.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
1016 hsram2.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
1017 hsram2.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
1018 hsram2.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
1019 hsram2.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
1020 hsram2.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
1021 hsram2.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
1022 hsram2.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
1023 hsram2.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
1024 hsram2.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
1025 hsram2.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
1026 hsram2.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
1027 hsram2.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
1028 hsram2.Init.PageSize = FMC_PAGE_SIZE_NONE;
1029 /* Timing */
1030 Timing.AddressSetupTime = 15;
1031 Timing.AddressHoldTime = 15;
1032 Timing.DataSetupTime = 255;
1033 Timing.BusTurnAroundDuration = 15;
1034 Timing.CLKDivision = 16;
1035 Timing.DataLatency = 17;
1036 Timing.AccessMode = FMC_ACCESS_MODE_A;
1037 /* ExtTiming */
1038
1039 if (HAL_SRAM_Init(&hsram2, &Timing, NULL) != HAL_OK)
1040 {
1041 Error_Handler( );
1042 }
1043
1044 /* USER CODE BEGIN FMC_Init 2 */
1045
1046 /* USER CODE END FMC_Init 2 */
1047 }
1048
1049 /**
1050 * @brief GPIO Initialization Function
1051 * @param None
1052 * @retval None
1053 */
MX_GPIO_Init(void)1054 static void MX_GPIO_Init(void)
1055 {
1056 GPIO_InitTypeDef GPIO_InitStruct = {0};
1057 /* USER CODE BEGIN MX_GPIO_Init_1 */
1058 /* USER CODE END MX_GPIO_Init_1 */
1059
1060 /* GPIO Ports Clock Enable */
1061 __HAL_RCC_GPIOI_CLK_ENABLE();
1062 __HAL_RCC_GPIOH_CLK_ENABLE();
1063 __HAL_RCC_GPIOE_CLK_ENABLE();
1064 __HAL_RCC_GPIOB_CLK_ENABLE();
1065 __HAL_RCC_GPIOA_CLK_ENABLE();
1066 __HAL_RCC_GPIOG_CLK_ENABLE();
1067 HAL_PWREx_EnableVddIO2();
1068 __HAL_RCC_GPIOD_CLK_ENABLE();
1069 __HAL_RCC_GPIOC_CLK_ENABLE();
1070 __HAL_RCC_GPIOF_CLK_ENABLE();
1071
1072 /*Configure GPIO pin Output Level */
1073 HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_RESET);
1074
1075 /*Configure GPIO pin Output Level */
1076 HAL_GPIO_WritePin(GPIOH, MFX_WAKEUP_Pin|LCD_PWR_ON_Pin|MIC_VDD_Pin, GPIO_PIN_RESET);
1077
1078 /*Configure GPIO pin Output Level */
1079 HAL_GPIO_WritePin(Audio_RST_GPIO_Port, Audio_RST_Pin, GPIO_PIN_RESET);
1080
1081 /*Configure GPIO pin Output Level */
1082 HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
1083
1084 /*Configure GPIO pins : JOY_DOWN_Pin JOY_LEFT_Pin JOY_UP_Pin */
1085 GPIO_InitStruct.Pin = JOY_DOWN_Pin|JOY_LEFT_Pin|JOY_UP_Pin;
1086 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
1087 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
1088 HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
1089
1090 /*Configure GPIO pin : STMOD_INT_Pin */
1091 GPIO_InitStruct.Pin = STMOD_INT_Pin;
1092 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
1093 GPIO_InitStruct.Pull = GPIO_NOPULL;
1094 HAL_GPIO_Init(STMOD_INT_GPIO_Port, &GPIO_InitStruct);
1095
1096 /*Configure GPIO pin : LCD_BL_Pin */
1097 GPIO_InitStruct.Pin = LCD_BL_Pin;
1098 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1099 GPIO_InitStruct.Pull = GPIO_NOPULL;
1100 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1101 HAL_GPIO_Init(LCD_BL_GPIO_Port, &GPIO_InitStruct);
1102
1103 /*Configure GPIO pin : ARD_D6_Pin */
1104 GPIO_InitStruct.Pin = ARD_D6_Pin;
1105 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
1106 GPIO_InitStruct.Pull = GPIO_NOPULL;
1107 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1108 GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
1109 HAL_GPIO_Init(ARD_D6_GPIO_Port, &GPIO_InitStruct);
1110
1111 /*Configure GPIO pins : ARD_D3_Pin ARD_D9_Pin */
1112 GPIO_InitStruct.Pin = ARD_D3_Pin|ARD_D9_Pin;
1113 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
1114 GPIO_InitStruct.Pull = GPIO_NOPULL;
1115 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1116 GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
1117 HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
1118
1119 /*Configure GPIO pin : ARD_D5_Pin */
1120 GPIO_InitStruct.Pin = ARD_D5_Pin;
1121 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
1122 GPIO_InitStruct.Pull = GPIO_NOPULL;
1123 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1124 GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
1125 HAL_GPIO_Init(ARD_D5_GPIO_Port, &GPIO_InitStruct);
1126
1127 /*Configure GPIO pin : LCD_TE_Pin */
1128 GPIO_InitStruct.Pin = LCD_TE_Pin;
1129 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
1130 GPIO_InitStruct.Pull = GPIO_NOPULL;
1131 HAL_GPIO_Init(LCD_TE_GPIO_Port, &GPIO_InitStruct);
1132
1133 /*Configure GPIO pins : MFX_WAKEUP_Pin LCD_PWR_ON_Pin MIC_VDD_Pin */
1134 GPIO_InitStruct.Pin = MFX_WAKEUP_Pin|LCD_PWR_ON_Pin|MIC_VDD_Pin;
1135 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1136 GPIO_InitStruct.Pull = GPIO_NOPULL;
1137 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1138 HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
1139
1140 /*Configure GPIO pin : Audio_RST_Pin */
1141 GPIO_InitStruct.Pin = Audio_RST_Pin;
1142 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1143 GPIO_InitStruct.Pull = GPIO_NOPULL;
1144 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1145 HAL_GPIO_Init(Audio_RST_GPIO_Port, &GPIO_InitStruct);
1146
1147 /*Configure GPIO pin : CTP_INT_Pin */
1148 GPIO_InitStruct.Pin = CTP_INT_Pin;
1149 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
1150 GPIO_InitStruct.Pull = GPIO_NOPULL;
1151 HAL_GPIO_Init(CTP_INT_GPIO_Port, &GPIO_InitStruct);
1152
1153 /*Configure GPIO pin : DCMI_CLK_Pin */
1154 GPIO_InitStruct.Pin = DCMI_CLK_Pin;
1155 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
1156 GPIO_InitStruct.Pull = GPIO_NOPULL;
1157 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1158 GPIO_InitStruct.Alternate = GPIO_AF14_LPTIM2;
1159 HAL_GPIO_Init(DCMI_CLK_GPIO_Port, &GPIO_InitStruct);
1160
1161 /*Configure GPIO pin : MFX_IRQ_OUT_Pin */
1162 GPIO_InitStruct.Pin = MFX_IRQ_OUT_Pin;
1163 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
1164 GPIO_InitStruct.Pull = GPIO_NOPULL;
1165 HAL_GPIO_Init(MFX_IRQ_OUT_GPIO_Port, &GPIO_InitStruct);
1166
1167 /*Configure GPIO pin : JOY_RIGHT_Pin */
1168 GPIO_InitStruct.Pin = JOY_RIGHT_Pin;
1169 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
1170 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
1171 HAL_GPIO_Init(JOY_RIGHT_GPIO_Port, &GPIO_InitStruct);
1172
1173 /*Configure GPIO pin : STMOD_RESET_Pin */
1174 GPIO_InitStruct.Pin = STMOD_RESET_Pin;
1175 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
1176 GPIO_InitStruct.Pull = GPIO_NOPULL;
1177 HAL_GPIO_Init(STMOD_RESET_GPIO_Port, &GPIO_InitStruct);
1178
1179 /*Configure GPIO pin : LED1_Pin */
1180 GPIO_InitStruct.Pin = LED1_Pin;
1181 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
1182 GPIO_InitStruct.Pull = GPIO_NOPULL;
1183 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1184 HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
1185
1186 /* USER CODE BEGIN MX_GPIO_Init_2 */
1187 /* USER CODE END MX_GPIO_Init_2 */
1188 }
1189
1190 /* USER CODE BEGIN 4 */
1191
1192 /* USER CODE END 4 */
1193
1194 /**
1195 * @brief This function is executed in case of error occurrence.
1196 * @retval None
1197 */
Error_Handler(void)1198 void Error_Handler(void)
1199 {
1200 /* USER CODE BEGIN Error_Handler_Debug */
1201 /* User can add his own implementation to report the HAL error return state */
1202 __disable_irq();
1203 while (1)
1204 {
1205 }
1206 /* USER CODE END Error_Handler_Debug */
1207 }
1208
1209 #ifdef USE_FULL_ASSERT
1210 /**
1211 * @brief Reports the name of the source file and the source line number
1212 * where the assert_param error has occurred.
1213 * @param file: pointer to the source file name
1214 * @param line: assert_param error line source number
1215 * @retval None
1216 */
assert_failed(uint8_t * file,uint32_t line)1217 void assert_failed(uint8_t *file, uint32_t line)
1218 {
1219 /* USER CODE BEGIN 6 */
1220 /* User can add his own implementation to report the file name and line number,
1221 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
1222 /* USER CODE END 6 */
1223 }
1224 #endif /* USE_FULL_ASSERT */
1225