1 /* USER CODE BEGIN Header */
2 /**
3 ******************************************************************************
4 * @file : main.c
5 * @brief : Main program body
6 ******************************************************************************
7 * @attention
8 *
9 * <h2><center>© Copyright (c) 2020 STMicroelectronics.
10 * All rights reserved.</center></h2>
11 *
12 * This software component is licensed by ST under BSD 3-Clause license,
13 * the "License"; You may not use this file except in compliance with the
14 * License. You may obtain a copy of the License at:
15 * opensource.org/licenses/BSD-3-Clause
16 *
17 ******************************************************************************
18 */
19 /* USER CODE END Header */
20 /* Includes ------------------------------------------------------------------*/
21 #include "main.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 /* USER CODE END PD */
36
37 /* Private macro -------------------------------------------------------------*/
38 /* USER CODE BEGIN PM */
39
40 /* USER CODE END PM */
41
42 /* Private variables ---------------------------------------------------------*/
43
44 QSPI_HandleTypeDef hqspi;
45
46 RTC_HandleTypeDef hrtc;
47
48 SPI_HandleTypeDef hspi1;
49 SPI_HandleTypeDef hspi4;
50
51 TIM_HandleTypeDef htim1;
52
53 UART_HandleTypeDef huart1;
54
55 /* USER CODE BEGIN PV */
56
57 /* USER CODE END PV */
58
59 /* Private function prototypes -----------------------------------------------*/
60 void SystemClock_Config(void);
61 static void MX_GPIO_Init(void);
62 static void MX_USART1_UART_Init(void);
63 static void MX_RTC_Init(void);
64 static void MX_SPI4_Init(void);
65 static void MX_TIM1_Init(void);
66 static void MX_QUADSPI_Init(void);
67 static void MX_SPI1_Init(void);
68 /* USER CODE BEGIN PFP */
69
70 /* USER CODE END PFP */
71
72 /* Private user code ---------------------------------------------------------*/
73 /* USER CODE BEGIN 0 */
74
75 /* USER CODE END 0 */
76
77 /**
78 * @brief The application entry point.
79 * @retval int
80 */
main(void)81 int main(void)
82 {
83 /* USER CODE BEGIN 1 */
84
85 /* USER CODE END 1 */
86
87 /* MCU Configuration--------------------------------------------------------*/
88
89 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
90 HAL_Init();
91
92 /* USER CODE BEGIN Init */
93
94 /* USER CODE END Init */
95
96 /* Configure the system clock */
97 SystemClock_Config();
98
99 /* USER CODE BEGIN SysInit */
100
101 /* USER CODE END SysInit */
102
103 /* Initialize all configured peripherals */
104 MX_GPIO_Init();
105 MX_USART1_UART_Init();
106 MX_RTC_Init();
107 MX_SPI4_Init();
108 MX_TIM1_Init();
109 MX_QUADSPI_Init();
110 MX_SPI1_Init();
111 /* USER CODE BEGIN 2 */
112
113 /* USER CODE END 2 */
114
115 /* Infinite loop */
116 /* USER CODE BEGIN WHILE */
117 while (1)
118 {
119 /* USER CODE END WHILE */
120
121 /* USER CODE BEGIN 3 */
122 }
123 /* USER CODE END 3 */
124 }
125
126 /**
127 * @brief System Clock Configuration
128 * @retval None
129 */
SystemClock_Config(void)130 void SystemClock_Config(void)
131 {
132 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
133 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
134 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
135
136 /** Supply configuration update enable
137 */
138 HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
139 /** Configure the main internal regulator output voltage
140 */
141 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
142
143 while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
144 /** Configure LSE Drive Capability
145 */
146 HAL_PWR_EnableBkUpAccess();
147 __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
148 /** Initializes the RCC Oscillators according to the specified parameters
149 * in the RCC_OscInitTypeDef structure.
150 */
151 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
152 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
153 RCC_OscInitStruct.LSEState = RCC_LSE_ON;
154 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
155 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
156 RCC_OscInitStruct.PLL.PLLM = 5;
157 RCC_OscInitStruct.PLL.PLLN = 192;
158 RCC_OscInitStruct.PLL.PLLP = 2;
159 RCC_OscInitStruct.PLL.PLLQ = 2;
160 RCC_OscInitStruct.PLL.PLLR = 2;
161 RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
162 RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
163 RCC_OscInitStruct.PLL.PLLFRACN = 0;
164 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
165 {
166 Error_Handler();
167 }
168 /** Initializes the CPU, AHB and APB buses clocks
169 */
170 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
171 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
172 |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
173 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
174 RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
175 RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
176 RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
177 RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
178 RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
179 RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
180
181 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
182 {
183 Error_Handler();
184 }
185 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
186 |RCC_PERIPHCLK_SPI4|RCC_PERIPHCLK_SPI1
187 |RCC_PERIPHCLK_QSPI;
188 PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
189 PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
190 PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
191 PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
192 PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
193 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
194 {
195 Error_Handler();
196 }
197 }
198
199 /**
200 * @brief QUADSPI Initialization Function
201 * @param None
202 * @retval None
203 */
MX_QUADSPI_Init(void)204 static void MX_QUADSPI_Init(void)
205 {
206
207 /* USER CODE BEGIN QUADSPI_Init 0 */
208
209 /* USER CODE END QUADSPI_Init 0 */
210
211 /* USER CODE BEGIN QUADSPI_Init 1 */
212
213 /* USER CODE END QUADSPI_Init 1 */
214 /* QUADSPI parameter configuration*/
215 hqspi.Instance = QUADSPI;
216 hqspi.Init.ClockPrescaler = 255;
217 hqspi.Init.FifoThreshold = 1;
218 hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
219 hqspi.Init.FlashSize = 1;
220 hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
221 hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
222 hqspi.Init.FlashID = QSPI_FLASH_ID_1;
223 hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
224 if (HAL_QSPI_Init(&hqspi) != HAL_OK)
225 {
226 Error_Handler();
227 }
228 /* USER CODE BEGIN QUADSPI_Init 2 */
229
230 /* USER CODE END QUADSPI_Init 2 */
231
232 }
233
234 /**
235 * @brief RTC Initialization Function
236 * @param None
237 * @retval None
238 */
MX_RTC_Init(void)239 static void MX_RTC_Init(void)
240 {
241
242 /* USER CODE BEGIN RTC_Init 0 */
243
244 /* USER CODE END RTC_Init 0 */
245
246 /* USER CODE BEGIN RTC_Init 1 */
247
248 /* USER CODE END RTC_Init 1 */
249 /** Initialize RTC Only
250 */
251 hrtc.Instance = RTC;
252 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
253 hrtc.Init.AsynchPrediv = 127;
254 hrtc.Init.SynchPrediv = 255;
255 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
256 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
257 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
258 hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
259 if (HAL_RTC_Init(&hrtc) != HAL_OK)
260 {
261 Error_Handler();
262 }
263 /* USER CODE BEGIN RTC_Init 2 */
264
265 /* USER CODE END RTC_Init 2 */
266
267 }
268
269 /**
270 * @brief SPI1 Initialization Function
271 * @param None
272 * @retval None
273 */
MX_SPI1_Init(void)274 static void MX_SPI1_Init(void)
275 {
276
277 /* USER CODE BEGIN SPI1_Init 0 */
278
279 /* USER CODE END SPI1_Init 0 */
280
281 /* USER CODE BEGIN SPI1_Init 1 */
282
283 /* USER CODE END SPI1_Init 1 */
284 /* SPI1 parameter configuration*/
285 hspi1.Instance = SPI1;
286 hspi1.Init.Mode = SPI_MODE_MASTER;
287 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
288 hspi1.Init.DataSize = SPI_DATASIZE_4BIT;
289 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
290 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
291 hspi1.Init.NSS = SPI_NSS_SOFT;
292 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
293 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
294 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
295 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
296 hspi1.Init.CRCPolynomial = 0x0;
297 hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
298 hspi1.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
299 hspi1.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
300 hspi1.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
301 hspi1.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
302 hspi1.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
303 hspi1.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
304 hspi1.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
305 hspi1.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
306 hspi1.Init.IOSwap = SPI_IO_SWAP_DISABLE;
307 if (HAL_SPI_Init(&hspi1) != HAL_OK)
308 {
309 Error_Handler();
310 }
311 /* USER CODE BEGIN SPI1_Init 2 */
312
313 /* USER CODE END SPI1_Init 2 */
314
315 }
316
317 /**
318 * @brief SPI4 Initialization Function
319 * @param None
320 * @retval None
321 */
MX_SPI4_Init(void)322 static void MX_SPI4_Init(void)
323 {
324
325 /* USER CODE BEGIN SPI4_Init 0 */
326
327 /* USER CODE END SPI4_Init 0 */
328
329 /* USER CODE BEGIN SPI4_Init 1 */
330
331 /* USER CODE END SPI4_Init 1 */
332 /* SPI4 parameter configuration*/
333 hspi4.Instance = SPI4;
334 hspi4.Init.Mode = SPI_MODE_MASTER;
335 hspi4.Init.Direction = SPI_DIRECTION_1LINE;
336 hspi4.Init.DataSize = SPI_DATASIZE_4BIT;
337 hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
338 hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
339 hspi4.Init.NSS = SPI_NSS_SOFT;
340 hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
341 hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
342 hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
343 hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
344 hspi4.Init.CRCPolynomial = 0x0;
345 hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
346 hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
347 hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
348 hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
349 hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
350 hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
351 hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
352 hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
353 hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
354 hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
355 if (HAL_SPI_Init(&hspi4) != HAL_OK)
356 {
357 Error_Handler();
358 }
359 /* USER CODE BEGIN SPI4_Init 2 */
360
361 /* USER CODE END SPI4_Init 2 */
362
363 }
364
365 /**
366 * @brief TIM1 Initialization Function
367 * @param None
368 * @retval None
369 */
MX_TIM1_Init(void)370 static void MX_TIM1_Init(void)
371 {
372
373 /* USER CODE BEGIN TIM1_Init 0 */
374
375 /* USER CODE END TIM1_Init 0 */
376
377 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
378 TIM_MasterConfigTypeDef sMasterConfig = {0};
379 TIM_OC_InitTypeDef sConfigOC = {0};
380 TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
381
382 /* USER CODE BEGIN TIM1_Init 1 */
383
384 /* USER CODE END TIM1_Init 1 */
385 htim1.Instance = TIM1;
386 htim1.Init.Prescaler = 0;
387 htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
388 htim1.Init.Period = 65535;
389 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
390 htim1.Init.RepetitionCounter = 0;
391 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
392 if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
393 {
394 Error_Handler();
395 }
396 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
397 if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
398 {
399 Error_Handler();
400 }
401 if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
402 {
403 Error_Handler();
404 }
405 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
406 sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
407 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
408 if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
409 {
410 Error_Handler();
411 }
412 sConfigOC.OCMode = TIM_OCMODE_PWM1;
413 sConfigOC.Pulse = 0;
414 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
415 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
416 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
417 sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
418 sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
419 if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
420 {
421 Error_Handler();
422 }
423 sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
424 sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
425 sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
426 sBreakDeadTimeConfig.DeadTime = 0;
427 sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
428 sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
429 sBreakDeadTimeConfig.BreakFilter = 0;
430 sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
431 sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
432 sBreakDeadTimeConfig.Break2Filter = 0;
433 sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
434 if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
435 {
436 Error_Handler();
437 }
438 /* USER CODE BEGIN TIM1_Init 2 */
439
440 /* USER CODE END TIM1_Init 2 */
441 HAL_TIM_MspPostInit(&htim1);
442
443 }
444
445 /**
446 * @brief USART1 Initialization Function
447 * @param None
448 * @retval None
449 */
MX_USART1_UART_Init(void)450 static void MX_USART1_UART_Init(void)
451 {
452
453 /* USER CODE BEGIN USART1_Init 0 */
454
455 /* USER CODE END USART1_Init 0 */
456
457 /* USER CODE BEGIN USART1_Init 1 */
458
459 /* USER CODE END USART1_Init 1 */
460 huart1.Instance = USART1;
461 huart1.Init.BaudRate = 115200;
462 huart1.Init.WordLength = UART_WORDLENGTH_8B;
463 huart1.Init.StopBits = UART_STOPBITS_1;
464 huart1.Init.Parity = UART_PARITY_NONE;
465 huart1.Init.Mode = UART_MODE_TX_RX;
466 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
467 huart1.Init.OverSampling = UART_OVERSAMPLING_16;
468 huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
469 huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
470 huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
471 if (HAL_UART_Init(&huart1) != HAL_OK)
472 {
473 Error_Handler();
474 }
475 if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
476 {
477 Error_Handler();
478 }
479 if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
480 {
481 Error_Handler();
482 }
483 if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
484 {
485 Error_Handler();
486 }
487 /* USER CODE BEGIN USART1_Init 2 */
488
489 /* USER CODE END USART1_Init 2 */
490
491 }
492
493 /**
494 * @brief GPIO Initialization Function
495 * @param None
496 * @retval None
497 */
MX_GPIO_Init(void)498 static void MX_GPIO_Init(void)
499 {
500 GPIO_InitTypeDef GPIO_InitStruct = {0};
501
502 /* GPIO Ports Clock Enable */
503 __HAL_RCC_GPIOE_CLK_ENABLE();
504 __HAL_RCC_GPIOC_CLK_ENABLE();
505 __HAL_RCC_GPIOH_CLK_ENABLE();
506 __HAL_RCC_GPIOB_CLK_ENABLE();
507 __HAL_RCC_GPIOD_CLK_ENABLE();
508
509 /*Configure GPIO pin Output Level */
510 HAL_GPIO_WritePin(GPIOE, LCD_CS_Pin|LCD_WR_RS_Pin, GPIO_PIN_RESET);
511
512 /*Configure GPIO pin Output Level */
513 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_RESET);
514
515 /*Configure GPIO pins : LCD_CS_Pin LCD_WR_RS_Pin */
516 GPIO_InitStruct.Pin = LCD_CS_Pin|LCD_WR_RS_Pin;
517 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
518 GPIO_InitStruct.Pull = GPIO_NOPULL;
519 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
520 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
521
522 /*Configure GPIO pin : PD6 */
523 GPIO_InitStruct.Pin = GPIO_PIN_6;
524 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
525 GPIO_InitStruct.Pull = GPIO_NOPULL;
526 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
527 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
528
529 }
530
531 /* USER CODE BEGIN 4 */
532
533 /* USER CODE END 4 */
534
535 /**
536 * @brief This function is executed in case of error occurrence.
537 * @retval None
538 */
Error_Handler(void)539 void Error_Handler(void)
540 {
541 /* USER CODE BEGIN Error_Handler_Debug */
542 /* User can add his own implementation to report the HAL error return state */
543
544 /* USER CODE END Error_Handler_Debug */
545 }
546
547 #ifdef USE_FULL_ASSERT
548 /**
549 * @brief Reports the name of the source file and the source line number
550 * where the assert_param error has occurred.
551 * @param file: pointer to the source file name
552 * @param line: assert_param error line source number
553 * @retval None
554 */
assert_failed(uint8_t * file,uint32_t line)555 void assert_failed(uint8_t *file, uint32_t line)
556 {
557 /* USER CODE BEGIN 6 */
558 /* User can add his own implementation to report the file name and line number,
559 tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
560 /* USER CODE END 6 */
561 }
562 #endif /* USE_FULL_ASSERT */
563
564 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
565