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 IWDG_HandleTypeDef hiwdg;
44
45 UART_HandleTypeDef hlpuart1;
46
47 RTC_HandleTypeDef hrtc;
48
49 TIM_HandleTypeDef htim7;
50 TIM_HandleTypeDef htim15;
51 TIM_HandleTypeDef htim16;
52 TIM_HandleTypeDef htim17;
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_LPUART1_UART_Init(void);
62 static void MX_IWDG_Init(void);
63 static void MX_TIM15_Init(void);
64 static void MX_TIM16_Init(void);
65 static void MX_TIM17_Init(void);
66 static void MX_TIM7_Init(void);
67 static void MX_RTC_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_LPUART1_UART_Init();
106 MX_IWDG_Init();
107 MX_TIM15_Init();
108 MX_TIM16_Init();
109 MX_TIM17_Init();
110 MX_TIM7_Init();
111 MX_RTC_Init();
112 /* USER CODE BEGIN 2 */
113
114 /* USER CODE END 2 */
115
116 /* Infinite loop */
117 /* USER CODE BEGIN WHILE */
118 while (1)
119 {
120 /* USER CODE END WHILE */
121
122 /* USER CODE BEGIN 3 */
123 }
124 /* USER CODE END 3 */
125 }
126
127 /**
128 * @brief System Clock Configuration
129 * @retval None
130 */
SystemClock_Config(void)131 void SystemClock_Config(void)
132 {
133 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
134 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
135
136 /** Configure the main internal regulator output voltage
137 */
138 HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
139
140 /** Configure LSE Drive Capability
141 */
142 HAL_PWR_EnableBkUpAccess();
143 __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
144
145 /** Initializes the RCC Oscillators according to the specified parameters
146 * in the RCC_OscInitTypeDef structure.
147 */
148 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI
149 |RCC_OSCILLATORTYPE_LSE;
150 RCC_OscInitStruct.LSEState = RCC_LSE_ON;
151 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
152 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
153 RCC_OscInitStruct.LSIState = RCC_LSI_ON;
154 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
155 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
156 RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;
157 RCC_OscInitStruct.PLL.PLLN = 85;
158 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
159 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
160 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
161 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
162 {
163 Error_Handler();
164 }
165
166 /** Initializes the CPU, AHB and APB buses clocks
167 */
168 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
169 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
170 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
171 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
172 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
173 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
174
175 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
176 {
177 Error_Handler();
178 }
179 }
180
181 /**
182 * @brief IWDG Initialization Function
183 * @param None
184 * @retval None
185 */
MX_IWDG_Init(void)186 static void MX_IWDG_Init(void)
187 {
188
189 /* USER CODE BEGIN IWDG_Init 0 */
190
191 /* USER CODE END IWDG_Init 0 */
192
193 /* USER CODE BEGIN IWDG_Init 1 */
194
195 /* USER CODE END IWDG_Init 1 */
196 hiwdg.Instance = IWDG;
197 hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
198 hiwdg.Init.Window = 4095;
199 hiwdg.Init.Reload = 4095;
200 if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
201 {
202 Error_Handler();
203 }
204 /* USER CODE BEGIN IWDG_Init 2 */
205
206 /* USER CODE END IWDG_Init 2 */
207
208 }
209
210 /**
211 * @brief LPUART1 Initialization Function
212 * @param None
213 * @retval None
214 */
MX_LPUART1_UART_Init(void)215 static void MX_LPUART1_UART_Init(void)
216 {
217
218 /* USER CODE BEGIN LPUART1_Init 0 */
219
220 /* USER CODE END LPUART1_Init 0 */
221
222 /* USER CODE BEGIN LPUART1_Init 1 */
223
224 /* USER CODE END LPUART1_Init 1 */
225 hlpuart1.Instance = LPUART1;
226 hlpuart1.Init.BaudRate = 115200;
227 hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
228 hlpuart1.Init.StopBits = UART_STOPBITS_1;
229 hlpuart1.Init.Parity = UART_PARITY_NONE;
230 hlpuart1.Init.Mode = UART_MODE_TX_RX;
231 hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
232 hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
233 hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
234 hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
235 if (HAL_UART_Init(&hlpuart1) != HAL_OK)
236 {
237 Error_Handler();
238 }
239 if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
240 {
241 Error_Handler();
242 }
243 if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
244 {
245 Error_Handler();
246 }
247 if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
248 {
249 Error_Handler();
250 }
251 /* USER CODE BEGIN LPUART1_Init 2 */
252
253 /* USER CODE END LPUART1_Init 2 */
254
255 }
256
257 /**
258 * @brief RTC Initialization Function
259 * @param None
260 * @retval None
261 */
MX_RTC_Init(void)262 static void MX_RTC_Init(void)
263 {
264
265 /* USER CODE BEGIN RTC_Init 0 */
266
267 /* USER CODE END RTC_Init 0 */
268
269 /* USER CODE BEGIN RTC_Init 1 */
270
271 /* USER CODE END RTC_Init 1 */
272
273 /** Initialize RTC Only
274 */
275 hrtc.Instance = RTC;
276 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
277 hrtc.Init.AsynchPrediv = 127;
278 hrtc.Init.SynchPrediv = 255;
279 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
280 hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
281 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
282 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
283 hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
284 if (HAL_RTC_Init(&hrtc) != HAL_OK)
285 {
286 Error_Handler();
287 }
288 /* USER CODE BEGIN RTC_Init 2 */
289
290 /* USER CODE END RTC_Init 2 */
291
292 }
293
294 /**
295 * @brief TIM7 Initialization Function
296 * @param None
297 * @retval None
298 */
MX_TIM7_Init(void)299 static void MX_TIM7_Init(void)
300 {
301
302 /* USER CODE BEGIN TIM7_Init 0 */
303
304 /* USER CODE END TIM7_Init 0 */
305
306 TIM_MasterConfigTypeDef sMasterConfig = {0};
307
308 /* USER CODE BEGIN TIM7_Init 1 */
309
310 /* USER CODE END TIM7_Init 1 */
311 htim7.Instance = TIM7;
312 htim7.Init.Prescaler = 0;
313 htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
314 htim7.Init.Period = 65535;
315 htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
316 if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
317 {
318 Error_Handler();
319 }
320 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
321 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
322 if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
323 {
324 Error_Handler();
325 }
326 /* USER CODE BEGIN TIM7_Init 2 */
327
328 /* USER CODE END TIM7_Init 2 */
329
330 }
331
332 /**
333 * @brief TIM15 Initialization Function
334 * @param None
335 * @retval None
336 */
MX_TIM15_Init(void)337 static void MX_TIM15_Init(void)
338 {
339
340 /* USER CODE BEGIN TIM15_Init 0 */
341
342 /* USER CODE END TIM15_Init 0 */
343
344 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
345 TIM_MasterConfigTypeDef sMasterConfig = {0};
346
347 /* USER CODE BEGIN TIM15_Init 1 */
348
349 /* USER CODE END TIM15_Init 1 */
350 htim15.Instance = TIM15;
351 htim15.Init.Prescaler = 0;
352 htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
353 htim15.Init.Period = 65535;
354 htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
355 htim15.Init.RepetitionCounter = 0;
356 htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
357 if (HAL_TIM_Base_Init(&htim15) != HAL_OK)
358 {
359 Error_Handler();
360 }
361 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
362 if (HAL_TIM_ConfigClockSource(&htim15, &sClockSourceConfig) != HAL_OK)
363 {
364 Error_Handler();
365 }
366 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
367 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
368 if (HAL_TIMEx_MasterConfigSynchronization(&htim15, &sMasterConfig) != HAL_OK)
369 {
370 Error_Handler();
371 }
372 /* USER CODE BEGIN TIM15_Init 2 */
373
374 /* USER CODE END TIM15_Init 2 */
375
376 }
377
378 /**
379 * @brief TIM16 Initialization Function
380 * @param None
381 * @retval None
382 */
MX_TIM16_Init(void)383 static void MX_TIM16_Init(void)
384 {
385
386 /* USER CODE BEGIN TIM16_Init 0 */
387
388 /* USER CODE END TIM16_Init 0 */
389
390 /* USER CODE BEGIN TIM16_Init 1 */
391
392 /* USER CODE END TIM16_Init 1 */
393 htim16.Instance = TIM16;
394 htim16.Init.Prescaler = 0;
395 htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
396 htim16.Init.Period = 65535;
397 htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
398 htim16.Init.RepetitionCounter = 0;
399 htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
400 if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
401 {
402 Error_Handler();
403 }
404 /* USER CODE BEGIN TIM16_Init 2 */
405
406 /* USER CODE END TIM16_Init 2 */
407
408 }
409
410 /**
411 * @brief TIM17 Initialization Function
412 * @param None
413 * @retval None
414 */
MX_TIM17_Init(void)415 static void MX_TIM17_Init(void)
416 {
417
418 /* USER CODE BEGIN TIM17_Init 0 */
419
420 /* USER CODE END TIM17_Init 0 */
421
422 /* USER CODE BEGIN TIM17_Init 1 */
423
424 /* USER CODE END TIM17_Init 1 */
425 htim17.Instance = TIM17;
426 htim17.Init.Prescaler = 0;
427 htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
428 htim17.Init.Period = 65535;
429 htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
430 htim17.Init.RepetitionCounter = 0;
431 htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
432 if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
433 {
434 Error_Handler();
435 }
436 /* USER CODE BEGIN TIM17_Init 2 */
437
438 /* USER CODE END TIM17_Init 2 */
439
440 }
441
442 /**
443 * @brief GPIO Initialization Function
444 * @param None
445 * @retval None
446 */
MX_GPIO_Init(void)447 static void MX_GPIO_Init(void)
448 {
449 GPIO_InitTypeDef GPIO_InitStruct = {0};
450 /* USER CODE BEGIN MX_GPIO_Init_1 */
451 /* USER CODE END MX_GPIO_Init_1 */
452
453 /* GPIO Ports Clock Enable */
454 __HAL_RCC_GPIOC_CLK_ENABLE();
455 __HAL_RCC_GPIOF_CLK_ENABLE();
456 __HAL_RCC_GPIOA_CLK_ENABLE();
457 __HAL_RCC_GPIOB_CLK_ENABLE();
458
459 /*Configure GPIO pin Output Level */
460 HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
461
462 /*Configure GPIO pin : B1_Pin */
463 GPIO_InitStruct.Pin = B1_Pin;
464 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
465 GPIO_InitStruct.Pull = GPIO_NOPULL;
466 HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
467
468 /*Configure GPIO pin : LD2_Pin */
469 GPIO_InitStruct.Pin = LD2_Pin;
470 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
471 GPIO_InitStruct.Pull = GPIO_NOPULL;
472 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
473 HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
474
475 /* EXTI interrupt init*/
476 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
477 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
478
479 /* USER CODE BEGIN MX_GPIO_Init_2 */
480 /* USER CODE END MX_GPIO_Init_2 */
481 }
482
483 /* USER CODE BEGIN 4 */
484
485 /* USER CODE END 4 */
486
487 /**
488 * @brief This function is executed in case of error occurrence.
489 * @retval None
490 */
Error_Handler(void)491 void Error_Handler(void)
492 {
493 /* USER CODE BEGIN Error_Handler_Debug */
494 /* User can add his own implementation to report the HAL error return state */
495 __disable_irq();
496 while (1)
497 {
498 }
499 /* USER CODE END Error_Handler_Debug */
500 }
501
502 #ifdef USE_FULL_ASSERT
503 /**
504 * @brief Reports the name of the source file and the source line number
505 * where the assert_param error has occurred.
506 * @param file: pointer to the source file name
507 * @param line: assert_param error line source number
508 * @retval None
509 */
assert_failed(uint8_t * file,uint32_t line)510 void assert_failed(uint8_t *file, uint32_t line)
511 {
512 /* USER CODE BEGIN 6 */
513 /* User can add his own implementation to report the file name and line number,
514 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
515 /* USER CODE END 6 */
516 }
517 #endif /* USE_FULL_ASSERT */
518