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