1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file           : main.c
5   * @brief          : Main program body
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; 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