firmware-nucleo/Core/Src/main.c (17249B)
1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file : main.c 5 * @brief : Main program body 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2025 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 /* Application includes. */ 26 #include "logger.h" 27 #include "app.h" 28 29 /* USER CODE END Includes */ 30 31 /* Private typedef -----------------------------------------------------------*/ 32 /* USER CODE BEGIN PTD */ 33 34 /* USER CODE END PTD */ 35 36 /* Private define ------------------------------------------------------------*/ 37 /* USER CODE BEGIN PD */ 38 39 /* USER CODE END PD */ 40 41 /* Private macro -------------------------------------------------------------*/ 42 /* USER CODE BEGIN PM */ 43 44 /* USER CODE END PM */ 45 46 /* Private variables ---------------------------------------------------------*/ 47 I2C_HandleTypeDef hi2c1; 48 DMA_HandleTypeDef hdma_i2c1_tx; 49 50 RTC_HandleTypeDef hrtc; 51 52 TIM_HandleTypeDef htim1; 53 TIM_HandleTypeDef htim3; 54 55 UART_HandleTypeDef huart1; 56 UART_HandleTypeDef huart3; 57 DMA_HandleTypeDef hdma_usart1_tx; 58 DMA_HandleTypeDef hdma_usart1_rx; 59 DMA_HandleTypeDef hdma_usart3_rx; 60 DMA_HandleTypeDef hdma_usart3_tx; 61 62 /* USER CODE BEGIN PV */ 63 64 /* USER CODE END PV */ 65 66 /* Private function prototypes -----------------------------------------------*/ 67 void SystemClock_Config(void); 68 static void MX_GPIO_Init(void); 69 static void MX_DMA_Init(void); 70 static void MX_RTC_Init(void); 71 static void MX_I2C1_Init(void); 72 static void MX_TIM1_Init(void); 73 static void MX_USART1_UART_Init(void); 74 static void MX_TIM3_Init(void); 75 static void MX_USART3_UART_Init(void); 76 /* USER CODE BEGIN PFP */ 77 78 /* USER CODE END PFP */ 79 80 /* Private user code ---------------------------------------------------------*/ 81 /* USER CODE BEGIN 0 */ 82 #if (1 == LOGGER_CONFIG_USE_SEMIHOSTING) 83 extern void initialise_monitor_handles(void); 84 #endif 85 86 RTC_TimeTypeDef s_time = {0}; 87 RTC_DateTypeDef s_date = {0}; 88 89 /* USER CODE END 0 */ 90 91 /** 92 * @brief The application entry point. 93 * @retval int 94 */ 95 int main(void) 96 { 97 98 /* USER CODE BEGIN 1 */ 99 #if (1 == LOGGER_CONFIG_USE_SEMIHOSTING) 100 initialise_monitor_handles(); 101 #endif 102 /* USER CODE END 1 */ 103 104 /* MCU Configuration--------------------------------------------------------*/ 105 106 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 107 HAL_Init(); 108 109 /* USER CODE BEGIN Init */ 110 111 /* USER CODE END Init */ 112 113 /* Configure the system clock */ 114 SystemClock_Config(); 115 116 /* USER CODE BEGIN SysInit */ 117 118 /* USER CODE END SysInit */ 119 120 /* Initialize all configured peripherals */ 121 MX_GPIO_Init(); 122 MX_DMA_Init(); 123 MX_RTC_Init(); 124 MX_I2C1_Init(); 125 MX_TIM1_Init(); 126 MX_USART1_UART_Init(); 127 MX_TIM3_Init(); 128 MX_USART3_UART_Init(); 129 /* USER CODE BEGIN 2 */ 130 131 /* Application Init */ 132 app_init(); 133 /* USER CODE END 2 */ 134 135 /* Infinite loop */ 136 /* USER CODE BEGIN WHILE */ 137 138 LOGGER_INFO("Running main loop..."); 139 while (1) 140 { 141 /* USER CODE END WHILE */ 142 143 /* USER CODE BEGIN 3 */ 144 145 /* Application Update */ 146 app_update(); 147 } 148 /* USER CODE END 3 */ 149 } 150 151 /** 152 * @brief System Clock Configuration 153 * @retval None 154 */ 155 void SystemClock_Config(void) 156 { 157 RCC_OscInitTypeDef RCC_OscInitStruct = {0}; 158 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 159 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; 160 161 /** Initializes the RCC Oscillators according to the specified parameters 162 * in the RCC_OscInitTypeDef structure. 163 */ 164 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE; 165 RCC_OscInitStruct.LSEState = RCC_LSE_ON; 166 RCC_OscInitStruct.HSIState = RCC_HSI_ON; 167 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; 168 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; 169 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; 170 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; 171 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 172 { 173 Error_Handler(); 174 } 175 176 /** Initializes the CPU, AHB and APB buses clocks 177 */ 178 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK 179 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; 180 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 181 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 182 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; 183 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; 184 185 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) 186 { 187 Error_Handler(); 188 } 189 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; 190 PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; 191 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 192 { 193 Error_Handler(); 194 } 195 } 196 197 /** 198 * @brief I2C1 Initialization Function 199 * @param None 200 * @retval None 201 */ 202 static void MX_I2C1_Init(void) 203 { 204 205 /* USER CODE BEGIN I2C1_Init 0 */ 206 207 /* USER CODE END I2C1_Init 0 */ 208 209 /* USER CODE BEGIN I2C1_Init 1 */ 210 211 /* USER CODE END I2C1_Init 1 */ 212 hi2c1.Instance = I2C1; 213 hi2c1.Init.ClockSpeed = 100000; 214 hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; 215 hi2c1.Init.OwnAddress1 = 0; 216 hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; 217 hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; 218 hi2c1.Init.OwnAddress2 = 0; 219 hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; 220 hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; 221 if (HAL_I2C_Init(&hi2c1) != HAL_OK) 222 { 223 Error_Handler(); 224 } 225 /* USER CODE BEGIN I2C1_Init 2 */ 226 227 /* USER CODE END I2C1_Init 2 */ 228 229 } 230 231 /** 232 * @brief RTC Initialization Function 233 * @param None 234 * @retval None 235 */ 236 static void MX_RTC_Init(void) 237 { 238 239 /* USER CODE BEGIN RTC_Init 0 */ 240 241 /* USER CODE END RTC_Init 0 */ 242 243 RTC_TimeTypeDef sTime = {0}; 244 RTC_DateTypeDef DateToUpdate = {0}; 245 246 /* USER CODE BEGIN RTC_Init 1 */ 247 248 /* USER CODE END RTC_Init 1 */ 249 250 /** Initialize RTC Only 251 */ 252 hrtc.Instance = RTC; 253 hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; 254 hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE; 255 if (HAL_RTC_Init(&hrtc) != HAL_OK) 256 { 257 Error_Handler(); 258 } 259 260 /* USER CODE BEGIN Check_RTC_BKUP */ 261 262 if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) == RTC_BACKUP_MAGIC_NUMBER) 263 { 264 return; 265 } 266 267 /* USER CODE END Check_RTC_BKUP */ 268 269 /** Initialize RTC and set the Time and Date 270 */ 271 sTime.Hours = 0; 272 sTime.Minutes = 0; 273 sTime.Seconds = 0; 274 275 if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) 276 { 277 Error_Handler(); 278 } 279 DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY; 280 DateToUpdate.Month = RTC_MONTH_JANUARY; 281 DateToUpdate.Date = 1; 282 DateToUpdate.Year = 0; 283 284 if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != 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 TIM1 Initialization Function 296 * @param None 297 * @retval None 298 */ 299 static void MX_TIM1_Init(void) 300 { 301 302 /* USER CODE BEGIN TIM1_Init 0 */ 303 304 /* USER CODE END TIM1_Init 0 */ 305 306 TIM_ClockConfigTypeDef sClockSourceConfig = {0}; 307 TIM_MasterConfigTypeDef sMasterConfig = {0}; 308 TIM_OC_InitTypeDef sConfigOC = {0}; 309 TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; 310 311 /* USER CODE BEGIN TIM1_Init 1 */ 312 313 /* USER CODE END TIM1_Init 1 */ 314 htim1.Instance = TIM1; 315 htim1.Init.Prescaler = 640-1; 316 htim1.Init.CounterMode = TIM_COUNTERMODE_UP; 317 htim1.Init.Period = 200-1; 318 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 319 htim1.Init.RepetitionCounter = 0; 320 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; 321 if (HAL_TIM_Base_Init(&htim1) != HAL_OK) 322 { 323 Error_Handler(); 324 } 325 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; 326 if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) 327 { 328 Error_Handler(); 329 } 330 if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) 331 { 332 Error_Handler(); 333 } 334 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 335 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 336 if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) 337 { 338 Error_Handler(); 339 } 340 sConfigOC.OCMode = TIM_OCMODE_PWM1; 341 sConfigOC.Pulse = 0; 342 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 343 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; 344 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; 345 sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; 346 sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; 347 if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) 348 { 349 Error_Handler(); 350 } 351 sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; 352 sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; 353 sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; 354 sBreakDeadTimeConfig.DeadTime = 0; 355 sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; 356 sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; 357 sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; 358 if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) 359 { 360 Error_Handler(); 361 } 362 /* USER CODE BEGIN TIM1_Init 2 */ 363 364 /* USER CODE END TIM1_Init 2 */ 365 HAL_TIM_MspPostInit(&htim1); 366 367 } 368 369 /** 370 * @brief TIM3 Initialization Function 371 * @param None 372 * @retval None 373 */ 374 static void MX_TIM3_Init(void) 375 { 376 377 /* USER CODE BEGIN TIM3_Init 0 */ 378 379 /* USER CODE END TIM3_Init 0 */ 380 381 TIM_ClockConfigTypeDef sClockSourceConfig = {0}; 382 TIM_MasterConfigTypeDef sMasterConfig = {0}; 383 TIM_OC_InitTypeDef sConfigOC = {0}; 384 385 /* USER CODE BEGIN TIM3_Init 1 */ 386 387 /* USER CODE END TIM3_Init 1 */ 388 htim3.Instance = TIM3; 389 htim3.Init.Prescaler = 0; 390 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; 391 htim3.Init.Period = 8000; 392 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 393 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; 394 if (HAL_TIM_Base_Init(&htim3) != HAL_OK) 395 { 396 Error_Handler(); 397 } 398 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; 399 if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) 400 { 401 Error_Handler(); 402 } 403 if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) 404 { 405 Error_Handler(); 406 } 407 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 408 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 409 if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) 410 { 411 Error_Handler(); 412 } 413 sConfigOC.OCMode = TIM_OCMODE_PWM1; 414 sConfigOC.Pulse = 4000; 415 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 416 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; 417 if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) 418 { 419 Error_Handler(); 420 } 421 /* USER CODE BEGIN TIM3_Init 2 */ 422 423 /* USER CODE END TIM3_Init 2 */ 424 HAL_TIM_MspPostInit(&htim3); 425 426 } 427 428 /** 429 * @brief USART1 Initialization Function 430 * @param None 431 * @retval None 432 */ 433 static void MX_USART1_UART_Init(void) 434 { 435 436 /* USER CODE BEGIN USART1_Init 0 */ 437 438 /* USER CODE END USART1_Init 0 */ 439 440 /* USER CODE BEGIN USART1_Init 1 */ 441 442 /* USER CODE END USART1_Init 1 */ 443 huart1.Instance = USART1; 444 huart1.Init.BaudRate = 115200; 445 huart1.Init.WordLength = UART_WORDLENGTH_8B; 446 huart1.Init.StopBits = UART_STOPBITS_1; 447 huart1.Init.Parity = UART_PARITY_NONE; 448 huart1.Init.Mode = UART_MODE_TX_RX; 449 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; 450 huart1.Init.OverSampling = UART_OVERSAMPLING_16; 451 if (HAL_HalfDuplex_Init(&huart1) != HAL_OK) 452 { 453 Error_Handler(); 454 } 455 /* USER CODE BEGIN USART1_Init 2 */ 456 457 /* USER CODE END USART1_Init 2 */ 458 459 } 460 461 /** 462 * @brief USART3 Initialization Function 463 * @param None 464 * @retval None 465 */ 466 static void MX_USART3_UART_Init(void) 467 { 468 469 /* USER CODE BEGIN USART3_Init 0 */ 470 471 /* USER CODE END USART3_Init 0 */ 472 473 /* USER CODE BEGIN USART3_Init 1 */ 474 475 /* USER CODE END USART3_Init 1 */ 476 huart3.Instance = USART3; 477 huart3.Init.BaudRate = 115200; 478 huart3.Init.WordLength = UART_WORDLENGTH_8B; 479 huart3.Init.StopBits = UART_STOPBITS_1; 480 huart3.Init.Parity = UART_PARITY_NONE; 481 huart3.Init.Mode = UART_MODE_TX_RX; 482 huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; 483 huart3.Init.OverSampling = UART_OVERSAMPLING_16; 484 if (HAL_UART_Init(&huart3) != HAL_OK) 485 { 486 Error_Handler(); 487 } 488 /* USER CODE BEGIN USART3_Init 2 */ 489 490 /* USER CODE END USART3_Init 2 */ 491 492 } 493 494 /** 495 * Enable DMA controller clock 496 */ 497 static void MX_DMA_Init(void) 498 { 499 500 /* DMA controller clock enable */ 501 __HAL_RCC_DMA1_CLK_ENABLE(); 502 503 /* DMA interrupt init */ 504 /* DMA1_Channel2_IRQn interrupt configuration */ 505 HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0); 506 HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn); 507 /* DMA1_Channel3_IRQn interrupt configuration */ 508 HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0); 509 HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); 510 /* DMA1_Channel4_IRQn interrupt configuration */ 511 HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0); 512 HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn); 513 /* DMA1_Channel5_IRQn interrupt configuration */ 514 HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0); 515 HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); 516 /* DMA1_Channel6_IRQn interrupt configuration */ 517 HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0); 518 HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn); 519 520 } 521 522 /** 523 * @brief GPIO Initialization Function 524 * @param None 525 * @retval None 526 */ 527 static void MX_GPIO_Init(void) 528 { 529 GPIO_InitTypeDef GPIO_InitStruct = {0}; 530 /* USER CODE BEGIN MX_GPIO_Init_1 */ 531 /* USER CODE END MX_GPIO_Init_1 */ 532 533 /* GPIO Ports Clock Enable */ 534 __HAL_RCC_GPIOC_CLK_ENABLE(); 535 __HAL_RCC_GPIOD_CLK_ENABLE(); 536 __HAL_RCC_GPIOA_CLK_ENABLE(); 537 __HAL_RCC_GPIOB_CLK_ENABLE(); 538 539 /*Configure GPIO pin Output Level */ 540 HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); 541 542 /*Configure GPIO pin Output Level */ 543 HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET); 544 545 /*Configure GPIO pin : BTN_A_Pin */ 546 GPIO_InitStruct.Pin = BTN_A_Pin; 547 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; 548 GPIO_InitStruct.Pull = GPIO_NOPULL; 549 HAL_GPIO_Init(BTN_A_GPIO_Port, &GPIO_InitStruct); 550 551 /*Configure GPIO pins : USART2_TX_Pin USART2_RX_Pin */ 552 GPIO_InitStruct.Pin = USART2_TX_Pin|USART2_RX_Pin; 553 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 554 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 555 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 556 557 /*Configure GPIO pin : LD2_Pin */ 558 GPIO_InitStruct.Pin = LD2_Pin; 559 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 560 GPIO_InitStruct.Pull = GPIO_NOPULL; 561 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 562 HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct); 563 564 /*Configure GPIO pin : LD3_Pin */ 565 GPIO_InitStruct.Pin = LD3_Pin; 566 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 567 GPIO_InitStruct.Pull = GPIO_NOPULL; 568 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 569 HAL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct); 570 571 /*Configure GPIO pin : BTN_B_Pin */ 572 GPIO_InitStruct.Pin = BTN_B_Pin; 573 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 574 GPIO_InitStruct.Pull = GPIO_PULLUP; 575 HAL_GPIO_Init(BTN_B_GPIO_Port, &GPIO_InitStruct); 576 577 /*Configure GPIO pins : BTN_D_Pin BTN_C_Pin */ 578 GPIO_InitStruct.Pin = BTN_D_Pin|BTN_C_Pin; 579 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 580 GPIO_InitStruct.Pull = GPIO_PULLUP; 581 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 582 583 /* EXTI interrupt init*/ 584 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); 585 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); 586 587 /* USER CODE BEGIN MX_GPIO_Init_2 */ 588 /* USER CODE END MX_GPIO_Init_2 */ 589 } 590 591 /* USER CODE BEGIN 4 */ 592 593 /* USER CODE END 4 */ 594 595 /** 596 * @brief This function is executed in case of error occurrence. 597 * @retval None 598 */ 599 void Error_Handler(void) 600 { 601 /* USER CODE BEGIN Error_Handler_Debug */ 602 /* User can add his own implementation to report the HAL error return state */ 603 __disable_irq(); 604 while (1) 605 { 606 ; 607 } 608 /* USER CODE END Error_Handler_Debug */ 609 } 610 #ifdef USE_FULL_ASSERT 611 /** 612 * @brief Reports the name of the source file and the source line number 613 * where the assert_param error has occurred. 614 * @param file: pointer to the source file name 615 * @param line: assert_param error line source number 616 * @retval None 617 */ 618 void assert_failed(uint8_t *file, uint32_t line) 619 { 620 /* USER CODE BEGIN 6 */ 621 /* 622 * User can add his own implementation to report the file name and line 623 * number, i.e. `printf("Error: file %s on line %d\r\n", file, line) 624 */ 625 /* USER CODE END 6 */ 626 } 627 #endif /* USE_FULL_ASSERT */
