From 088f974f14dbefa5c32517d99d13d48c2091771b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sun, 8 Feb 2026 15:00:18 +0100 Subject: [PATCH 01/15] Added ADC and Ethernet examples and removed old VirtualMCU. Also added test utilities --- Core/Src/Examples/ExampleADC.cpp | 26 +- Core/Src/Examples/ExampleEthernet.cpp | 43 +- Core/Src/main.cpp | 24 +- Core/Src/stm32h7xx_hal_msp.c | 2826 +++++++++++++------------ Core/Src/stm32h7xx_it.c | 841 ++++---- 5 files changed, 1989 insertions(+), 1771 deletions(-) diff --git a/Core/Src/Examples/ExampleADC.cpp b/Core/Src/Examples/ExampleADC.cpp index defafa2f..5674d2c2 100644 --- a/Core/Src/Examples/ExampleADC.cpp +++ b/Core/Src/Examples/ExampleADC.cpp @@ -8,25 +8,21 @@ using namespace ST_LIB; #ifdef TEST_0 constinit float adc_value = 0.0f; -constexpr auto adc = ADCDomain::ADC( - ST_LIB::PA0, - adc_value, - ADCDomain::Resolution::BITS_12, - ADCDomain::SampleTime::CYCLES_8_5 -); +constexpr auto adc = ADCDomain::ADC(PA0, adc_value, ADCDomain::Resolution::BITS_12, + ADCDomain::SampleTime::CYCLES_8_5); int main(void) { - using ExampleADCBoard = ST_LIB::Board; - ExampleADCBoard::init(); + using ExampleADCBoard = ST_LIB::Board; + ExampleADCBoard::init(); - auto& adc_instance = ExampleADCBoard::instance_of(); + auto &adc_instance = ExampleADCBoard::instance_of(); - // Ready to compile for Nucleo. Validate by wiring PA0 to 3.3V and then to GND, - // and watch adc_value in the debugger to confirm the change. - while (1) { - adc_instance.read(); - HAL_Delay(100); - } + // Ready to compile for Nucleo. Validate by wiring PA0 to 3.3V and then to GND, + // and watch adc_value in the debugger to confirm the change. + while (1) { + adc_instance.read(); + HAL_Delay(100); + } } #endif // TEST_0 diff --git a/Core/Src/Examples/ExampleEthernet.cpp b/Core/Src/Examples/ExampleEthernet.cpp index 0a3b5211..dd497c58 100644 --- a/Core/Src/Examples/ExampleEthernet.cpp +++ b/Core/Src/Examples/ExampleEthernet.cpp @@ -11,26 +11,17 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); #ifdef STLIB_ETH #if defined(USE_PHY_LAN8742) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H10, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_LAN8700) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H10, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_KSZ8041) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H11, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #else #error "No PHY selected for Ethernet pinset selection" #endif @@ -40,20 +31,20 @@ using ExampleEthernetBoard = ST_LIB::Board; #endif int main(void) { - Hard_fault_check(); + Hard_fault_check(); - ExampleEthernetBoard::init(); + ExampleEthernetBoard::init(); #ifdef STLIB_ETH - auto& eth_instance = ExampleEthernetBoard::instance_of(); + auto ð_instance = ExampleEthernetBoard::instance_of(); #endif - auto& led_instance = ExampleEthernetBoard::instance_of(); + auto &led_instance = ExampleEthernetBoard::instance_of(); - led_instance.turn_on(); - while (1) { + led_instance.turn_on(); + while (1) { #ifdef STLIB_ETH - eth_instance.update(); + eth_instance.update(); #endif - } + } } #endif // TEST_0 diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 2b5aa232..5e49f8c5 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -1,29 +1,25 @@ #include "main.h" - #include "ST-LIB.hpp" using namespace ST_LIB; -constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PF13); +constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); using MainBoard = ST_LIB::Board; -#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && !defined(EXAMPLE_MPU) && \ - !defined(EXAMPLE_HARDFAULT) int main(void) { - MainBoard::init(); + MainBoard::init(); - auto& led_instance = MainBoard::instance_of(); + auto &led_instance = MainBoard::instance_of(); - while (1) { - led_instance.toggle(); - HAL_Delay(200); - } + while (1) { + led_instance.toggle(); + HAL_Delay(200); + } } -#endif extern "C" void Error_Handler(void) { - ErrorHandler("HAL error handler triggered"); - while (1) { - } + ErrorHandler("HAL error handler triggered"); + while (1) { + } } diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index a518063b..d56011ad 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -1,21 +1,21 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file stm32h7xx_hal_msp.c - * @brief This file provides code for the MSP Initialization - * and de-Initialization codes. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file stm32h7xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -23,7 +23,7 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ -extern DMA_HandleTypeDef hdma_i2c2_rx; +extern DMA_HandleTypeDef hdma_i2c2_rx; extern DMA_HandleTypeDef hdma_i2c2_tx; @@ -69,1419 +69,1583 @@ extern DMA_HandleTypeDef hdma_spi3_tx; /* USER CODE END 0 */ -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim); -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) { - /* USER CODE BEGIN MspInit 0 */ +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + /** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ - /* USER CODE END MspInit 0 */ + /* USER CODE END MspInit 0 */ - __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); - /* System interrupt init*/ + /* System interrupt init*/ - /* USER CODE BEGIN MspInit 1 */ + /* USER CODE BEGIN MspInit 1 */ - /* USER CODE END MspInit 1 */ + /* USER CODE END MspInit 1 */ } /** * @brief ADC MSP Initialization -* This function configures the hardware resources used in this - * example +* This function configures the hardware resources used in this example * @param hadc: ADC handle pointer * @retval None -*/ -void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { - (void)hadc; - /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ -} +*/ +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) +{ + (void)hadc; + /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ +} /** - * @brief ADC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hadc: ADC handle pointer - * @retval None - */ -void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) { - (void)hadc; - /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ -} +* @brief ADC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) +{ + (void)hadc; + /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ +} /** - * @brief CORDIC MSP Initialization - * This function configures the hardware resources used in this example - * @param hcordic: CORDIC handle pointer - * @retval None - */ -void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef* hcordic) { - if (hcordic->Instance == CORDIC) { - /* USER CODE BEGIN CORDIC_MspInit 0 */ - - /* USER CODE END CORDIC_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_CORDIC_CLK_ENABLE(); - /* USER CODE BEGIN CORDIC_MspInit 1 */ - - /* USER CODE END CORDIC_MspInit 1 */ - } +* @brief CORDIC MSP Initialization +* This function configures the hardware resources used in this example +* @param hcordic: CORDIC handle pointer +* @retval None +*/ +void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef* hcordic) +{ + if(hcordic->Instance==CORDIC) + { + /* USER CODE BEGIN CORDIC_MspInit 0 */ + + /* USER CODE END CORDIC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_CORDIC_CLK_ENABLE(); + /* USER CODE BEGIN CORDIC_MspInit 1 */ + + /* USER CODE END CORDIC_MspInit 1 */ + } + } /** - * @brief CORDIC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hcordic: CORDIC handle pointer - * @retval None - */ -void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef* hcordic) { - if (hcordic->Instance == CORDIC) { - /* USER CODE BEGIN CORDIC_MspDeInit 0 */ - - /* USER CODE END CORDIC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_CORDIC_CLK_DISABLE(); - /* USER CODE BEGIN CORDIC_MspDeInit 1 */ - - /* USER CODE END CORDIC_MspDeInit 1 */ - } +* @brief CORDIC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hcordic: CORDIC handle pointer +* @retval None +*/ +void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef* hcordic) +{ + if(hcordic->Instance==CORDIC) + { + /* USER CODE BEGIN CORDIC_MspDeInit 0 */ + + /* USER CODE END CORDIC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_CORDIC_CLK_DISABLE(); + /* USER CODE BEGIN CORDIC_MspDeInit 1 */ + + /* USER CODE END CORDIC_MspDeInit 1 */ + } + } -static uint32_t HAL_RCC_FDCAN_CLK_ENABLED = 0; +static uint32_t HAL_RCC_FDCAN_CLK_ENABLED=0; /** - * @brief FDCAN MSP Initialization - * This function configures the hardware resources used in this example - * @param hfdcan: FDCAN handle pointer - * @retval None - */ -void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if (hfdcan->Instance == FDCAN1) { - /* USER CODE BEGIN FDCAN1_MspInit 0 */ - - /* USER CODE END FDCAN1_MspInit 0 */ - /* Peripheral clock enable */ - HAL_RCC_FDCAN_CLK_ENABLED++; - if (HAL_RCC_FDCAN_CLK_ENABLED == 1) { - __HAL_RCC_FDCAN_CLK_ENABLE(); - } - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**FDCAN1 GPIO Configuration - PD0 ------> FDCAN1_RX - PD1 ------> FDCAN1_TX - */ - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN FDCAN1_MspInit 1 */ - HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn); - HAL_NVIC_SetPriority(FDCAN1_IT1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN1_IT1_IRQn); - /* USER CODE END FDCAN1_MspInit 1 */ - } else if (hfdcan->Instance == FDCAN3) { - /* USER CODE BEGIN FDCAN3_MspInit 0 */ - - /* USER CODE END FDCAN3_MspInit 0 */ - /* Peripheral clock enable */ - HAL_RCC_FDCAN_CLK_ENABLED++; - if (HAL_RCC_FDCAN_CLK_ENABLED == 1) { - __HAL_RCC_FDCAN_CLK_ENABLE(); - } - - __HAL_RCC_GPIOG_CLK_ENABLE(); - /**FDCAN3 GPIO Configuration - PG9 ------> FDCAN3_TX - PG10 ------> FDCAN3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_FDCAN3; - HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - - /* USER CODE BEGIN FDCAN3_MspInit 1 */ - HAL_NVIC_SetPriority(FDCAN3_IT0_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN3_IT0_IRQn); - HAL_NVIC_SetPriority(FDCAN3_IT1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN3_IT1_IRQn); - /* USER CODE END FDCAN3_MspInit 1 */ +* @brief FDCAN MSP Initialization +* This function configures the hardware resources used in this example +* @param hfdcan: FDCAN handle pointer +* @retval None +*/ +void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hfdcan->Instance==FDCAN1) + { + /* USER CODE BEGIN FDCAN1_MspInit 0 */ + + /* USER CODE END FDCAN1_MspInit 0 */ + /* Peripheral clock enable */ + HAL_RCC_FDCAN_CLK_ENABLED++; + if(HAL_RCC_FDCAN_CLK_ENABLED==1){ + __HAL_RCC_FDCAN_CLK_ENABLE(); + } + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**FDCAN1 GPIO Configuration + PD0 ------> FDCAN1_RX + PD1 ------> FDCAN1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN FDCAN1_MspInit 1 */ + HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn); + HAL_NVIC_SetPriority(FDCAN1_IT1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN1_IT1_IRQn); + /* USER CODE END FDCAN1_MspInit 1 */ + } + else if(hfdcan->Instance==FDCAN3) + { + /* USER CODE BEGIN FDCAN3_MspInit 0 */ + + /* USER CODE END FDCAN3_MspInit 0 */ + /* Peripheral clock enable */ + HAL_RCC_FDCAN_CLK_ENABLED++; + if(HAL_RCC_FDCAN_CLK_ENABLED==1){ + __HAL_RCC_FDCAN_CLK_ENABLE(); } + + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**FDCAN3 GPIO Configuration + PG9 ------> FDCAN3_TX + PG10 ------> FDCAN3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_FDCAN3; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /* USER CODE BEGIN FDCAN3_MspInit 1 */ + HAL_NVIC_SetPriority(FDCAN3_IT0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN3_IT0_IRQn); + HAL_NVIC_SetPriority(FDCAN3_IT1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN3_IT1_IRQn); + /* USER CODE END FDCAN3_MspInit 1 */ + } + } /** - * @brief FDCAN MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hfdcan: FDCAN handle pointer - * @retval None - */ -void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan) { - if (hfdcan->Instance == FDCAN1) { - /* USER CODE BEGIN FDCAN1_MspDeInit 0 */ - - /* USER CODE END FDCAN1_MspDeInit 0 */ - /* Peripheral clock disable */ - HAL_RCC_FDCAN_CLK_ENABLED--; - if (HAL_RCC_FDCAN_CLK_ENABLED == 0) { - __HAL_RCC_FDCAN_CLK_DISABLE(); - } - - /**FDCAN1 GPIO Configuration - PD0 ------> FDCAN1_RX - PD1 ------> FDCAN1_TX - */ - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0 | GPIO_PIN_1); - - /* USER CODE BEGIN FDCAN1_MspDeInit 1 */ - HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn); - HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn); - /* USER CODE END FDCAN1_MspDeInit 1 */ - } else if (hfdcan->Instance == FDCAN3) { - /* USER CODE BEGIN FDCAN3_MspDeInit 0 */ - - /* USER CODE END FDCAN3_MspDeInit 0 */ - /* Peripheral clock disable */ - HAL_RCC_FDCAN_CLK_ENABLED--; - if (HAL_RCC_FDCAN_CLK_ENABLED == 0) { - __HAL_RCC_FDCAN_CLK_DISABLE(); - } - - /**FDCAN3 GPIO Configuration - PG9 ------> FDCAN3_TX - PG10 ------> FDCAN3_RX - */ - HAL_GPIO_DeInit(GPIOG, GPIO_PIN_9 | GPIO_PIN_10); - - /* USER CODE BEGIN FDCAN3_MspDeInit 1 */ - HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn); - HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn); - /* USER CODE END FDCAN3_MspDeInit 1 */ +* @brief FDCAN MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hfdcan: FDCAN handle pointer +* @retval None +*/ +void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan) +{ + if(hfdcan->Instance==FDCAN1) + { + /* USER CODE BEGIN FDCAN1_MspDeInit 0 */ + + /* USER CODE END FDCAN1_MspDeInit 0 */ + /* Peripheral clock disable */ + HAL_RCC_FDCAN_CLK_ENABLED--; + if(HAL_RCC_FDCAN_CLK_ENABLED==0){ + __HAL_RCC_FDCAN_CLK_DISABLE(); } + + /**FDCAN1 GPIO Configuration + PD0 ------> FDCAN1_RX + PD1 ------> FDCAN1_TX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1); + + /* USER CODE BEGIN FDCAN1_MspDeInit 1 */ + HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn); + HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn); + /* USER CODE END FDCAN1_MspDeInit 1 */ + } + else if(hfdcan->Instance==FDCAN3) + { + /* USER CODE BEGIN FDCAN3_MspDeInit 0 */ + + /* USER CODE END FDCAN3_MspDeInit 0 */ + /* Peripheral clock disable */ + HAL_RCC_FDCAN_CLK_ENABLED--; + if(HAL_RCC_FDCAN_CLK_ENABLED==0){ + __HAL_RCC_FDCAN_CLK_DISABLE(); + } + + /**FDCAN3 GPIO Configuration + PG9 ------> FDCAN3_TX + PG10 ------> FDCAN3_RX + */ + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN FDCAN3_MspDeInit 1 */ + HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn); + HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn); + /* USER CODE END FDCAN3_MspDeInit 1 */ + } + } /** - * @brief FMAC MSP Initialization - * This function configures the hardware resources used in this example - * @param hfmac: FMAC handle pointer - * @retval None - */ -void HAL_FMAC_MspInit(FMAC_HandleTypeDef* hfmac) { - if (hfmac->Instance == FMAC) { - __HAL_RCC_FMAC_CLK_ENABLE(); - - /* FMAC DMA Init */ - /* FMAC_PRELOAD Init */ - hdma_fmac_preload.Instance = DMA2_Stream0; - hdma_fmac_preload.Init.Request = DMA_REQUEST_MEM2MEM; - hdma_fmac_preload.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_fmac_preload.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_fmac_preload.Init.MemInc = DMA_MINC_DISABLE; - hdma_fmac_preload.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_preload.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_preload.Init.Mode = DMA_NORMAL; - hdma_fmac_preload.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_preload) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac, hdmaPreload, hdma_fmac_preload); - - /* FMAC_WRITE Init */ - hdma_fmac_write.Instance = DMA2_Stream1; - hdma_fmac_write.Init.Request = DMA_REQUEST_FMAC_WRITE; - hdma_fmac_write.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_fmac_write.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_fmac_write.Init.MemInc = DMA_MINC_ENABLE; - hdma_fmac_write.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_write.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_write.Init.Mode = DMA_NORMAL; - hdma_fmac_write.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_write) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac, hdmaIn, hdma_fmac_write); - - /* FMAC interrupt Init */ - - /* FMAC DMA Init */ - /* FMAC_READ Init */ - hdma_fmac_read.Instance = DMA2_Stream2; - hdma_fmac_read.Init.Request = DMA_REQUEST_FMAC_READ; - hdma_fmac_read.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_fmac_read.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_fmac_read.Init.MemInc = DMA_MINC_ENABLE; - hdma_fmac_read.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_read.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_read.Init.Mode = DMA_NORMAL; - hdma_fmac_read.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_read) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac, hdmaOut, hdma_fmac_read); - - HAL_NVIC_SetPriority(FMAC_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FMAC_IRQn); - } +* @brief FMAC MSP Initialization +* This function configures the hardware resources used in this example +* @param hfmac: FMAC handle pointer +* @retval None +*/ +void HAL_FMAC_MspInit(FMAC_HandleTypeDef* hfmac) +{ + if(hfmac->Instance==FMAC) + { + __HAL_RCC_FMAC_CLK_ENABLE(); + + /* FMAC DMA Init */ + /* FMAC_PRELOAD Init */ + hdma_fmac_preload.Instance = DMA2_Stream0; + hdma_fmac_preload.Init.Request = DMA_REQUEST_MEM2MEM; + hdma_fmac_preload.Init.Direction = DMA_MEMORY_TO_MEMORY; + hdma_fmac_preload.Init.PeriphInc = DMA_PINC_ENABLE; + hdma_fmac_preload.Init.MemInc = DMA_MINC_DISABLE; + hdma_fmac_preload.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_preload.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_preload.Init.Mode = DMA_NORMAL; + hdma_fmac_preload.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_preload) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac,hdmaPreload,hdma_fmac_preload); + + /* FMAC_WRITE Init */ + hdma_fmac_write.Instance = DMA2_Stream1; + hdma_fmac_write.Init.Request = DMA_REQUEST_FMAC_WRITE; + hdma_fmac_write.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_fmac_write.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_fmac_write.Init.MemInc = DMA_MINC_ENABLE; + hdma_fmac_write.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_write.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_write.Init.Mode = DMA_NORMAL; + hdma_fmac_write.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_write) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac,hdmaIn,hdma_fmac_write); + + /* FMAC interrupt Init */ + + /* FMAC DMA Init */ + /* FMAC_READ Init */ + hdma_fmac_read.Instance = DMA2_Stream2; + hdma_fmac_read.Init.Request = DMA_REQUEST_FMAC_READ; + hdma_fmac_read.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_fmac_read.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_fmac_read.Init.MemInc = DMA_MINC_ENABLE; + hdma_fmac_read.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_read.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_read.Init.Mode = DMA_NORMAL; + hdma_fmac_read.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_read) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac,hdmaOut,hdma_fmac_read); + + HAL_NVIC_SetPriority(FMAC_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FMAC_IRQn); + } + } /** - * @brief FMAC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hfmac: FMAC handle pointer - * @retval None - */ -void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef* hfmac) { - if (hfmac->Instance == FMAC) { - /* USER CODE BEGIN FMAC_MspDeInit 0 */ - - /* USER CODE END FMAC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_FMAC_CLK_DISABLE(); - /* USER CODE BEGIN FMAC_MspDeInit 1 */ - - /* USER CODE END FMAC_MspDeInit 1 */ - } +* @brief FMAC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hfmac: FMAC handle pointer +* @retval None +*/ +void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef* hfmac) +{ + if(hfmac->Instance==FMAC) + { + /* USER CODE BEGIN FMAC_MspDeInit 0 */ + + /* USER CODE END FMAC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_FMAC_CLK_DISABLE(); + /* USER CODE BEGIN FMAC_MspDeInit 1 */ + + /* USER CODE END FMAC_MspDeInit 1 */ + } + } /** - * @brief I2C MSP Initialization - * This function configures the hardware resources used in this example - * @param hi2c: I2C handle pointer - * @retval None - */ -void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if (hi2c->Instance == I2C2) { - /* USER CODE BEGIN I2C2_MspInit 0 */ - - /* USER CODE END I2C2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C2; - PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**I2C2 GPIO Configuration - PF1 ------> I2C2_SCL - PB11 ------> I2C2_SDA - */ - GPIO_InitStruct.Pin = GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* Peripheral clock enable */ - __HAL_RCC_I2C2_CLK_ENABLE(); - - /* I2C2 DMA Init */ - /* I2C2_RX Init */ - hdma_i2c2_rx.Instance = DMA1_Stream3; - hdma_i2c2_rx.Init.Request = DMA_REQUEST_I2C2_RX; - hdma_i2c2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2c2_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2c2_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2c2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_i2c2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_i2c2_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2c2_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_i2c2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_i2c2_rx) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hi2c, hdmarx, hdma_i2c2_rx); - - /* I2C2_TX Init */ - hdma_i2c2_tx.Instance = DMA1_Stream4; - hdma_i2c2_tx.Init.Request = DMA_REQUEST_I2C2_TX; - hdma_i2c2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2c2_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2c2_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2c2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_i2c2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_i2c2_tx.Init.Mode = DMA_CIRCULAR; - hdma_i2c2_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_i2c2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_i2c2_tx) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hi2c, hdmatx, hdma_i2c2_tx); - - /* I2C2 interrupt Init */ - HAL_NVIC_SetPriority(I2C2_EV_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(I2C2_EV_IRQn); - /* USER CODE BEGIN I2C2_MspInit 1 */ - - /* USER CODE END I2C2_MspInit 1 */ +* @brief I2C MSP Initialization +* This function configures the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspInit 0 */ + + /* USER CODE END I2C2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C2; + PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2C2 GPIO Configuration + PF1 ------> I2C2_SCL + PB11 ------> I2C2_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_I2C2_CLK_ENABLE(); + + /* I2C2 DMA Init */ + /* I2C2_RX Init */ + hdma_i2c2_rx.Instance = DMA1_Stream3; + hdma_i2c2_rx.Init.Request = DMA_REQUEST_I2C2_RX; + hdma_i2c2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_i2c2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_i2c2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_i2c2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_i2c2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_i2c2_rx.Init.Mode = DMA_CIRCULAR; + hdma_i2c2_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_i2c2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_i2c2_rx) != HAL_OK) + { + Error_Handler(); } + + __HAL_LINKDMA(hi2c,hdmarx,hdma_i2c2_rx); + + /* I2C2_TX Init */ + hdma_i2c2_tx.Instance = DMA1_Stream4; + hdma_i2c2_tx.Init.Request = DMA_REQUEST_I2C2_TX; + hdma_i2c2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_i2c2_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_i2c2_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_i2c2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_i2c2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_i2c2_tx.Init.Mode = DMA_CIRCULAR; + hdma_i2c2_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_i2c2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_i2c2_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hi2c,hdmatx,hdma_i2c2_tx); + + /* I2C2 interrupt Init */ + HAL_NVIC_SetPriority(I2C2_EV_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(I2C2_EV_IRQn); + /* USER CODE BEGIN I2C2_MspInit 1 */ + + /* USER CODE END I2C2_MspInit 1 */ + } + } /** - * @brief I2C MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hi2c: I2C handle pointer - * @retval None - */ -void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) { - if (hi2c->Instance == I2C2) { - /* USER CODE BEGIN I2C2_MspDeInit 0 */ - - /* USER CODE END I2C2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_I2C2_CLK_DISABLE(); - - /**I2C2 GPIO Configuration - PF1 ------> I2C2_SCL - PB11 ------> I2C2_SDA - */ - HAL_GPIO_DeInit(GPIOF, GPIO_PIN_1); - - HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11); - - /* I2C2 DMA DeInit */ - HAL_DMA_DeInit(hi2c->hdmarx); - HAL_DMA_DeInit(hi2c->hdmatx); - - /* I2C2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(I2C2_EV_IRQn); - /* USER CODE BEGIN I2C2_MspDeInit 1 */ - - /* USER CODE END I2C2_MspDeInit 1 */ - } +* @brief I2C MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) +{ + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspDeInit 0 */ + + /* USER CODE END I2C2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C2_CLK_DISABLE(); + + /**I2C2 GPIO Configuration + PF1 ------> I2C2_SCL + PB11 ------> I2C2_SDA + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_1); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11); + + /* I2C2 DMA DeInit */ + HAL_DMA_DeInit(hi2c->hdmarx); + HAL_DMA_DeInit(hi2c->hdmatx); + + /* I2C2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(I2C2_EV_IRQn); + /* USER CODE BEGIN I2C2_MspDeInit 1 */ + + /* USER CODE END I2C2_MspDeInit 1 */ + } + } /** - * @brief LPTIM MSP Initialization - * This function configures the hardware resources used in this example - * @param hlptim: LPTIM handle pointer - * @retval None - */ -void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) { - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if (hlptim->Instance == LPTIM1) { - /* USER CODE BEGIN LPTIM1_MspInit 0 */ - - /* USER CODE END LPTIM1_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; - PeriphClkInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_LPTIM1_CLK_ENABLE(); - /* LPTIM1 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM1_IRQn); - /* USER CODE BEGIN LPTIM1_MspInit 1 */ - - /* USER CODE END LPTIM1_MspInit 1 */ - } else if (hlptim->Instance == LPTIM2) { - /* USER CODE BEGIN LPTIM2_MspInit 0 */ - - /* USER CODE END LPTIM2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM2; - PeriphClkInitStruct.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_D3PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_LPTIM2_CLK_ENABLE(); - /* LPTIM2 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM2_IRQn); - /* USER CODE BEGIN LPTIM2_MspInit 1 */ - - /* USER CODE END LPTIM2_MspInit 1 */ - } else if (hlptim->Instance == LPTIM3) { - /* USER CODE BEGIN LPTIM3_MspInit 0 */ - - /* USER CODE END LPTIM3_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM3; - PeriphClkInitStruct.Lptim345ClockSelection = RCC_LPTIM345CLKSOURCE_D3PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_LPTIM3_CLK_ENABLE(); - /* LPTIM3 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM3_IRQn); - /* USER CODE BEGIN LPTIM3_MspInit 1 */ - - /* USER CODE END LPTIM3_MspInit 1 */ +* @brief LPTIM MSP Initialization +* This function configures the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspInit 0 */ + + /* USER CODE END LPTIM1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; + PeriphClkInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + /* LPTIM1 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspInit 1 */ + + /* USER CODE END LPTIM1_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM2) + { + /* USER CODE BEGIN LPTIM2_MspInit 0 */ + + /* USER CODE END LPTIM2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM2; + PeriphClkInitStruct.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_D3PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM2_CLK_ENABLE(); + /* LPTIM2 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspInit 1 */ + + /* USER CODE END LPTIM2_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM3) + { + /* USER CODE BEGIN LPTIM3_MspInit 0 */ + + /* USER CODE END LPTIM3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM3; + PeriphClkInitStruct.Lptim345ClockSelection = RCC_LPTIM345CLKSOURCE_D3PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM3_CLK_ENABLE(); + /* LPTIM3 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspInit 1 */ + + /* USER CODE END LPTIM3_MspInit 1 */ + } + } /** - * @brief LPTIM MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hlptim: LPTIM handle pointer - * @retval None - */ -void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) { - if (hlptim->Instance == LPTIM1) { - /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ - - /* USER CODE END LPTIM1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM1_CLK_DISABLE(); - - /* LPTIM1 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM1_IRQn); - /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ - - /* USER CODE END LPTIM1_MspDeInit 1 */ - } else if (hlptim->Instance == LPTIM2) { - /* USER CODE BEGIN LPTIM2_MspDeInit 0 */ - - /* USER CODE END LPTIM2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM2_CLK_DISABLE(); - - /* LPTIM2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM2_IRQn); - /* USER CODE BEGIN LPTIM2_MspDeInit 1 */ - - /* USER CODE END LPTIM2_MspDeInit 1 */ - } else if (hlptim->Instance == LPTIM3) { - /* USER CODE BEGIN LPTIM3_MspDeInit 0 */ - - /* USER CODE END LPTIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM3_CLK_DISABLE(); - - /* LPTIM3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM3_IRQn); - /* USER CODE BEGIN LPTIM3_MspDeInit 1 */ - - /* USER CODE END LPTIM3_MspDeInit 1 */ - } +* @brief LPTIM MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) +{ + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ + + /* USER CODE END LPTIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM1_CLK_DISABLE(); + + /* LPTIM1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ + + /* USER CODE END LPTIM1_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM2) + { + /* USER CODE BEGIN LPTIM2_MspDeInit 0 */ + + /* USER CODE END LPTIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM2_CLK_DISABLE(); + + /* LPTIM2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspDeInit 1 */ + + /* USER CODE END LPTIM2_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM3) + { + /* USER CODE BEGIN LPTIM3_MspDeInit 0 */ + + /* USER CODE END LPTIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM3_CLK_DISABLE(); + + /* LPTIM3 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspDeInit 1 */ + + /* USER CODE END LPTIM3_MspDeInit 1 */ + } + } /** - * @brief RTC MSP Initialization - * This function configures the hardware resources used in this example - * @param hrtc: RTC handle pointer - * @retval None - */ -void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if (hrtc->Instance == RTC) { - /* USER CODE BEGIN RTC_MspInit 0 */ - - /* USER CODE END RTC_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_RTC_ENABLE(); - /* USER CODE BEGIN RTC_MspInit 1 */ - - /* USER CODE END RTC_MspInit 1 */ +* @brief RTC MSP Initialization +* This function configures the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); } + + /* Peripheral clock enable */ + __HAL_RCC_RTC_ENABLE(); + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + } + } /** - * @brief RTC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hrtc: RTC handle pointer - * @retval None - */ -void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) { - if (hrtc->Instance == RTC) { - /* USER CODE BEGIN RTC_MspDeInit 0 */ - - /* USER CODE END RTC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_RTC_DISABLE(); - /* USER CODE BEGIN RTC_MspDeInit 1 */ - - /* USER CODE END RTC_MspDeInit 1 */ - } +* @brief RTC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) +{ + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ + } + } /** - * @brief SPI MSP Initialization - * This function configures the hardware resources used in this example - * @param hspi: SPI handle pointer - * @retval None - */ -void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if (hspi->Instance == SPI3) { - /* USER CODE BEGIN SPI3_MspInit 0 */ - - /* USER CODE END SPI3_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3; - PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_SPI3_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**SPI3 GPIO Configuration - PC10 ------> SPI3_SCK - PC11 ------> SPI3_MISO - PC12 ------> SPI3_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* SPI3 DMA Init */ - /* SPI3_RX Init */ - hdma_spi3_rx.Instance = DMA1_Stream5; - hdma_spi3_rx.Init.Request = DMA_REQUEST_SPI3_RX; - hdma_spi3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_spi3_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_spi3_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_spi3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_spi3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_spi3_rx.Init.Mode = DMA_NORMAL; - hdma_spi3_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_spi3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_spi3_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - if (HAL_DMA_Init(&hdma_spi3_rx) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hspi, hdmarx, hdma_spi3_rx); - - /* SPI3_TX Init */ - hdma_spi3_tx.Instance = DMA1_Stream6; - hdma_spi3_tx.Init.Request = DMA_REQUEST_SPI3_TX; - hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_spi3_tx.Init.Mode = DMA_NORMAL; - hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(hspi, hdmatx, hdma_spi3_tx); - - /* SPI3 interrupt Init */ - HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspInit 1 */ - /* USER CODE END SPI3_MspInit 1 */ +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hspi->Instance==SPI3) + { + /* USER CODE BEGIN SPI3_MspInit 0 */ + + /* USER CODE END SPI3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3; + PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); } + + /* Peripheral clock enable */ + __HAL_RCC_SPI3_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**SPI3 GPIO Configuration + PC10 ------> SPI3_SCK + PC11 ------> SPI3_MISO + PC12 ------> SPI3_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* SPI3 DMA Init */ + /* SPI3_RX Init */ + hdma_spi3_rx.Instance = DMA1_Stream5; + hdma_spi3_rx.Init.Request = DMA_REQUEST_SPI3_RX; + hdma_spi3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_spi3_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi3_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_spi3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_spi3_rx.Init.Mode = DMA_NORMAL; + hdma_spi3_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + hdma_spi3_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + if (HAL_DMA_Init(&hdma_spi3_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hspi,hdmarx,hdma_spi3_rx); + + /* SPI3_TX Init */ + hdma_spi3_tx.Instance = DMA1_Stream6; + hdma_spi3_tx.Init.Request = DMA_REQUEST_SPI3_TX; + hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_spi3_tx.Init.Mode = DMA_NORMAL; + hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hspi,hdmatx,hdma_spi3_tx); + + /* SPI3 interrupt Init */ + HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(SPI3_IRQn); + /* USER CODE BEGIN SPI3_MspInit 1 */ + /* USER CODE END SPI3_MspInit 1 */ + } + } /** - * @brief SPI MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param hspi: SPI handle pointer - * @retval None - */ -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) { - if (hspi->Instance == SPI3) { - /* USER CODE BEGIN SPI3_MspDeInit 0 */ - - /* USER CODE END SPI3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI3_CLK_DISABLE(); - - /**SPI3 GPIO Configuration - PC10 ------> SPI3_SCK - PC11 ------> SPI3_MISO - PC12 ------> SPI3_MOSI - */ - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12); - - /* SPI3 DMA DeInit */ - HAL_DMA_DeInit(hspi->hdmarx); - HAL_DMA_DeInit(hspi->hdmatx); - - /* SPI3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspDeInit 1 */ - - /* USER CODE END SPI3_MspDeInit 1 */ - } +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI3) + { + /* USER CODE BEGIN SPI3_MspDeInit 0 */ + + /* USER CODE END SPI3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI3_CLK_DISABLE(); + + /**SPI3 GPIO Configuration + PC10 ------> SPI3_SCK + PC11 ------> SPI3_MISO + PC12 ------> SPI3_MOSI + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12); + + /* SPI3 DMA DeInit */ + HAL_DMA_DeInit(hspi->hdmarx); + HAL_DMA_DeInit(hspi->hdmatx); + + /* SPI3 interrupt DeInit */ + HAL_NVIC_DisableIRQ(SPI3_IRQn); + /* USER CODE BEGIN SPI3_MspDeInit 1 */ + + /* USER CODE END SPI3_MspDeInit 1 */ + } + } /** - * @brief TIM_PWM MSP Initialization - * This function configures the hardware resources used in this example - * @param htim_pwm: TIM_PWM handle pointer - * @retval None - */ -void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { - if (htim_pwm->Instance == TIM1) { - /* USER CODE BEGIN TIM1_MspInit 0 */ - - /* USER CODE END TIM1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM1_CLK_ENABLE(); - /* USER CODE BEGIN TIM1_MspInit 1 */ - - /* USER CODE END TIM1_MspInit 1 */ - } else if (htim_pwm->Instance == TIM3) { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } else if (htim_pwm->Instance == TIM4) { - /* USER CODE BEGIN TIM4_MspInit 0 */ - - /* USER CODE END TIM4_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM4_CLK_ENABLE(); - /* USER CODE BEGIN TIM4_MspInit 1 */ - - /* USER CODE END TIM4_MspInit 1 */ - } else if (htim_pwm->Instance == TIM12) { - /* USER CODE BEGIN TIM12_MspInit 0 */ - - /* USER CODE END TIM12_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM12_CLK_ENABLE(); - /* USER CODE BEGIN TIM12_MspInit 1 */ - - /* USER CODE END TIM12_MspInit 1 */ - } else if (htim_pwm->Instance == TIM15) { - /* USER CODE BEGIN TIM15_MspInit 0 */ - - /* USER CODE END TIM15_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM15_CLK_ENABLE(); - /* USER CODE BEGIN TIM15_MspInit 1 */ - - /* USER CODE END TIM15_MspInit 1 */ - } +* @brief TIM_PWM MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_pwm: TIM_PWM handle pointer +* @retval None +*/ +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) +{ + if(htim_pwm->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspInit 0 */ + + /* USER CODE END TIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM1_CLK_ENABLE(); + /* USER CODE BEGIN TIM1_MspInit 1 */ + + /* USER CODE END TIM1_MspInit 1 */ + } + else if(htim_pwm->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } + else if(htim_pwm->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspInit 0 */ + + /* USER CODE END TIM4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } + else if(htim_pwm->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspInit 0 */ + + /* USER CODE END TIM12_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM12_CLK_ENABLE(); + /* USER CODE BEGIN TIM12_MspInit 1 */ + + /* USER CODE END TIM12_MspInit 1 */ + } + else if(htim_pwm->Instance==TIM15) + { + /* USER CODE BEGIN TIM15_MspInit 0 */ + + /* USER CODE END TIM15_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM15_CLK_ENABLE(); + /* USER CODE BEGIN TIM15_MspInit 1 */ + + /* USER CODE END TIM15_MspInit 1 */ + } + } /** - * @brief TIM_Base MSP Initialization - * This function configures the hardware resources used in this example - * @param htim_base: TIM_Base handle pointer - * @retval None - */ -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { - if (htim_base->Instance == TIM2) { - /* USER CODE BEGIN TIM2_MspInit 0 */ - - /* USER CODE END TIM2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM2_CLK_ENABLE(); - /* TIM2 interrupt Init */ - HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM2_IRQn); - /* USER CODE BEGIN TIM2_MspInit 1 */ - - /* USER CODE END TIM2_MspInit 1 */ - } else if (htim_base->Instance == TIM5) { - /* USER CODE BEGIN TIM5_MspInit 0 */ - - /* USER CODE END TIM5_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM5_CLK_ENABLE(); - /* TIM5 interrupt Init */ - HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspInit 1 */ - - /* USER CODE END TIM5_MspInit 1 */ - } else if (htim_base->Instance == TIM7) { - /* USER CODE BEGIN TIM7_MspInit 0 */ - - /* USER CODE END TIM7_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM7_CLK_ENABLE(); - /* TIM7 interrupt Init */ - HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspInit 1 */ - - /* USER CODE END TIM7_MspInit 1 */ - } else if (htim_base->Instance == TIM16) { - /* USER CODE BEGIN TIM16_MspInit 0 */ - - /* USER CODE END TIM16_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM16_CLK_ENABLE(); - /* USER CODE BEGIN TIM16_MspInit 1 */ - - /* USER CODE END TIM16_MspInit 1 */ - } else if (htim_base->Instance == TIM17) { - /* USER CODE BEGIN TIM17_MspInit 0 */ - - /* USER CODE END TIM17_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM17_CLK_ENABLE(); - /* USER CODE BEGIN TIM17_MspInit 1 */ - - /* USER CODE END TIM17_MspInit 1 */ - } else if (htim_base->Instance == TIM24) { - /* USER CODE BEGIN TIM24_MspInit 0 */ - - /* USER CODE END TIM24_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM24_CLK_ENABLE(); - /* TIM24 interrupt Init */ - HAL_NVIC_SetPriority(TIM24_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM24_IRQn); - /* USER CODE BEGIN TIM24_MspInit 1 */ - - /* USER CODE END TIM24_MspInit 1 */ - } +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* TIM2 interrupt Init */ + HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + else if(htim_base->Instance==TIM5) + { + /* USER CODE BEGIN TIM5_MspInit 0 */ + + /* USER CODE END TIM5_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM5_CLK_ENABLE(); + /* TIM5 interrupt Init */ + HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM5_IRQn); + /* USER CODE BEGIN TIM5_MspInit 1 */ + + /* USER CODE END TIM5_MspInit 1 */ + } + else if(htim_base->Instance==TIM7) + { + /* USER CODE BEGIN TIM7_MspInit 0 */ + + /* USER CODE END TIM7_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM7_CLK_ENABLE(); + /* TIM7 interrupt Init */ + HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM7_IRQn); + /* USER CODE BEGIN TIM7_MspInit 1 */ + + /* USER CODE END TIM7_MspInit 1 */ + } + else if(htim_base->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspInit 0 */ + + /* USER CODE END TIM16_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM16_CLK_ENABLE(); + /* USER CODE BEGIN TIM16_MspInit 1 */ + + /* USER CODE END TIM16_MspInit 1 */ + } + else if(htim_base->Instance==TIM17) + { + /* USER CODE BEGIN TIM17_MspInit 0 */ + + /* USER CODE END TIM17_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM17_CLK_ENABLE(); + /* USER CODE BEGIN TIM17_MspInit 1 */ + + /* USER CODE END TIM17_MspInit 1 */ + } + else if(htim_base->Instance==TIM24) + { + /* USER CODE BEGIN TIM24_MspInit 0 */ + + /* USER CODE END TIM24_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM24_CLK_ENABLE(); + /* TIM24 interrupt Init */ + HAL_NVIC_SetPriority(TIM24_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM24_IRQn); + /* USER CODE BEGIN TIM24_MspInit 1 */ + + /* USER CODE END TIM24_MspInit 1 */ + } + } /** - * @brief TIM_Encoder MSP Initialization - * This function configures the hardware resources used in this example - * @param htim_encoder: TIM_Encoder handle pointer - * @retval None - */ -void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if (htim_encoder->Instance == TIM8) { - /* USER CODE BEGIN TIM8_MspInit 0 */ - - /* USER CODE END TIM8_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM8_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**TIM8 GPIO Configuration - PC6 ------> TIM8_CH1 - PC7 ------> TIM8_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* TIM8 interrupt Init */ - HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn); - /* USER CODE BEGIN TIM8_MspInit 1 */ - - /* USER CODE END TIM8_MspInit 1 */ - } +* @brief TIM_Encoder MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_encoder: TIM_Encoder handle pointer +* @retval None +*/ +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim_encoder->Instance==TIM8) + { + /* USER CODE BEGIN TIM8_MspInit 0 */ + + /* USER CODE END TIM8_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM8_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**TIM8 GPIO Configuration + PC6 ------> TIM8_CH1 + PC7 ------> TIM8_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* TIM8 interrupt Init */ + HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn); + /* USER CODE BEGIN TIM8_MspInit 1 */ + + /* USER CODE END TIM8_MspInit 1 */ + } + } /** - * @brief TIM_OC MSP Initialization - * This function configures the hardware resources used in this example - * @param htim_oc: TIM_OC handle pointer - * @retval None - */ -void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* htim_oc) { - if (htim_oc->Instance == TIM15) { - /* USER CODE BEGIN TIM15_MspInit 0 */ - - /* USER CODE END TIM15_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM15_CLK_ENABLE(); - /* USER CODE BEGIN TIM15_MspInit 1 */ - - /* USER CODE END TIM15_MspInit 1 */ - } +* @brief TIM_OC MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_oc: TIM_OC handle pointer +* @retval None +*/ +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* htim_oc) +{ + if(htim_oc->Instance==TIM15) + { + /* USER CODE BEGIN TIM15_MspInit 0 */ + + /* USER CODE END TIM15_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM15_CLK_ENABLE(); + /* USER CODE BEGIN TIM15_MspInit 1 */ + + /* USER CODE END TIM15_MspInit 1 */ + } + } /** - * @brief TIM_IC MSP Initialization - * This function configures the hardware resources used in this example - * @param htim_ic: TIM_IC handle pointer - * @retval None - */ -void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* htim_ic) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if (htim_ic->Instance == TIM23) { - /* USER CODE BEGIN TIM23_MspInit 0 */ - - /* USER CODE END TIM23_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM23_CLK_ENABLE(); - - __HAL_RCC_GPIOF_CLK_ENABLE(); - /**TIM23 GPIO Configuration - PF0 ------> TIM23_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_0; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - /* TIM23 interrupt Init */ - HAL_NVIC_SetPriority(TIM23_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM23_IRQn); - /* USER CODE BEGIN TIM23_MspInit 1 */ - - /* USER CODE END TIM23_MspInit 1 */ - } +* @brief TIM_IC MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_ic: TIM_IC handle pointer +* @retval None +*/ +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* htim_ic) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim_ic->Instance==TIM23) + { + /* USER CODE BEGIN TIM23_MspInit 0 */ + + /* USER CODE END TIM23_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM23_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**TIM23 GPIO Configuration + PF0 ------> TIM23_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* TIM23 interrupt Init */ + HAL_NVIC_SetPriority(TIM23_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM23_IRQn); + /* USER CODE BEGIN TIM23_MspInit 1 */ + + /* USER CODE END TIM23_MspInit 1 */ + } + } -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if (htim->Instance == TIM1) { - /* USER CODE BEGIN TIM1_MspPostInit 0 */ - - /* USER CODE END TIM1_MspPostInit 0 */ - __HAL_RCC_GPIOE_CLK_ENABLE(); - /**TIM1 GPIO Configuration - PE8 ------> TIM1_CH1N - PE9 ------> TIM1_CH1 - PE10 ------> TIM1_CH2N - PE11 ------> TIM1_CH2 - PE12 ------> TIM1_CH3N - PE13 ------> TIM1_CH3 - PE14 ------> TIM1_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | - GPIO_PIN_13 | GPIO_PIN_14; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM1_MspPostInit 1 */ - - /* USER CODE END TIM1_MspPostInit 1 */ - } else if (htim->Instance == TIM3) { - /* USER CODE BEGIN TIM3_MspPostInit 0 */ - - /* USER CODE END TIM3_MspPostInit 0 */ - - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM3 GPIO Configuration - PC8 ------> TIM3_CH3 - PC9 ------> TIM3_CH4 - PB4(NJTRST) ------> TIM3_CH1 - PB5 ------> TIM3_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM3_MspPostInit 1 */ - - /* USER CODE END TIM3_MspPostInit 1 */ - } else if (htim->Instance == TIM4) { - /* USER CODE BEGIN TIM4_MspPostInit 0 */ - - /* USER CODE END TIM4_MspPostInit 0 */ - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**TIM4 GPIO Configuration - PD12 ------> TIM4_CH1 - PD13 ------> TIM4_CH2 - PD14 ------> TIM4_CH3 - PD15 ------> TIM4_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM4_MspPostInit 1 */ - - /* USER CODE END TIM4_MspPostInit 1 */ - } else if (htim->Instance == TIM12) { - /* USER CODE BEGIN TIM12_MspPostInit 0 */ - - /* USER CODE END TIM12_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM12 GPIO Configuration - PB14 ------> TIM12_CH1 - PB15 ------> TIM12_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_14 | GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM12_MspPostInit 1 */ - - /* USER CODE END TIM12_MspPostInit 1 */ - } else if (htim->Instance == TIM15) { - /* USER CODE BEGIN TIM15_MspPostInit 0 */ - - /* USER CODE END TIM15_MspPostInit 0 */ - - __HAL_RCC_GPIOE_CLK_ENABLE(); - /**TIM15 GPIO Configuration - PE4 ------> TIM15_CH1N - PE5 ------> TIM15_CH1 - PE6 ------> TIM15_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_TIM15; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM15_MspPostInit 1 */ - - /* USER CODE END TIM15_MspPostInit 1 */ - } else if (htim->Instance == TIM16) { - /* USER CODE BEGIN TIM16_MspPostInit 0 */ - - /* USER CODE END TIM16_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM16 GPIO Configuration - PB6 ------> TIM16_CH1N - PB8 ------> TIM16_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_8; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM16; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM16_MspPostInit 1 */ - - /* USER CODE END TIM16_MspPostInit 1 */ - } else if (htim->Instance == TIM17) { - /* USER CODE BEGIN TIM17_MspPostInit 0 */ - - /* USER CODE END TIM17_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM17 GPIO Configuration - PB7 ------> TIM17_CH1N - PB9 ------> TIM17_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_7 | GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM17; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM17_MspPostInit 1 */ - - /* USER CODE END TIM17_MspPostInit 1 */ - } else if (htim->Instance == TIM23) { - /* USER CODE BEGIN TIM23_MspPostInit 0 */ - - /* USER CODE END TIM23_MspPostInit 0 */ - - __HAL_RCC_GPIOF_CLK_ENABLE(); - /**TIM23 GPIO Configuration - PF3 ------> TIM23_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_3; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM23_MspPostInit 1 */ - - /* USER CODE END TIM23_MspPostInit 1 */ - } +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspPostInit 0 */ + + /* USER CODE END TIM1_MspPostInit 0 */ + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**TIM1 GPIO Configuration + PE8 ------> TIM1_CH1N + PE9 ------> TIM1_CH1 + PE10 ------> TIM1_CH2N + PE11 ------> TIM1_CH2 + PE12 ------> TIM1_CH3N + PE13 ------> TIM1_CH3 + PE14 ------> TIM1_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM1_MspPostInit 1 */ + + /* USER CODE END TIM1_MspPostInit 1 */ + } + else if(htim->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspPostInit 0 */ + + /* USER CODE END TIM3_MspPostInit 0 */ + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PC8 ------> TIM3_CH3 + PC9 ------> TIM3_CH4 + PB4(NJTRST) ------> TIM3_CH1 + PB5 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM3_MspPostInit 1 */ + + /* USER CODE END TIM3_MspPostInit 1 */ + } + else if(htim->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspPostInit 0 */ + + /* USER CODE END TIM4_MspPostInit 0 */ + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**TIM4 GPIO Configuration + PD12 ------> TIM4_CH1 + PD13 ------> TIM4_CH2 + PD14 ------> TIM4_CH3 + PD15 ------> TIM4_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } + else if(htim->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspPostInit 0 */ + + /* USER CODE END TIM12_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM12 GPIO Configuration + PB14 ------> TIM12_CH1 + PB15 ------> TIM12_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM12_MspPostInit 1 */ + + /* USER CODE END TIM12_MspPostInit 1 */ + } + else if(htim->Instance==TIM15) + { + /* USER CODE BEGIN TIM15_MspPostInit 0 */ + + /* USER CODE END TIM15_MspPostInit 0 */ + + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**TIM15 GPIO Configuration + PE4 ------> TIM15_CH1N + PE5 ------> TIM15_CH1 + PE6 ------> TIM15_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_TIM15; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM15_MspPostInit 1 */ + + /* USER CODE END TIM15_MspPostInit 1 */ + } + else if(htim->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspPostInit 0 */ + + /* USER CODE END TIM16_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM16 GPIO Configuration + PB6 ------> TIM16_CH1N + PB8 ------> TIM16_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM16; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM16_MspPostInit 1 */ + + /* USER CODE END TIM16_MspPostInit 1 */ + } + else if(htim->Instance==TIM17) + { + /* USER CODE BEGIN TIM17_MspPostInit 0 */ + + /* USER CODE END TIM17_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM17 GPIO Configuration + PB7 ------> TIM17_CH1N + PB9 ------> TIM17_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM17; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM17_MspPostInit 1 */ + + /* USER CODE END TIM17_MspPostInit 1 */ + } + else if(htim->Instance==TIM23) + { + /* USER CODE BEGIN TIM23_MspPostInit 0 */ + + /* USER CODE END TIM23_MspPostInit 0 */ + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**TIM23 GPIO Configuration + PF3 ------> TIM23_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM23_MspPostInit 1 */ + + /* USER CODE END TIM23_MspPostInit 1 */ + } + } /** - * @brief TIM_PWM MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param htim_pwm: TIM_PWM handle pointer - * @retval None - */ -void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) { - if (htim_pwm->Instance == TIM1) { - /* USER CODE BEGIN TIM1_MspDeInit 0 */ - - /* USER CODE END TIM1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM1_CLK_DISABLE(); - /* USER CODE BEGIN TIM1_MspDeInit 1 */ - - /* USER CODE END TIM1_MspDeInit 1 */ - } else if (htim_pwm->Instance == TIM3) { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } else if (htim_pwm->Instance == TIM4) { - /* USER CODE BEGIN TIM4_MspDeInit 0 */ - - /* USER CODE END TIM4_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM4_CLK_DISABLE(); - /* USER CODE BEGIN TIM4_MspDeInit 1 */ - - /* USER CODE END TIM4_MspDeInit 1 */ - } else if (htim_pwm->Instance == TIM12) { - /* USER CODE BEGIN TIM12_MspDeInit 0 */ - - /* USER CODE END TIM12_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM12_CLK_DISABLE(); - /* USER CODE BEGIN TIM12_MspDeInit 1 */ - - /* USER CODE END TIM12_MspDeInit 1 */ - } else if (htim_pwm->Instance == TIM15) { - /* USER CODE BEGIN TIM15_MspDeInit 0 */ - - /* USER CODE END TIM15_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM15_CLK_DISABLE(); - /* USER CODE BEGIN TIM15_MspDeInit 1 */ - - /* USER CODE END TIM15_MspDeInit 1 */ - } +* @brief TIM_PWM MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_pwm: TIM_PWM handle pointer +* @retval None +*/ +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) +{ + if(htim_pwm->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspDeInit 0 */ + + /* USER CODE END TIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM1_CLK_DISABLE(); + /* USER CODE BEGIN TIM1_MspDeInit 1 */ + + /* USER CODE END TIM1_MspDeInit 1 */ + } + else if(htim_pwm->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } + else if(htim_pwm->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspDeInit 0 */ + + /* USER CODE END TIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM4_CLK_DISABLE(); + /* USER CODE BEGIN TIM4_MspDeInit 1 */ + + /* USER CODE END TIM4_MspDeInit 1 */ + } + else if(htim_pwm->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspDeInit 0 */ + + /* USER CODE END TIM12_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM12_CLK_DISABLE(); + /* USER CODE BEGIN TIM12_MspDeInit 1 */ + + /* USER CODE END TIM12_MspDeInit 1 */ + } + else if(htim_pwm->Instance==TIM15) + { + /* USER CODE BEGIN TIM15_MspDeInit 0 */ + + /* USER CODE END TIM15_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM15_CLK_DISABLE(); + /* USER CODE BEGIN TIM15_MspDeInit 1 */ + + /* USER CODE END TIM15_MspDeInit 1 */ + } + } /** - * @brief TIM_Base MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param htim_base: TIM_Base handle pointer - * @retval None - */ -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { - if (htim_base->Instance == TIM2) { - /* USER CODE BEGIN TIM2_MspDeInit 0 */ - - /* USER CODE END TIM2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM2_CLK_DISABLE(); - - /* TIM2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM2_IRQn); - /* USER CODE BEGIN TIM2_MspDeInit 1 */ - - /* USER CODE END TIM2_MspDeInit 1 */ - } else if (htim_base->Instance == TIM5) { - /* USER CODE BEGIN TIM5_MspDeInit 0 */ - - /* USER CODE END TIM5_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM5_CLK_DISABLE(); - - /* TIM5 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspDeInit 1 */ - - /* USER CODE END TIM5_MspDeInit 1 */ - } else if (htim_base->Instance == TIM7) { - /* USER CODE BEGIN TIM7_MspDeInit 0 */ - - /* USER CODE END TIM7_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM7_CLK_DISABLE(); - - /* TIM7 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspDeInit 1 */ - - /* USER CODE END TIM7_MspDeInit 1 */ - } else if (htim_base->Instance == TIM16) { - /* USER CODE BEGIN TIM16_MspDeInit 0 */ - - /* USER CODE END TIM16_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM16_CLK_DISABLE(); - /* USER CODE BEGIN TIM16_MspDeInit 1 */ - - /* USER CODE END TIM16_MspDeInit 1 */ - } else if (htim_base->Instance == TIM17) { - /* USER CODE BEGIN TIM17_MspDeInit 0 */ - - /* USER CODE END TIM17_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM17_CLK_DISABLE(); - /* USER CODE BEGIN TIM17_MspDeInit 1 */ - - /* USER CODE END TIM17_MspDeInit 1 */ - } else if (htim_base->Instance == TIM24) { - /* USER CODE BEGIN TIM24_MspDeInit 0 */ - - /* USER CODE END TIM24_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM24_CLK_DISABLE(); - - /* TIM24 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM24_IRQn); - /* USER CODE BEGIN TIM24_MspDeInit 1 */ - - /* USER CODE END TIM24_MspDeInit 1 */ - } +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + + /* TIM2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM5) + { + /* USER CODE BEGIN TIM5_MspDeInit 0 */ + + /* USER CODE END TIM5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM5_CLK_DISABLE(); + + /* TIM5 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM5_IRQn); + /* USER CODE BEGIN TIM5_MspDeInit 1 */ + + /* USER CODE END TIM5_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM7) + { + /* USER CODE BEGIN TIM7_MspDeInit 0 */ + + /* USER CODE END TIM7_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM7_CLK_DISABLE(); + + /* TIM7 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM7_IRQn); + /* USER CODE BEGIN TIM7_MspDeInit 1 */ + + /* USER CODE END TIM7_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspDeInit 0 */ + + /* USER CODE END TIM16_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM16_CLK_DISABLE(); + /* USER CODE BEGIN TIM16_MspDeInit 1 */ + + /* USER CODE END TIM16_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM17) + { + /* USER CODE BEGIN TIM17_MspDeInit 0 */ + + /* USER CODE END TIM17_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM17_CLK_DISABLE(); + /* USER CODE BEGIN TIM17_MspDeInit 1 */ + + /* USER CODE END TIM17_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM24) + { + /* USER CODE BEGIN TIM24_MspDeInit 0 */ + + /* USER CODE END TIM24_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM24_CLK_DISABLE(); + + /* TIM24 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM24_IRQn); + /* USER CODE BEGIN TIM24_MspDeInit 1 */ + + /* USER CODE END TIM24_MspDeInit 1 */ + } + } /** - * @brief TIM_Encoder MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param htim_encoder: TIM_Encoder handle pointer - * @retval None - */ -void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder) { - if (htim_encoder->Instance == TIM8) { - /* USER CODE BEGIN TIM8_MspDeInit 0 */ - - /* USER CODE END TIM8_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM8_CLK_DISABLE(); - - /**TIM8 GPIO Configuration - PC6 ------> TIM8_CH1 - PC7 ------> TIM8_CH2 - */ - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6 | GPIO_PIN_7); - - /* TIM8 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn); - /* USER CODE BEGIN TIM8_MspDeInit 1 */ - - /* USER CODE END TIM8_MspDeInit 1 */ - } +* @brief TIM_Encoder MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_encoder: TIM_Encoder handle pointer +* @retval None +*/ +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder) +{ + if(htim_encoder->Instance==TIM8) + { + /* USER CODE BEGIN TIM8_MspDeInit 0 */ + + /* USER CODE END TIM8_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM8_CLK_DISABLE(); + + /**TIM8 GPIO Configuration + PC6 ------> TIM8_CH1 + PC7 ------> TIM8_CH2 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7); + + /* TIM8 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn); + /* USER CODE BEGIN TIM8_MspDeInit 1 */ + + /* USER CODE END TIM8_MspDeInit 1 */ + } + } /** - * @brief TIM_OC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param htim_oc: TIM_OC handle pointer - * @retval None - */ -void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* htim_oc) { - if (htim_oc->Instance == TIM15) { - /* USER CODE BEGIN TIM15_MspDeInit 0 */ - - /* USER CODE END TIM15_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM15_CLK_DISABLE(); - /* USER CODE BEGIN TIM15_MspDeInit 1 */ - - /* USER CODE END TIM15_MspDeInit 1 */ - } +* @brief TIM_OC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_oc: TIM_OC handle pointer +* @retval None +*/ +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* htim_oc) +{ + if(htim_oc->Instance==TIM15) + { + /* USER CODE BEGIN TIM15_MspDeInit 0 */ + + /* USER CODE END TIM15_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM15_CLK_DISABLE(); + /* USER CODE BEGIN TIM15_MspDeInit 1 */ + + /* USER CODE END TIM15_MspDeInit 1 */ + } + } /** - * @brief TIM_IC MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param htim_ic: TIM_IC handle pointer - * @retval None - */ -void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic) { - if (htim_ic->Instance == TIM23) { - /* USER CODE BEGIN TIM23_MspDeInit 0 */ - - /* USER CODE END TIM23_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM23_CLK_DISABLE(); - - /**TIM23 GPIO Configuration - PF0 ------> TIM23_CH1 - PF3 ------> TIM23_CH4 - */ - HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0 | GPIO_PIN_3); - - /* TIM23 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM23_IRQn); - /* USER CODE BEGIN TIM23_MspDeInit 1 */ - - /* USER CODE END TIM23_MspDeInit 1 */ - } +* @brief TIM_IC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_ic: TIM_IC handle pointer +* @retval None +*/ +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic) +{ + if(htim_ic->Instance==TIM23) + { + /* USER CODE BEGIN TIM23_MspDeInit 0 */ + + /* USER CODE END TIM23_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM23_CLK_DISABLE(); + + /**TIM23 GPIO Configuration + PF0 ------> TIM23_CH1 + PF3 ------> TIM23_CH4 + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_3); + + /* TIM23 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM23_IRQn); + /* USER CODE BEGIN TIM23_MspDeInit 1 */ + + /* USER CODE END TIM23_MspDeInit 1 */ + } + } /** - * @brief UART MSP Initialization - * This function configures the hardware resources used in this example - * @param huart: UART handle pointer - * @retval None - */ -void HAL_UART_MspInit(UART_HandleTypeDef* huart) { - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if (huart->Instance == USART1) { - /* USER CODE BEGIN USART1_MspInit 0 */ - - /* USER CODE END USART1_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; - PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16910CLKSOURCE_D2PCLK2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_USART1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF7_USART1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN USART1_MspInit 1 */ - - /* USER CODE END USART1_MspInit 1 */ - } else if (huart->Instance == USART2) { - /* USER CODE BEGIN USART2_MspInit 0 */ - - /* USER CODE END USART2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2; - PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_USART2_CLK_ENABLE(); - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN USART2_MspInit 1 */ - - /* USER CODE END USART2_MspInit 1 */ +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16910CLKSOURCE_D2PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + else if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2; + PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + } /** - * @brief UART MSP De-Initialization - * This function freeze the hardware resources used in this example - * @param huart: UART handle pointer - * @retval None - */ -void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) { - if (huart->Instance == USART1) { - /* USER CODE BEGIN USART1_MspDeInit 0 */ - - /* USER CODE END USART1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART1_CLK_DISABLE(); - - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9 | GPIO_PIN_10); - - /* USER CODE BEGIN USART1_MspDeInit 1 */ - - /* USER CODE END USART1_MspDeInit 1 */ - } else if (huart->Instance == USART2) { - /* USER CODE BEGIN USART2_MspDeInit 0 */ - - /* USER CODE END USART2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART2_CLK_DISABLE(); - - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5 | GPIO_PIN_6); - - /* USER CODE BEGIN USART2_MspDeInit 1 */ - - /* USER CODE END USART2_MspDeInit 1 */ - } +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + else if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + } /* USER CODE BEGIN 1 */ diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 38c577a4..8dea1076 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -1,20 +1,20 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file stm32h7xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file stm32h7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -24,10 +24,13 @@ #include "HALAL/HardFault/HardfaultTrace.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* DMA IRQ dispatch table (defined here to satisfy references when DMA is unused) */ +DMA_HandleTypeDef *dma_irq_table[16] = {0}; /* USER CODE END TD */ @@ -56,11 +59,11 @@ /* USER CODE END 0 */ -/* External variables --------------------------------------------------------*/ -extern ETH_HandleTypeDef heth; -extern DMA_HandleTypeDef hdma_adc1; -extern DMA_HandleTypeDef hdma_adc2; -extern DMA_HandleTypeDef hdma_adc3; +/* External variables --------------------------------------------------------*/ +extern ETH_HandleTypeDef heth; +extern DMA_HandleTypeDef hdma_adc1; +extern DMA_HandleTypeDef hdma_adc2; +extern DMA_HandleTypeDef hdma_adc3; extern DMA_HandleTypeDef hdma_i2c2_rx; extern DMA_HandleTypeDef hdma_i2c2_tx; extern I2C_HandleTypeDef hi2c2; @@ -74,10 +77,11 @@ extern LPTIM_HandleTypeDef hlptim3; extern DMA_HandleTypeDef hdma_spi3_rx; extern DMA_HandleTypeDef hdma_spi3_tx; extern SPI_HandleTypeDef hspi3; -extern FDCAN_HandleTypeDef hfdcan1; +extern FDCAN_HandleTypeDef hfdcan1; +extern DMA_HandleTypeDef *dma_irq_table[16]; /* Externs for calltrace -*/ +*/ extern uint32_t _stext; extern uint32_t _etext; extern uint32_t _sstack; @@ -92,39 +96,38 @@ extern uint32_t _hf_stack_end; /* Cortex Processor Interruption and Exception Handlers */ /******************************************************************************/ /** - * @brief This function handles Non maskable interrupt. - */ - -// calls my_fault_handler with the MSP(main stack pointer) -#define HARDFAULT_HANDLING_ASM() \ - __asm__ __volatile__(/* Detect which stack was in use */ \ - "tst lr, #4 \n" \ - "ite eq \n" \ - "mrseq r0, msp \n" \ - "mrsne r0, psp \n" \ - \ - /* Switch to dedicated HardFault stack */ \ - "ldr r1, =_hf_stack_end \n" \ - "msr msp, r1 \n" \ - "isb \n" \ - \ - /* Call C handler with original frame */ \ - "b my_fault_handler_c \n" \ - ) - -// create the space for the hardfault section in the flash -__attribute__((section(".hardfault_log"))) volatile uint32_t hard_fault[128]; + * @brief This function handles Non maskable interrupt. + */ + +//calls my_fault_handler with the MSP(main stack pointer) +#define HARDFAULT_HANDLING_ASM() \ +__asm__ __volatile__( \ + /* Detect which stack was in use */ \ + "tst lr, #4 \n" \ + "ite eq \n" \ + "mrseq r0, msp \n" \ + "mrsne r0, psp \n" \ + \ + /* Switch to dedicated HardFault stack */ \ + "ldr r1, =_hf_stack_end \n" \ + "msr msp, r1 \n" \ + "isb \n" \ + \ + /* Call C handler with original frame */ \ + "b my_fault_handler_c \n" \ +) + + + //create the space for the hardfault section in the flash +__attribute__((section(".hardfault_log"))) +volatile uint32_t hard_fault[128]; void hardfault_flash_write( - uint32_t addr_hard_fault, - const void* data_hard_fault, - size_t len_hard_fault, - uint32_t addr_metadata, - const void* data_metadata, - size_t len_metadata -) { - __disable_irq(); - HAL_FLASH_Unlock(); + uint32_t addr_hard_fault, const void *data_hard_fault, size_t len_hard_fault, + uint32_t addr_metadata, const void *data_metadata, size_t len_metadata) +{ + __disable_irq(); + HAL_FLASH_Unlock(); // Erase sector FLASH_EraseInitTypeDef erase; @@ -135,40 +138,33 @@ void hardfault_flash_write( erase.NbSectors = 1; erase.VoltageRange = FLASH_VOLTAGE_RANGE_3; - if (HAL_FLASHEx_Erase(&erase, §or_error) != HAL_OK) { + if(HAL_FLASHEx_Erase(&erase, §or_error) != HAL_OK){ __BKPT(0); } + size_t offset, copy_len; uint8_t block[32]; offset = 0; - while (offset < len_hard_fault) { - memset(block, 0xFF, sizeof(block)); + while(offset < len_hard_fault){ + memset(block, 0xFF, sizeof(block)); copy_len = (len_hard_fault - offset) > 32 ? 32 : (len_hard_fault - offset); memcpy(block, (uint8_t*)data_hard_fault + offset, copy_len); - if (HAL_FLASH_Program( - FLASH_TYPEPROGRAM_FLASHWORD, - addr_hard_fault + offset, - (uint32_t*)block - ) != HAL_OK) { + if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, addr_hard_fault + offset, (uint32_t*)block) != HAL_OK){ __BKPT(0); } offset += 32; } offset = 0; - while (offset < len_metadata) { + while(offset < len_metadata){ memset(block, 0xFF, sizeof(block)); copy_len = (len_metadata - offset) > 32 ? 32 : (len_metadata - offset); memcpy(block, (uint8_t*)data_metadata + offset, copy_len); - if (HAL_FLASH_Program( - FLASH_TYPEPROGRAM_FLASHWORD, - addr_metadata + offset, - (uint32_t*)block - ) != HAL_OK) { + if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, addr_metadata + offset, (uint32_t*)block) != HAL_OK){ __BKPT(0); } offset += 32; @@ -180,207 +176,203 @@ void hardfault_flash_write( HAL_FLASH_Lock(); __enable_irq(); } -static uint8_t is_valid_pc(uint32_t pc) { - pc &= ~1U; // Thumb - return (pc >= (uint32_t)&_stext && pc < (uint32_t)&_etext); +static uint8_t is_valid_pc(uint32_t pc) +{ + pc &= ~1U; // Thumb + return (pc >= (uint32_t)&_stext && + pc < (uint32_t)&_etext); } -__attribute__((noreturn, optimize("O0"))) static void -scan_call_stack(sContextStateFrame* frame, HardFaultLog* log_hard_fault) { - uint32_t* stack_start = (uint32_t*)&_sstack; - uint32_t* stack_end = (uint32_t*)&_estack; +__attribute__((noreturn, optimize("O0"))) +static void scan_call_stack(sContextStateFrame *frame, HardFaultLog *log_hard_fault) +{ + uint32_t *stack_start = (uint32_t *)&_sstack; + uint32_t *stack_end = (uint32_t *)&_estack; log_hard_fault->CallTrace.depth = 0; - uint32_t* sp = (uint32_t*)(frame + 1); - while (sp < stack_end && sp >= stack_start) { + uint32_t *sp = (uint32_t *)(frame + 1); + while (sp < stack_end && sp >= stack_start) + { uint32_t val = *sp++; - if (log_hard_fault->CallTrace.depth >= CALL_TRACE_MAX_DEPTH) - break; - if ((val & 1U) == 0) - continue; - if (!is_valid_pc(val)) - continue; + if (log_hard_fault->CallTrace.depth >= CALL_TRACE_MAX_DEPTH) break; + if ((val & 1U) == 0) continue; + if (!is_valid_pc(val)) continue; log_hard_fault->CallTrace.pcs[log_hard_fault->CallTrace.depth++] = val & ~1U; } } -__attribute__((noreturn, optimize("O0"))) void my_fault_handler_c(sContextStateFrame* frame) { - volatile uint32_t real_fault_pc = frame->return_address & ~1; - volatile HardFaultLog log_hard_fault; - - volatile uint32_t* cfsr = (volatile uint32_t*)0xE000ED28; - // keep the log in the estructure - log_hard_fault.HF_flag = HF_FLAG_VALUE; - log_hard_fault.frame = *frame; - log_hard_fault.frame.return_address = real_fault_pc; - log_hard_fault.CfsrDecode.cfsr = *cfsr; - log_hard_fault.fault_address.Nothing_Valid = 0; - - const uint8_t memory_fault = *cfsr & 0x000000ff; - if (memory_fault) { - const uint8_t MMARVALID = - memory_fault & 0b10000000; // We can find the exact place were occured the memory fault - const uint8_t MLSPERR = memory_fault & 0b00100000; // MemManage fault FPU stack - const uint8_t MSTKERR = - memory_fault & 0b00010000; // Stack overflow while entring an exception - const uint8_t MUNSTKERR = - memory_fault & - 0b00001000; // Stack error while exiting from an exception (Corrupted stack) - const uint8_t DACCVIOL = - memory_fault & 0b00000010; // Data access violation (acceded to pointer NULL, to a - // protected memory region, overflow in arrays ...) - const uint8_t IACCVIOL = memory_fault & 0b00000001; // Instruction access violation - if (MMARVALID) { - uint32_t memory_fault_address = *(volatile uint32_t*)0xE000ED34; - log_hard_fault.fault_address.MMAR_VALID = memory_fault_address; - } - } - const uint8_t bus_fault = (*cfsr & 0x0000ff00) >> 8; - if (bus_fault) { - const uint8_t BFARVALID = - bus_fault & - 0b10000000; // BFAR is valid we can know the address which triggered the fault - const uint8_t LSPERR = bus_fault & 0b00100000; // Fault stack FPU - const uint8_t STKERR = bus_fault & 0b00010000; // Fault stack while entring an exception - const uint8_t UNSTKERR = bus_fault & 0b00001000; // Stack error while exiting an exception - const uint8_t IMPRECISERR = - bus_fault & - 0b00000010; // Bus fault, but the instruction that caused the error can be uncertain - const uint8_t PRECISERR = - bus_fault & - 0b00000001; // You can read Bfar to find the eact direction of the instruction - if (BFARVALID) { - volatile uint32_t bus_fault_address = *(volatile uint32_t*)0xE000ED38; - log_hard_fault.fault_address.BFAR_VALID = bus_fault_address; - // Don't trust in case IMPRECISERR == 1; - } +__attribute__((noreturn,optimize("O0"))) +void my_fault_handler_c(sContextStateFrame *frame) { + volatile uint32_t real_fault_pc = frame->return_address & ~1; + volatile HardFaultLog log_hard_fault; + + volatile uint32_t *cfsr = (volatile uint32_t *)0xE000ED28; + //keep the log in the estructure + log_hard_fault.HF_flag = HF_FLAG_VALUE; + log_hard_fault.frame = *frame; + log_hard_fault.frame.return_address = real_fault_pc; + log_hard_fault.CfsrDecode.cfsr = *cfsr; + log_hard_fault.fault_address.Nothing_Valid = 0; + + const uint8_t memory_fault = *cfsr & 0x000000ff; + if(memory_fault){ + const uint8_t MMARVALID = memory_fault & 0b10000000; // We can find the exact place were occured the memory fault + const uint8_t MLSPERR = memory_fault & 0b00100000; // MemManage fault FPU stack + const uint8_t MSTKERR = memory_fault & 0b00010000; // Stack overflow while entring an exception + const uint8_t MUNSTKERR = memory_fault & 0b00001000; // Stack error while exiting from an exception (Corrupted stack) + const uint8_t DACCVIOL = memory_fault & 0b00000010; //Data access violation (acceded to pointer NULL, to a protected memory region, overflow in arrays ...) + const uint8_t IACCVIOL = memory_fault & 0b00000001; //Instruction access violation + if(MMARVALID){ + uint32_t memory_fault_address = *(volatile uint32_t *)0xE000ED34; + log_hard_fault.fault_address.MMAR_VALID = memory_fault_address; } - const uint16_t usage_fault = (*cfsr & 0xffff0000) >> 16; - if (usage_fault) { - const uint16_t DIVBYZERO = usage_fault & 0x0200; // Div by ZERO hardfault; - const uint16_t UNALIGNED = usage_fault & 0x0100; // Unaligned access operation occured - const uint16_t NOCP = usage_fault & 0x0008; // Access to FPU when is not present - const uint16_t INVPC = usage_fault & 0x0004; // Invalid program counter load - const uint16_t INVSTATE = usage_fault & 0x0002; // Invalid processor state - const uint16_t UNDEFINSTR = usage_fault & 0x0001; // Undefined instruction. + } + const uint8_t bus_fault = (*cfsr & 0x0000ff00) >> 8; + if(bus_fault){ + const uint8_t BFARVALID = bus_fault & 0b10000000; // BFAR is valid we can know the address which triggered the fault + const uint8_t LSPERR = bus_fault & 0b00100000; //Fault stack FPU + const uint8_t STKERR = bus_fault & 0b00010000; // Fault stack while entring an exception + const uint8_t UNSTKERR = bus_fault & 0b00001000; // Stack error while exiting an exception + const uint8_t IMPRECISERR = bus_fault & 0b00000010; // Bus fault, but the instruction that caused the error can be uncertain + const uint8_t PRECISERR = bus_fault & 0b00000001; //You can read Bfar to find the eact direction of the instruction + if(BFARVALID){ + volatile uint32_t bus_fault_address = *(volatile uint32_t *)0xE000ED38; + log_hard_fault.fault_address.BFAR_VALID = bus_fault_address; + //Don't trust in case IMPRECISERR == 1; } - if (usage_fault | bus_fault) { - scan_call_stack(frame, &log_hard_fault); - } - volatile uint8_t metadata_buffer[0x100]; - memcpy(metadata_buffer, (void*)METADATA_FLASH_ADDR, 0x100); - // write log hard fault - hardfault_flash_write( - HF_FLASH_ADDR, - (uint8_t*)&log_hard_fault, - sizeof(log_hard_fault), - METADATA_FLASH_ADDR, - &metadata_buffer, - sizeof(metadata_buffer) - ); - // reboot the system - volatile uint32_t* aircr = (volatile uint32_t*)0xE000ED0C; - __asm volatile("dsb"); - *aircr = (0x05FA << 16) | 0x1 << 2; - __asm volatile("dsb"); - while (1) { - } // should be unreachable + } + const uint16_t usage_fault = (*cfsr & 0xffff0000) >> 16; + if(usage_fault){ + const uint16_t DIVBYZERO = usage_fault & 0x0200; // Div by ZERO hardfault; + const uint16_t UNALIGNED = usage_fault & 0x0100; // Unaligned access operation occured + const uint16_t NOCP = usage_fault & 0x0008; //Access to FPU when is not present + const uint16_t INVPC = usage_fault & 0x0004; //Invalid program counter load + const uint16_t INVSTATE = usage_fault & 0x0002; // Invalid processor state + const uint16_t UNDEFINSTR = usage_fault & 0x0001; //Undefined instruction. + } + if(usage_fault | bus_fault){ + scan_call_stack(frame,&log_hard_fault); + } + volatile uint8_t metadata_buffer[0x100]; + memcpy(metadata_buffer,(void*)METADATA_FLASH_ADDR,0x100); + //write log hard fault + hardfault_flash_write(HF_FLASH_ADDR,(uint8_t*)&log_hard_fault,sizeof(log_hard_fault),METADATA_FLASH_ADDR,&metadata_buffer,sizeof(metadata_buffer)); + //reboot the system + volatile uint32_t *aircr = (volatile uint32_t *)0xE000ED0C; + __asm volatile ("dsb"); + *aircr = (0x05FA << 16) | 0x1 << 2; + __asm volatile ("dsb"); + while (1) {} // should be unreachable + } + +__attribute__((naked)) +void HardFault_Handler(void) +{ + HARDFAULT_HANDLING_ASM(); + while (1){} } -__attribute__((naked)) void HardFault_Handler(void) { - HARDFAULT_HANDLING_ASM(); - while (1) { - } -} - -void NMI_Handler(void) { - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) { - } - /* USER CODE END NonMaskableInt_IRQn 1 */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ } /** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) { - extern void my_fault_handler_c(sContextStateFrame * frame); - - __asm volatile("mrs r0, msp\n" // obtener stack frame - "b my_fault_handler_c\n"); -} + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + extern void my_fault_handler_c(sContextStateFrame *frame); + + __asm volatile( + "mrs r0, msp\n" // obtener stack frame + "b my_fault_handler_c\n" + ); + } /** - * @brief This function handles Pre-fetch fault, memory access fault. - */ -void BusFault_Handler(void) { - /* USER CODE BEGIN BusFault_IRQn 0 */ - - /* USER CODE END BusFault_IRQn 0 */ - while (1) { - /* USER CODE BEGIN W1_BusFault_IRQn 0 */ - /* USER CODE END W1_BusFault_IRQn 0 */ - } + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } } /** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) { - /* USER CODE BEGIN UsageFault_IRQn 0 */ - - /* USER CODE END UsageFault_IRQn 0 */ - while (1) { - /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ - /* USER CODE END W1_UsageFault_IRQn 0 */ - } + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } } /** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) { - /* USER CODE BEGIN SVCall_IRQn 0 */ + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ - /* USER CODE END SVCall_IRQn 1 */ + /* USER CODE END SVCall_IRQn 1 */ } /** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) { - /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - /* USER CODE END DebugMonitor_IRQn 1 */ + /* USER CODE END DebugMonitor_IRQn 1 */ } /** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) { - /* USER CODE BEGIN PendSV_IRQn 0 */ + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ - /* USER CODE END PendSV_IRQn 1 */ + /* USER CODE END PendSV_IRQn 1 */ } /** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) { - /* USER CODE BEGIN SysTick_IRQn 0 */ + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ - /* USER CODE END SysTick_IRQn 1 */ + /* USER CODE END SysTick_IRQn 1 */ } /******************************************************************************/ @@ -390,218 +382,297 @@ void SysTick_Handler(void) { /* please refer to the startup file (startup_stm32h7xx.s). */ /******************************************************************************/ -/** +/** * @brief This function handles FDCAN 1 Line 0 interrupt */ -void FDCAN1_IT0_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } +void FDCAN1_IT0_IRQHandler(void) +{ + HAL_FDCAN_IRQHandler(&hfdcan1); +} -/** +/** * @brief This function handles FDCAN 1 Line 1 interrupt */ -void FDCAN1_IT1_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } +void FDCAN1_IT1_IRQHandler(void) +{ + HAL_FDCAN_IRQHandler(&hfdcan1); +} -/** +/** * @brief This function handles FDCAN 3 Line 0 interrupt */ -void FDCAN3_IT0_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } +void FDCAN3_IT0_IRQHandler(void) +{ + HAL_FDCAN_IRQHandler(&hfdcan1); +} -/** +/** * @brief This function handles FDCAN 3 Line 1 interrupt */ -void FDCAN3_IT1_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } - -/** - * @brief This function handles EXTI line0 interrupt. - */ -void EXTI0_IRQHandler(void) { - /* USER CODE BEGIN EXTI0_IRQn 0 */ - - /* USER CODE END EXTI0_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); - /* USER CODE BEGIN EXTI0_IRQn 1 */ - - /* USER CODE END EXTI0_IRQn 1 */ +void FDCAN3_IT1_IRQHandler(void) +{ + HAL_FDCAN_IRQHandler(&hfdcan1); } /** - * @brief This function handles EXTI line1 interrupt. - */ -void EXTI1_IRQHandler(void) { - /* USER CODE BEGIN EXTI1_IRQn 0 */ + * @brief This function handles EXTI line0 interrupt. + */ +void EXTI0_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI0_IRQn 0 */ - /* USER CODE END EXTI1_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); - /* USER CODE BEGIN EXTI1_IRQn 1 */ + /* USER CODE END EXTI0_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); + /* USER CODE BEGIN EXTI0_IRQn 1 */ - /* USER CODE END EXTI1_IRQn 1 */ + /* USER CODE END EXTI0_IRQn 1 */ } /** - * @brief This function handles DMA1 stream0 global interrupt. - */ -void DMA1_Stream0_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + * @brief This function handles EXTI line1 interrupt. + */ +void EXTI1_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI1_IRQn 0 */ - /* USER CODE END DMA1_Stream0_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc1); - /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + /* USER CODE END EXTI1_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); + /* USER CODE BEGIN EXTI1_IRQn 1 */ - /* USER CODE END DMA1_Stream0_IRQn 1 */ + /* USER CODE END EXTI1_IRQn 1 */ } /** - * @brief This function handles DMA1 stream1 global interrupt. - */ -void DMA1_Stream1_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ - - /* USER CODE END DMA1_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc2); - /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ - - /* USER CODE END DMA1_Stream1_IRQn 1 */ -} + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + if (dma_irq_table[0] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[0]); + } else if (hdma_adc1.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_adc1); + } + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream2 global interrupt. - */ -void DMA1_Stream2_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ - - /* USER CODE END DMA1_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc3); - /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ - - /* USER CODE END DMA1_Stream2_IRQn 1 */ -} + * @brief This function handles DMA1 stream1 global interrupt. + */ +void DMA1_Stream1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ + + /* USER CODE END DMA1_Stream1_IRQn 0 */ + if (dma_irq_table[1] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[1]); + } else if (hdma_adc2.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_adc2); + } + /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ + + /* USER CODE END DMA1_Stream1_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream3 global interrupt. - */ -void DMA1_Stream3_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ - - /* USER CODE END DMA1_Stream3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_rx); - /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ - - /* USER CODE END DMA1_Stream3_IRQn 1 */ -} + * @brief This function handles DMA1 stream2 global interrupt. + */ +void DMA1_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ + + /* USER CODE END DMA1_Stream2_IRQn 0 */ + if (dma_irq_table[2] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[2]); + } else if (hdma_adc3.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_adc3); + } + /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ + + /* USER CODE END DMA1_Stream2_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream4 global interrupt. - */ -void DMA1_Stream4_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ - - /* USER CODE END DMA1_Stream4_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_tx); - /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ - - /* USER CODE END DMA1_Stream4_IRQn 1 */ -} + * @brief This function handles DMA1 stream3 global interrupt. + */ +void DMA1_Stream3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ + + /* USER CODE END DMA1_Stream3_IRQn 0 */ + if (dma_irq_table[3] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[3]); + } else if (hdma_i2c2_rx.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_i2c2_rx); + } + /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ + + /* USER CODE END DMA1_Stream3_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream5 global interrupt. - */ -void DMA1_Stream5_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ - - /* USER CODE END DMA1_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_rx); - /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ - - /* USER CODE END DMA1_Stream5_IRQn 1 */ -} + * @brief This function handles DMA1 stream4 global interrupt. + */ +void DMA1_Stream4_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ + + /* USER CODE END DMA1_Stream4_IRQn 0 */ + if (dma_irq_table[4] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[4]); + } else if (hdma_i2c2_tx.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_i2c2_tx); + } + /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ + + /* USER CODE END DMA1_Stream4_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream6 global interrupt. - */ -void DMA1_Stream6_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ - - /* USER CODE END DMA1_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_tx); - /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + * @brief This function handles DMA1 stream5 global interrupt. + */ +void DMA1_Stream5_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ + + /* USER CODE END DMA1_Stream5_IRQn 0 */ + if (dma_irq_table[5] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[5]); + } else if (hdma_spi3_rx.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_spi3_rx); + } + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} - /* USER CODE END DMA1_Stream6_IRQn 1 */ +/** + * @brief This function handles DMA1 stream6 global interrupt. + */ +void DMA1_Stream6_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ + + /* USER CODE END DMA1_Stream6_IRQn 0 */ + if (dma_irq_table[6] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[6]); + } else if (hdma_spi3_tx.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_spi3_tx); + } + /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + + /* USER CODE END DMA1_Stream6_IRQn 1 */ +} + + /** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE) + */ +void DMA2_Stream0_IRQHandler(void) +{ + if (dma_irq_table[8] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[8]); + } else if (hdma_fmac_preload.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_fmac_preload); + } +} + +void DMA2_Stream1_IRQHandler(void) +{ + if (dma_irq_table[9] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[9]); + } else if (hdma_fmac_write.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_fmac_write); + } +} + +void DMA2_Stream2_IRQHandler(void) +{ + if (dma_irq_table[10] != NULL) { + HAL_DMA_IRQHandler(dma_irq_table[10]); + } else if (hdma_fmac_read.Instance != NULL) { + HAL_DMA_IRQHandler(&hdma_fmac_read); + } +} + +void FMAC_IRQHandler(void) +{ + HAL_FMAC_IRQHandler(&hfmac); } -/** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE) - */ -void DMA2_Stream0_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_preload); } - -void DMA2_Stream1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_write); } - -void DMA2_Stream2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_read); } - -void FMAC_IRQHandler(void) { HAL_FMAC_IRQHandler(&hfmac); } - /** - * @brief This function handles SPI3 global interrupt. - */ -void SPI3_IRQHandler(void) { - /* USER CODE BEGIN SPI3_IRQn 0 */ + * @brief This function handles SPI3 global interrupt. + */ +void SPI3_IRQHandler(void) +{ + /* USER CODE BEGIN SPI3_IRQn 0 */ - /* USER CODE END SPI3_IRQn 0 */ - HAL_SPI_IRQHandler(&hspi3); - /* USER CODE BEGIN SPI3_IRQn 1 */ + /* USER CODE END SPI3_IRQn 0 */ + HAL_SPI_IRQHandler(&hspi3); + /* USER CODE BEGIN SPI3_IRQn 1 */ - /* USER CODE END SPI3_IRQn 1 */ + /* USER CODE END SPI3_IRQn 1 */ } /** - * @brief This function handles Ethernet global interrupt. - */ -void ETH_IRQHandler(void) { - /* USER CODE BEGIN ETH_IRQn 0 */ + * @brief This function handles Ethernet global interrupt. + */ +void ETH_IRQHandler(void) +{ + /* USER CODE BEGIN ETH_IRQn 0 */ - /* USER CODE END ETH_IRQn 0 */ - HAL_ETH_IRQHandler(&heth); - /* USER CODE BEGIN ETH_IRQn 1 */ + /* USER CODE END ETH_IRQn 0 */ + HAL_ETH_IRQHandler(&heth); + /* USER CODE BEGIN ETH_IRQn 1 */ - /* USER CODE END ETH_IRQn 1 */ + /* USER CODE END ETH_IRQn 1 */ } /** - * @brief This function handles LPTIM1 global interrupt. - */ -void LPTIM1_IRQHandler(void) { - /* USER CODE BEGIN LPTIM1_IRQn 0 */ + * @brief This function handles LPTIM1 global interrupt. + */ +void LPTIM1_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM1_IRQn 0 */ - /* USER CODE END LPTIM1_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim1); - /* USER CODE BEGIN LPTIM1_IRQn 1 */ + /* USER CODE END LPTIM1_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim1); + /* USER CODE BEGIN LPTIM1_IRQn 1 */ - /* USER CODE END LPTIM1_IRQn 1 */ + /* USER CODE END LPTIM1_IRQn 1 */ } /** - * @brief This function handles LPTIM2 global interrupt. - */ -void LPTIM2_IRQHandler(void) { - /* USER CODE BEGIN LPTIM2_IRQn 0 */ + * @brief This function handles LPTIM2 global interrupt. + */ +void LPTIM2_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM2_IRQn 0 */ - /* USER CODE END LPTIM2_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim2); - /* USER CODE BEGIN LPTIM2_IRQn 1 */ + /* USER CODE END LPTIM2_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim2); + /* USER CODE BEGIN LPTIM2_IRQn 1 */ - /* USER CODE END LPTIM2_IRQn 1 */ + /* USER CODE END LPTIM2_IRQn 1 */ } /** - * @brief This function handles LPTIM3 global interrupt. - */ -void LPTIM3_IRQHandler(void) { - /* USER CODE BEGIN LPTIM3_IRQn 0 */ + * @brief This function handles LPTIM3 global interrupt. + */ +void LPTIM3_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM3_IRQn 0 */ - /* USER CODE END LPTIM3_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim3); - /* USER CODE BEGIN LPTIM3_IRQn 1 */ + /* USER CODE END LPTIM3_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim3); + /* USER CODE BEGIN LPTIM3_IRQn 1 */ - /* USER CODE END LPTIM3_IRQn 1 */ + /* USER CODE END LPTIM3_IRQn 1 */ } /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ + From 4c115d4b1bf3919beda1c044a0691db60c0055de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sun, 8 Feb 2026 15:04:48 +0100 Subject: [PATCH 02/15] Removed DMA changes --- Core/Src/stm32h7xx_it.c | 66 +++++++---------------------------------- 1 file changed, 11 insertions(+), 55 deletions(-) diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 8dea1076..5cf32fb9 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -28,9 +28,6 @@ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ - -/* DMA IRQ dispatch table (defined here to satisfy references when DMA is unused) */ -DMA_HandleTypeDef *dma_irq_table[16] = {0}; /* USER CODE END TD */ @@ -76,9 +73,8 @@ extern LPTIM_HandleTypeDef hlptim2; extern LPTIM_HandleTypeDef hlptim3; extern DMA_HandleTypeDef hdma_spi3_rx; extern DMA_HandleTypeDef hdma_spi3_tx; -extern SPI_HandleTypeDef hspi3; +extern SPI_HandleTypeDef hspi3; extern FDCAN_HandleTypeDef hfdcan1; -extern DMA_HandleTypeDef *dma_irq_table[16]; /* Externs for calltrace */ @@ -450,11 +446,7 @@ void DMA1_Stream0_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ /* USER CODE END DMA1_Stream0_IRQn 0 */ - if (dma_irq_table[0] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[0]); - } else if (hdma_adc1.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_adc1); - } + HAL_DMA_IRQHandler(&hdma_adc1); /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ /* USER CODE END DMA1_Stream0_IRQn 1 */ @@ -468,11 +460,7 @@ void DMA1_Stream1_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ /* USER CODE END DMA1_Stream1_IRQn 0 */ - if (dma_irq_table[1] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[1]); - } else if (hdma_adc2.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_adc2); - } + HAL_DMA_IRQHandler(&hdma_adc2); /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ /* USER CODE END DMA1_Stream1_IRQn 1 */ @@ -486,11 +474,7 @@ void DMA1_Stream2_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ /* USER CODE END DMA1_Stream2_IRQn 0 */ - if (dma_irq_table[2] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[2]); - } else if (hdma_adc3.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_adc3); - } + HAL_DMA_IRQHandler(&hdma_adc3); /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ /* USER CODE END DMA1_Stream2_IRQn 1 */ @@ -504,11 +488,7 @@ void DMA1_Stream3_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ /* USER CODE END DMA1_Stream3_IRQn 0 */ - if (dma_irq_table[3] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[3]); - } else if (hdma_i2c2_rx.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_i2c2_rx); - } + HAL_DMA_IRQHandler(&hdma_i2c2_rx); /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ /* USER CODE END DMA1_Stream3_IRQn 1 */ @@ -522,11 +502,7 @@ void DMA1_Stream4_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ /* USER CODE END DMA1_Stream4_IRQn 0 */ - if (dma_irq_table[4] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[4]); - } else if (hdma_i2c2_tx.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_i2c2_tx); - } + HAL_DMA_IRQHandler(&hdma_i2c2_tx); /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ /* USER CODE END DMA1_Stream4_IRQn 1 */ @@ -540,11 +516,7 @@ void DMA1_Stream5_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ /* USER CODE END DMA1_Stream5_IRQn 0 */ - if (dma_irq_table[5] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[5]); - } else if (hdma_spi3_rx.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_spi3_rx); - } + HAL_DMA_IRQHandler(&hdma_spi3_rx); /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ /* USER CODE END DMA1_Stream5_IRQn 1 */ @@ -558,11 +530,7 @@ void DMA1_Stream6_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ /* USER CODE END DMA1_Stream6_IRQn 0 */ - if (dma_irq_table[6] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[6]); - } else if (hdma_spi3_tx.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_spi3_tx); - } + HAL_DMA_IRQHandler(&hdma_spi3_tx); /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ /* USER CODE END DMA1_Stream6_IRQn 1 */ @@ -572,29 +540,17 @@ void DMA1_Stream6_IRQHandler(void) */ void DMA2_Stream0_IRQHandler(void) { - if (dma_irq_table[8] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[8]); - } else if (hdma_fmac_preload.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_fmac_preload); - } + HAL_DMA_IRQHandler(&hdma_fmac_preload); } void DMA2_Stream1_IRQHandler(void) { - if (dma_irq_table[9] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[9]); - } else if (hdma_fmac_write.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_fmac_write); - } + HAL_DMA_IRQHandler(&hdma_fmac_write); } void DMA2_Stream2_IRQHandler(void) { - if (dma_irq_table[10] != NULL) { - HAL_DMA_IRQHandler(dma_irq_table[10]); - } else if (hdma_fmac_read.Instance != NULL) { - HAL_DMA_IRQHandler(&hdma_fmac_read); - } + HAL_DMA_IRQHandler(&hdma_fmac_read); } void FMAC_IRQHandler(void) From 74881f6df84285ec2e49a2a95a24e117d082c1bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sun, 8 Feb 2026 16:16:29 +0100 Subject: [PATCH 03/15] Improved examples structure --- Core/Src/Examples/ExampleADC.cpp | 2 +- Core/Src/main.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Core/Src/Examples/ExampleADC.cpp b/Core/Src/Examples/ExampleADC.cpp index 5674d2c2..b3c9d590 100644 --- a/Core/Src/Examples/ExampleADC.cpp +++ b/Core/Src/Examples/ExampleADC.cpp @@ -8,7 +8,7 @@ using namespace ST_LIB; #ifdef TEST_0 constinit float adc_value = 0.0f; -constexpr auto adc = ADCDomain::ADC(PA0, adc_value, ADCDomain::Resolution::BITS_12, +constexpr auto adc = ADCDomain::ADC(ST_LIB::PA0, adc_value, ADCDomain::Resolution::BITS_12, ADCDomain::SampleTime::CYCLES_8_5); int main(void) { diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 5e49f8c5..8a08d89e 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -7,6 +7,8 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); using MainBoard = ST_LIB::Board; +#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && \ + !defined(EXAMPLE_MPU) && !defined(EXAMPLE_HARDFAULT) int main(void) { MainBoard::init(); @@ -17,6 +19,7 @@ int main(void) { HAL_Delay(200); } } +#endif extern "C" void Error_Handler(void) { ErrorHandler("HAL error handler triggered"); From 2c8f516eb8b49063e294348be743536c60aebf38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Mon, 9 Feb 2026 19:24:21 +0100 Subject: [PATCH 04/15] added characterization code --- Core/Src/main.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 8a08d89e..c3985c1f 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -1,3 +1,5 @@ +#if 0 + #include "main.h" #include "ST-LIB.hpp" @@ -7,7 +9,7 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); using MainBoard = ST_LIB::Board; -#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && \ +#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && \ !defined(EXAMPLE_MPU) && !defined(EXAMPLE_HARDFAULT) int main(void) { MainBoard::init(); @@ -26,3 +28,103 @@ extern "C" void Error_Handler(void) { while (1) { } } +#endif + +#include "ST-LIB.hpp" +#include "main.h" + +#include "Communications/Packets/DataPackets.hpp" +#include "Communications/Packets/OrderPackets.hpp" + +using namespace ST_LIB; + +double slope{1.0}; +double offset{0.0}; + +constinit float sensor_value{0.0f}; +constexpr auto sensor = + ADCDomain::ADC(ST_LIB::PA0, sensor_value, ADCDomain::Resolution::BITS_12, + ADCDomain::SampleTime::CYCLES_8_5); + +#if defined(USE_PHY_LAN8742) +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); +#elif defined(USE_PHY_LAN8700) +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); +#elif defined(USE_PHY_KSZ8041) +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); +#else +#error "No PHY selected for Ethernet pinset selection" +#endif +using ExampleEthernetBoard = ST_LIB::Board; + +extern "C" void Error_Handler(void) { + ErrorHandler("HAL error handler triggered"); + while (1) { + } +} + +void characterize(float raw, double read) { + // Incremental OLS accumulators for y = slope * x + offset. + static uint64_t sample_count{0}; + static double sum_x{0.0}; + static double sum_y{0.0}; + static double sum_xx{0.0}; + static double sum_xy{0.0}; + + const double x = static_cast(raw); + const double y = read; + + ++sample_count; + sum_x += x; + sum_y += y; + sum_xx += x * x; + sum_xy += x * y; + + if (sample_count < 2) { + offset = y - (slope * x); + return; + } + + const double n = static_cast(sample_count); + const double denominator = (n * sum_xx) - (sum_x * sum_x); + if (denominator == 0.0) { + return; + } + + slope = ((n * sum_xy) - (sum_x * sum_y)) / denominator; + offset = (sum_y - (slope * sum_x)) / n; +} + +int main(void) { + Hard_fault_check(); + ExampleEthernetBoard::init(); + + // Comms + OrderPackets::characterize_init(); + DataPackets::characterization_init(slope, offset); + DataPackets::start(); + + // Instances + auto ð_instance = ExampleEthernetBoard::instance_of(); + auto &sensor_instance = ExampleEthernetBoard::instance_of(); + + while (1) { + eth_instance.update(); + + if (OrderPackets::characterize_flag) { + OrderPackets::characterize_flag = false; + const float raw = sensor_instance.get_raw(); + const double read = + static_cast(sensor_instance.get_value_from_raw(raw)); + sensor_value = static_cast(read); + characterize(raw, read); + DataPackets::packets_socket->send_packet(*DataPackets::characterization); + } + } +} From 99ef18a40de06fe176e29b01361d735ba76077bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Mon, 9 Feb 2026 19:24:31 +0100 Subject: [PATCH 05/15] miss one file --- .../Examples/LinearSensorCharacterization.cpp | 47 ++++++++----------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/Core/Src/Examples/LinearSensorCharacterization.cpp b/Core/Src/Examples/LinearSensorCharacterization.cpp index df810a81..cf1f4bcc 100644 --- a/Core/Src/Examples/LinearSensorCharacterization.cpp +++ b/Core/Src/Examples/LinearSensorCharacterization.cpp @@ -1,4 +1,4 @@ -#ifdef EXAMPLE_LINEAR_SENSOR_CHARACTERIZATION +// #ifdef LINEAR_SENSOR_CHARACTERIZATION #include "ST-LIB.hpp" #include "main.h" @@ -9,26 +9,17 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); #ifdef STLIB_ETH #if defined(USE_PHY_LAN8742) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H10, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_LAN8700) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H10, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_KSZ8041) -constexpr auto eth = EthernetDomain::Ethernet( - EthernetDomain::PINSET_H11, - "00:80:e1:00:01:07", - "192.168.1.7", - "255.255.0.0" -); +constexpr auto eth = + EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #else #error "No PHY selected for Ethernet pinset selection" #endif @@ -38,20 +29,20 @@ using ExampleEthernetBoard = ST_LIB::Board; #endif int main(void) { - Hard_fault_check(); + Hard_fault_check(); - ExampleEthernetBoard::init(); + ExampleEthernetBoard::init(); #ifdef STLIB_ETH - auto& eth_instance = ExampleEthernetBoard::instance_of(); + auto ð_instance = ExampleEthernetBoard::instance_of(); #endif - auto& led_instance = ExampleEthernetBoard::instance_of(); + auto &led_instance = ExampleEthernetBoard::instance_of(); - led_instance.turn_on(); - while (1) { + led_instance.turn_on(); + while (1) { #ifdef STLIB_ETH - eth_instance.update(); + eth_instance.update(); #endif - } + } } -#endif // EXAMPLE_LINEAR_SENSOR_CHARACTERIZATION +// #endif // LINEAR_SENSOR_CHARACTERIZATION From 93846d1169aa57d564cccd670758b176344fffa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Mon, 9 Feb 2026 19:47:59 +0100 Subject: [PATCH 06/15] Updated with value packets --- Core/Src/main.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index c3985c1f..580be21e 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -41,6 +41,11 @@ using namespace ST_LIB; double slope{1.0}; double offset{0.0}; +double raw_value{0.0}; +double value{0.0}; + +double real_value{0.0}; + constinit float sensor_value{0.0f}; constexpr auto sensor = ADCDomain::ADC(ST_LIB::PA0, sensor_value, ADCDomain::Resolution::BITS_12, @@ -106,8 +111,9 @@ int main(void) { ExampleEthernetBoard::init(); // Comms - OrderPackets::characterize_init(); + OrderPackets::characterize_init(real_value); DataPackets::characterization_init(slope, offset); + DataPackets::value_init(raw_value, value); DataPackets::start(); // Instances @@ -117,13 +123,14 @@ int main(void) { while (1) { eth_instance.update(); + const float raw = sensor_instance.get_raw(); + raw_value = static_cast(raw); + value = static_cast(sensor_instance.get_value_from_raw(raw)); + sensor_value = static_cast(value); + if (OrderPackets::characterize_flag) { OrderPackets::characterize_flag = false; - const float raw = sensor_instance.get_raw(); - const double read = - static_cast(sensor_instance.get_value_from_raw(raw)); - sensor_value = static_cast(read); - characterize(raw, read); + characterize(raw, real_value); DataPackets::packets_socket->send_packet(*DataPackets::characterization); } } From 5a5cb8c3e0a80b98069d4446a50e71ea65756c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Mon, 9 Feb 2026 19:52:46 +0100 Subject: [PATCH 07/15] name error --- Core/Src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 580be21e..374bf2e6 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -113,7 +113,7 @@ int main(void) { // Comms OrderPackets::characterize_init(real_value); DataPackets::characterization_init(slope, offset); - DataPackets::value_init(raw_value, value); + DataPackets::Value_init(raw_value, value); DataPackets::start(); // Instances From 08aee94e1da24d7c39b3e764a364b21f7b552893 Mon Sep 17 00:00:00 2001 From: Jorge Canut Date: Wed, 11 Feb 2026 21:00:39 +0100 Subject: [PATCH 08/15] main --- Core/Src/main.cpp | 149 +++++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 76 deletions(-) diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 374bf2e6..178dad9c 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -1,16 +1,17 @@ #if 0 #include "main.h" + #include "ST-LIB.hpp" using namespace ST_LIB; -constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); +constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PF13); using MainBoard = ST_LIB::Board; -#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && \ - !defined(EXAMPLE_MPU) && !defined(EXAMPLE_HARDFAULT) +#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && !defined(EXAMPLE_MPU) && \ + !defined(EXAMPLE_HARDFAULT) int main(void) { MainBoard::init(); @@ -30,108 +31,104 @@ extern "C" void Error_Handler(void) { } #endif -#include "ST-LIB.hpp" -#include "main.h" - #include "Communications/Packets/DataPackets.hpp" #include "Communications/Packets/OrderPackets.hpp" +#include "ST-LIB.hpp" +#include "main.h" using namespace ST_LIB; double slope{1.0}; double offset{0.0}; -double raw_value{0.0}; double value{0.0}; +double sensor_value{0.0}; double real_value{0.0}; -constinit float sensor_value{0.0f}; -constexpr auto sensor = - ADCDomain::ADC(ST_LIB::PA0, sensor_value, ADCDomain::Resolution::BITS_12, - ADCDomain::SampleTime::CYCLES_8_5); +constinit float raw_value{0.0f}; +constexpr auto sensor = ADCDomain::ADC(ST_LIB::PF13, raw_value, ADCDomain::Resolution::BITS_12, + ADCDomain::SampleTime::CYCLES_8_5); #if defined(USE_PHY_LAN8742) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_LAN8700) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #elif defined(USE_PHY_KSZ8041) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", + "192.168.1.7", "255.255.0.0"); #else #error "No PHY selected for Ethernet pinset selection" #endif using ExampleEthernetBoard = ST_LIB::Board; extern "C" void Error_Handler(void) { - ErrorHandler("HAL error handler triggered"); - while (1) { - } + ErrorHandler("HAL error handler triggered"); + while (1) { + } } void characterize(float raw, double read) { - // Incremental OLS accumulators for y = slope * x + offset. - static uint64_t sample_count{0}; - static double sum_x{0.0}; - static double sum_y{0.0}; - static double sum_xx{0.0}; - static double sum_xy{0.0}; - - const double x = static_cast(raw); - const double y = read; - - ++sample_count; - sum_x += x; - sum_y += y; - sum_xx += x * x; - sum_xy += x * y; - - if (sample_count < 2) { - offset = y - (slope * x); - return; - } + // Incremental OLS accumulators for y = slope * x + offset. + static uint64_t sample_count{0}; + static double sum_x{0.0}; + static double sum_y{0.0}; + static double sum_xx{0.0}; + static double sum_xy{0.0}; + + const double x = static_cast(raw); + const double y = read; + + ++sample_count; + sum_x += x; + sum_y += y; + sum_xx += x * x; + sum_xy += x * y; + + if (sample_count < 2) { + offset = y - (slope * x); + return; + } - const double n = static_cast(sample_count); - const double denominator = (n * sum_xx) - (sum_x * sum_x); - if (denominator == 0.0) { - return; - } + const double n = static_cast(sample_count); + const double denominator = (n * sum_xx) - (sum_x * sum_x); + if (denominator == 0.0) { + return; + } - slope = ((n * sum_xy) - (sum_x * sum_y)) / denominator; - offset = (sum_y - (slope * sum_x)) / n; + slope = ((n * sum_xy) - (sum_x * sum_y)) / denominator; + offset = (sum_y - (slope * sum_x)) / n; } int main(void) { - Hard_fault_check(); - ExampleEthernetBoard::init(); - - // Comms - OrderPackets::characterize_init(real_value); - DataPackets::characterization_init(slope, offset); - DataPackets::Value_init(raw_value, value); - DataPackets::start(); - - // Instances - auto ð_instance = ExampleEthernetBoard::instance_of(); - auto &sensor_instance = ExampleEthernetBoard::instance_of(); - - while (1) { - eth_instance.update(); - - const float raw = sensor_instance.get_raw(); - raw_value = static_cast(raw); - value = static_cast(sensor_instance.get_value_from_raw(raw)); - sensor_value = static_cast(value); - - if (OrderPackets::characterize_flag) { - OrderPackets::characterize_flag = false; - characterize(raw, real_value); - DataPackets::packets_socket->send_packet(*DataPackets::characterization); + Hard_fault_check(); + ExampleEthernetBoard::init(); + + Scheduler::start(); + // Comms + OrderPackets::characterize_init(real_value); + DataPackets::characterization_init(slope, offset); + DataPackets::Value_init(sensor_value, value); + DataPackets::start(); + + // Instances + auto& eth_instance = ExampleEthernetBoard::instance_of(); + auto& sensor_instance = ExampleEthernetBoard::instance_of(); + + while (1) { + eth_instance.update(); + Scheduler::update(); + + sensor_instance.read(); + sensor_value = static_cast(raw_value); + value = slope * sensor_value + offset; + + if (OrderPackets::characterize_flag) { + OrderPackets::characterize_flag = false; + characterize(raw_value, real_value); + DataPackets::packets_socket->send_packet(*DataPackets::characterization); + } } - } } From f37db81bf43d9d78f2efe786d501264c31d959de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Wed, 11 Feb 2026 23:44:41 +0100 Subject: [PATCH 09/15] Forgot to erase characterization from main --- .../Examples/LinearSensorCharacterization.cpp | 4 +- Core/Src/main.cpp | 117 +----------------- 2 files changed, 8 insertions(+), 113 deletions(-) diff --git a/Core/Src/Examples/LinearSensorCharacterization.cpp b/Core/Src/Examples/LinearSensorCharacterization.cpp index cf1f4bcc..c8da29d9 100644 --- a/Core/Src/Examples/LinearSensorCharacterization.cpp +++ b/Core/Src/Examples/LinearSensorCharacterization.cpp @@ -1,4 +1,4 @@ -// #ifdef LINEAR_SENSOR_CHARACTERIZATION +#ifdef EXAMPLE_LINEAR_SENSOR_CHARACTERIZATION #include "ST-LIB.hpp" #include "main.h" @@ -45,4 +45,4 @@ int main(void) { } } -// #endif // LINEAR_SENSOR_CHARACTERIZATION +#endif // EXAMPLE_LINEAR_SENSOR_CHARACTERIZATION diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 178dad9c..6772192e 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -1,5 +1,3 @@ -#if 0 - #include "main.h" #include "ST-LIB.hpp" @@ -13,122 +11,19 @@ using MainBoard = ST_LIB::Board; #if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && !defined(EXAMPLE_MPU) && \ !defined(EXAMPLE_HARDFAULT) int main(void) { - MainBoard::init(); + MainBoard::init(); - auto &led_instance = MainBoard::instance_of(); + auto& led_instance = MainBoard::instance_of(); - while (1) { - led_instance.toggle(); - HAL_Delay(200); - } + while (1) { + led_instance.toggle(); + HAL_Delay(200); + } } #endif -extern "C" void Error_Handler(void) { - ErrorHandler("HAL error handler triggered"); - while (1) { - } -} -#endif - -#include "Communications/Packets/DataPackets.hpp" -#include "Communications/Packets/OrderPackets.hpp" -#include "ST-LIB.hpp" -#include "main.h" - -using namespace ST_LIB; - -double slope{1.0}; -double offset{0.0}; - -double value{0.0}; -double sensor_value{0.0}; - -double real_value{0.0}; - -constinit float raw_value{0.0f}; -constexpr auto sensor = ADCDomain::ADC(ST_LIB::PF13, raw_value, ADCDomain::Resolution::BITS_12, - ADCDomain::SampleTime::CYCLES_8_5); - -#if defined(USE_PHY_LAN8742) -constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); -#elif defined(USE_PHY_LAN8700) -constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); -#elif defined(USE_PHY_KSZ8041) -constexpr auto eth = EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); -#else -#error "No PHY selected for Ethernet pinset selection" -#endif -using ExampleEthernetBoard = ST_LIB::Board; - extern "C" void Error_Handler(void) { ErrorHandler("HAL error handler triggered"); while (1) { } } - -void characterize(float raw, double read) { - // Incremental OLS accumulators for y = slope * x + offset. - static uint64_t sample_count{0}; - static double sum_x{0.0}; - static double sum_y{0.0}; - static double sum_xx{0.0}; - static double sum_xy{0.0}; - - const double x = static_cast(raw); - const double y = read; - - ++sample_count; - sum_x += x; - sum_y += y; - sum_xx += x * x; - sum_xy += x * y; - - if (sample_count < 2) { - offset = y - (slope * x); - return; - } - - const double n = static_cast(sample_count); - const double denominator = (n * sum_xx) - (sum_x * sum_x); - if (denominator == 0.0) { - return; - } - - slope = ((n * sum_xy) - (sum_x * sum_y)) / denominator; - offset = (sum_y - (slope * sum_x)) / n; -} - -int main(void) { - Hard_fault_check(); - ExampleEthernetBoard::init(); - - Scheduler::start(); - // Comms - OrderPackets::characterize_init(real_value); - DataPackets::characterization_init(slope, offset); - DataPackets::Value_init(sensor_value, value); - DataPackets::start(); - - // Instances - auto& eth_instance = ExampleEthernetBoard::instance_of(); - auto& sensor_instance = ExampleEthernetBoard::instance_of(); - - while (1) { - eth_instance.update(); - Scheduler::update(); - - sensor_instance.read(); - sensor_value = static_cast(raw_value); - value = slope * sensor_value + offset; - - if (OrderPackets::characterize_flag) { - OrderPackets::characterize_flag = false; - characterize(raw_value, real_value); - DataPackets::packets_socket->send_packet(*DataPackets::characterization); - } - } -} From ae1fc2740240e18f793775adece2425b03534849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 12:12:00 +0100 Subject: [PATCH 10/15] chore: improve template DX docs and tooling --- .devcontainer/Dockerfile | 15 - .devcontainer/devcontainer.json | 24 -- .github/workflows/format-checks.yml | 1 + .github/workflows/tests.yml | 69 +++++ .pre-commit-config.yaml | 7 +- .vscode/launch.json | 396 +++++++++++++++----------- .vscode/tasks.json | 90 +++++- CMakeLists.txt | 48 ++-- CMakePresets.json | 46 +++ Core/Inc/Code_generation/Generator.py | 44 ++- README.md | 62 ++-- deps/ST-LIB | 2 +- docs/template-project/build-debug.md | 59 ++++ docs/template-project/setup.md | 47 +++ docs/template-project/testing.md | 46 +++ tools/generate_binary_metadata.py | 127 +++++---- tools/init.bat | 9 +- tools/init.sh | 4 + tools/preflash_check.py | 15 +- tools/retrieve_flash_data.py | 140 +++++---- 20 files changed, 834 insertions(+), 417 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/devcontainer.json create mode 100644 .github/workflows/tests.yml create mode 100644 docs/template-project/build-debug.md create mode 100644 docs/template-project/setup.md create mode 100644 docs/template-project/testing.md diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index dafda299..00000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM ubuntu:24.04 - -# Install git, git-lfs, colorama and build tools -RUN echo "deb http://security.ubuntu.com/ubuntu focal-security main universe" > /etc/apt/sources.list.d/ubuntu-focal-sources.list && \ - apt-get update && apt-get -y install git git-lfs python3 python3-pip curl python3-colorama cmake g++ build-essential libncurses5 libusb-1.0-0 gdb && \ - git lfs install - -# Install cubeclt -RUN mkdir /temp && cd /temp && git clone https://github.com/HyperloopUPV-H8/cubeclt.git && \ - cd cubeclt && git lfs pull && chmod +x cubeclt_1.16.0_installer.sh && \ - echo | LICENSE_ALREADY_ACCEPTED=1 ./cubeclt_1.16.0_installer.sh - -ENV PATH="$PATH:/opt/st/stm32cubeclt_1.16.0/GNU-tools-for-STM32/bin:/opt/st/stm32cubeclt_1.16.0/CMake/bin:/opt/st/stm32cubeclt_1.16.0/Ninja/bin" - -ENV PYTHONPATH="/workspaces/template-project/Tests/VirtualMCU/src/:$PYTHONPATH" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index a2acd037..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Dev Container for Template Project", - "build": { - "dockerfile": "Dockerfile", - "options": [ - "--platform=linux/amd64" - ] - }, - "runArgs": [ - "--cap-add=SYS_PTRACE", - "--security-opt=seccomp=unconfined" - ], - "remoteUser": "root", - "customizations": { - "vscode": { - "extensions": [ - "ms-vscode.cpptools-extension-pack", - "ms-python.python", - "mcu-debug.debug-tracker-vscode", - "marus25.cortex-debug" - ] - } - } -} \ No newline at end of file diff --git a/.github/workflows/format-checks.yml b/.github/workflows/format-checks.yml index a225afb4..bc9db041 100644 --- a/.github/workflows/format-checks.yml +++ b/.github/workflows/format-checks.yml @@ -3,6 +3,7 @@ name: Format Checks on: workflow_dispatch: pull_request: + branches: [ main ] paths: - '**.cpp' - '**.hpp' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..ebf153e4 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,69 @@ +name: Run Simulator Tests + +on: + workflow_dispatch: + pull_request: + branches: [ main ] + +concurrency: + group: tests-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + tests: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + permissions: + contents: read + packages: read + + container: + image: ghcr.io/hyperloop-upv/hyperloop-firmware-toolchain:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: false + fetch-depth: 1 + + - name: Init submodules + run: | + git config --global --add safe.directory '*' + git submodule update --init --depth 1 + ./deps/ST-LIB/tools/init-submodules.sh + shell: bash + + - name: Cache simulator deps + uses: actions/cache@v4 + with: + path: out/build/simulator/_deps + key: template-simulator-deps-${{ runner.os }}-${{ hashFiles('CMakeLists.txt', 'deps/ST-LIB/CMakeLists.txt', 'deps/ST-LIB/Tests/CMakeLists.txt') }} + restore-keys: | + template-simulator-deps-${{ runner.os }}- + + - name: Configure (CMake) + run: | + cmake --preset simulator + shell: bash + + - name: Build + run: | + cmake --build --preset simulator + shell: bash + + - name: Run tests (ctest) + run: | + ctest --preset simulator-all + shell: bash + + - name: Upload test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: simulator-test-reports + path: | + out/build/simulator/Testing/Temporary/LastTest.log + out/build/simulator/deps/ST-LIB/Testing/Temporary/LastTest.log + retention-days: 7 + if-no-files-found: ignore diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be8bb296..6aea970b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,6 +3,12 @@ default_install_hook_types: - pre-commit - pre-push repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-merge-conflict + - id: end-of-file-fixer + - id: trailing-whitespace - repo: https://github.com/pre-commit/mirrors-clang-format rev: v17.0.6 hooks: @@ -11,4 +17,3 @@ repos: types_or: - c - c++ - exclude: ^Core/Inc/Code_generation/Packet_generation/.*Template\.hpp$|^tools/binary_metadata_template\.cpp$ diff --git a/.vscode/launch.json b/.vscode/launch.json index 74f0dee8..b04553fd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,176 +1,228 @@ { - "version": "0.2.0", - "configurations": [ + "version": "0.2.0", + "configurations": [ + { + "name": "MCU | OpenOCD | Build + Debug (RTT)", + "type": "cortex-debug", + "request": "launch", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "openocd", + "serverpath": "openocd", + "configFiles": [ + ".vscode/stlink.cfg", + ".vscode/stm32h7x.cfg" + ], + "serverArgs": [ + "-c", + "transport select swd", + "-c", + "gdb_port 3333", + "-c", + "tcl_port 6666", + "-c", + "telnet_port 4444" + ], + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "preLaunchCommands": [ + "monitor reset halt" + ], + "postLaunchCommands": [ + "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", + "monitor rtt start", + "monitor rtt server start 9090 0" + ], + "postRestartCommands": [ + "monitor halt", + "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", + "monitor rtt start", + "monitor rtt server start 9090 0" + ], + "rttConfig": { + "enabled": true, + "address": "auto", + "decoders": [ + { + "port": 0, + "type": "console" + } + ] + }, + "preLaunchTask": "CMake: build" + }, + { + "name": "MCU | OpenOCD | Debug (No Build, RTT)", + "type": "cortex-debug", + "request": "launch", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "openocd", + "serverpath": "openocd", + "configFiles": [ + ".vscode/stlink.cfg", + ".vscode/stm32h7x.cfg" + ], + "serverArgs": [ + "-c", + "transport select swd", + "-c", + "gdb_port 3333", + "-c", + "tcl_port 6666", + "-c", + "telnet_port 4444" + ], + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "preLaunchCommands": [ + "monitor reset halt" + ], + "postLaunchCommands": [ + "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", + "monitor rtt start", + "monitor rtt server start 9090 0" + ], + "postRestartCommands": [ + "monitor halt", + "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", + "monitor rtt start", + "monitor rtt server start 9090 0" + ], + "rttConfig": { + "enabled": true, + "address": "auto", + "decoders": [ + { + "port": 0, + "type": "console" + } + ] + } + }, + { + "name": "MCU | OpenOCD | Attach (External Server, RTT)", + "type": "cortex-debug", + "request": "attach", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "external", + "gdbTarget": "localhost:3333", + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "postAttachCommands": [ + "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", + "monitor rtt start", + "monitor rtt server start 9090 0" + ], + "rttConfig": { + "enabled": true, + "address": "auto", + "decoders": [ + { + "port": 0, + "type": "console" + } + ] + } + }, + { + "name": "MCU | ST-LINK | Build + Debug", + "type": "cortex-debug", + "request": "launch", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "stlink", + "serverpath": "ST-LINK_gdbserver", + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "preLaunchCommands": [ + "monitor reset halt" + ], + "preLaunchTask": "CMake: build" + }, + { + "name": "MCU | ST-LINK | Debug (No Build)", + "type": "cortex-debug", + "request": "launch", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "stlink", + "serverpath": "ST-LINK_gdbserver", + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "preLaunchCommands": [ + "monitor reset halt" + ] + }, + { + "name": "MCU | ST-LINK | Attach (External GDB Server)", + "type": "cortex-debug", + "request": "attach", + "cwd": "${workspaceFolder}", + "executable": "${workspaceFolder}/out/build/latest.elf", + "servertype": "external", + "gdbTarget": "localhost:61234", + "gdbPath": "arm-none-eabi-gdb", + "device": "STM32H723ZGTx", + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${workspaceFolder}/STM32H723.svd", + "showDevDebugOutput": "parsed", + "postAttachCommands": [ + "monitor halt" + ] + }, + { + "name": "SIM | Rosetta | Debug App", + "type": "cppdbg", + "request": "launch", + "program": "out/build/latest.elf", + "miDebuggerServerAddress": "localhost:1234", + "miDebuggerPath": "/usr/bin/gdb", + "MIMode": "gdb", + "setupCommands": [ { - "name": "Build and Debug STM32H723 (OpenOCD + RTT)", - "type": "cortex-debug", - "request": "launch", - "cwd": "${workspaceFolder}", - "executable": "${workspaceFolder}/out/build/latest.elf", - "servertype": "openocd", - "configFiles": [ - "interface/stlink.cfg", - "target/stm32h7x.cfg" - ], - "serverpath": "openocd", - "device": "STM32H723ZGTx", - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "./STM32H723.svd", - "showDevDebugOutput": "parsed", - "postLaunchCommands": [ - "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", - "monitor rtt start", - "monitor rtt server start 9090 0" - ], - "postRestartCommands": [ - "monitor halt", - "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", - "monitor rtt start", - "monitor rtt server start 9090 0" - ], - "rttConfig": { - "enabled": true, - "address": "auto", - "decoders": [ - { - "port": 0, - "type": "console" - } - ] - }, - "preLaunchTask": "CMake: build" - }, - { - "name": "Debug STM32H723 (OpenOCD + RTT) - No Build", - "type": "cortex-debug", - "request": "launch", - "cwd": "${workspaceFolder}", - "executable": "${workspaceFolder}/out/build/latest.elf", - "servertype": "openocd", - "configFiles": [ - "interface/stlink.cfg", - "target/stm32h7x.cfg" - ], - "serverpath": "openocd", - "device": "STM32H723ZGTx", - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "./STM32H723.svd", - "showDevDebugOutput": "parsed", - "postLaunchCommands": [ - "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", - "monitor rtt start", - "monitor rtt server start 9090 0" - ], - "postRestartCommands": [ - "monitor halt", - "monitor rtt setup 0x24000000 0x24080000 \"SEGGER RTT\"", - "monitor rtt start", - "monitor rtt server start 9090 0" - ], - "rttConfig": { - "enabled": true, - "address": "auto", - "decoders": [ - { - "port": 0, - "type": "console" - } - ] - }, - // "preLaunchTask": "Pre-flash check" - }, - { - "name": "Debug simulator on Rosetta", - "type": "cppdbg", - "request": "launch", - "program": "out/build/latest.elf", - "miDebuggerServerAddress": "localhost:1234", - "miDebuggerPath": "/usr/bin/gdb", - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Set architecture to x86-64", - "text": "set architecture i386:x86-64", - "ignoreFailures": false - } - ], - "preLaunchTask": "Start Debug Server for Simulator on emulated arch", - "cwd": "${workspaceFolder}", - "externalConsole": false - }, - { - "name": "Debug ST-LIB tests (simulator)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/out/build/simulator/deps/ST-LIB/Tests/st-lib-test", - "args": [], - "cwd": "${workspaceFolder}", - "externalConsole": false, - "stopAtEntry": false, - "MIMode": "lldb", - "preLaunchTask": "Tests: Build simulator" - }, - { - "type": "cortex-debug", - "request": "launch", - "name": "Build and Debug Project", - "servertype": "stlink", - "cwd": "${workspaceRoot}", - "runToEntryPoint": "main", - "showDevDebugOutput": "raw", - "executable": "out/build/latest.elf", - "device": "STM32H723ZG", - "configFiles": [ - ".vscode/stlink.cfg", - ".vscode/stm32h7x.cfg" - ], - "svdFile": ".vscode/STM32H723.svd", - "swoConfig": { - "enabled": true, - "cpuFrequency": 8000000, - "swoFrequency": 2000000, - "source": "probe", - "decoders": [ - { - "type": "console", - "label": "ITM", - "port": 0 - } - ] - }, - "preLaunchTask": "CMake: build" - }, - { - "type": "cortex-debug", - "request": "launch", - "name": "Debug Project", - "servertype": "stlink", - "cwd": "${workspaceRoot}", - "runToEntryPoint": "main", - "showDevDebugOutput": "raw", - "executable": "out/build/latest.elf", - "device": "STM32H723ZG", - "configFiles": [ - ".vscode/stlink.cfg", - ".vscode/stm32h7x.cfg" - ], - "svdFile": "./STM32H723.svd", - "swoConfig": { - "enabled": true, - "cpuFrequency": 8000000, - "swoFrequency": 2000000, - "source": "probe", - "decoders": [ - { - "type": "console", - "label": "ITM", - "port": 0 - } - ] - }, - "stm32cubeprogrammer": "/opt/st/stm32cubeclt_1.16.0/STM32CubeProgrammer/bin" + "description": "Set architecture to x86-64", + "text": "set architecture i386:x86-64", + "ignoreFailures": false } - ] + ], + "preLaunchTask": "SIM | Rosetta | Start Debug Server", + "cwd": "${workspaceFolder}", + "externalConsole": false + }, + { + "name": "SIM | ST-LIB Tests | Debug", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/out/build/simulator/deps/ST-LIB/Tests/st-lib-test", + "args": [], + "cwd": "${workspaceFolder}", + "externalConsole": false, + "stopAtEntry": false, + "MIMode": "lldb", + "preLaunchTask": "SIM | Tests | Build" + } + ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 05284a38..31213400 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,42 +2,112 @@ "version": "2.0.0", "tasks": [ { - "label": "Start Debug Server for Simulator on emulated arch", + "label": "SIM | Rosetta | Start Debug Server", "type": "shell", "command": "ROSETTA_DEBUGSERVER_PORT=1234 ./out/build/latest.elf", "problemMatcher": [], "isBackground": true }, { - "label": "Tests: Configure simulator", + "label": "MCU | OpenOCD | Start Server", + "type": "shell", + "command": "openocd", + "args": [ + "-f", + ".vscode/stlink.cfg", + "-f", + ".vscode/stm32h7x.cfg", + "-c", + "transport select swd", + "-c", + "gdb_port 3333", + "-c", + "tcl_port 6666", + "-c", + "telnet_port 4444" + ], + "isBackground": true, + "problemMatcher": { + "owner": "custom", + "pattern": [ + { + "regexp": ".*", + "message": 0 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on port 3333 for gdb connections" + } + }, + "presentation": { + "reveal": "always", + "panel": "dedicated", + "clear": true + } + }, + { + "label": "MCU | OpenOCD | RTT Console", + "type": "shell", + "command": "nc 127.0.0.1 9090", + "problemMatcher": [], + "presentation": { + "reveal": "always", + "panel": "new" + } + }, + { + "label": "MCU | ST-LINK | Start GDB Server", + "type": "shell", + "command": "ST-LINK_gdbserver", + "args": [ + "-p", + "61234", + "-d", + "-e", + "--halt", + "--frequency", + "4000" + ], + "problemMatcher": [], + "isBackground": true, + "presentation": { + "reveal": "always", + "panel": "dedicated", + "clear": true + } + }, + { + "label": "SIM | Tests | Configure", "type": "shell", "command": "cmake --preset simulator", "problemMatcher": [] }, { - "label": "Tests: Build simulator", + "label": "SIM | Tests | Build", "type": "shell", "command": "cmake --build --preset simulator -j8", "dependsOn": [ - "Tests: Configure simulator" + "SIM | Tests | Configure" ], "problemMatcher": [] }, { - "label": "Tests: Run all (simulator)", + "label": "SIM | Tests | Run All", "type": "shell", - "command": "ctest --test-dir out/build/simulator/deps/ST-LIB --output-on-failure", + "command": "ctest --preset simulator-all", "dependsOn": [ - "Tests: Build simulator" + "SIM | Tests | Build" ], "problemMatcher": [] }, { - "label": "Tests: Run ADC (simulator)", + "label": "SIM | Tests | Run ADC", "type": "shell", - "command": "ctest --test-dir out/build/simulator/deps/ST-LIB -R ADCTest --output-on-failure", + "command": "ctest --preset simulator-adc", "dependsOn": [ - "Tests: Build simulator" + "SIM | Tests | Build" ], "problemMatcher": [] } diff --git a/CMakeLists.txt b/CMakeLists.txt index 83570067..c1d122ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,14 @@ cmake_minimum_required(VERSION 3.14) project(template-project LANGUAGES ASM C CXX) +include(CTest) +enable_testing() set(EXECUTABLE ${PROJECT_NAME}.elf) -set(Board "TEST") # User must change the Board name +set(BOARD_NAME "TEST" CACHE STRING "Board key from Core/Inc/Code_generation/JSON_ADE/boards.json") +if(BOARD_NAME STREQUAL "") + message(FATAL_ERROR "BOARD_NAME cannot be empty") +endif() set(STLIB_DIR ${CMAKE_CURRENT_LIST_DIR}/deps/ST-LIB) set(LD_SCRIPT ${STLIB_DIR}/STM32H723ZGTX_FLASH.ld) @@ -16,6 +21,11 @@ if(CMAKE_HOST_WIN32) else() set(VENV_PYTHON ${CMAKE_SOURCE_DIR}/virtual/bin/python) endif() +if(EXISTS "${VENV_PYTHON}") + set(PYTHON_FOR_TOOLS "${VENV_PYTHON}") +else() + set(PYTHON_FOR_TOOLS "${Python3_EXECUTABLE}") +endif() option(USE_ETHERNET "Enable ethernet peripheral" OFF) option(TARGET_NUCLEO "Targets the STM32H723 Nucleo development board" OFF) @@ -39,28 +49,16 @@ if(USE_CCACHE) endif() endif() -if(PROJECT_IS_TOP_LEVEL AND (NOT CMAKE_CROSSCOMPILING)) - include(FetchContent) - option(BUILD_GMOCK OFF) - option(INSTALL_GTEST OFF) - FetchContent_Declare( - googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG v1.15.2 - ) - FetchContent_MakeAvailable(googletest) - add_library(GTest::GTest INTERFACE IMPORTED) - target_link_libraries(GTest::GTest INTERFACE gtest_main) -endif() - message(STATUS "Template project: CMAKE_CROSSCOMPILING = ${CMAKE_CROSSCOMPILING}") message(STATUS "Template project: USE_ETHERNET = ${USE_ETHERNET}") message(STATUS "Template project: TARGET_NUCLEO = ${TARGET_NUCLEO}") +message(STATUS "Template project: BOARD_NAME = ${BOARD_NAME}") add_subdirectory(${STLIB_DIR}) message(STATUS "Using ST-LIB target: ${STLIB_LIBRARY}") file(GLOB_RECURSE GENERATOR_JSONS + CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/Inc/Code_generation/JSON_ADE/*.json ) @@ -70,8 +68,7 @@ add_custom_command( OUTPUT ${GENERATED_DATA_PACKETS} ${GENERATED_ORDER_PACKETS} - ${GENERATED_STATE_MACHINE} - COMMAND ${VENV_PYTHON} ${GENERATOR_SCRIPT} ${Board} + COMMAND ${PYTHON_FOR_TOOLS} ${GENERATOR_SCRIPT} ${BOARD_NAME} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} DEPENDS ${GENERATOR_SCRIPT} @@ -79,16 +76,17 @@ add_custom_command( ${CMAKE_SOURCE_DIR}/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp ${CMAKE_SOURCE_DIR}/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp ${GENERATOR_JSONS} - COMMENT "Generating packets for ${Board}" + COMMENT "Generating packets for ${BOARD_NAME}" ) -add_custom_target(run_generator ALL +add_custom_target(run_generator DEPENDS ${GENERATED_DATA_PACKETS} ${GENERATED_ORDER_PACKETS} ) file(GLOB_RECURSE METADATA_SOURCES + CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/*.c ${CMAKE_SOURCE_DIR}/Core/*.cpp ${CMAKE_SOURCE_DIR}/Core/*.h @@ -103,7 +101,7 @@ list(REMOVE_ITEM METADATA_SOURCES ${METADATA_OUTPUT}) add_custom_command( OUTPUT ${METADATA_OUTPUT} - COMMAND ${VENV_PYTHON} ${METADATA_SCRIPT} + COMMAND ${PYTHON_FOR_TOOLS} ${METADATA_SCRIPT} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} DEPENDS ${METADATA_SCRIPT} @@ -117,13 +115,13 @@ add_custom_target(generate_binary_metadata ) if(CMAKE_CROSSCOMPILING) - file(GLOB_RECURSE SOURCE_C ${CMAKE_SOURCE_DIR}/Core/*.c) - file(GLOB_RECURSE SOURCE_CPP ${CMAKE_SOURCE_DIR}/Core/*.cpp) - file(GLOB_RECURSE SOURCE_H ${CMAKE_SOURCE_DIR}/Core/*.h) - file(GLOB_RECURSE SOURCE_HPP ${CMAKE_SOURCE_DIR}/Core/*.hpp) + file(GLOB_RECURSE SOURCE_C CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/*.c) + file(GLOB_RECURSE SOURCE_CPP CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/*.cpp) + file(GLOB_RECURSE SOURCE_H CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/*.h) + file(GLOB_RECURSE SOURCE_HPP CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/*.hpp) if(NOT BUILD_EXAMPLES) - file(GLOB_RECURSE EXAMPLE_CPP ${CMAKE_SOURCE_DIR}/Core/Src/Examples/*.cpp) + file(GLOB_RECURSE EXAMPLE_CPP CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/Core/Src/Examples/*.cpp) list(REMOVE_ITEM SOURCE_CPP ${EXAMPLE_CPP}) endif() diff --git a/CMakePresets.json b/CMakePresets.json index f59704a4..4e441148 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -203,6 +203,17 @@ "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } + }, + { + "name": "simulator-asan", + "displayName": "Simulator [ASAN+UBSAN]", + "inherits": [ + "sim" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "STLIB_ENABLE_SANITIZERS": "ON" + } } ], "buildPresets": [ @@ -269,6 +280,41 @@ { "name": "simulator", "configurePreset": "simulator" + }, + { + "name": "simulator-asan", + "configurePreset": "simulator-asan" + } + ], + "testPresets": [ + { + "name": "simulator-all", + "configurePreset": "simulator", + "output": { + "outputOnFailure": true + }, + "execution": { + "noTestsAction": "error" + } + }, + { + "name": "simulator-adc", + "inherits": "simulator-all", + "filter": { + "include": { + "name": "ADCTest" + } + } + }, + { + "name": "simulator-all-asan", + "configurePreset": "simulator-asan", + "output": { + "outputOnFailure": true + }, + "execution": { + "noTestsAction": "error" + } } ] } diff --git a/Core/Inc/Code_generation/Generator.py b/Core/Inc/Code_generation/Generator.py index b308426c..774d9aaf 100644 --- a/Core/Inc/Code_generation/Generator.py +++ b/Core/Inc/Code_generation/Generator.py @@ -1,32 +1,28 @@ -import sys -from Packet_generation.Packet_generation import * +import argparse +from Packet_generation.Packet_generation import ( + Generate_PacketDescription, + Generate_DataPackets_hpp, + Generate_OrderPackets_hpp, +) -if len(sys.argv)<2: - print("Please enter a board name,exiting...") - sys.exit() - -JSONpath = "Core/Inc/Code_generation/JSON_ADE" -aux = sys.argv[1] -filtered = "" -for char in aux: - if char.isalpha(): - filtered += char - else: - break -board = filtered +def parse_args(): + parser = argparse.ArgumentParser(description="Generate packet headers from JSON_ADE") + parser.add_argument("board", help="Board key from Core/Inc/Code_generation/JSON_ADE/boards.json") + return parser.parse_args() -boards = Generate_PacketDescription(JSONpath, board) -if __name__ == "__main__": +def main(): + args = parse_args() + json_path = "Core/Inc/Code_generation/JSON_ADE" + board = args.board.strip() + if not board: + raise SystemExit("Board name cannot be empty") + + Generate_PacketDescription(json_path, board) Generate_DataPackets_hpp(board) Generate_OrderPackets_hpp(board) - - - - - - - \ No newline at end of file +if __name__ == "__main__": + main() diff --git a/README.md b/README.md index 70aa7730..a5f9b940 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,52 @@ # Template Project -HyperloopUPV's Template project for STM32 development with LwIP. +HyperloopUPV STM32 firmware template based on CMake + VSCode, using `deps/ST-LIB`. -Designed using CMake with defaults for development with VSCode. +## Quickstart -This makes use of the [ST-LIB](https://github.com/HyperloopUPV-H8/ST-LIB) developed by HyperloopUPV's team. +```sh +./tools/init.sh +cmake --preset simulator +cmake --build --preset simulator +ctest --preset simulator-all +``` -## Container Setup -To use it you must install [Dev Containers extension on VSCode](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) and [Docker](https://www.docker.com). Be careful to use the instructions related to your OS, as docker not works in the same way exactly between them. -Then, when you open this folder in VSCode, you will have the ability to reopen it inside the container. Don't worry, the first time you do it takes a loong time. -## SetUp -Create a virtual environment with ->python3 -m venv virtual +## Documentation -at the root of the project -## Modes -### Simulator -The container is fully ready to develop, compile and debug the code in simulator mode, so you don't have to worry about setting your environment -### MCU -The container is ready to develop and compile the code in MCU mode, but it couldn't be possible to flash and debug through it, so you should do it in your local machine. To do it, you must install the [STM32CubeCLT](https://www.st.com/en/development-tools/stm32cubeclt.html). -To flash and debug, you should be outside the container, and use the [Cortex-Debug VSCode extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +- Template setup: [`docs/template-project/setup.md`](docs/template-project/setup.md) +- Build and debug: [`docs/template-project/build-debug.md`](docs/template-project/build-debug.md) +- Testing and quality: [`docs/template-project/testing.md`](docs/template-project/testing.md) +- ST-LIB docs (inside this repository): [`deps/ST-LIB/docs/setup.md`](deps/ST-LIB/docs/setup.md) +## Main Working Modes -## Notes -If you are going to develop OUTSIDE the container, you MUST change `template-project.code-workspace` file after project creation if you DON'T have STLIB on ../ST-LIB relative path. This template is intended for you to develop always inside the container, so you should not be concerned about this. +- `simulator`: fast local development and tests. +- `nucleo-*` / `board-*`: hardware builds. -## Automatic formatting (commit/push) -This repository uses `pre-commit` + `clang-format` to format C/C++ files automatically on `git commit` and `git push`. +List all presets: -Install hooks once: ```sh -pip install pre-commit -./tools/install-git-hooks.sh +cmake --list-presets ``` -Run manually on all files: +## VSCode Debug + +`launch.json` and `tasks.json` include debug flows for: + +- OpenOCD +- ST-LINK +- simulator tests + +Detailed guide: + +- [`docs/template-project/build-debug.md`](docs/template-project/build-debug.md) + +## `BOARD_NAME` (code generation) + +Packet code generation uses `BOARD_NAME` (a key from JSON_ADE). + +Example: + ```sh -pre-commit run --all-files +cmake --preset board-debug -DBOARD_NAME=TEST ``` diff --git a/deps/ST-LIB b/deps/ST-LIB index 96abc13c..491ef412 160000 --- a/deps/ST-LIB +++ b/deps/ST-LIB @@ -1 +1 @@ -Subproject commit 96abc13c0d2f657ce658c76b98eff57c44a1aacf +Subproject commit 491ef412244805c2004805e54b8168ca5517e79d diff --git a/docs/template-project/build-debug.md b/docs/template-project/build-debug.md new file mode 100644 index 00000000..8599bd85 --- /dev/null +++ b/docs/template-project/build-debug.md @@ -0,0 +1,59 @@ +# Build and Debug + +## 1. Main CMake Presets + +- `simulator` +- `simulator-asan` +- `nucleo-*` +- `board-*` + +List all presets: + +```sh +cmake --list-presets +``` + +## 2. Build for Simulator + +```sh +cmake --preset simulator +cmake --build --preset simulator +``` + +With sanitizers: + +```sh +cmake --preset simulator-asan +cmake --build --preset simulator-asan +``` + +## 3. Build for MCU + +Example: + +```sh +cmake --preset board-debug-eth-ksz8041 -DBOARD_NAME=TEST +cmake --build --preset board-debug-eth-ksz8041 +``` + +The build output is copied to: + +- `out/build/latest.elf` + +## 4. Debug from VSCode + +Launch configurations available in `.vscode/launch.json`: + +- `MCU | OpenOCD | Build + Debug (RTT)` +- `MCU | OpenOCD | Debug (No Build, RTT)` +- `MCU | OpenOCD | Attach (External Server, RTT)` +- `MCU | ST-LINK | Build + Debug` +- `MCU | ST-LINK | Debug (No Build)` +- `MCU | ST-LINK | Attach (External GDB Server)` +- `SIM | ST-LIB Tests | Debug` + +Useful tasks in `.vscode/tasks.json`: + +- `MCU | OpenOCD | Start Server` +- `MCU | OpenOCD | RTT Console` +- `MCU | ST-LINK | Start GDB Server` diff --git a/docs/template-project/setup.md b/docs/template-project/setup.md new file mode 100644 index 00000000..530d2933 --- /dev/null +++ b/docs/template-project/setup.md @@ -0,0 +1,47 @@ +# Template Project Setup + +## 1. Prerequisites + +- VSCode (recommended) +- CMake + Ninja +- Python 3 + +For MCU build/flash/debug: + +- `STM32CubeCLT` +- `openocd` or `ST-LINK_gdbserver` +- `arm-none-eabi-gdb` + +## 2. Quick Initialization + +From the repository root: + +```sh +./tools/init.sh +``` + +This command: + +- creates `virtual/` +- installs Python dependencies from `requirements.txt` +- initializes template and `deps/ST-LIB` submodules + +On Windows: + +```bat +tools\init.bat +``` + +## 3. `BOARD_NAME` Configuration (codegen) + +Code generation uses `BOARD_NAME` (CMake cache variable), and the value must exist in: + +- `Core/Inc/Code_generation/JSON_ADE/boards.json` + +Example: + +```sh +cmake --preset board-debug -DBOARD_NAME=TEST +``` + +If not set, the default value is `TEST`. diff --git a/docs/template-project/testing.md b/docs/template-project/testing.md new file mode 100644 index 00000000..51c7522f --- /dev/null +++ b/docs/template-project/testing.md @@ -0,0 +1,46 @@ +# Testing and Quality + +## 1. Local Simulator Tests + +```sh +cmake --preset simulator +cmake --build --preset simulator +ctest --preset simulator-all +``` + +Run only ADC tests: + +```sh +ctest --preset simulator-adc +``` + +## 2. Tests with Sanitizers + +```sh +cmake --preset simulator-asan +cmake --build --preset simulator-asan +ctest --preset simulator-all-asan +``` + +## 3. Formatting + +This repository uses `pre-commit` and `clang-format`. + +Install hooks: + +```sh +pip install pre-commit +pre-commit install --install-hooks --hook-type pre-commit --hook-type pre-push +``` + +Run manually: + +```sh +pre-commit run --all-files +``` + +## 4. GitHub Actions CI + +- `Compile Checks`: builds MCU matrix (no simulator tests) +- `Run Simulator Tests`: runs tests using `simulator` preset +- `Format Checks`: validates formatting with `pre-commit` diff --git a/tools/generate_binary_metadata.py b/tools/generate_binary_metadata.py index 62b4a10d..3350ea36 100644 --- a/tools/generate_binary_metadata.py +++ b/tools/generate_binary_metadata.py @@ -1,82 +1,91 @@ -from jinja2 import Environment, FileSystemLoader +#!/usr/bin/env python3 from datetime import datetime -from git import Repo from pathlib import Path import os +import re + +from git import Repo +from jinja2 import Environment, FileSystemLoader + +MACRO_PATTERN = re.compile(r"ADD_TO_FLASH_INFO\(([^)]+)\)") +ACCEPTED_EXTENSIONS = {".cpp", ".c", ".h", ".hpp"} + -def __get_git_root__(): - # Start at the script's directory and walk up to find the .git folder +class Variable: + def __init__(self, name: str, value: str): + self.name = name + self.value = value + + +def get_git_root() -> Path: repo_root = Path(__file__).resolve() while not (repo_root / ".git").exists() and repo_root != repo_root.parent: repo_root = repo_root.parent + if not (repo_root / ".git").exists(): + raise RuntimeError("Could not find repository root (.git)") + return repo_root - return str(repo_root) if (repo_root / ".git").exists() else None -def __get_current_commit__(path): +def get_current_commit(path: Path) -> str: try: repo = Repo(path, search_parent_directories=True) - return repo.head.commit.hexsha[:8] # Get the current commit hash + return repo.head.commit.hexsha[:8] except Exception: - return "--------" # not using that repo, return placeholder for commit - -class Variable: - def __init__(self,name,value): - self.name = name - self.value = value -variables = [] + return "--------" + -def parse_file(file_path): - with open(file_path, 'r') as file: +def parse_file(file_path: Path, variables: list[Variable]) -> None: + with file_path.open("r", encoding="utf-8", errors="ignore") as file: for line in file: - # Look for the expression in the line - if "ADD_TO_FLASH_INFO" in line: - # Remove the 'ADD_TO_FLASH_INFO(' and ')' - line = line.strip()[len("ADD_TO_FLASH_INFO("):-1] - # Split the string by commas - parts = line.split(',') - # Ensure that we have exactly three parts (TYPE, VAR_NAME, VALUE) - if len(parts) == 3: - var_name = parts[1].strip() # Extract VAR_NAME - value = parts[2].strip() # Extract VALUE - if var_name == 'VAR_NAME' and value == 'VALUE)': #make sure to not add the MACRO definition - #in case it was present in that file - pass - else: - variables.append(Variable(var_name, value)) -print("Starting binary metadata generation") - -def search_in_subfolder(root_folder): - accepted_file_extensions = ['.cpp','.c','.h','.hpp'] - for folder_name, subfolders, filenames in os.walk(root_folder): + match = MACRO_PATTERN.search(line) + if not match: + continue + + parts = [part.strip() for part in match.group(1).split(",")] + if len(parts) != 3: + continue + + var_name = parts[1] + value = parts[2] + if var_name == "VAR_NAME" and value == "VALUE": + continue + variables.append(Variable(var_name, value)) + + +def search_core_sources(core_root: Path, variables: list[Variable]) -> None: + for folder_name, _subfolders, filenames in os.walk(core_root): for filename in filenames: - for extension in accepted_file_extensions: - if filename.endswith(extension): - file_path = os.path.join(folder_name, filename) - parse_file(file_path) -def main(): - repo_root = __get_git_root__() - search_in_subfolder(os.path.join(repo_root,"Core/")) + path = Path(folder_name) / filename + if path.suffix in ACCEPTED_EXTENSIONS: + parse_file(path, variables) - environment = Environment(loader=FileSystemLoader(os.path.join(repo_root,'tools'))) - template = environment.get_template(os.path.join('binary_metadata_template.cpp')) - iso_time = datetime.now().strftime("%Y%m%dT%H%M%S") - repo_root = __get_git_root__() - stlib_commit = __get_current_commit__(os.path.join(repo_root,"deps/ST-LIB")) - adj_commit = __get_current_commit__(os.path.join(repo_root,"deps/adj")) ## keep an eye on this - board_commit = __get_current_commit__(repo_root) +def main() -> None: + print("Starting binary metadata generation") + repo_root = get_git_root() + variables: list[Variable] = [] + search_core_sources(repo_root / "Core", variables) - output_file = os.path.join(repo_root,"Core/Src/Runes/generated_metadata.cpp") + environment = Environment(loader=FileSystemLoader(str(repo_root / "tools"))) + template = environment.get_template("binary_metadata_template.cpp") + + iso_time = datetime.now().strftime("%Y%m%dT%H%M%S") + stlib_commit = get_current_commit(repo_root / "deps/ST-LIB") + adj_commit = get_current_commit(repo_root / "deps/adj") + board_commit = get_current_commit(repo_root) + + output_file = repo_root / "Core/Src/Runes/generated_metadata.cpp" content = template.render( DateTimeISO8601=iso_time, - STLIB_COMMIT = stlib_commit, - ADJ_COMMIT = adj_commit, - BOARD_COMMIT = board_commit, - variables=variables) - with open(output_file, mode="w", encoding="utf-8") as message: - message.write(content) - + STLIB_COMMIT=stlib_commit, + ADJ_COMMIT=adj_commit, + BOARD_COMMIT=board_commit, + variables=variables, + ) + output_file.write_text(content, encoding="utf-8") print("Generation completed") + + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tools/init.bat b/tools/init.bat index a7edc385..59f1e439 100644 --- a/tools/init.bat +++ b/tools/init.bat @@ -1,6 +1,6 @@ @echo off setlocal enabledelayedexpansion -# This script is supposed to be under ${REPO_PATH}/tools/init.bat +REM This script is supposed to be under ${REPO_PATH}/tools/init.bat REM Get the script directory and repo directory set "SCRIPT_DIR=%~dp0" @@ -19,9 +19,16 @@ REM Activate virtual environment call virtual\Scripts\activate.bat REM Install requirements +python -m pip install --upgrade pip pip install -r requirements.txt REM Update git submodules git submodule update --init +where bash >nul 2>&1 +if %errorlevel%==0 ( + bash -lc "./deps/ST-LIB/tools/init-submodules.sh" +) else ( + echo bash was not found in PATH. Run deps/ST-LIB/tools/init-submodules.sh manually. +) echo Setup complete! diff --git a/tools/init.sh b/tools/init.sh index 872b6705..7bcdb9b0 100755 --- a/tools/init.sh +++ b/tools/init.sh @@ -12,6 +12,10 @@ echo "Repository directory: $REPO_DIR" cd "$REPO_DIR" python3 -m venv virtual source ./virtual/bin/activate +python -m pip install --upgrade pip pip install -r requirements.txt git submodule update --init +./deps/ST-LIB/tools/init-submodules.sh + +echo "Setup complete." diff --git a/tools/preflash_check.py b/tools/preflash_check.py index 0a4d4639..314125aa 100644 --- a/tools/preflash_check.py +++ b/tools/preflash_check.py @@ -1,12 +1,11 @@ #!/usr/bin/env python3 """ Pre-flash check script. -Checks for uncommitted changes and commits them if the binary was compiled with BOARD symbol. +Checks for uncommitted changes when the binary was compiled with BOARD symbol. """ import subprocess import sys -import os from pathlib import Path def get_script_dir() -> Path: @@ -32,30 +31,30 @@ def has_uncommitted_changes(workspace_dir: Path) -> bool: def main(): workspace_dir = get_workspace_dir() - + # Default build directory - can be overridden by command line argument if len(sys.argv) > 1: build_dir = Path(sys.argv[1]) else: build_dir = workspace_dir / "out" / "build" - + print(f"Workspace directory: {workspace_dir}") print(f"Build directory: {build_dir}") - + # Check if this is a BOARD build if not check_board_symbol(build_dir): print("Binary was not compiled with BOARD symbol (or marker not found). Skipping pre-flash check.") sys.exit(0) - + print("Binary was compiled with BOARD symbol. Checking for uncommitted changes...") - + if has_uncommitted_changes(workspace_dir): print("Uncommitted changes detected. Aborting Flash...") print("Please before flashing a board make sure all changes are commited"); sys.exit(1) else: print("No uncommitted changes. Proceeding with flash.") - + sys.exit(0) if __name__ == "__main__": diff --git a/tools/retrieve_flash_data.py b/tools/retrieve_flash_data.py index 1ebf07d9..902ba80b 100644 --- a/tools/retrieve_flash_data.py +++ b/tools/retrieve_flash_data.py @@ -1,77 +1,113 @@ -import subprocess +#!/usr/bin/env python3 import argparse -from datetime import datetime import os -def main(): - parser = argparse.ArgumentParser(description="Retrieve the binary metadata from flash given an address") +import subprocess +from datetime import datetime +from pathlib import Path + + +DUMP_FILE = Path("dump.bin") + + +def read_metadata(address: str) -> bytes: + result = subprocess.run( + [ + "STM32_Programmer_CLI", + "-c", + "port=swd", + "mode=ur", + "Freq=4000", + "-u", + address, + "0xFF", + str(DUMP_FILE), + ], + check=False, + ) + if result.returncode != 0: + if DUMP_FILE.exists(): + DUMP_FILE.unlink() + raise RuntimeError( + "Error running STM32_Programmer_CLI. Ensure board power, cable and ST-LINK availability." + ) + return DUMP_FILE.read_bytes() + + +def validate_checksum(binary_raw: bytes, address: str, checksum_length: int) -> None: + if len(binary_raw) < checksum_length: + raise RuntimeError(f"Retrieved data is too short (address: {address})") + if any(byte != ord("*") for byte in binary_raw[:checksum_length]): + raise RuntimeError( + f"Retrieved binary did not pass checksum test. Maybe metadata is not at {address}" + ) + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Retrieve binary metadata from flash given an address" + ) parser.add_argument( - "--address", # Argument name - type=str, # Argument type (string) - default="0x080DFD00", # Default value if no argument is provided - help="The memory address to retrieve from, if unsure leave empty" # Help text + "--address", + type=str, + default="0x080DFD00", + help="Memory address to read from", ) args = parser.parse_args() + try: - result = subprocess.run(["STM32_Programmer_CLI", "-c", "port=swd", "mode=ur", "Freq=4000", "-u", args.address, "0xFF", "dump.bin"]) - if result.returncode != 0: - #if we tried to read and it failed, remove the - # existing file to avoid confussion - os.remove("dump.bin") - raise Exception() - except Exception: - print("Error when running STM32_Programmer_CLI, make sure the board is powered and the cable connected,\nalso make sure STLINK is not in use by the debugger or STM32CubeProgrammer") - exit(-1) - - binary_raw = None - - with open("dump.bin","r") as binary: - binary_raw = binary.read() - - #DEFINITIONS FOR LOCATIONS + binary_raw = read_metadata(args.address) + except Exception as exc: + print(exc) + raise SystemExit(1) + checksum_length = 16 iso_time_offset = checksum_length iso_time_length = 15 padding_length = 1 stlib_commit_offset = iso_time_offset + iso_time_length + padding_length stlib_commit_length = 8 - adj_commit_offset = stlib_commit_offset + stlib_commit_length adj_commit_length = 8 - board_commit_offset = adj_commit_offset + adj_commit_length - board_commit_legnth = 8 - - custom_variables_offset = board_commit_offset + board_commit_legnth + board_commit_length = 8 + custom_variables_offset = board_commit_offset + board_commit_length - def __validate_retrieved_binary(): - for i in range(0,checksum_length): - if binary_raw[i] != '*': - raise Exception("Retrieved binary did not pass checksum test\n Maybe the metadata is not at that address? ADDRESS: {}".format(args.address)) - return True - if __validate_retrieved_binary() == True: - print("Found binary metadata!") + try: + validate_checksum(binary_raw, args.address, checksum_length) + except Exception as exc: + print(exc) + raise SystemExit(1) - iso_time = binary_raw[iso_time_offset:iso_time_offset + iso_time_length] - stlib_commit = binary_raw[stlib_commit_offset:stlib_commit_offset + stlib_commit_length] - adj_commit = binary_raw[adj_commit_offset:adj_commit_offset + adj_commit_length] - board_commit = binary_raw[board_commit_offset:board_commit_offset + board_commit_legnth] + print("Found binary metadata!") + iso_time = binary_raw[iso_time_offset : iso_time_offset + iso_time_length].decode( + errors="ignore" + ) + stlib_commit = binary_raw[ + stlib_commit_offset : stlib_commit_offset + stlib_commit_length + ].decode(errors="ignore") + adj_commit = binary_raw[ + adj_commit_offset : adj_commit_offset + adj_commit_length + ].decode(errors="ignore") + board_commit = binary_raw[ + board_commit_offset : board_commit_offset + board_commit_length + ].decode(errors="ignore") dt = datetime.strptime(iso_time, "%Y%m%dT%H%M%S") - # Format to a readable format (e.g., "March 2, 2025, 1:12:41 PM") - readable_time = dt.strftime("%d %B %Y, %H:%M:%S") # 24-hour format (%H) + readable_time = dt.strftime("%d %B %Y, %H:%M:%S") + + print(f"Code was compiled at: {readable_time}") + print(f"STLIB commit {stlib_commit}") + print(f"ADJ commit {adj_commit}") + print(f"Board commit {board_commit}") + custom_payload = binary_raw[custom_variables_offset:255].decode(errors="ignore") + print(custom_payload.rstrip("\x00")) - print("Code was compiled at: {}".format(readable_time)) - print("STLIB commit {}".format(stlib_commit)) - print("ADJ commit {}".format(adj_commit)) - print("Board commit {}".format(board_commit)) + # Keep compatibility with previous behavior: cleanup temporary dump. + if DUMP_FILE.exists(): + os.remove(DUMP_FILE) - for i in range(custom_variables_offset, 255): - if binary_raw[i].isdigit() == True and binary_raw[i+1].isdigit() == False: - print(binary_raw[i],end="\n") - else: - print(binary_raw[i],end="") if __name__ == "__main__": - main() \ No newline at end of file + main() From f942ee6acf92f4ef85b5223fecfe1929e4c86010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 12:19:11 +0100 Subject: [PATCH 11/15] formatted files --- .cproject | 2 +- .github/workflows/build.yml | 2 +- .mxproject | 1 - .vscode/c_cpp_properties.json | 2 +- .../Packet_generation/DataTemplate.hpp | 154 +- .../Packet_generation/OrderTemplate.hpp | 84 +- .../Packet_generation/Packet_descriptions.py | 40 +- .../Packet_generation/Packet_generation.py | 48 +- Core/Inc/Communications/Packets/.gitkeep | 1 - Core/Src/Examples/ExampleADC.cpp | 26 +- Core/Src/Examples/ExampleEthernet.cpp | 43 +- Core/Src/Examples/ExampleMPU.cpp | 2 +- Core/Src/Examples/ExamplesHardFault.cpp | 2 +- .../Examples/LinearSensorCharacterization.cpp | 43 +- Core/Src/Runes/generated_metadata.cpp | 2 +- Core/Src/config/leds_hard_fault.cpp | 2 +- Core/Src/main.cpp | 2 +- Core/Src/stm32h7xx_hal_msp.c | 2826 ++++++++--------- Core/Src/stm32h7xx_it.c | 799 +++-- Core/Src/syscalls.c | 2 +- STM32H723.svd | 108 +- deps/ST-LIB | 2 +- hard_faullt_analysis.py | 29 +- requirements.txt | 2 +- state_machine.json | 4 +- toolchains/stm32.cmake | 1 - tools/binary_metadata_template.cpp | 32 +- 27 files changed, 2090 insertions(+), 2171 deletions(-) diff --git a/.cproject b/.cproject index 34f11167..2589a7ba 100644 --- a/.cproject +++ b/.cproject @@ -403,4 +403,4 @@ - \ No newline at end of file + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 196da5a5..1400b512 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,7 +50,7 @@ jobs: run: | git config --global --add safe.directory '*' git submodule update --init --depth 1 - ./deps/ST-LIB/tools/init-submodules.sh + ./deps/ST-LIB/tools/init-submodules.sh shell: bash - name: Setup Python environment diff --git a/.mxproject b/.mxproject index 4d55e80c..219f971a 100644 --- a/.mxproject +++ b/.mxproject @@ -31,4 +31,3 @@ SourcePath#0=..\LWIP\App SourcePath#1=..\LWIP\Target SourcePath#2=..\Core\Src SourceFiles=; - diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 6a9c6db9..2455be23 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -9,4 +9,4 @@ } ], "version": 4 -} \ No newline at end of file +} diff --git a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp index 8c072130..9bbc6995 100644 --- a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp @@ -1,65 +1,123 @@ #pragma once #include "ST-LIB.hpp" -/*Data packets for {{board}} +/*Data packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY-*/ -class DataPackets{ +class DataPackets { public: - {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + {% for enum in enums -% + } + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - {% endfor %} - - {% for packet in packets -%} - static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) - { - {{packet.name}}_packet = new HeapPacket(static_cast({{packet.id}}){% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + { % endfor % } + + {% for packet in packets -% } - - {% endfor -%} - -public: - {%for packet in packets -%} - inline static HeapPacket *{{packet.name}}_packet{nullptr}; - {% endfor %} - {% for socket in sockets -%} - inline static {{socket.type}} *{{socket.name}}{nullptr}; - {% endfor %} - - static void start() - { - {% for packet in packets -%} - if ({{packet.name}}_packet == nullptr) { - ErrorHandler("Packet {{packet.name}} not initialized"); + static void { + { packet.name } + } + _init( + { % for variable in packet.variables % } {{variable.type}} & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } + ) { + { + { packet.name } } - {% endfor %} + _packet = new HeapPacket( + static_cast({{packet.id}}) { % if packet.variables % }, + { % for variable in packet.variables % } & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } { % endif % } + ); + } + + { % endfor - % } - {% for socket in ServerSockets -%} - {{socket.name}} = new ServerSocket("{{socket.board_ip}}",{{socket.port}}); - {%- endfor %} - {% for socket in DatagramSockets -%} - {{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); - {% endfor %} - {% for socket in Sockets -%} - {{socket.name}} = new Socket("{{socket.board_ip}}",{{socket.local_port}},"{{socket.remote_ip}}",{{socket.remote_port}}); - {% endfor %} - - {%- for packet in sending_packets %} - Scheduler::register_task({% if packet.period_type == "ms" %}{{ (packet.period*1000)|round|int }}{% else %}{{ packet.period|round|int }}{% endif %}, +[](){ - {% if packet.name is string -%} - DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{packet.name}}_packet); - {% else %} - {% for name in packet.name -%} - DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{name}}_packet); - {% endfor -%} - {%- endif %} - }); {%- endfor %} +public: + {%for packet in packets -% + } + inline static HeapPacket* { + { packet.name } + } + _packet{nullptr}; + { % endfor % } + {% for socket in sockets -% } + inline static {{socket.type}}* { + { socket.name } + } + {nullptr}; + { % endfor % } + + static void start() { + {% for packet in packets -% + } + if ({ + { packet.name } + } _packet == nullptr) { + ErrorHandler("Packet {{packet.name}} not initialized"); + } + { % endfor % } + {% for socket in ServerSockets -% + } + {{socket.name}} = new ServerSocket("{{socket.board_ip}}", {{socket.port}}); + { % -endfor % } + {% for socket in DatagramSockets -% + } + {{socket.name}} = new DatagramSocket( + "{{socket.board_ip}}", + {{socket.port}}, + "{{socket.remote_ip}}", + {{socket.port}} + ); + { % endfor % } + {% for socket in Sockets -% + } + {{socket.name}} = new Socket( + "{{socket.board_ip}}", + {{socket.local_port}}, + "{{socket.remote_ip}}", + {{socket.remote_port}} + ); + { % endfor % } - + {%- for packet in sending_packets % + } + Scheduler::register_task( + { % if packet.period_type == "ms" % } { + { (packet.period * 1000) | round | int } + } { % else % } { + { packet.period | round | int } + } { % endif % }, + +[]() { + { % if packet.name is string - % } + DataPackets::{ + { packet.socket } + } -> send_packet(*DataPackets::{ + { packet.name } + } _packet); + { % else % } + {% for name in packet.name -% + } + DataPackets::{ + { packet.socket } + } -> send_packet(*DataPackets::{ + { name } + } _packet); + { % endfor - % } + { % -endif % } + } + ); + { % -endfor % } + } }; diff --git a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp index 3ee83683..8a1f4d8e 100644 --- a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp @@ -1,43 +1,79 @@ #pragma once #include "ST-LIB.hpp" -/*Order packets for {{board}} +/*Order packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- */ - -class OrderPackets{ +class OrderPackets { public: - {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + {% for enum in enums -% + } + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - {% endfor %} + { % endfor % } - {% for packet in packets -%} - inline static bool {{packet.name}}_flag{false}; - {% endfor %} + {% for packet in packets -% + } + inline static bool { + { packet.name } + } + _flag{false}; + { % endfor % } OrderPackets() = default; - {% for packet in packets -%} - inline static HeapOrder *{{packet.name}}_order{nullptr}; - {% endfor %} - - {% for packet in packets -%} - static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) - { - {{packet.name}}_order = new HeapOrder({{packet.id}}, &{{packet.name}}_cb{% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + {% for packet in packets -% + } + inline static HeapOrder* { + { packet.name } } - {% endfor %} + _order{nullptr}; + { % endfor % } + + {% for packet in packets -% + } + static void { + { packet.name } + } + _init( + { % for variable in packet.variables % } {{variable.type}} & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } + ) { + { + { packet.name } + } + _order = new HeapOrder( + {{packet.id}}, + &{ + { packet.name } + } _cb { % if packet.variables % }, + { % for variable in packet.variables % } & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } { % endif % } + ); + } + { % endfor % } private: - {% for packet in packets -%} - static void {{packet.name}}_cb() - { - {{packet.name}}_flag = true; + {% for packet in packets -% + } + static void { + { packet.name } + } + _cb() { + { + { packet.name } + } + _flag = true; } - {% endfor %} -}; \ No newline at end of file + { % endfor % } +}; diff --git a/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py b/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py index 5e9b2cb0..6399b6a8 100644 --- a/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py +++ b/Core/Inc/Code_generation/Packet_generation/Packet_descriptions.py @@ -1,4 +1,4 @@ -import re +import re import json class BoardDescription: @@ -13,7 +13,7 @@ def __init__(self,name:str,board:dict,JSONpath:str): self.sockets=self.SocketsDescription(socks,self.ip) except Exception as e: raise Exception(f"Error in file {JSONpath}/boards/{name}/sockets.json: {e}") - #Packets: + #Packets: self.sending_packets = [] self.data_size =0 self.order_size =0 @@ -40,15 +40,15 @@ def __init__(self,name:str,board:dict,JSONpath:str): aux_sending= PacketDescription.check_for_sending(packet) if aux_sending is not None: self.sending_packets.append(aux_sending) - + if self.packets[packets_name][i].type != "order": self.data_size += 1 else: self.order_size += 1 i += 1 - + self.sending_packets = self.fix_sendind_packets(self.sending_packets) - + @staticmethod def fix_sendind_packets(sending_packets:list): fixed_packets = [] @@ -72,9 +72,9 @@ def fix_sendind_packets(sending_packets:list): fixed_packets.append(entry) return fixed_packets - - - + + + class SocketsDescription: def __init__(self,sockets:list,board_ip:str): self.allSockets=[] @@ -86,16 +86,16 @@ def __init__(self,sockets:list,board_ip:str): name = sock["name"].replace(" ", "_").replace("-", "_") sock_type = sock["type"] self.allSockets.append({"name": name,"type":sock_type}) - + if sock_type == "ServerSocket": self.ServerSockets.append({"name": name,"type":sock_type,"board_ip":self.board_ip, "port": sock["port"]}) elif sock_type == "Socket": self.Sockets.append({"name": name,"type":sock_type,"board_ip":self.board_ip, "local_port": sock["local_port"], "remote_ip": sock["remote_ip"], "remote_port": sock["remote_port"]}) elif sock_type == "DatagramSocket": self.DatagramSockets.append({"name": name,"type":sock_type,"board_ip":self.board_ip, "port": sock["port"],"remote_ip":sock["remote_ip"]}) - - + + class PacketDescription: def __init__(self, packet:dict,measurements:list, filename:str="Unknown"): self.id =packet["id"] @@ -108,13 +108,13 @@ def __init__(self, packet:dict,measurements:list, filename:str="Unknown"): for variable in packet["variables"]: self.variables.append(variable) self.measurements.append(MeasurmentsDescription(measurements,variable, filename)) - + @staticmethod def check_for_sending(packet:dict): if "period" in packet and "period_type" in packet and "socket" in packet: name = packet["name"].replace(" ", "_").replace("-", "_") return {"name": name,"period": packet["period"],"period_type":packet["period_type"],"socket": packet["socket"]} - + elif "period_ms" in packet and "socket" in packet: name = packet["name"].replace(" ", "_").replace("-", "_") return {"name": name,"period": packet["period_ms"],"period_type":"ms","socket": packet["socket"]} @@ -126,11 +126,11 @@ def __init__(self,measurements:list, variable:str, filename:str="Unknown"): if not hasattr(self.__class__, 'viewed_measurements'): self.__class__.viewed_measurements = {} measurement = self._MeasurementSearch(measurements,variable) - + if measurement is None: print(f"Measurement not found for variable: {variable} in file: {filename}\n") raise Exception(f"Measurement not found for variable: {variable} in file: {filename}") - + self.name = measurement["name"] self.type = (self._unsigned_int_correction(measurement["type"]).replace(" ", "_").replace("-", "_")) if self.type == "enum": @@ -145,8 +145,8 @@ def _Enum_values_correction(values:list): for i in range(len(values)): values[i] = values[i].replace(" ", "_").replace("-", "_") return values - - + + @staticmethod def _MeasurementSearch(measurements:list, variable:str): if variable in MeasurmentsDescription.viewed_measurements: @@ -157,8 +157,8 @@ def _MeasurementSearch(measurements:list, variable:str): MeasurmentsDescription.viewed_measurements[variable] = measurment return measurment return None - - + + @staticmethod def _unsigned_int_correction(type:str): aux_type = type[:4] @@ -166,4 +166,4 @@ def _unsigned_int_correction(type:str): type += "_t" elif type == "float32": type = "float" - return type \ No newline at end of file + return type diff --git a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py index bc4a8211..25a1d0e3 100644 --- a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py +++ b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py @@ -6,7 +6,7 @@ templates_path = "Core/Inc/Code_generation/Packet_generation" -def Generate_PacketDescription(JSONpath:str,board:str): +def Generate_PacketDescription(JSONpath:str,board:str): with open(JSONpath+"/boards.json") as f: boards = json.load(f) boards_name = [] @@ -20,9 +20,9 @@ def Generate_PacketDescription(JSONpath:str,board:str): else: print(f"Board {board} not found, exiting...") sys.exit() - + return boards_name - + #--------------DataPackets.hpp generation---------------# @@ -36,8 +36,8 @@ def GenerateDataEnum(board:BoardDescription): if hasattr(measurement, "enum")and measurement.enum not in Enums: Enums.append(measurement.enum) return Enums - - + + def GenerateDataPackets(board:BoardDescription): Packets =[] totaldata = [] @@ -50,10 +50,10 @@ def GenerateDataPackets(board:BoardDescription): tempdata +=(str(variable) +",") tempdata_but_pointer +=("&"+str(variable) +",") if tempdata.endswith(","): - tempdata = tempdata[:-1] + tempdata = tempdata[:-1] if tempdata_but_pointer.endswith(","): tempdata_but_pointer = tempdata_but_pointer[:-1] - + packet_variables = [] for measurement in packet_instance.measurements: packet_variables.append({ @@ -67,9 +67,9 @@ def GenerateDataPackets(board:BoardDescription): aux_data = {"type": measurement.type, "name": measurement.id.replace(" ", "_").replace("-", "_")} if not any(x["name"] == aux_data["name"] for x in totaldata): totaldata.append(aux_data) - + return Packets,totaldata - + packets,data = GenerateDataPackets(board) context = { "board": board.name, @@ -91,16 +91,16 @@ def Generate_DataPackets_hpp(board_input:str): if board_instance.data_size == 0: if os.path.exists(data_packets_path): os.remove(data_packets_path) - return - + return + env= jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) template = env.get_template("DataTemplate.hpp") context = Get_data_context(board_instance) - + with open(data_packets_path,"w") as Output: Output.write(template.render(context)) - + #--------------OrderPackets.hpp generation---------------# def Get_order_context(board:BoardDescription): @@ -113,8 +113,8 @@ def GenerateOrderEnum(board:BoardDescription): if hasattr(measurement, "enum") and measurement.enum not in Enums: Enums.append(measurement.enum) return Enums - - + + def GenerateOrderPackets(board:BoardDescription): Packets =[] totaldata = [] @@ -127,8 +127,8 @@ def GenerateOrderPackets(board:BoardDescription): tempdata +=(str(variable) +",") tempdata_but_pointer +=("&"+str(variable) +",") if tempdata.endswith(","): - tempdata = tempdata[:-1] - tempdata_but_pointer = tempdata_but_pointer[:-1] + tempdata = tempdata[:-1] + tempdata_but_pointer = tempdata_but_pointer[:-1] packet_variables = [] for measurement in packet_instance.measurements: @@ -143,10 +143,10 @@ def GenerateOrderPackets(board:BoardDescription): aux_data = {"type": measurement.type, "name": measurement.id} if not any(x["name"] == aux_data["name"] for x in totaldata): totaldata.append(aux_data) - + return Packets,totaldata - - + + packets,data = GenerateOrderPackets(board) context = { "board": board.name, @@ -163,14 +163,12 @@ def Generate_OrderPackets_hpp(board_input:str): if board_instance.order_size == 0: if os.path.exists(order_packets_path): os.remove(order_packets_path) - return - + return + env= jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) template = env.get_template("OrderTemplate.hpp") context = Get_order_context(board_instance) - + with open(order_packets_path,"w") as Output: Output.write(template.render(context)) - - diff --git a/Core/Inc/Communications/Packets/.gitkeep b/Core/Inc/Communications/Packets/.gitkeep index d3f5a12f..e69de29b 100644 --- a/Core/Inc/Communications/Packets/.gitkeep +++ b/Core/Inc/Communications/Packets/.gitkeep @@ -1 +0,0 @@ - diff --git a/Core/Src/Examples/ExampleADC.cpp b/Core/Src/Examples/ExampleADC.cpp index b3c9d590..defafa2f 100644 --- a/Core/Src/Examples/ExampleADC.cpp +++ b/Core/Src/Examples/ExampleADC.cpp @@ -8,21 +8,25 @@ using namespace ST_LIB; #ifdef TEST_0 constinit float adc_value = 0.0f; -constexpr auto adc = ADCDomain::ADC(ST_LIB::PA0, adc_value, ADCDomain::Resolution::BITS_12, - ADCDomain::SampleTime::CYCLES_8_5); +constexpr auto adc = ADCDomain::ADC( + ST_LIB::PA0, + adc_value, + ADCDomain::Resolution::BITS_12, + ADCDomain::SampleTime::CYCLES_8_5 +); int main(void) { - using ExampleADCBoard = ST_LIB::Board; - ExampleADCBoard::init(); + using ExampleADCBoard = ST_LIB::Board; + ExampleADCBoard::init(); - auto &adc_instance = ExampleADCBoard::instance_of(); + auto& adc_instance = ExampleADCBoard::instance_of(); - // Ready to compile for Nucleo. Validate by wiring PA0 to 3.3V and then to GND, - // and watch adc_value in the debugger to confirm the change. - while (1) { - adc_instance.read(); - HAL_Delay(100); - } + // Ready to compile for Nucleo. Validate by wiring PA0 to 3.3V and then to GND, + // and watch adc_value in the debugger to confirm the change. + while (1) { + adc_instance.read(); + HAL_Delay(100); + } } #endif // TEST_0 diff --git a/Core/Src/Examples/ExampleEthernet.cpp b/Core/Src/Examples/ExampleEthernet.cpp index dd497c58..0a3b5211 100644 --- a/Core/Src/Examples/ExampleEthernet.cpp +++ b/Core/Src/Examples/ExampleEthernet.cpp @@ -11,17 +11,26 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); #ifdef STLIB_ETH #if defined(USE_PHY_LAN8742) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H10, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #elif defined(USE_PHY_LAN8700) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H10, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #elif defined(USE_PHY_KSZ8041) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H11, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #else #error "No PHY selected for Ethernet pinset selection" #endif @@ -31,20 +40,20 @@ using ExampleEthernetBoard = ST_LIB::Board; #endif int main(void) { - Hard_fault_check(); + Hard_fault_check(); - ExampleEthernetBoard::init(); + ExampleEthernetBoard::init(); #ifdef STLIB_ETH - auto ð_instance = ExampleEthernetBoard::instance_of(); + auto& eth_instance = ExampleEthernetBoard::instance_of(); #endif - auto &led_instance = ExampleEthernetBoard::instance_of(); + auto& led_instance = ExampleEthernetBoard::instance_of(); - led_instance.turn_on(); - while (1) { + led_instance.turn_on(); + while (1) { #ifdef STLIB_ETH - eth_instance.update(); + eth_instance.update(); #endif - } + } } #endif // TEST_0 diff --git a/Core/Src/Examples/ExampleMPU.cpp b/Core/Src/Examples/ExampleMPU.cpp index 12a70575..f85a8a66 100644 --- a/Core/Src/Examples/ExampleMPU.cpp +++ b/Core/Src/Examples/ExampleMPU.cpp @@ -549,4 +549,4 @@ void assert_failed(uint8_t* file, uint32_t line) { } } -#endif \ No newline at end of file +#endif diff --git a/Core/Src/Examples/ExamplesHardFault.cpp b/Core/Src/Examples/ExamplesHardFault.cpp index 903222ee..0b2eb1f1 100644 --- a/Core/Src/Examples/ExamplesHardFault.cpp +++ b/Core/Src/Examples/ExamplesHardFault.cpp @@ -56,4 +56,4 @@ int main(void) { } #endif -#endif \ No newline at end of file +#endif diff --git a/Core/Src/Examples/LinearSensorCharacterization.cpp b/Core/Src/Examples/LinearSensorCharacterization.cpp index c8da29d9..df810a81 100644 --- a/Core/Src/Examples/LinearSensorCharacterization.cpp +++ b/Core/Src/Examples/LinearSensorCharacterization.cpp @@ -9,17 +9,26 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PB0); #ifdef STLIB_ETH #if defined(USE_PHY_LAN8742) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H10, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #elif defined(USE_PHY_LAN8700) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H10, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H10, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #elif defined(USE_PHY_KSZ8041) -constexpr auto eth = - EthernetDomain::Ethernet(EthernetDomain::PINSET_H11, "00:80:e1:00:01:07", - "192.168.1.7", "255.255.0.0"); +constexpr auto eth = EthernetDomain::Ethernet( + EthernetDomain::PINSET_H11, + "00:80:e1:00:01:07", + "192.168.1.7", + "255.255.0.0" +); #else #error "No PHY selected for Ethernet pinset selection" #endif @@ -29,20 +38,20 @@ using ExampleEthernetBoard = ST_LIB::Board; #endif int main(void) { - Hard_fault_check(); + Hard_fault_check(); - ExampleEthernetBoard::init(); + ExampleEthernetBoard::init(); #ifdef STLIB_ETH - auto ð_instance = ExampleEthernetBoard::instance_of(); + auto& eth_instance = ExampleEthernetBoard::instance_of(); #endif - auto &led_instance = ExampleEthernetBoard::instance_of(); + auto& led_instance = ExampleEthernetBoard::instance_of(); - led_instance.turn_on(); - while (1) { + led_instance.turn_on(); + while (1) { #ifdef STLIB_ETH - eth_instance.update(); + eth_instance.update(); #endif - } + } } #endif // EXAMPLE_LINEAR_SENSOR_CHARACTERIZATION diff --git a/Core/Src/Runes/generated_metadata.cpp b/Core/Src/Runes/generated_metadata.cpp index fe7c9755..6350bc43 100644 --- a/Core/Src/Runes/generated_metadata.cpp +++ b/Core/Src/Runes/generated_metadata.cpp @@ -12,4 +12,4 @@ const char DESCRIPTION[255] __attribute__((section(".metadata_pool"))) = "4b3d0ec4" // Board commit // the '=' is used for unparsing ; -} \ No newline at end of file +} diff --git a/Core/Src/config/leds_hard_fault.cpp b/Core/Src/config/leds_hard_fault.cpp index be2d3a0e..2494f3ca 100644 --- a/Core/Src/config/leds_hard_fault.cpp +++ b/Core/Src/config/leds_hard_fault.cpp @@ -21,4 +21,4 @@ uint8_t hard_fault_leds_count = ? sizeof(pins_hard_fault) / sizeof(uint16_t) : 0; #endif -} \ No newline at end of file +} diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index 6772192e..2b5aa232 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -8,7 +8,7 @@ constexpr auto led = ST_LIB::DigitalOutputDomain::DigitalOutput(ST_LIB::PF13); using MainBoard = ST_LIB::Board; -#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && !defined(EXAMPLE_MPU) && \ +#if !defined(EXAMPLE_ADC) && !defined(EXAMPLE_ETHERNET) && !defined(EXAMPLE_MPU) && \ !defined(EXAMPLE_HARDFAULT) int main(void) { MainBoard::init(); diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index d56011ad..a518063b 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -1,21 +1,21 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file stm32h7xx_hal_msp.c - * @brief This file provides code for the MSP Initialization - * and de-Initialization codes. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file stm32h7xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -23,7 +23,7 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ -extern DMA_HandleTypeDef hdma_i2c2_rx; +extern DMA_HandleTypeDef hdma_i2c2_rx; extern DMA_HandleTypeDef hdma_i2c2_tx; @@ -69,1583 +69,1419 @@ extern DMA_HandleTypeDef hdma_spi3_tx; /* USER CODE END 0 */ -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - /** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - /* USER CODE BEGIN MspInit 0 */ +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim); +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) { + /* USER CODE BEGIN MspInit 0 */ - /* USER CODE END MspInit 0 */ + /* USER CODE END MspInit 0 */ - __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); - /* System interrupt init*/ + /* System interrupt init*/ - /* USER CODE BEGIN MspInit 1 */ + /* USER CODE BEGIN MspInit 1 */ - /* USER CODE END MspInit 1 */ + /* USER CODE END MspInit 1 */ } /** * @brief ADC MSP Initialization -* This function configures the hardware resources used in this example +* This function configures the hardware resources used in this + * example * @param hadc: ADC handle pointer * @retval None -*/ -void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) -{ - (void)hadc; - /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ -} - -/** -* @brief ADC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hadc: ADC handle pointer -* @retval None -*/ -void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) -{ - (void)hadc; - /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ -} - -/** -* @brief CORDIC MSP Initialization -* This function configures the hardware resources used in this example -* @param hcordic: CORDIC handle pointer -* @retval None */ -void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef* hcordic) -{ - if(hcordic->Instance==CORDIC) - { - /* USER CODE BEGIN CORDIC_MspInit 0 */ - - /* USER CODE END CORDIC_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_CORDIC_CLK_ENABLE(); - /* USER CODE BEGIN CORDIC_MspInit 1 */ - - /* USER CODE END CORDIC_MspInit 1 */ - } - +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { + (void)hadc; + /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ } /** -* @brief CORDIC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hcordic: CORDIC handle pointer -* @retval None -*/ -void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef* hcordic) -{ - if(hcordic->Instance==CORDIC) - { - /* USER CODE BEGIN CORDIC_MspDeInit 0 */ - - /* USER CODE END CORDIC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_CORDIC_CLK_DISABLE(); - /* USER CODE BEGIN CORDIC_MspDeInit 1 */ - - /* USER CODE END CORDIC_MspDeInit 1 */ - } - + * @brief ADC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hadc: ADC handle pointer + * @retval None + */ +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) { + (void)hadc; + /* ADC MSP is handled by HALAL/Services/ADC/NewADC.hpp */ } -static uint32_t HAL_RCC_FDCAN_CLK_ENABLED=0; - /** -* @brief FDCAN MSP Initialization -* This function configures the hardware resources used in this example -* @param hfdcan: FDCAN handle pointer -* @retval None -*/ -void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hfdcan->Instance==FDCAN1) - { - /* USER CODE BEGIN FDCAN1_MspInit 0 */ - - /* USER CODE END FDCAN1_MspInit 0 */ - /* Peripheral clock enable */ - HAL_RCC_FDCAN_CLK_ENABLED++; - if(HAL_RCC_FDCAN_CLK_ENABLED==1){ - __HAL_RCC_FDCAN_CLK_ENABLE(); + * @brief CORDIC MSP Initialization + * This function configures the hardware resources used in this example + * @param hcordic: CORDIC handle pointer + * @retval None + */ +void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef* hcordic) { + if (hcordic->Instance == CORDIC) { + /* USER CODE BEGIN CORDIC_MspInit 0 */ + + /* USER CODE END CORDIC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_CORDIC_CLK_ENABLE(); + /* USER CODE BEGIN CORDIC_MspInit 1 */ + + /* USER CODE END CORDIC_MspInit 1 */ } - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**FDCAN1 GPIO Configuration - PD0 ------> FDCAN1_RX - PD1 ------> FDCAN1_TX - */ - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN FDCAN1_MspInit 1 */ - HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn); - HAL_NVIC_SetPriority(FDCAN1_IT1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN1_IT1_IRQn); - /* USER CODE END FDCAN1_MspInit 1 */ - } - else if(hfdcan->Instance==FDCAN3) - { - /* USER CODE BEGIN FDCAN3_MspInit 0 */ - - /* USER CODE END FDCAN3_MspInit 0 */ - /* Peripheral clock enable */ - HAL_RCC_FDCAN_CLK_ENABLED++; - if(HAL_RCC_FDCAN_CLK_ENABLED==1){ - __HAL_RCC_FDCAN_CLK_ENABLE(); - } - - __HAL_RCC_GPIOG_CLK_ENABLE(); - /**FDCAN3 GPIO Configuration - PG9 ------> FDCAN3_TX - PG10 ------> FDCAN3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_FDCAN3; - HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - - /* USER CODE BEGIN FDCAN3_MspInit 1 */ - HAL_NVIC_SetPriority(FDCAN3_IT0_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN3_IT0_IRQn); - HAL_NVIC_SetPriority(FDCAN3_IT1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FDCAN3_IT1_IRQn); - /* USER CODE END FDCAN3_MspInit 1 */ - } - } /** -* @brief FDCAN MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hfdcan: FDCAN handle pointer -* @retval None -*/ -void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan) -{ - if(hfdcan->Instance==FDCAN1) - { - /* USER CODE BEGIN FDCAN1_MspDeInit 0 */ - - /* USER CODE END FDCAN1_MspDeInit 0 */ - /* Peripheral clock disable */ - HAL_RCC_FDCAN_CLK_ENABLED--; - if(HAL_RCC_FDCAN_CLK_ENABLED==0){ - __HAL_RCC_FDCAN_CLK_DISABLE(); - } - - /**FDCAN1 GPIO Configuration - PD0 ------> FDCAN1_RX - PD1 ------> FDCAN1_TX - */ - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1); - - /* USER CODE BEGIN FDCAN1_MspDeInit 1 */ - HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn); - HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn); - /* USER CODE END FDCAN1_MspDeInit 1 */ - } - else if(hfdcan->Instance==FDCAN3) - { - /* USER CODE BEGIN FDCAN3_MspDeInit 0 */ - - /* USER CODE END FDCAN3_MspDeInit 0 */ - /* Peripheral clock disable */ - HAL_RCC_FDCAN_CLK_ENABLED--; - if(HAL_RCC_FDCAN_CLK_ENABLED==0){ - __HAL_RCC_FDCAN_CLK_DISABLE(); + * @brief CORDIC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hcordic: CORDIC handle pointer + * @retval None + */ +void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef* hcordic) { + if (hcordic->Instance == CORDIC) { + /* USER CODE BEGIN CORDIC_MspDeInit 0 */ + + /* USER CODE END CORDIC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_CORDIC_CLK_DISABLE(); + /* USER CODE BEGIN CORDIC_MspDeInit 1 */ + + /* USER CODE END CORDIC_MspDeInit 1 */ } - - /**FDCAN3 GPIO Configuration - PG9 ------> FDCAN3_TX - PG10 ------> FDCAN3_RX - */ - HAL_GPIO_DeInit(GPIOG, GPIO_PIN_9|GPIO_PIN_10); - - /* USER CODE BEGIN FDCAN3_MspDeInit 1 */ - HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn); - HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn); - /* USER CODE END FDCAN3_MspDeInit 1 */ - } - } -/** -* @brief FMAC MSP Initialization -* This function configures the hardware resources used in this example -* @param hfmac: FMAC handle pointer -* @retval None -*/ -void HAL_FMAC_MspInit(FMAC_HandleTypeDef* hfmac) -{ - if(hfmac->Instance==FMAC) - { - __HAL_RCC_FMAC_CLK_ENABLE(); - - /* FMAC DMA Init */ - /* FMAC_PRELOAD Init */ - hdma_fmac_preload.Instance = DMA2_Stream0; - hdma_fmac_preload.Init.Request = DMA_REQUEST_MEM2MEM; - hdma_fmac_preload.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_fmac_preload.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_fmac_preload.Init.MemInc = DMA_MINC_DISABLE; - hdma_fmac_preload.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_preload.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_preload.Init.Mode = DMA_NORMAL; - hdma_fmac_preload.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_preload) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac,hdmaPreload,hdma_fmac_preload); - - /* FMAC_WRITE Init */ - hdma_fmac_write.Instance = DMA2_Stream1; - hdma_fmac_write.Init.Request = DMA_REQUEST_FMAC_WRITE; - hdma_fmac_write.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_fmac_write.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_fmac_write.Init.MemInc = DMA_MINC_ENABLE; - hdma_fmac_write.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_write.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_write.Init.Mode = DMA_NORMAL; - hdma_fmac_write.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_write) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac,hdmaIn,hdma_fmac_write); - - /* FMAC interrupt Init */ - - /* FMAC DMA Init */ - /* FMAC_READ Init */ - hdma_fmac_read.Instance = DMA2_Stream2; - hdma_fmac_read.Init.Request = DMA_REQUEST_FMAC_READ; - hdma_fmac_read.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_fmac_read.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_fmac_read.Init.MemInc = DMA_MINC_ENABLE; - hdma_fmac_read.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_fmac_read.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_fmac_read.Init.Mode = DMA_NORMAL; - hdma_fmac_read.Init.Priority = DMA_PRIORITY_HIGH; - if (HAL_DMA_Init(&hdma_fmac_read) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hfmac,hdmaOut,hdma_fmac_read); - - HAL_NVIC_SetPriority(FMAC_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(FMAC_IRQn); - } - -} +static uint32_t HAL_RCC_FDCAN_CLK_ENABLED = 0; /** -* @brief FMAC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hfmac: FMAC handle pointer -* @retval None -*/ -void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef* hfmac) -{ - if(hfmac->Instance==FMAC) - { - /* USER CODE BEGIN FMAC_MspDeInit 0 */ - - /* USER CODE END FMAC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_FMAC_CLK_DISABLE(); - /* USER CODE BEGIN FMAC_MspDeInit 1 */ - - /* USER CODE END FMAC_MspDeInit 1 */ - } - + * @brief FDCAN MSP Initialization + * This function configures the hardware resources used in this example + * @param hfdcan: FDCAN handle pointer + * @retval None + */ +void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if (hfdcan->Instance == FDCAN1) { + /* USER CODE BEGIN FDCAN1_MspInit 0 */ + + /* USER CODE END FDCAN1_MspInit 0 */ + /* Peripheral clock enable */ + HAL_RCC_FDCAN_CLK_ENABLED++; + if (HAL_RCC_FDCAN_CLK_ENABLED == 1) { + __HAL_RCC_FDCAN_CLK_ENABLE(); + } + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**FDCAN1 GPIO Configuration + PD0 ------> FDCAN1_RX + PD1 ------> FDCAN1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN FDCAN1_MspInit 1 */ + HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn); + HAL_NVIC_SetPriority(FDCAN1_IT1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN1_IT1_IRQn); + /* USER CODE END FDCAN1_MspInit 1 */ + } else if (hfdcan->Instance == FDCAN3) { + /* USER CODE BEGIN FDCAN3_MspInit 0 */ + + /* USER CODE END FDCAN3_MspInit 0 */ + /* Peripheral clock enable */ + HAL_RCC_FDCAN_CLK_ENABLED++; + if (HAL_RCC_FDCAN_CLK_ENABLED == 1) { + __HAL_RCC_FDCAN_CLK_ENABLE(); + } + + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**FDCAN3 GPIO Configuration + PG9 ------> FDCAN3_TX + PG10 ------> FDCAN3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_FDCAN3; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /* USER CODE BEGIN FDCAN3_MspInit 1 */ + HAL_NVIC_SetPriority(FDCAN3_IT0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN3_IT0_IRQn); + HAL_NVIC_SetPriority(FDCAN3_IT1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FDCAN3_IT1_IRQn); + /* USER CODE END FDCAN3_MspInit 1 */ + } } /** -* @brief I2C MSP Initialization -* This function configures the hardware resources used in this example -* @param hi2c: I2C handle pointer -* @retval None -*/ -void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(hi2c->Instance==I2C2) - { - /* USER CODE BEGIN I2C2_MspInit 0 */ - - /* USER CODE END I2C2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C2; - PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } - - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**I2C2 GPIO Configuration - PF1 ------> I2C2_SCL - PB11 ------> I2C2_SDA - */ - GPIO_InitStruct.Pin = GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* Peripheral clock enable */ - __HAL_RCC_I2C2_CLK_ENABLE(); - - /* I2C2 DMA Init */ - /* I2C2_RX Init */ - hdma_i2c2_rx.Instance = DMA1_Stream3; - hdma_i2c2_rx.Init.Request = DMA_REQUEST_I2C2_RX; - hdma_i2c2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2c2_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2c2_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2c2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_i2c2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_i2c2_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2c2_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_i2c2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_i2c2_rx) != HAL_OK) - { - Error_Handler(); + * @brief FDCAN MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hfdcan: FDCAN handle pointer + * @retval None + */ +void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan) { + if (hfdcan->Instance == FDCAN1) { + /* USER CODE BEGIN FDCAN1_MspDeInit 0 */ + + /* USER CODE END FDCAN1_MspDeInit 0 */ + /* Peripheral clock disable */ + HAL_RCC_FDCAN_CLK_ENABLED--; + if (HAL_RCC_FDCAN_CLK_ENABLED == 0) { + __HAL_RCC_FDCAN_CLK_DISABLE(); + } + + /**FDCAN1 GPIO Configuration + PD0 ------> FDCAN1_RX + PD1 ------> FDCAN1_TX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0 | GPIO_PIN_1); + + /* USER CODE BEGIN FDCAN1_MspDeInit 1 */ + HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn); + HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn); + /* USER CODE END FDCAN1_MspDeInit 1 */ + } else if (hfdcan->Instance == FDCAN3) { + /* USER CODE BEGIN FDCAN3_MspDeInit 0 */ + + /* USER CODE END FDCAN3_MspDeInit 0 */ + /* Peripheral clock disable */ + HAL_RCC_FDCAN_CLK_ENABLED--; + if (HAL_RCC_FDCAN_CLK_ENABLED == 0) { + __HAL_RCC_FDCAN_CLK_DISABLE(); + } + + /**FDCAN3 GPIO Configuration + PG9 ------> FDCAN3_TX + PG10 ------> FDCAN3_RX + */ + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_9 | GPIO_PIN_10); + + /* USER CODE BEGIN FDCAN3_MspDeInit 1 */ + HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn); + HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn); + /* USER CODE END FDCAN3_MspDeInit 1 */ } - - __HAL_LINKDMA(hi2c,hdmarx,hdma_i2c2_rx); - - /* I2C2_TX Init */ - hdma_i2c2_tx.Instance = DMA1_Stream4; - hdma_i2c2_tx.Init.Request = DMA_REQUEST_I2C2_TX; - hdma_i2c2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2c2_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2c2_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2c2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_i2c2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_i2c2_tx.Init.Mode = DMA_CIRCULAR; - hdma_i2c2_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_i2c2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_i2c2_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hi2c,hdmatx,hdma_i2c2_tx); - - /* I2C2 interrupt Init */ - HAL_NVIC_SetPriority(I2C2_EV_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(I2C2_EV_IRQn); - /* USER CODE BEGIN I2C2_MspInit 1 */ - - /* USER CODE END I2C2_MspInit 1 */ - } - } /** -* @brief I2C MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hi2c: I2C handle pointer -* @retval None -*/ -void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) -{ - if(hi2c->Instance==I2C2) - { - /* USER CODE BEGIN I2C2_MspDeInit 0 */ - - /* USER CODE END I2C2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_I2C2_CLK_DISABLE(); - - /**I2C2 GPIO Configuration - PF1 ------> I2C2_SCL - PB11 ------> I2C2_SDA - */ - HAL_GPIO_DeInit(GPIOF, GPIO_PIN_1); - - HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11); - - /* I2C2 DMA DeInit */ - HAL_DMA_DeInit(hi2c->hdmarx); - HAL_DMA_DeInit(hi2c->hdmatx); - - /* I2C2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(I2C2_EV_IRQn); - /* USER CODE BEGIN I2C2_MspDeInit 1 */ - - /* USER CODE END I2C2_MspDeInit 1 */ - } - + * @brief FMAC MSP Initialization + * This function configures the hardware resources used in this example + * @param hfmac: FMAC handle pointer + * @retval None + */ +void HAL_FMAC_MspInit(FMAC_HandleTypeDef* hfmac) { + if (hfmac->Instance == FMAC) { + __HAL_RCC_FMAC_CLK_ENABLE(); + + /* FMAC DMA Init */ + /* FMAC_PRELOAD Init */ + hdma_fmac_preload.Instance = DMA2_Stream0; + hdma_fmac_preload.Init.Request = DMA_REQUEST_MEM2MEM; + hdma_fmac_preload.Init.Direction = DMA_MEMORY_TO_MEMORY; + hdma_fmac_preload.Init.PeriphInc = DMA_PINC_ENABLE; + hdma_fmac_preload.Init.MemInc = DMA_MINC_DISABLE; + hdma_fmac_preload.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_preload.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_preload.Init.Mode = DMA_NORMAL; + hdma_fmac_preload.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_preload) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac, hdmaPreload, hdma_fmac_preload); + + /* FMAC_WRITE Init */ + hdma_fmac_write.Instance = DMA2_Stream1; + hdma_fmac_write.Init.Request = DMA_REQUEST_FMAC_WRITE; + hdma_fmac_write.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_fmac_write.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_fmac_write.Init.MemInc = DMA_MINC_ENABLE; + hdma_fmac_write.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_write.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_write.Init.Mode = DMA_NORMAL; + hdma_fmac_write.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_write) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac, hdmaIn, hdma_fmac_write); + + /* FMAC interrupt Init */ + + /* FMAC DMA Init */ + /* FMAC_READ Init */ + hdma_fmac_read.Instance = DMA2_Stream2; + hdma_fmac_read.Init.Request = DMA_REQUEST_FMAC_READ; + hdma_fmac_read.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_fmac_read.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_fmac_read.Init.MemInc = DMA_MINC_ENABLE; + hdma_fmac_read.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_fmac_read.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_fmac_read.Init.Mode = DMA_NORMAL; + hdma_fmac_read.Init.Priority = DMA_PRIORITY_HIGH; + if (HAL_DMA_Init(&hdma_fmac_read) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hfmac, hdmaOut, hdma_fmac_read); + + HAL_NVIC_SetPriority(FMAC_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(FMAC_IRQn); + } } /** -* @brief LPTIM MSP Initialization -* This function configures the hardware resources used in this example -* @param hlptim: LPTIM handle pointer -* @retval None -*/ -void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) -{ - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(hlptim->Instance==LPTIM1) - { - /* USER CODE BEGIN LPTIM1_MspInit 0 */ - - /* USER CODE END LPTIM1_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; - PeriphClkInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_LPTIM1_CLK_ENABLE(); - /* LPTIM1 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM1_IRQn); - /* USER CODE BEGIN LPTIM1_MspInit 1 */ - - /* USER CODE END LPTIM1_MspInit 1 */ - } - else if(hlptim->Instance==LPTIM2) - { - /* USER CODE BEGIN LPTIM2_MspInit 0 */ - - /* USER CODE END LPTIM2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM2; - PeriphClkInitStruct.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_D3PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); + * @brief FMAC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hfmac: FMAC handle pointer + * @retval None + */ +void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef* hfmac) { + if (hfmac->Instance == FMAC) { + /* USER CODE BEGIN FMAC_MspDeInit 0 */ + + /* USER CODE END FMAC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_FMAC_CLK_DISABLE(); + /* USER CODE BEGIN FMAC_MspDeInit 1 */ + + /* USER CODE END FMAC_MspDeInit 1 */ } +} - /* Peripheral clock enable */ - __HAL_RCC_LPTIM2_CLK_ENABLE(); - /* LPTIM2 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM2_IRQn); - /* USER CODE BEGIN LPTIM2_MspInit 1 */ - - /* USER CODE END LPTIM2_MspInit 1 */ - } - else if(hlptim->Instance==LPTIM3) - { - /* USER CODE BEGIN LPTIM3_MspInit 0 */ - - /* USER CODE END LPTIM3_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM3; - PeriphClkInitStruct.Lptim345ClockSelection = RCC_LPTIM345CLKSOURCE_D3PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); +/** + * @brief I2C MSP Initialization + * This function configures the hardware resources used in this example + * @param hi2c: I2C handle pointer + * @retval None + */ +void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (hi2c->Instance == I2C2) { + /* USER CODE BEGIN I2C2_MspInit 0 */ + + /* USER CODE END I2C2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C2; + PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2C2 GPIO Configuration + PF1 ------> I2C2_SCL + PB11 ------> I2C2_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_I2C2_CLK_ENABLE(); + + /* I2C2 DMA Init */ + /* I2C2_RX Init */ + hdma_i2c2_rx.Instance = DMA1_Stream3; + hdma_i2c2_rx.Init.Request = DMA_REQUEST_I2C2_RX; + hdma_i2c2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_i2c2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_i2c2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_i2c2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_i2c2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_i2c2_rx.Init.Mode = DMA_CIRCULAR; + hdma_i2c2_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_i2c2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_i2c2_rx) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hi2c, hdmarx, hdma_i2c2_rx); + + /* I2C2_TX Init */ + hdma_i2c2_tx.Instance = DMA1_Stream4; + hdma_i2c2_tx.Init.Request = DMA_REQUEST_I2C2_TX; + hdma_i2c2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_i2c2_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_i2c2_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_i2c2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_i2c2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_i2c2_tx.Init.Mode = DMA_CIRCULAR; + hdma_i2c2_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_i2c2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_i2c2_tx) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hi2c, hdmatx, hdma_i2c2_tx); + + /* I2C2 interrupt Init */ + HAL_NVIC_SetPriority(I2C2_EV_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(I2C2_EV_IRQn); + /* USER CODE BEGIN I2C2_MspInit 1 */ + + /* USER CODE END I2C2_MspInit 1 */ } - - /* Peripheral clock enable */ - __HAL_RCC_LPTIM3_CLK_ENABLE(); - /* LPTIM3 interrupt Init */ - HAL_NVIC_SetPriority(LPTIM3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LPTIM3_IRQn); - /* USER CODE BEGIN LPTIM3_MspInit 1 */ - - /* USER CODE END LPTIM3_MspInit 1 */ - } - } /** -* @brief LPTIM MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hlptim: LPTIM handle pointer -* @retval None -*/ -void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) -{ - if(hlptim->Instance==LPTIM1) - { - /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ - - /* USER CODE END LPTIM1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM1_CLK_DISABLE(); - - /* LPTIM1 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM1_IRQn); - /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ - - /* USER CODE END LPTIM1_MspDeInit 1 */ - } - else if(hlptim->Instance==LPTIM2) - { - /* USER CODE BEGIN LPTIM2_MspDeInit 0 */ - - /* USER CODE END LPTIM2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM2_CLK_DISABLE(); - - /* LPTIM2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM2_IRQn); - /* USER CODE BEGIN LPTIM2_MspDeInit 1 */ - - /* USER CODE END LPTIM2_MspDeInit 1 */ - } - else if(hlptim->Instance==LPTIM3) - { - /* USER CODE BEGIN LPTIM3_MspDeInit 0 */ - - /* USER CODE END LPTIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPTIM3_CLK_DISABLE(); - - /* LPTIM3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPTIM3_IRQn); - /* USER CODE BEGIN LPTIM3_MspDeInit 1 */ - - /* USER CODE END LPTIM3_MspDeInit 1 */ - } - + * @brief I2C MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hi2c: I2C handle pointer + * @retval None + */ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) { + if (hi2c->Instance == I2C2) { + /* USER CODE BEGIN I2C2_MspDeInit 0 */ + + /* USER CODE END I2C2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C2_CLK_DISABLE(); + + /**I2C2 GPIO Configuration + PF1 ------> I2C2_SCL + PB11 ------> I2C2_SDA + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_1); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11); + + /* I2C2 DMA DeInit */ + HAL_DMA_DeInit(hi2c->hdmarx); + HAL_DMA_DeInit(hi2c->hdmatx); + + /* I2C2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(I2C2_EV_IRQn); + /* USER CODE BEGIN I2C2_MspDeInit 1 */ + + /* USER CODE END I2C2_MspDeInit 1 */ + } } /** -* @brief RTC MSP Initialization -* This function configures the hardware resources used in this example -* @param hrtc: RTC handle pointer -* @retval None -*/ -void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) -{ - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(hrtc->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspInit 0 */ - - /* USER CODE END RTC_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); + * @brief LPTIM MSP Initialization + * This function configures the hardware resources used in this example + * @param hlptim: LPTIM handle pointer + * @retval None + */ +void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) { + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (hlptim->Instance == LPTIM1) { + /* USER CODE BEGIN LPTIM1_MspInit 0 */ + + /* USER CODE END LPTIM1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; + PeriphClkInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + /* LPTIM1 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspInit 1 */ + + /* USER CODE END LPTIM1_MspInit 1 */ + } else if (hlptim->Instance == LPTIM2) { + /* USER CODE BEGIN LPTIM2_MspInit 0 */ + + /* USER CODE END LPTIM2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM2; + PeriphClkInitStruct.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_D3PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM2_CLK_ENABLE(); + /* LPTIM2 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspInit 1 */ + + /* USER CODE END LPTIM2_MspInit 1 */ + } else if (hlptim->Instance == LPTIM3) { + /* USER CODE BEGIN LPTIM3_MspInit 0 */ + + /* USER CODE END LPTIM3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM3; + PeriphClkInitStruct.Lptim345ClockSelection = RCC_LPTIM345CLKSOURCE_D3PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM3_CLK_ENABLE(); + /* LPTIM3 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspInit 1 */ + + /* USER CODE END LPTIM3_MspInit 1 */ } - - /* Peripheral clock enable */ - __HAL_RCC_RTC_ENABLE(); - /* USER CODE BEGIN RTC_MspInit 1 */ - - /* USER CODE END RTC_MspInit 1 */ - } - } /** -* @brief RTC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hrtc: RTC handle pointer -* @retval None -*/ -void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) -{ - if(hrtc->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspDeInit 0 */ - - /* USER CODE END RTC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_RTC_DISABLE(); - /* USER CODE BEGIN RTC_MspDeInit 1 */ - - /* USER CODE END RTC_MspDeInit 1 */ - } - + * @brief LPTIM MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hlptim: LPTIM handle pointer + * @retval None + */ +void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) { + if (hlptim->Instance == LPTIM1) { + /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ + + /* USER CODE END LPTIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM1_CLK_DISABLE(); + + /* LPTIM1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ + + /* USER CODE END LPTIM1_MspDeInit 1 */ + } else if (hlptim->Instance == LPTIM2) { + /* USER CODE BEGIN LPTIM2_MspDeInit 0 */ + + /* USER CODE END LPTIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM2_CLK_DISABLE(); + + /* LPTIM2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspDeInit 1 */ + + /* USER CODE END LPTIM2_MspDeInit 1 */ + } else if (hlptim->Instance == LPTIM3) { + /* USER CODE BEGIN LPTIM3_MspDeInit 0 */ + + /* USER CODE END LPTIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM3_CLK_DISABLE(); + + /* LPTIM3 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspDeInit 1 */ + + /* USER CODE END LPTIM3_MspDeInit 1 */ + } } /** -* @brief SPI MSP Initialization -* This function configures the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(hspi->Instance==SPI3) - { - /* USER CODE BEGIN SPI3_MspInit 0 */ - - /* USER CODE END SPI3_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3; - PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); + * @brief RTC MSP Initialization + * This function configures the hardware resources used in this example + * @param hrtc: RTC handle pointer + * @retval None + */ +void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (hrtc->Instance == RTC) { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_RTC_ENABLE(); + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ } +} - /* Peripheral clock enable */ - __HAL_RCC_SPI3_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**SPI3 GPIO Configuration - PC10 ------> SPI3_SCK - PC11 ------> SPI3_MISO - PC12 ------> SPI3_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* SPI3 DMA Init */ - /* SPI3_RX Init */ - hdma_spi3_rx.Instance = DMA1_Stream5; - hdma_spi3_rx.Init.Request = DMA_REQUEST_SPI3_RX; - hdma_spi3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_spi3_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_spi3_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_spi3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_spi3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_spi3_rx.Init.Mode = DMA_NORMAL; - hdma_spi3_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_spi3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_spi3_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - if (HAL_DMA_Init(&hdma_spi3_rx) != HAL_OK) - { - Error_Handler(); +/** + * @brief RTC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hrtc: RTC handle pointer + * @retval None + */ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) { + if (hrtc->Instance == RTC) { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ } +} - __HAL_LINKDMA(hspi,hdmarx,hdma_spi3_rx); - - /* SPI3_TX Init */ - hdma_spi3_tx.Instance = DMA1_Stream6; - hdma_spi3_tx.Init.Request = DMA_REQUEST_SPI3_TX; - hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_spi3_tx.Init.Mode = DMA_NORMAL; - hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) - { - Error_Handler(); +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example + * @param hspi: SPI handle pointer + * @retval None + */ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (hspi->Instance == SPI3) { + /* USER CODE BEGIN SPI3_MspInit 0 */ + + /* USER CODE END SPI3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3; + PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_SPI3_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**SPI3 GPIO Configuration + PC10 ------> SPI3_SCK + PC11 ------> SPI3_MISO + PC12 ------> SPI3_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* SPI3 DMA Init */ + /* SPI3_RX Init */ + hdma_spi3_rx.Instance = DMA1_Stream5; + hdma_spi3_rx.Init.Request = DMA_REQUEST_SPI3_RX; + hdma_spi3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_spi3_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi3_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_spi3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_spi3_rx.Init.Mode = DMA_NORMAL; + hdma_spi3_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + hdma_spi3_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + if (HAL_DMA_Init(&hdma_spi3_rx) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hspi, hdmarx, hdma_spi3_rx); + + /* SPI3_TX Init */ + hdma_spi3_tx.Instance = DMA1_Stream6; + hdma_spi3_tx.Init.Request = DMA_REQUEST_SPI3_TX; + hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_spi3_tx.Init.Mode = DMA_NORMAL; + hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(hspi, hdmatx, hdma_spi3_tx); + + /* SPI3 interrupt Init */ + HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(SPI3_IRQn); + /* USER CODE BEGIN SPI3_MspInit 1 */ + /* USER CODE END SPI3_MspInit 1 */ } - - __HAL_LINKDMA(hspi,hdmatx,hdma_spi3_tx); - - /* SPI3 interrupt Init */ - HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspInit 1 */ - /* USER CODE END SPI3_MspInit 1 */ - } - } /** -* @brief SPI MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) -{ - if(hspi->Instance==SPI3) - { - /* USER CODE BEGIN SPI3_MspDeInit 0 */ - - /* USER CODE END SPI3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI3_CLK_DISABLE(); - - /**SPI3 GPIO Configuration - PC10 ------> SPI3_SCK - PC11 ------> SPI3_MISO - PC12 ------> SPI3_MOSI - */ - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12); - - /* SPI3 DMA DeInit */ - HAL_DMA_DeInit(hspi->hdmarx); - HAL_DMA_DeInit(hspi->hdmatx); - - /* SPI3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspDeInit 1 */ - - /* USER CODE END SPI3_MspDeInit 1 */ - } - + * @brief SPI MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param hspi: SPI handle pointer + * @retval None + */ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) { + if (hspi->Instance == SPI3) { + /* USER CODE BEGIN SPI3_MspDeInit 0 */ + + /* USER CODE END SPI3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI3_CLK_DISABLE(); + + /**SPI3 GPIO Configuration + PC10 ------> SPI3_SCK + PC11 ------> SPI3_MISO + PC12 ------> SPI3_MOSI + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12); + + /* SPI3 DMA DeInit */ + HAL_DMA_DeInit(hspi->hdmarx); + HAL_DMA_DeInit(hspi->hdmatx); + + /* SPI3 interrupt DeInit */ + HAL_NVIC_DisableIRQ(SPI3_IRQn); + /* USER CODE BEGIN SPI3_MspDeInit 1 */ + + /* USER CODE END SPI3_MspDeInit 1 */ + } } /** -* @brief TIM_PWM MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_pwm: TIM_PWM handle pointer -* @retval None -*/ -void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) -{ - if(htim_pwm->Instance==TIM1) - { - /* USER CODE BEGIN TIM1_MspInit 0 */ - - /* USER CODE END TIM1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM1_CLK_ENABLE(); - /* USER CODE BEGIN TIM1_MspInit 1 */ - - /* USER CODE END TIM1_MspInit 1 */ - } - else if(htim_pwm->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } - else if(htim_pwm->Instance==TIM4) - { - /* USER CODE BEGIN TIM4_MspInit 0 */ - - /* USER CODE END TIM4_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM4_CLK_ENABLE(); - /* USER CODE BEGIN TIM4_MspInit 1 */ - - /* USER CODE END TIM4_MspInit 1 */ - } - else if(htim_pwm->Instance==TIM12) - { - /* USER CODE BEGIN TIM12_MspInit 0 */ - - /* USER CODE END TIM12_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM12_CLK_ENABLE(); - /* USER CODE BEGIN TIM12_MspInit 1 */ - - /* USER CODE END TIM12_MspInit 1 */ - } - else if(htim_pwm->Instance==TIM15) - { - /* USER CODE BEGIN TIM15_MspInit 0 */ - - /* USER CODE END TIM15_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM15_CLK_ENABLE(); - /* USER CODE BEGIN TIM15_MspInit 1 */ - - /* USER CODE END TIM15_MspInit 1 */ - } - + * @brief TIM_PWM MSP Initialization + * This function configures the hardware resources used in this example + * @param htim_pwm: TIM_PWM handle pointer + * @retval None + */ +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { + if (htim_pwm->Instance == TIM1) { + /* USER CODE BEGIN TIM1_MspInit 0 */ + + /* USER CODE END TIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM1_CLK_ENABLE(); + /* USER CODE BEGIN TIM1_MspInit 1 */ + + /* USER CODE END TIM1_MspInit 1 */ + } else if (htim_pwm->Instance == TIM3) { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } else if (htim_pwm->Instance == TIM4) { + /* USER CODE BEGIN TIM4_MspInit 0 */ + + /* USER CODE END TIM4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } else if (htim_pwm->Instance == TIM12) { + /* USER CODE BEGIN TIM12_MspInit 0 */ + + /* USER CODE END TIM12_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM12_CLK_ENABLE(); + /* USER CODE BEGIN TIM12_MspInit 1 */ + + /* USER CODE END TIM12_MspInit 1 */ + } else if (htim_pwm->Instance == TIM15) { + /* USER CODE BEGIN TIM15_MspInit 0 */ + + /* USER CODE END TIM15_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM15_CLK_ENABLE(); + /* USER CODE BEGIN TIM15_MspInit 1 */ + + /* USER CODE END TIM15_MspInit 1 */ + } } /** -* @brief TIM_Base MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspInit 0 */ - - /* USER CODE END TIM2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM2_CLK_ENABLE(); - /* TIM2 interrupt Init */ - HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM2_IRQn); - /* USER CODE BEGIN TIM2_MspInit 1 */ - - /* USER CODE END TIM2_MspInit 1 */ - } - else if(htim_base->Instance==TIM5) - { - /* USER CODE BEGIN TIM5_MspInit 0 */ - - /* USER CODE END TIM5_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM5_CLK_ENABLE(); - /* TIM5 interrupt Init */ - HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspInit 1 */ - - /* USER CODE END TIM5_MspInit 1 */ - } - else if(htim_base->Instance==TIM7) - { - /* USER CODE BEGIN TIM7_MspInit 0 */ - - /* USER CODE END TIM7_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM7_CLK_ENABLE(); - /* TIM7 interrupt Init */ - HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspInit 1 */ - - /* USER CODE END TIM7_MspInit 1 */ - } - else if(htim_base->Instance==TIM16) - { - /* USER CODE BEGIN TIM16_MspInit 0 */ - - /* USER CODE END TIM16_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM16_CLK_ENABLE(); - /* USER CODE BEGIN TIM16_MspInit 1 */ - - /* USER CODE END TIM16_MspInit 1 */ - } - else if(htim_base->Instance==TIM17) - { - /* USER CODE BEGIN TIM17_MspInit 0 */ - - /* USER CODE END TIM17_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM17_CLK_ENABLE(); - /* USER CODE BEGIN TIM17_MspInit 1 */ - - /* USER CODE END TIM17_MspInit 1 */ - } - else if(htim_base->Instance==TIM24) - { - /* USER CODE BEGIN TIM24_MspInit 0 */ - - /* USER CODE END TIM24_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM24_CLK_ENABLE(); - /* TIM24 interrupt Init */ - HAL_NVIC_SetPriority(TIM24_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM24_IRQn); - /* USER CODE BEGIN TIM24_MspInit 1 */ - - /* USER CODE END TIM24_MspInit 1 */ - } - + * @brief TIM_Base MSP Initialization + * This function configures the hardware resources used in this example + * @param htim_base: TIM_Base handle pointer + * @retval None + */ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { + if (htim_base->Instance == TIM2) { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* TIM2 interrupt Init */ + HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } else if (htim_base->Instance == TIM5) { + /* USER CODE BEGIN TIM5_MspInit 0 */ + + /* USER CODE END TIM5_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM5_CLK_ENABLE(); + /* TIM5 interrupt Init */ + HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM5_IRQn); + /* USER CODE BEGIN TIM5_MspInit 1 */ + + /* USER CODE END TIM5_MspInit 1 */ + } else if (htim_base->Instance == TIM7) { + /* USER CODE BEGIN TIM7_MspInit 0 */ + + /* USER CODE END TIM7_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM7_CLK_ENABLE(); + /* TIM7 interrupt Init */ + HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM7_IRQn); + /* USER CODE BEGIN TIM7_MspInit 1 */ + + /* USER CODE END TIM7_MspInit 1 */ + } else if (htim_base->Instance == TIM16) { + /* USER CODE BEGIN TIM16_MspInit 0 */ + + /* USER CODE END TIM16_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM16_CLK_ENABLE(); + /* USER CODE BEGIN TIM16_MspInit 1 */ + + /* USER CODE END TIM16_MspInit 1 */ + } else if (htim_base->Instance == TIM17) { + /* USER CODE BEGIN TIM17_MspInit 0 */ + + /* USER CODE END TIM17_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM17_CLK_ENABLE(); + /* USER CODE BEGIN TIM17_MspInit 1 */ + + /* USER CODE END TIM17_MspInit 1 */ + } else if (htim_base->Instance == TIM24) { + /* USER CODE BEGIN TIM24_MspInit 0 */ + + /* USER CODE END TIM24_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM24_CLK_ENABLE(); + /* TIM24 interrupt Init */ + HAL_NVIC_SetPriority(TIM24_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM24_IRQn); + /* USER CODE BEGIN TIM24_MspInit 1 */ + + /* USER CODE END TIM24_MspInit 1 */ + } } /** -* @brief TIM_Encoder MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_encoder: TIM_Encoder handle pointer -* @retval None -*/ -void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(htim_encoder->Instance==TIM8) - { - /* USER CODE BEGIN TIM8_MspInit 0 */ - - /* USER CODE END TIM8_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM8_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**TIM8 GPIO Configuration - PC6 ------> TIM8_CH1 - PC7 ------> TIM8_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* TIM8 interrupt Init */ - HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn); - /* USER CODE BEGIN TIM8_MspInit 1 */ - - /* USER CODE END TIM8_MspInit 1 */ - } - + * @brief TIM_Encoder MSP Initialization + * This function configures the hardware resources used in this example + * @param htim_encoder: TIM_Encoder handle pointer + * @retval None + */ +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if (htim_encoder->Instance == TIM8) { + /* USER CODE BEGIN TIM8_MspInit 0 */ + + /* USER CODE END TIM8_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM8_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**TIM8 GPIO Configuration + PC6 ------> TIM8_CH1 + PC7 ------> TIM8_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* TIM8 interrupt Init */ + HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn); + /* USER CODE BEGIN TIM8_MspInit 1 */ + + /* USER CODE END TIM8_MspInit 1 */ + } } /** -* @brief TIM_OC MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_oc: TIM_OC handle pointer -* @retval None -*/ -void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* htim_oc) -{ - if(htim_oc->Instance==TIM15) - { - /* USER CODE BEGIN TIM15_MspInit 0 */ - - /* USER CODE END TIM15_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM15_CLK_ENABLE(); - /* USER CODE BEGIN TIM15_MspInit 1 */ - - /* USER CODE END TIM15_MspInit 1 */ - } - + * @brief TIM_OC MSP Initialization + * This function configures the hardware resources used in this example + * @param htim_oc: TIM_OC handle pointer + * @retval None + */ +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* htim_oc) { + if (htim_oc->Instance == TIM15) { + /* USER CODE BEGIN TIM15_MspInit 0 */ + + /* USER CODE END TIM15_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM15_CLK_ENABLE(); + /* USER CODE BEGIN TIM15_MspInit 1 */ + + /* USER CODE END TIM15_MspInit 1 */ + } } /** -* @brief TIM_IC MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_ic: TIM_IC handle pointer -* @retval None -*/ -void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* htim_ic) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(htim_ic->Instance==TIM23) - { - /* USER CODE BEGIN TIM23_MspInit 0 */ - - /* USER CODE END TIM23_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM23_CLK_ENABLE(); - - __HAL_RCC_GPIOF_CLK_ENABLE(); - /**TIM23 GPIO Configuration - PF0 ------> TIM23_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_0; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - /* TIM23 interrupt Init */ - HAL_NVIC_SetPriority(TIM23_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM23_IRQn); - /* USER CODE BEGIN TIM23_MspInit 1 */ - - /* USER CODE END TIM23_MspInit 1 */ - } - + * @brief TIM_IC MSP Initialization + * This function configures the hardware resources used in this example + * @param htim_ic: TIM_IC handle pointer + * @retval None + */ +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* htim_ic) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if (htim_ic->Instance == TIM23) { + /* USER CODE BEGIN TIM23_MspInit 0 */ + + /* USER CODE END TIM23_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM23_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**TIM23 GPIO Configuration + PF0 ------> TIM23_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* TIM23 interrupt Init */ + HAL_NVIC_SetPriority(TIM23_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM23_IRQn); + /* USER CODE BEGIN TIM23_MspInit 1 */ + + /* USER CODE END TIM23_MspInit 1 */ + } } -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(htim->Instance==TIM1) - { - /* USER CODE BEGIN TIM1_MspPostInit 0 */ - - /* USER CODE END TIM1_MspPostInit 0 */ - __HAL_RCC_GPIOE_CLK_ENABLE(); - /**TIM1 GPIO Configuration - PE8 ------> TIM1_CH1N - PE9 ------> TIM1_CH1 - PE10 ------> TIM1_CH2N - PE11 ------> TIM1_CH2 - PE12 ------> TIM1_CH3N - PE13 ------> TIM1_CH3 - PE14 ------> TIM1_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 - |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM1_MspPostInit 1 */ - - /* USER CODE END TIM1_MspPostInit 1 */ - } - else if(htim->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspPostInit 0 */ - - /* USER CODE END TIM3_MspPostInit 0 */ - - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM3 GPIO Configuration - PC8 ------> TIM3_CH3 - PC9 ------> TIM3_CH4 - PB4(NJTRST) ------> TIM3_CH1 - PB5 ------> TIM3_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM3_MspPostInit 1 */ - - /* USER CODE END TIM3_MspPostInit 1 */ - } - else if(htim->Instance==TIM4) - { - /* USER CODE BEGIN TIM4_MspPostInit 0 */ - - /* USER CODE END TIM4_MspPostInit 0 */ - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**TIM4 GPIO Configuration - PD12 ------> TIM4_CH1 - PD13 ------> TIM4_CH2 - PD14 ------> TIM4_CH3 - PD15 ------> TIM4_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM4_MspPostInit 1 */ - - /* USER CODE END TIM4_MspPostInit 1 */ - } - else if(htim->Instance==TIM12) - { - /* USER CODE BEGIN TIM12_MspPostInit 0 */ - - /* USER CODE END TIM12_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM12 GPIO Configuration - PB14 ------> TIM12_CH1 - PB15 ------> TIM12_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM12_MspPostInit 1 */ - - /* USER CODE END TIM12_MspPostInit 1 */ - } - else if(htim->Instance==TIM15) - { - /* USER CODE BEGIN TIM15_MspPostInit 0 */ - - /* USER CODE END TIM15_MspPostInit 0 */ - - __HAL_RCC_GPIOE_CLK_ENABLE(); - /**TIM15 GPIO Configuration - PE4 ------> TIM15_CH1N - PE5 ------> TIM15_CH1 - PE6 ------> TIM15_CH2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_TIM15; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM15_MspPostInit 1 */ - - /* USER CODE END TIM15_MspPostInit 1 */ - } - else if(htim->Instance==TIM16) - { - /* USER CODE BEGIN TIM16_MspPostInit 0 */ - - /* USER CODE END TIM16_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM16 GPIO Configuration - PB6 ------> TIM16_CH1N - PB8 ------> TIM16_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_8; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM16; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM16_MspPostInit 1 */ - - /* USER CODE END TIM16_MspPostInit 1 */ - } - else if(htim->Instance==TIM17) - { - /* USER CODE BEGIN TIM17_MspPostInit 0 */ - - /* USER CODE END TIM17_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM17 GPIO Configuration - PB7 ------> TIM17_CH1N - PB9 ------> TIM17_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM17; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM17_MspPostInit 1 */ - - /* USER CODE END TIM17_MspPostInit 1 */ - } - else if(htim->Instance==TIM23) - { - /* USER CODE BEGIN TIM23_MspPostInit 0 */ - - /* USER CODE END TIM23_MspPostInit 0 */ - - __HAL_RCC_GPIOF_CLK_ENABLE(); - /**TIM23 GPIO Configuration - PF3 ------> TIM23_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_3; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM23_MspPostInit 1 */ - - /* USER CODE END TIM23_MspPostInit 1 */ - } - +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if (htim->Instance == TIM1) { + /* USER CODE BEGIN TIM1_MspPostInit 0 */ + + /* USER CODE END TIM1_MspPostInit 0 */ + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**TIM1 GPIO Configuration + PE8 ------> TIM1_CH1N + PE9 ------> TIM1_CH1 + PE10 ------> TIM1_CH2N + PE11 ------> TIM1_CH2 + PE12 ------> TIM1_CH3N + PE13 ------> TIM1_CH3 + PE14 ------> TIM1_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | + GPIO_PIN_13 | GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM1_MspPostInit 1 */ + + /* USER CODE END TIM1_MspPostInit 1 */ + } else if (htim->Instance == TIM3) { + /* USER CODE BEGIN TIM3_MspPostInit 0 */ + + /* USER CODE END TIM3_MspPostInit 0 */ + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PC8 ------> TIM3_CH3 + PC9 ------> TIM3_CH4 + PB4(NJTRST) ------> TIM3_CH1 + PB5 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM3_MspPostInit 1 */ + + /* USER CODE END TIM3_MspPostInit 1 */ + } else if (htim->Instance == TIM4) { + /* USER CODE BEGIN TIM4_MspPostInit 0 */ + + /* USER CODE END TIM4_MspPostInit 0 */ + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**TIM4 GPIO Configuration + PD12 ------> TIM4_CH1 + PD13 ------> TIM4_CH2 + PD14 ------> TIM4_CH3 + PD15 ------> TIM4_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } else if (htim->Instance == TIM12) { + /* USER CODE BEGIN TIM12_MspPostInit 0 */ + + /* USER CODE END TIM12_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM12 GPIO Configuration + PB14 ------> TIM12_CH1 + PB15 ------> TIM12_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_14 | GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM12_MspPostInit 1 */ + + /* USER CODE END TIM12_MspPostInit 1 */ + } else if (htim->Instance == TIM15) { + /* USER CODE BEGIN TIM15_MspPostInit 0 */ + + /* USER CODE END TIM15_MspPostInit 0 */ + + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**TIM15 GPIO Configuration + PE4 ------> TIM15_CH1N + PE5 ------> TIM15_CH1 + PE6 ------> TIM15_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_TIM15; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM15_MspPostInit 1 */ + + /* USER CODE END TIM15_MspPostInit 1 */ + } else if (htim->Instance == TIM16) { + /* USER CODE BEGIN TIM16_MspPostInit 0 */ + + /* USER CODE END TIM16_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM16 GPIO Configuration + PB6 ------> TIM16_CH1N + PB8 ------> TIM16_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM16; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM16_MspPostInit 1 */ + + /* USER CODE END TIM16_MspPostInit 1 */ + } else if (htim->Instance == TIM17) { + /* USER CODE BEGIN TIM17_MspPostInit 0 */ + + /* USER CODE END TIM17_MspPostInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**TIM17 GPIO Configuration + PB7 ------> TIM17_CH1N + PB9 ------> TIM17_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_7 | GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM17; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM17_MspPostInit 1 */ + + /* USER CODE END TIM17_MspPostInit 1 */ + } else if (htim->Instance == TIM23) { + /* USER CODE BEGIN TIM23_MspPostInit 0 */ + + /* USER CODE END TIM23_MspPostInit 0 */ + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**TIM23 GPIO Configuration + PF3 ------> TIM23_CH4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF13_TIM23; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM23_MspPostInit 1 */ + + /* USER CODE END TIM23_MspPostInit 1 */ + } } /** -* @brief TIM_PWM MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_pwm: TIM_PWM handle pointer -* @retval None -*/ -void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) -{ - if(htim_pwm->Instance==TIM1) - { - /* USER CODE BEGIN TIM1_MspDeInit 0 */ - - /* USER CODE END TIM1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM1_CLK_DISABLE(); - /* USER CODE BEGIN TIM1_MspDeInit 1 */ - - /* USER CODE END TIM1_MspDeInit 1 */ - } - else if(htim_pwm->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } - else if(htim_pwm->Instance==TIM4) - { - /* USER CODE BEGIN TIM4_MspDeInit 0 */ - - /* USER CODE END TIM4_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM4_CLK_DISABLE(); - /* USER CODE BEGIN TIM4_MspDeInit 1 */ - - /* USER CODE END TIM4_MspDeInit 1 */ - } - else if(htim_pwm->Instance==TIM12) - { - /* USER CODE BEGIN TIM12_MspDeInit 0 */ - - /* USER CODE END TIM12_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM12_CLK_DISABLE(); - /* USER CODE BEGIN TIM12_MspDeInit 1 */ - - /* USER CODE END TIM12_MspDeInit 1 */ - } - else if(htim_pwm->Instance==TIM15) - { - /* USER CODE BEGIN TIM15_MspDeInit 0 */ - - /* USER CODE END TIM15_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM15_CLK_DISABLE(); - /* USER CODE BEGIN TIM15_MspDeInit 1 */ - - /* USER CODE END TIM15_MspDeInit 1 */ - } - + * @brief TIM_PWM MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param htim_pwm: TIM_PWM handle pointer + * @retval None + */ +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) { + if (htim_pwm->Instance == TIM1) { + /* USER CODE BEGIN TIM1_MspDeInit 0 */ + + /* USER CODE END TIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM1_CLK_DISABLE(); + /* USER CODE BEGIN TIM1_MspDeInit 1 */ + + /* USER CODE END TIM1_MspDeInit 1 */ + } else if (htim_pwm->Instance == TIM3) { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } else if (htim_pwm->Instance == TIM4) { + /* USER CODE BEGIN TIM4_MspDeInit 0 */ + + /* USER CODE END TIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM4_CLK_DISABLE(); + /* USER CODE BEGIN TIM4_MspDeInit 1 */ + + /* USER CODE END TIM4_MspDeInit 1 */ + } else if (htim_pwm->Instance == TIM12) { + /* USER CODE BEGIN TIM12_MspDeInit 0 */ + + /* USER CODE END TIM12_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM12_CLK_DISABLE(); + /* USER CODE BEGIN TIM12_MspDeInit 1 */ + + /* USER CODE END TIM12_MspDeInit 1 */ + } else if (htim_pwm->Instance == TIM15) { + /* USER CODE BEGIN TIM15_MspDeInit 0 */ + + /* USER CODE END TIM15_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM15_CLK_DISABLE(); + /* USER CODE BEGIN TIM15_MspDeInit 1 */ + + /* USER CODE END TIM15_MspDeInit 1 */ + } } /** -* @brief TIM_Base MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspDeInit 0 */ - - /* USER CODE END TIM2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM2_CLK_DISABLE(); - - /* TIM2 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM2_IRQn); - /* USER CODE BEGIN TIM2_MspDeInit 1 */ - - /* USER CODE END TIM2_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM5) - { - /* USER CODE BEGIN TIM5_MspDeInit 0 */ - - /* USER CODE END TIM5_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM5_CLK_DISABLE(); - - /* TIM5 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspDeInit 1 */ - - /* USER CODE END TIM5_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM7) - { - /* USER CODE BEGIN TIM7_MspDeInit 0 */ - - /* USER CODE END TIM7_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM7_CLK_DISABLE(); - - /* TIM7 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspDeInit 1 */ - - /* USER CODE END TIM7_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM16) - { - /* USER CODE BEGIN TIM16_MspDeInit 0 */ - - /* USER CODE END TIM16_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM16_CLK_DISABLE(); - /* USER CODE BEGIN TIM16_MspDeInit 1 */ - - /* USER CODE END TIM16_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM17) - { - /* USER CODE BEGIN TIM17_MspDeInit 0 */ - - /* USER CODE END TIM17_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM17_CLK_DISABLE(); - /* USER CODE BEGIN TIM17_MspDeInit 1 */ - - /* USER CODE END TIM17_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM24) - { - /* USER CODE BEGIN TIM24_MspDeInit 0 */ - - /* USER CODE END TIM24_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM24_CLK_DISABLE(); - - /* TIM24 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM24_IRQn); - /* USER CODE BEGIN TIM24_MspDeInit 1 */ - - /* USER CODE END TIM24_MspDeInit 1 */ - } - + * @brief TIM_Base MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param htim_base: TIM_Base handle pointer + * @retval None + */ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { + if (htim_base->Instance == TIM2) { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + + /* TIM2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } else if (htim_base->Instance == TIM5) { + /* USER CODE BEGIN TIM5_MspDeInit 0 */ + + /* USER CODE END TIM5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM5_CLK_DISABLE(); + + /* TIM5 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM5_IRQn); + /* USER CODE BEGIN TIM5_MspDeInit 1 */ + + /* USER CODE END TIM5_MspDeInit 1 */ + } else if (htim_base->Instance == TIM7) { + /* USER CODE BEGIN TIM7_MspDeInit 0 */ + + /* USER CODE END TIM7_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM7_CLK_DISABLE(); + + /* TIM7 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM7_IRQn); + /* USER CODE BEGIN TIM7_MspDeInit 1 */ + + /* USER CODE END TIM7_MspDeInit 1 */ + } else if (htim_base->Instance == TIM16) { + /* USER CODE BEGIN TIM16_MspDeInit 0 */ + + /* USER CODE END TIM16_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM16_CLK_DISABLE(); + /* USER CODE BEGIN TIM16_MspDeInit 1 */ + + /* USER CODE END TIM16_MspDeInit 1 */ + } else if (htim_base->Instance == TIM17) { + /* USER CODE BEGIN TIM17_MspDeInit 0 */ + + /* USER CODE END TIM17_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM17_CLK_DISABLE(); + /* USER CODE BEGIN TIM17_MspDeInit 1 */ + + /* USER CODE END TIM17_MspDeInit 1 */ + } else if (htim_base->Instance == TIM24) { + /* USER CODE BEGIN TIM24_MspDeInit 0 */ + + /* USER CODE END TIM24_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM24_CLK_DISABLE(); + + /* TIM24 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM24_IRQn); + /* USER CODE BEGIN TIM24_MspDeInit 1 */ + + /* USER CODE END TIM24_MspDeInit 1 */ + } } /** -* @brief TIM_Encoder MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_encoder: TIM_Encoder handle pointer -* @retval None -*/ -void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder) -{ - if(htim_encoder->Instance==TIM8) - { - /* USER CODE BEGIN TIM8_MspDeInit 0 */ - - /* USER CODE END TIM8_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM8_CLK_DISABLE(); - - /**TIM8 GPIO Configuration - PC6 ------> TIM8_CH1 - PC7 ------> TIM8_CH2 - */ - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7); - - /* TIM8 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn); - /* USER CODE BEGIN TIM8_MspDeInit 1 */ - - /* USER CODE END TIM8_MspDeInit 1 */ - } - + * @brief TIM_Encoder MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param htim_encoder: TIM_Encoder handle pointer + * @retval None + */ +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder) { + if (htim_encoder->Instance == TIM8) { + /* USER CODE BEGIN TIM8_MspDeInit 0 */ + + /* USER CODE END TIM8_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM8_CLK_DISABLE(); + + /**TIM8 GPIO Configuration + PC6 ------> TIM8_CH1 + PC7 ------> TIM8_CH2 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6 | GPIO_PIN_7); + + /* TIM8 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn); + /* USER CODE BEGIN TIM8_MspDeInit 1 */ + + /* USER CODE END TIM8_MspDeInit 1 */ + } } /** -* @brief TIM_OC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_oc: TIM_OC handle pointer -* @retval None -*/ -void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* htim_oc) -{ - if(htim_oc->Instance==TIM15) - { - /* USER CODE BEGIN TIM15_MspDeInit 0 */ - - /* USER CODE END TIM15_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM15_CLK_DISABLE(); - /* USER CODE BEGIN TIM15_MspDeInit 1 */ - - /* USER CODE END TIM15_MspDeInit 1 */ - } - + * @brief TIM_OC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param htim_oc: TIM_OC handle pointer + * @retval None + */ +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* htim_oc) { + if (htim_oc->Instance == TIM15) { + /* USER CODE BEGIN TIM15_MspDeInit 0 */ + + /* USER CODE END TIM15_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM15_CLK_DISABLE(); + /* USER CODE BEGIN TIM15_MspDeInit 1 */ + + /* USER CODE END TIM15_MspDeInit 1 */ + } } /** -* @brief TIM_IC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_ic: TIM_IC handle pointer -* @retval None -*/ -void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic) -{ - if(htim_ic->Instance==TIM23) - { - /* USER CODE BEGIN TIM23_MspDeInit 0 */ - - /* USER CODE END TIM23_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM23_CLK_DISABLE(); - - /**TIM23 GPIO Configuration - PF0 ------> TIM23_CH1 - PF3 ------> TIM23_CH4 - */ - HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_3); - - /* TIM23 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM23_IRQn); - /* USER CODE BEGIN TIM23_MspDeInit 1 */ - - /* USER CODE END TIM23_MspDeInit 1 */ - } - + * @brief TIM_IC MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param htim_ic: TIM_IC handle pointer + * @retval None + */ +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic) { + if (htim_ic->Instance == TIM23) { + /* USER CODE BEGIN TIM23_MspDeInit 0 */ + + /* USER CODE END TIM23_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM23_CLK_DISABLE(); + + /**TIM23 GPIO Configuration + PF0 ------> TIM23_CH1 + PF3 ------> TIM23_CH4 + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0 | GPIO_PIN_3); + + /* TIM23 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM23_IRQn); + /* USER CODE BEGIN TIM23_MspDeInit 1 */ + + /* USER CODE END TIM23_MspDeInit 1 */ + } } /** -* @brief UART MSP Initialization -* This function configures the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspInit(UART_HandleTypeDef* huart) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspInit 0 */ - - /* USER CODE END USART1_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; - PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16910CLKSOURCE_D2PCLK2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); + * @brief UART MSP Initialization + * This function configures the hardware resources used in this example + * @param huart: UART handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (huart->Instance == USART1) { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16910CLKSOURCE_D2PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } else if (huart->Instance == USART2) { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2; + PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ } - - /* Peripheral clock enable */ - __HAL_RCC_USART1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF7_USART1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN USART1_MspInit 1 */ - - /* USER CODE END USART1_MspInit 1 */ - } - else if(huart->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspInit 0 */ - - /* USER CODE END USART2_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2; - PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_USART2_CLK_ENABLE(); - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN USART2_MspInit 1 */ - - /* USER CODE END USART2_MspInit 1 */ - } - } /** -* @brief UART MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) -{ - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspDeInit 0 */ - - /* USER CODE END USART1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART1_CLK_DISABLE(); - - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); - - /* USER CODE BEGIN USART1_MspDeInit 1 */ - - /* USER CODE END USART1_MspDeInit 1 */ - } - else if(huart->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspDeInit 0 */ - - /* USER CODE END USART2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART2_CLK_DISABLE(); - - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6); - - /* USER CODE BEGIN USART2_MspDeInit 1 */ - - /* USER CODE END USART2_MspDeInit 1 */ - } - + * @brief UART MSP De-Initialization + * This function freeze the hardware resources used in this example + * @param huart: UART handle pointer + * @retval None + */ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) { + if (huart->Instance == USART1) { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9 | GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } else if (huart->Instance == USART2) { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5 | GPIO_PIN_6); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } } /* USER CODE BEGIN 1 */ diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 5cf32fb9..38c577a4 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -1,20 +1,20 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file stm32h7xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file stm32h7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -24,10 +24,10 @@ #include "HALAL/HardFault/HardfaultTrace.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ /* USER CODE END TD */ @@ -56,11 +56,11 @@ /* USER CODE END 0 */ -/* External variables --------------------------------------------------------*/ -extern ETH_HandleTypeDef heth; -extern DMA_HandleTypeDef hdma_adc1; -extern DMA_HandleTypeDef hdma_adc2; -extern DMA_HandleTypeDef hdma_adc3; +/* External variables --------------------------------------------------------*/ +extern ETH_HandleTypeDef heth; +extern DMA_HandleTypeDef hdma_adc1; +extern DMA_HandleTypeDef hdma_adc2; +extern DMA_HandleTypeDef hdma_adc3; extern DMA_HandleTypeDef hdma_i2c2_rx; extern DMA_HandleTypeDef hdma_i2c2_tx; extern I2C_HandleTypeDef hi2c2; @@ -73,11 +73,11 @@ extern LPTIM_HandleTypeDef hlptim2; extern LPTIM_HandleTypeDef hlptim3; extern DMA_HandleTypeDef hdma_spi3_rx; extern DMA_HandleTypeDef hdma_spi3_tx; -extern SPI_HandleTypeDef hspi3; -extern FDCAN_HandleTypeDef hfdcan1; +extern SPI_HandleTypeDef hspi3; +extern FDCAN_HandleTypeDef hfdcan1; /* Externs for calltrace -*/ +*/ extern uint32_t _stext; extern uint32_t _etext; extern uint32_t _sstack; @@ -92,38 +92,39 @@ extern uint32_t _hf_stack_end; /* Cortex Processor Interruption and Exception Handlers */ /******************************************************************************/ /** - * @brief This function handles Non maskable interrupt. - */ - -//calls my_fault_handler with the MSP(main stack pointer) -#define HARDFAULT_HANDLING_ASM() \ -__asm__ __volatile__( \ - /* Detect which stack was in use */ \ - "tst lr, #4 \n" \ - "ite eq \n" \ - "mrseq r0, msp \n" \ - "mrsne r0, psp \n" \ - \ - /* Switch to dedicated HardFault stack */ \ - "ldr r1, =_hf_stack_end \n" \ - "msr msp, r1 \n" \ - "isb \n" \ - \ - /* Call C handler with original frame */ \ - "b my_fault_handler_c \n" \ -) - - - //create the space for the hardfault section in the flash -__attribute__((section(".hardfault_log"))) -volatile uint32_t hard_fault[128]; + * @brief This function handles Non maskable interrupt. + */ + +// calls my_fault_handler with the MSP(main stack pointer) +#define HARDFAULT_HANDLING_ASM() \ + __asm__ __volatile__(/* Detect which stack was in use */ \ + "tst lr, #4 \n" \ + "ite eq \n" \ + "mrseq r0, msp \n" \ + "mrsne r0, psp \n" \ + \ + /* Switch to dedicated HardFault stack */ \ + "ldr r1, =_hf_stack_end \n" \ + "msr msp, r1 \n" \ + "isb \n" \ + \ + /* Call C handler with original frame */ \ + "b my_fault_handler_c \n" \ + ) + +// create the space for the hardfault section in the flash +__attribute__((section(".hardfault_log"))) volatile uint32_t hard_fault[128]; void hardfault_flash_write( - uint32_t addr_hard_fault, const void *data_hard_fault, size_t len_hard_fault, - uint32_t addr_metadata, const void *data_metadata, size_t len_metadata) -{ - __disable_irq(); - HAL_FLASH_Unlock(); + uint32_t addr_hard_fault, + const void* data_hard_fault, + size_t len_hard_fault, + uint32_t addr_metadata, + const void* data_metadata, + size_t len_metadata +) { + __disable_irq(); + HAL_FLASH_Unlock(); // Erase sector FLASH_EraseInitTypeDef erase; @@ -134,33 +135,40 @@ void hardfault_flash_write( erase.NbSectors = 1; erase.VoltageRange = FLASH_VOLTAGE_RANGE_3; - if(HAL_FLASHEx_Erase(&erase, §or_error) != HAL_OK){ + if (HAL_FLASHEx_Erase(&erase, §or_error) != HAL_OK) { __BKPT(0); } - size_t offset, copy_len; uint8_t block[32]; offset = 0; - while(offset < len_hard_fault){ - memset(block, 0xFF, sizeof(block)); + while (offset < len_hard_fault) { + memset(block, 0xFF, sizeof(block)); copy_len = (len_hard_fault - offset) > 32 ? 32 : (len_hard_fault - offset); memcpy(block, (uint8_t*)data_hard_fault + offset, copy_len); - if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, addr_hard_fault + offset, (uint32_t*)block) != HAL_OK){ + if (HAL_FLASH_Program( + FLASH_TYPEPROGRAM_FLASHWORD, + addr_hard_fault + offset, + (uint32_t*)block + ) != HAL_OK) { __BKPT(0); } offset += 32; } offset = 0; - while(offset < len_metadata){ + while (offset < len_metadata) { memset(block, 0xFF, sizeof(block)); copy_len = (len_metadata - offset) > 32 ? 32 : (len_metadata - offset); memcpy(block, (uint8_t*)data_metadata + offset, copy_len); - if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, addr_metadata + offset, (uint32_t*)block) != HAL_OK){ + if (HAL_FLASH_Program( + FLASH_TYPEPROGRAM_FLASHWORD, + addr_metadata + offset, + (uint32_t*)block + ) != HAL_OK) { __BKPT(0); } offset += 32; @@ -172,203 +180,207 @@ void hardfault_flash_write( HAL_FLASH_Lock(); __enable_irq(); } -static uint8_t is_valid_pc(uint32_t pc) -{ - pc &= ~1U; // Thumb - return (pc >= (uint32_t)&_stext && - pc < (uint32_t)&_etext); +static uint8_t is_valid_pc(uint32_t pc) { + pc &= ~1U; // Thumb + return (pc >= (uint32_t)&_stext && pc < (uint32_t)&_etext); } -__attribute__((noreturn, optimize("O0"))) -static void scan_call_stack(sContextStateFrame *frame, HardFaultLog *log_hard_fault) -{ - uint32_t *stack_start = (uint32_t *)&_sstack; - uint32_t *stack_end = (uint32_t *)&_estack; +__attribute__((noreturn, optimize("O0"))) static void +scan_call_stack(sContextStateFrame* frame, HardFaultLog* log_hard_fault) { + uint32_t* stack_start = (uint32_t*)&_sstack; + uint32_t* stack_end = (uint32_t*)&_estack; log_hard_fault->CallTrace.depth = 0; - uint32_t *sp = (uint32_t *)(frame + 1); - while (sp < stack_end && sp >= stack_start) - { + uint32_t* sp = (uint32_t*)(frame + 1); + while (sp < stack_end && sp >= stack_start) { uint32_t val = *sp++; - if (log_hard_fault->CallTrace.depth >= CALL_TRACE_MAX_DEPTH) break; - if ((val & 1U) == 0) continue; - if (!is_valid_pc(val)) continue; + if (log_hard_fault->CallTrace.depth >= CALL_TRACE_MAX_DEPTH) + break; + if ((val & 1U) == 0) + continue; + if (!is_valid_pc(val)) + continue; log_hard_fault->CallTrace.pcs[log_hard_fault->CallTrace.depth++] = val & ~1U; } } -__attribute__((noreturn,optimize("O0"))) -void my_fault_handler_c(sContextStateFrame *frame) { - volatile uint32_t real_fault_pc = frame->return_address & ~1; - volatile HardFaultLog log_hard_fault; - - volatile uint32_t *cfsr = (volatile uint32_t *)0xE000ED28; - //keep the log in the estructure - log_hard_fault.HF_flag = HF_FLAG_VALUE; - log_hard_fault.frame = *frame; - log_hard_fault.frame.return_address = real_fault_pc; - log_hard_fault.CfsrDecode.cfsr = *cfsr; - log_hard_fault.fault_address.Nothing_Valid = 0; - - const uint8_t memory_fault = *cfsr & 0x000000ff; - if(memory_fault){ - const uint8_t MMARVALID = memory_fault & 0b10000000; // We can find the exact place were occured the memory fault - const uint8_t MLSPERR = memory_fault & 0b00100000; // MemManage fault FPU stack - const uint8_t MSTKERR = memory_fault & 0b00010000; // Stack overflow while entring an exception - const uint8_t MUNSTKERR = memory_fault & 0b00001000; // Stack error while exiting from an exception (Corrupted stack) - const uint8_t DACCVIOL = memory_fault & 0b00000010; //Data access violation (acceded to pointer NULL, to a protected memory region, overflow in arrays ...) - const uint8_t IACCVIOL = memory_fault & 0b00000001; //Instruction access violation - if(MMARVALID){ - uint32_t memory_fault_address = *(volatile uint32_t *)0xE000ED34; - log_hard_fault.fault_address.MMAR_VALID = memory_fault_address; +__attribute__((noreturn, optimize("O0"))) void my_fault_handler_c(sContextStateFrame* frame) { + volatile uint32_t real_fault_pc = frame->return_address & ~1; + volatile HardFaultLog log_hard_fault; + + volatile uint32_t* cfsr = (volatile uint32_t*)0xE000ED28; + // keep the log in the estructure + log_hard_fault.HF_flag = HF_FLAG_VALUE; + log_hard_fault.frame = *frame; + log_hard_fault.frame.return_address = real_fault_pc; + log_hard_fault.CfsrDecode.cfsr = *cfsr; + log_hard_fault.fault_address.Nothing_Valid = 0; + + const uint8_t memory_fault = *cfsr & 0x000000ff; + if (memory_fault) { + const uint8_t MMARVALID = + memory_fault & 0b10000000; // We can find the exact place were occured the memory fault + const uint8_t MLSPERR = memory_fault & 0b00100000; // MemManage fault FPU stack + const uint8_t MSTKERR = + memory_fault & 0b00010000; // Stack overflow while entring an exception + const uint8_t MUNSTKERR = + memory_fault & + 0b00001000; // Stack error while exiting from an exception (Corrupted stack) + const uint8_t DACCVIOL = + memory_fault & 0b00000010; // Data access violation (acceded to pointer NULL, to a + // protected memory region, overflow in arrays ...) + const uint8_t IACCVIOL = memory_fault & 0b00000001; // Instruction access violation + if (MMARVALID) { + uint32_t memory_fault_address = *(volatile uint32_t*)0xE000ED34; + log_hard_fault.fault_address.MMAR_VALID = memory_fault_address; + } + } + const uint8_t bus_fault = (*cfsr & 0x0000ff00) >> 8; + if (bus_fault) { + const uint8_t BFARVALID = + bus_fault & + 0b10000000; // BFAR is valid we can know the address which triggered the fault + const uint8_t LSPERR = bus_fault & 0b00100000; // Fault stack FPU + const uint8_t STKERR = bus_fault & 0b00010000; // Fault stack while entring an exception + const uint8_t UNSTKERR = bus_fault & 0b00001000; // Stack error while exiting an exception + const uint8_t IMPRECISERR = + bus_fault & + 0b00000010; // Bus fault, but the instruction that caused the error can be uncertain + const uint8_t PRECISERR = + bus_fault & + 0b00000001; // You can read Bfar to find the eact direction of the instruction + if (BFARVALID) { + volatile uint32_t bus_fault_address = *(volatile uint32_t*)0xE000ED38; + log_hard_fault.fault_address.BFAR_VALID = bus_fault_address; + // Don't trust in case IMPRECISERR == 1; + } } - } - const uint8_t bus_fault = (*cfsr & 0x0000ff00) >> 8; - if(bus_fault){ - const uint8_t BFARVALID = bus_fault & 0b10000000; // BFAR is valid we can know the address which triggered the fault - const uint8_t LSPERR = bus_fault & 0b00100000; //Fault stack FPU - const uint8_t STKERR = bus_fault & 0b00010000; // Fault stack while entring an exception - const uint8_t UNSTKERR = bus_fault & 0b00001000; // Stack error while exiting an exception - const uint8_t IMPRECISERR = bus_fault & 0b00000010; // Bus fault, but the instruction that caused the error can be uncertain - const uint8_t PRECISERR = bus_fault & 0b00000001; //You can read Bfar to find the eact direction of the instruction - if(BFARVALID){ - volatile uint32_t bus_fault_address = *(volatile uint32_t *)0xE000ED38; - log_hard_fault.fault_address.BFAR_VALID = bus_fault_address; - //Don't trust in case IMPRECISERR == 1; + const uint16_t usage_fault = (*cfsr & 0xffff0000) >> 16; + if (usage_fault) { + const uint16_t DIVBYZERO = usage_fault & 0x0200; // Div by ZERO hardfault; + const uint16_t UNALIGNED = usage_fault & 0x0100; // Unaligned access operation occured + const uint16_t NOCP = usage_fault & 0x0008; // Access to FPU when is not present + const uint16_t INVPC = usage_fault & 0x0004; // Invalid program counter load + const uint16_t INVSTATE = usage_fault & 0x0002; // Invalid processor state + const uint16_t UNDEFINSTR = usage_fault & 0x0001; // Undefined instruction. } - } - const uint16_t usage_fault = (*cfsr & 0xffff0000) >> 16; - if(usage_fault){ - const uint16_t DIVBYZERO = usage_fault & 0x0200; // Div by ZERO hardfault; - const uint16_t UNALIGNED = usage_fault & 0x0100; // Unaligned access operation occured - const uint16_t NOCP = usage_fault & 0x0008; //Access to FPU when is not present - const uint16_t INVPC = usage_fault & 0x0004; //Invalid program counter load - const uint16_t INVSTATE = usage_fault & 0x0002; // Invalid processor state - const uint16_t UNDEFINSTR = usage_fault & 0x0001; //Undefined instruction. - } - if(usage_fault | bus_fault){ - scan_call_stack(frame,&log_hard_fault); - } - volatile uint8_t metadata_buffer[0x100]; - memcpy(metadata_buffer,(void*)METADATA_FLASH_ADDR,0x100); - //write log hard fault - hardfault_flash_write(HF_FLASH_ADDR,(uint8_t*)&log_hard_fault,sizeof(log_hard_fault),METADATA_FLASH_ADDR,&metadata_buffer,sizeof(metadata_buffer)); - //reboot the system - volatile uint32_t *aircr = (volatile uint32_t *)0xE000ED0C; - __asm volatile ("dsb"); - *aircr = (0x05FA << 16) | 0x1 << 2; - __asm volatile ("dsb"); - while (1) {} // should be unreachable - } - -__attribute__((naked)) -void HardFault_Handler(void) -{ - HARDFAULT_HANDLING_ASM(); - while (1){} + if (usage_fault | bus_fault) { + scan_call_stack(frame, &log_hard_fault); + } + volatile uint8_t metadata_buffer[0x100]; + memcpy(metadata_buffer, (void*)METADATA_FLASH_ADDR, 0x100); + // write log hard fault + hardfault_flash_write( + HF_FLASH_ADDR, + (uint8_t*)&log_hard_fault, + sizeof(log_hard_fault), + METADATA_FLASH_ADDR, + &metadata_buffer, + sizeof(metadata_buffer) + ); + // reboot the system + volatile uint32_t* aircr = (volatile uint32_t*)0xE000ED0C; + __asm volatile("dsb"); + *aircr = (0x05FA << 16) | 0x1 << 2; + __asm volatile("dsb"); + while (1) { + } // should be unreachable } -void NMI_Handler(void) -{ - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) - { - } - /* USER CODE END NonMaskableInt_IRQn 1 */ +__attribute__((naked)) void HardFault_Handler(void) { + HARDFAULT_HANDLING_ASM(); + while (1) { + } +} + +void NMI_Handler(void) { + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ } /** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) -{ - extern void my_fault_handler_c(sContextStateFrame *frame); - - __asm volatile( - "mrs r0, msp\n" // obtener stack frame - "b my_fault_handler_c\n" - ); - } + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) { + extern void my_fault_handler_c(sContextStateFrame * frame); + + __asm volatile("mrs r0, msp\n" // obtener stack frame + "b my_fault_handler_c\n"); +} /** - * @brief This function handles Pre-fetch fault, memory access fault. - */ -void BusFault_Handler(void) -{ - /* USER CODE BEGIN BusFault_IRQn 0 */ - - /* USER CODE END BusFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_BusFault_IRQn 0 */ - /* USER CODE END W1_BusFault_IRQn 0 */ - } + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) { + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } } /** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) -{ - /* USER CODE BEGIN UsageFault_IRQn 0 */ - - /* USER CODE END UsageFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ - /* USER CODE END W1_UsageFault_IRQn 0 */ - } + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) { + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } } /** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVCall_IRQn 0 */ + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) { + /* USER CODE BEGIN SVCall_IRQn 0 */ - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ - /* USER CODE END SVCall_IRQn 1 */ + /* USER CODE END SVCall_IRQn 1 */ } /** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) -{ - /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) { + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - /* USER CODE END DebugMonitor_IRQn 1 */ + /* USER CODE END DebugMonitor_IRQn 1 */ } /** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) { + /* USER CODE BEGIN PendSV_IRQn 0 */ - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ - /* USER CODE END PendSV_IRQn 1 */ + /* USER CODE END PendSV_IRQn 1 */ } /** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - /* USER CODE BEGIN SysTick_IRQn 0 */ + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) { + /* USER CODE BEGIN SysTick_IRQn 0 */ - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ - /* USER CODE END SysTick_IRQn 1 */ + /* USER CODE END SysTick_IRQn 1 */ } /******************************************************************************/ @@ -378,257 +390,218 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32h7xx.s). */ /******************************************************************************/ -/** +/** * @brief This function handles FDCAN 1 Line 0 interrupt */ -void FDCAN1_IT0_IRQHandler(void) -{ - HAL_FDCAN_IRQHandler(&hfdcan1); -} +void FDCAN1_IT0_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } -/** +/** * @brief This function handles FDCAN 1 Line 1 interrupt */ -void FDCAN1_IT1_IRQHandler(void) -{ - HAL_FDCAN_IRQHandler(&hfdcan1); -} +void FDCAN1_IT1_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } -/** +/** * @brief This function handles FDCAN 3 Line 0 interrupt */ -void FDCAN3_IT0_IRQHandler(void) -{ - HAL_FDCAN_IRQHandler(&hfdcan1); -} +void FDCAN3_IT0_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } -/** +/** * @brief This function handles FDCAN 3 Line 1 interrupt */ -void FDCAN3_IT1_IRQHandler(void) -{ - HAL_FDCAN_IRQHandler(&hfdcan1); -} +void FDCAN3_IT1_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } /** - * @brief This function handles EXTI line0 interrupt. - */ -void EXTI0_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI0_IRQn 0 */ + * @brief This function handles EXTI line0 interrupt. + */ +void EXTI0_IRQHandler(void) { + /* USER CODE BEGIN EXTI0_IRQn 0 */ - /* USER CODE END EXTI0_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); - /* USER CODE BEGIN EXTI0_IRQn 1 */ + /* USER CODE END EXTI0_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); + /* USER CODE BEGIN EXTI0_IRQn 1 */ - /* USER CODE END EXTI0_IRQn 1 */ + /* USER CODE END EXTI0_IRQn 1 */ } /** - * @brief This function handles EXTI line1 interrupt. - */ -void EXTI1_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI1_IRQn 0 */ + * @brief This function handles EXTI line1 interrupt. + */ +void EXTI1_IRQHandler(void) { + /* USER CODE BEGIN EXTI1_IRQn 0 */ - /* USER CODE END EXTI1_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); - /* USER CODE BEGIN EXTI1_IRQn 1 */ + /* USER CODE END EXTI1_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); + /* USER CODE BEGIN EXTI1_IRQn 1 */ - /* USER CODE END EXTI1_IRQn 1 */ + /* USER CODE END EXTI1_IRQn 1 */ } /** - * @brief This function handles DMA1 stream0 global interrupt. - */ -void DMA1_Stream0_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ - - /* USER CODE END DMA1_Stream0_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc1); - /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ - - /* USER CODE END DMA1_Stream0_IRQn 1 */ -} + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc1); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream1 global interrupt. - */ -void DMA1_Stream1_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ - - /* USER CODE END DMA1_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc2); - /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ - - /* USER CODE END DMA1_Stream1_IRQn 1 */ -} + * @brief This function handles DMA1 stream1 global interrupt. + */ +void DMA1_Stream1_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ + + /* USER CODE END DMA1_Stream1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc2); + /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ + + /* USER CODE END DMA1_Stream1_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream2 global interrupt. - */ -void DMA1_Stream2_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ - - /* USER CODE END DMA1_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc3); - /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ - - /* USER CODE END DMA1_Stream2_IRQn 1 */ -} + * @brief This function handles DMA1 stream2 global interrupt. + */ +void DMA1_Stream2_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ + + /* USER CODE END DMA1_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc3); + /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ + + /* USER CODE END DMA1_Stream2_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream3 global interrupt. - */ -void DMA1_Stream3_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ - - /* USER CODE END DMA1_Stream3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_rx); - /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ - - /* USER CODE END DMA1_Stream3_IRQn 1 */ -} + * @brief This function handles DMA1 stream3 global interrupt. + */ +void DMA1_Stream3_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ + + /* USER CODE END DMA1_Stream3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_i2c2_rx); + /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ + + /* USER CODE END DMA1_Stream3_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream4 global interrupt. - */ -void DMA1_Stream4_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ - - /* USER CODE END DMA1_Stream4_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_tx); - /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ - - /* USER CODE END DMA1_Stream4_IRQn 1 */ -} + * @brief This function handles DMA1 stream4 global interrupt. + */ +void DMA1_Stream4_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ + + /* USER CODE END DMA1_Stream4_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_i2c2_tx); + /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ + + /* USER CODE END DMA1_Stream4_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream5 global interrupt. - */ -void DMA1_Stream5_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ - - /* USER CODE END DMA1_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_rx); - /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ - - /* USER CODE END DMA1_Stream5_IRQn 1 */ -} + * @brief This function handles DMA1 stream5 global interrupt. + */ +void DMA1_Stream5_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ + + /* USER CODE END DMA1_Stream5_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_spi3_rx); + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} /** - * @brief This function handles DMA1 stream6 global interrupt. - */ -void DMA1_Stream6_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ - - /* USER CODE END DMA1_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_tx); - /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ - - /* USER CODE END DMA1_Stream6_IRQn 1 */ -} - - /** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE) - */ -void DMA2_Stream0_IRQHandler(void) -{ - HAL_DMA_IRQHandler(&hdma_fmac_preload); -} - -void DMA2_Stream1_IRQHandler(void) -{ - HAL_DMA_IRQHandler(&hdma_fmac_write); -} - -void DMA2_Stream2_IRQHandler(void) -{ - HAL_DMA_IRQHandler(&hdma_fmac_read); -} - -void FMAC_IRQHandler(void) -{ - HAL_FMAC_IRQHandler(&hfmac); + * @brief This function handles DMA1 stream6 global interrupt. + */ +void DMA1_Stream6_IRQHandler(void) { + /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ + + /* USER CODE END DMA1_Stream6_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_spi3_tx); + /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + + /* USER CODE END DMA1_Stream6_IRQn 1 */ } +/** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE) + */ +void DMA2_Stream0_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_preload); } + +void DMA2_Stream1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_write); } + +void DMA2_Stream2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_read); } + +void FMAC_IRQHandler(void) { HAL_FMAC_IRQHandler(&hfmac); } + /** - * @brief This function handles SPI3 global interrupt. - */ -void SPI3_IRQHandler(void) -{ - /* USER CODE BEGIN SPI3_IRQn 0 */ + * @brief This function handles SPI3 global interrupt. + */ +void SPI3_IRQHandler(void) { + /* USER CODE BEGIN SPI3_IRQn 0 */ - /* USER CODE END SPI3_IRQn 0 */ - HAL_SPI_IRQHandler(&hspi3); - /* USER CODE BEGIN SPI3_IRQn 1 */ + /* USER CODE END SPI3_IRQn 0 */ + HAL_SPI_IRQHandler(&hspi3); + /* USER CODE BEGIN SPI3_IRQn 1 */ - /* USER CODE END SPI3_IRQn 1 */ + /* USER CODE END SPI3_IRQn 1 */ } /** - * @brief This function handles Ethernet global interrupt. - */ -void ETH_IRQHandler(void) -{ - /* USER CODE BEGIN ETH_IRQn 0 */ + * @brief This function handles Ethernet global interrupt. + */ +void ETH_IRQHandler(void) { + /* USER CODE BEGIN ETH_IRQn 0 */ - /* USER CODE END ETH_IRQn 0 */ - HAL_ETH_IRQHandler(&heth); - /* USER CODE BEGIN ETH_IRQn 1 */ + /* USER CODE END ETH_IRQn 0 */ + HAL_ETH_IRQHandler(&heth); + /* USER CODE BEGIN ETH_IRQn 1 */ - /* USER CODE END ETH_IRQn 1 */ + /* USER CODE END ETH_IRQn 1 */ } /** - * @brief This function handles LPTIM1 global interrupt. - */ -void LPTIM1_IRQHandler(void) -{ - /* USER CODE BEGIN LPTIM1_IRQn 0 */ + * @brief This function handles LPTIM1 global interrupt. + */ +void LPTIM1_IRQHandler(void) { + /* USER CODE BEGIN LPTIM1_IRQn 0 */ - /* USER CODE END LPTIM1_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim1); - /* USER CODE BEGIN LPTIM1_IRQn 1 */ + /* USER CODE END LPTIM1_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim1); + /* USER CODE BEGIN LPTIM1_IRQn 1 */ - /* USER CODE END LPTIM1_IRQn 1 */ + /* USER CODE END LPTIM1_IRQn 1 */ } /** - * @brief This function handles LPTIM2 global interrupt. - */ -void LPTIM2_IRQHandler(void) -{ - /* USER CODE BEGIN LPTIM2_IRQn 0 */ + * @brief This function handles LPTIM2 global interrupt. + */ +void LPTIM2_IRQHandler(void) { + /* USER CODE BEGIN LPTIM2_IRQn 0 */ - /* USER CODE END LPTIM2_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim2); - /* USER CODE BEGIN LPTIM2_IRQn 1 */ + /* USER CODE END LPTIM2_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim2); + /* USER CODE BEGIN LPTIM2_IRQn 1 */ - /* USER CODE END LPTIM2_IRQn 1 */ + /* USER CODE END LPTIM2_IRQn 1 */ } /** - * @brief This function handles LPTIM3 global interrupt. - */ -void LPTIM3_IRQHandler(void) -{ - /* USER CODE BEGIN LPTIM3_IRQn 0 */ + * @brief This function handles LPTIM3 global interrupt. + */ +void LPTIM3_IRQHandler(void) { + /* USER CODE BEGIN LPTIM3_IRQn 0 */ - /* USER CODE END LPTIM3_IRQn 0 */ - HAL_LPTIM_IRQHandler(&hlptim3); - /* USER CODE BEGIN LPTIM3_IRQn 1 */ + /* USER CODE END LPTIM3_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim3); + /* USER CODE BEGIN LPTIM3_IRQn 1 */ - /* USER CODE END LPTIM3_IRQn 1 */ + /* USER CODE END LPTIM3_IRQn 1 */ } /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ - diff --git a/Core/Src/syscalls.c b/Core/Src/syscalls.c index 34280458..6b35c655 100644 --- a/Core/Src/syscalls.c +++ b/Core/Src/syscalls.c @@ -149,4 +149,4 @@ int _execve(char* name, char** argv, char** env) { return -1; } -int _getentropy(void* buffer, size_t length) { return -ENOSYS; } \ No newline at end of file +int _getentropy(void* buffer, size_t length) { return -ENOSYS; } diff --git a/STM32H723.svd b/STM32H723.svd index 97fcec91..78eb25e2 100644 --- a/STM32H723.svd +++ b/STM32H723.svd @@ -28,9 +28,9 @@ Copyright (c) 2021 STMicroelectronics. true 4 false - - 8 - 32 + + 8 + 32 0x20 0x0 0xFFFFFFFF @@ -4340,8 +4340,8 @@ Note: The software is allowed to write these bits only when ADEN=1, ADSTART=0 an ADC2 - 0x40022100 - + 0x40022100 + ADC12_Common Analog-to-Digital Converter @@ -4626,9 +4626,9 @@ Note: The software is allowed to write these bits only when ADEN=1, ADSTART=0 an - - - + + + ADC3 Analog-to-Digital Converter ADC @@ -8435,10 +8435,10 @@ Note: The software is allowed to write these bits only when ADEN = 1, ADSTART = read-write - + - + ADC3_Common Analog-to-Digital Converter ADC @@ -11592,7 +11592,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. - + DAC DAC @@ -12332,7 +12332,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.Allow D1 domain debug in Standby mode 2 1 - + DBGSLPD2 Allow D2 domain debug in Sleep mode @@ -12362,7 +12362,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.Allow debug in D3 Standby mode 8 1 - + TRACECLKEN Trace port clock enable @@ -12386,7 +12386,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.External trigger output enable 28 1 - + @@ -12403,9 +12403,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.WWDG1 stop in debug 6 1 - + - + APB3FZ2 APB3FZ2 @@ -12420,9 +12420,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.WWDG1 stop in debug 6 1 - + - + APB1LFZ1 APB1LFZ1 @@ -12497,7 +12497,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.WWDG2 stop in debug 11 1 - + DBG_I2C1 I2C1 SMBUS timeout stop in debug @@ -12515,9 +12515,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. I2C3 SMBUS timeout stop in debug 23 1 - + - + APB1LFZ2 APB1LFZ2 @@ -12610,9 +12610,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. I2C3 SMBUS timeout stop in debug 23 1 - + - + APB2FZ1 APB2FZ1 @@ -12651,9 +12651,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. TIM17 stop in debug 18 1 - + - + APB2FZ2 APB2FZ2 @@ -12692,9 +12692,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.TIM17 stop in debug 18 1 - + - + APB4FZ1 APB4FZ1 @@ -12751,7 +12751,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. Independent watchdog for D2 stop in debug 19 1 - + @@ -12810,9 +12810,9 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. LS watchdog for D2 stop in debug 19 1 - + - + @@ -13303,7 +13303,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. - + DELAY_Block_SDMMC1 DELAY_Block_SDMMC1 DLYB @@ -13826,7 +13826,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH2CFGR1 CH2CFGR1 @@ -14000,7 +14000,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH3CFGR1 CH3CFGR1 @@ -14174,7 +14174,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH4CFGR1 CH4CFGR1 @@ -14348,7 +14348,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH5CFGR1 CH5CFGR1 @@ -14522,7 +14522,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH6CFGR1 CH6CFGR1 @@ -14696,7 +14696,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + CH7CFGR1 CH7CFGR1 @@ -14870,7 +14870,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.6 - + DFSDM_FLT0CR1 DFSDM_FLT0CR1 @@ -23406,7 +23406,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register. Delay_Block_OCTOSPI1 0x52006000 - + Delay_Block_OCTOSPI2 0x5200B000 @@ -23461,7 +23461,7 @@ A read from this register resets the RRDY flag in the CORDIC_CSR register.EXTI15_10 EXTI Line[15:10] interrupts 40 - + WKUP WKUP1 to WKUP6 pins @@ -40618,7 +40618,7 @@ When a read access to this register occurs, the read data are the contents of th GPIOH 0x58021C00 - + GPIOJ 0x58022400 @@ -59503,7 +59503,7 @@ When a read access to this register occurs, the read data are the contents of th - + MPU Memory protection unit @@ -61422,12 +61422,12 @@ When a read access to this register occurs, the read data are the contents of th 0x0 0x1000 registers - + OCTOSPI1 OCTOSPI1 global interrupt 92 - + CR @@ -62337,7 +62337,7 @@ When a read access to this register occurs, the read data are the contents of th - OCTOSPI2 + OCTOSPI2 0x5200A000 OCTOSPI2 @@ -73654,7 +73654,7 @@ When a read access to this register occurs, the read data are the contents of th - + OTG2_HS_PWRCLK 0x40080E00 @@ -86289,7 +86289,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. SAI4 SAI4 global interrupt 146 - + SCB @@ -87006,7 +87006,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. - + SDMMC1 SDMMC1 SDMMC @@ -88417,7 +88417,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. SDMMC2 - 0x48022400 + 0x48022400 SDMMC2 SDMMC2 global interrupt @@ -88816,7 +88816,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. 13 - + @@ -95890,7 +95890,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. - + TIM23 0x4000E000 @@ -95908,7 +95908,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. TIM24 global interrupt 162 - + USART1 Universal synchronous asynchronous receiver @@ -96972,7 +96972,7 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. UART9 0x40011800 - + USART10 0x40011C00 @@ -97171,4 +97171,4 @@ Writing this bit to 1 clears the OVR_RIS bit in PSSI_RIS. - \ No newline at end of file + diff --git a/deps/ST-LIB b/deps/ST-LIB index 491ef412..65d36f43 160000 --- a/deps/ST-LIB +++ b/deps/ST-LIB @@ -1 +1 @@ -Subproject commit 491ef412244805c2004805e54b8168ca5517e79d +Subproject commit 65d36f43533e461defac8e84f3e4f7a8ae62a304 diff --git a/hard_faullt_analysis.py b/hard_faullt_analysis.py index 35e6bfc9..233eb2c0 100644 --- a/hard_faullt_analysis.py +++ b/hard_faullt_analysis.py @@ -60,7 +60,7 @@ def decode_cfsr_bus(cfsr, fault_addr): print(f" BFARVALID : Bus fault address valid -> 0x{fault_addr:08X}") if bus_fault & 0b00000100: print(f"\033[91m Bus fault address imprecise\033[0m (DON'T LOOK CALL STACK)") - + if bus_fault & 0b00100000: print(" LSPERR : Floating Point Unit lazy state preservation error") if bus_fault & 0b00010000: @@ -97,8 +97,8 @@ def decode_cfsr(cfsr, fault_addr): error = decode_cfsr_bus(cfsr, fault_addr) + error error = decode_cfsr_usage(cfsr) + error return error - - + + def addr2line(addr): cmd = ["arm-none-eabi-addr2line", "-e", ELF_FILE, "-f", "-C", hex(addr)] try: @@ -106,7 +106,7 @@ def addr2line(addr): return output except Exception as e: return f"addr2line failed: {e}" - + def analyze_call_stack(calltrace_depth, calltrace_pcs, context=2): """ Muestra el call stack, omitiendo frames sin fuente y mostrando snippet de código. @@ -149,7 +149,7 @@ def print_code_context(lines, context=2): print("Invalid addr2line output") return - file_line = line_list[1].strip() + file_line = line_list[1].strip() split = file_line.rfind(':') file_path = file_line[:split] try: @@ -192,38 +192,38 @@ def hard_fault_analysis(memory_string): "cfsr": raw[9], "fault_addr": raw[10], "calltrace_depth": raw[11], - "calltrace_pcs": raw[12:28] + "calltrace_pcs": raw[12:28] } if(hf["HF_Flag"] != 0xFF00FF00): print("There was no hardfault in your Microcontroller, Kudos for you, I hope...") return print("================HARDFAULT DETECTED ===========") print("Registers:") - + for r in ['r0','r1','r2','r3','r12','lr','pc','psr']: print(f" {r.upper():<4}: 0x{hf[r]:08X}") - + print(f" CFSR: 0x{hf['cfsr']:08X}") error = decode_cfsr(hf["cfsr"], hf["fault_addr"]) print("\nSource Location:") pc_loc = addr2line(hf["pc"]) lr_loc = addr2line(hf["lr"]) print(f" Linker Register : 0x{hf['lr']:08X} -> {lr_loc}") - + print(f" Program Counter : 0x{hf['pc']:08X} -> {pc_loc}") print_code_context(pc_loc) - + analyze_call_stack(hf["calltrace_depth"],hf["calltrace_pcs"]) - + print("======================================================") - - + + print("Note: In Release builds (-O2/-O3) the PC may not point exactly to the failing instruction.") print(" During interrupts, bus faults, or stack corruption, the PC can be imprecise.") print("\nIn case of Imprecise error is dificult to find due to is asynchronous fault") print("The error has to be before PC. But not possible to know exactly when.") print("Check this link to know more : https://interrupt.memfault.com/blog/cortex-m-hardfault-debug#fn:8") - + if __name__ == '__main__': out = read_flash() @@ -241,4 +241,3 @@ def hard_fault_analysis(memory_string): memory_string += mem memory_string = memory_string.replace(" ","") hard_fault_analysis(memory_string) - diff --git a/requirements.txt b/requirements.txt index e9218ce9..97547e29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ Jinja2==3.1.5 -GitPython==3.1.43 \ No newline at end of file +GitPython==3.1.43 diff --git a/state_machine.json b/state_machine.json index a5740155..3aabd215 100644 --- a/state_machine.json +++ b/state_machine.json @@ -1,6 +1,6 @@ { "name" : "Example", - + "states" : [ "name_1", { @@ -119,4 +119,4 @@ } ] } -} \ No newline at end of file +} diff --git a/toolchains/stm32.cmake b/toolchains/stm32.cmake index 9893d325..0c1e0047 100644 --- a/toolchains/stm32.cmake +++ b/toolchains/stm32.cmake @@ -29,4 +29,3 @@ set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - diff --git a/tools/binary_metadata_template.cpp b/tools/binary_metadata_template.cpp index d8f838da..7508d467 100644 --- a/tools/binary_metadata_template.cpp +++ b/tools/binary_metadata_template.cpp @@ -1,17 +1,17 @@ /* -* AUTOGENERATED FILE -* DO NOT MODIFY MANUALLY!!! -*/ -extern "C"{ - const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= - "****************" // placeholder for beggining - "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format - " " // alignment - "{{ STLIB_COMMIT }}" // STLIB commit - "{{ ADJ_COMMIT}}" // ADJ commit - "{{ BOARD_COMMIT }}" // Board commit - // the '=' is used for unparsing - {% for var_pair in variables -%} - "{{var_pair.name}}={{var_pair.value}}" - {% endfor %}; -} \ No newline at end of file + * AUTOGENERATED FILE + * DO NOT MODIFY MANUALLY!!! + */ +extern "C" { +const char DESCRIPTION[255] __attribute__((section(".metadata_pool"))) = + "****************" // placeholder for beggining + "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format + " " // alignment + "{{ STLIB_COMMIT }}" // STLIB commit + "{{ ADJ_COMMIT}}" // ADJ commit + "{{ BOARD_COMMIT }}" // Board commit +// the '=' is used for unparsing +{% for var_pair in variables -% +} +"{{var_pair.name}}={{var_pair.value}}" { % endfor % }; +} From 35554bd045529e4cf94cd327b3f702d68a2dbc70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 13:05:20 +0100 Subject: [PATCH 12/15] fix(build): remove duplicate DMA/SPI IRQ handlers --- Core/Src/stm32h7xx_it.c | 112 ---------------------------------------- 1 file changed, 112 deletions(-) diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 38c577a4..3614f141 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -436,120 +436,8 @@ void EXTI1_IRQHandler(void) { /* USER CODE END EXTI1_IRQn 1 */ } -/** - * @brief This function handles DMA1 stream0 global interrupt. - */ -void DMA1_Stream0_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ - - /* USER CODE END DMA1_Stream0_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc1); - /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ - - /* USER CODE END DMA1_Stream0_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream1 global interrupt. - */ -void DMA1_Stream1_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ - - /* USER CODE END DMA1_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc2); - /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ - - /* USER CODE END DMA1_Stream1_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream2 global interrupt. - */ -void DMA1_Stream2_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ - - /* USER CODE END DMA1_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_adc3); - /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ - - /* USER CODE END DMA1_Stream2_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream3 global interrupt. - */ -void DMA1_Stream3_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ - - /* USER CODE END DMA1_Stream3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_rx); - /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ - - /* USER CODE END DMA1_Stream3_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream4 global interrupt. - */ -void DMA1_Stream4_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ - - /* USER CODE END DMA1_Stream4_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_tx); - /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ - - /* USER CODE END DMA1_Stream4_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream5 global interrupt. - */ -void DMA1_Stream5_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ - - /* USER CODE END DMA1_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_rx); - /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ - - /* USER CODE END DMA1_Stream5_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream6 global interrupt. - */ -void DMA1_Stream6_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ - - /* USER CODE END DMA1_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_tx); - /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ - - /* USER CODE END DMA1_Stream6_IRQn 1 */ -} - -/** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE) - */ -void DMA2_Stream0_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_preload); } - -void DMA2_Stream1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_write); } - -void DMA2_Stream2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_read); } - void FMAC_IRQHandler(void) { HAL_FMAC_IRQHandler(&hfmac); } -/** - * @brief This function handles SPI3 global interrupt. - */ -void SPI3_IRQHandler(void) { - /* USER CODE BEGIN SPI3_IRQn 0 */ - - /* USER CODE END SPI3_IRQn 0 */ - HAL_SPI_IRQHandler(&hspi3); - /* USER CODE BEGIN SPI3_IRQn 1 */ - - /* USER CODE END SPI3_IRQn 1 */ -} - /** * @brief This function handles Ethernet global interrupt. */ From 5289891309500f70ef1f7caef26890f1e22df5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 13:10:42 +0100 Subject: [PATCH 13/15] formatted files --- .../Packet_generation/DataTemplate.hpp | 124 +++++++++++----- .../Packet_generation/OrderTemplate.hpp | 135 ++++++++++++------ .../Packet_generation/Packet_generation.py | 8 +- tools/binary_metadata_template.cpp | 32 ++--- 4 files changed, 199 insertions(+), 100 deletions(-) diff --git a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp index 23cc3d9f..e79b6ede 100644 --- a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp @@ -1,56 +1,102 @@ #pragma once #include "ST-LIB.hpp" -/*Data packets for {{board}} +/*Data packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY-*/ -class DataPackets{ +class DataPackets { public: - {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + {% for enum in enums -% + } + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - {% endfor %} - - {% for packet in packets -%} - static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) - { - {{packet.name}}_packet = new HeapPacket(static_cast({{packet.id}}){% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + { % endfor % } + + {% for packet in packets -% } - - {% endfor -%} - -public: - {%for packet in packets -%} - inline static HeapPacket *{{packet.name}}_packet{nullptr}; - {% endfor %} - {% for socket in DatagramSockets -%} - inline static {{socket.type}} *{{socket.name}}{nullptr}; - {% endfor %} - - static void start() - { - {% for packet in packets -%} - if ({{packet.name}}_packet == nullptr) { - ErrorHandler("Packet {{packet.name}} not initialized"); + static void { + { packet.name } + } + _init( + { % for variable in packet.variables % } {{variable.type}} & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } + ) { + { + { packet.name } } - {% endfor %} + _packet = new HeapPacket( + static_cast({{packet.id}}) { % if packet.variables % }, + { % for variable in packet.variables % } & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } { % endif % } + ); + } + + { % endfor - % } - {% for socket in DatagramSockets -%} - {{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); - {% endfor %} - - {%- for group in sending_packets %} - Scheduler::register_task({% if group.period_type == "ms" %}{{ (group.period*1000)|round|int }}{% else %}{{ group.period|round|int }}{% endif %}, +[](){ - {% for packet in group.packets -%} - DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{packet.name}}_packet); - {% endfor -%} - }); - {%- endfor %} +public: + {%for packet in packets -% + } + inline static HeapPacket* { + { packet.name } } + _packet{nullptr}; + { % endfor % } + {% for socket in DatagramSockets -% + } + inline static {{socket.type}}* { + { socket.name } + } + {nullptr}; + { % endfor % } + static void start() { + {% for packet in packets -% + } + if ({ + { packet.name } + } _packet == nullptr) { + ErrorHandler("Packet {{packet.name}} not initialized"); + } + { % endfor % } - + {% for socket in DatagramSockets -% + } + {{socket.name}} = new DatagramSocket( + "{{socket.board_ip}}", + {{socket.port}}, + "{{socket.remote_ip}}", + {{socket.port}} + ); + { % endfor % } + + {%- for group in sending_packets % + } + Scheduler::register_task( + { % if group.period_type == "ms" % } { + { (group.period * 1000) | round | int } + } { % else % } { + { group.period | round | int } + } { % endif % }, + +[]() { + {% for packet in group.packets -% + } + DataPackets::{ + { packet.socket } + } -> send_packet(*DataPackets::{ + { packet.name } + } _packet); + { % endfor - % } + } + ); + { % -endfor % } + } }; diff --git a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp index 46bdd414..fd60512c 100644 --- a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp @@ -1,66 +1,119 @@ #pragma once #include "ST-LIB.hpp" -/*Order packets for {{board}} +/*Order packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- */ - -class OrderPackets{ +class OrderPackets { public: - {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + {% for enum in enums -% + } + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - {% endfor %} + { % endfor % } - {% for packet in packets -%} - inline static bool {{packet.name}}_flag{false}; - {% endfor %} + {% for packet in packets -% + } + inline static bool { + { packet.name } + } + _flag{false}; + { % endfor % } OrderPackets() = default; - {% for packet in packets -%} - inline static HeapOrder *{{packet.name}}_order{nullptr}; - {% endfor %} - - {% for packet in packets -%} - static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) - { - {{packet.name}}_order = new HeapOrder({{packet.id}}, &{{packet.name}}_cb{% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); + {% for packet in packets -% + } + inline static HeapOrder* { + { packet.name } } - {% endfor %} + _order{nullptr}; + { % endfor % } - {% for socket in Sockets -%} - inline static {{socket.type}} *{{socket.name}}{nullptr}; - {% endfor %} - {% for socket in ServerSockets -%} - inline static {{socket.type}} *{{socket.name}}{nullptr}; - {% endfor %} + {% for packet in packets -% + } + static void { + { packet.name } + } + _init( + { % for variable in packet.variables % } {{variable.type}} & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } + ) { + { + { packet.name } + } + _order = new HeapOrder( + {{packet.id}}, + &{ + { packet.name } + } _cb { % if packet.variables % }, + { % for variable in packet.variables % } & + { + { variable.name } + } { % if not loop.last % }, + { % endif % } { % endfor % } { % endif % } + ); + } + { % endfor % } - static void start() - { - {% for packet in packets -%} - if ({{packet.name}}_order == nullptr) { + {% for socket in Sockets -% + } + inline static {{socket.type}}* { + { socket.name } + } + {nullptr}; + { % endfor % } + {% for socket in ServerSockets -% + } + inline static {{socket.type}}* { + { socket.name } + } + {nullptr}; + { % endfor % } + + static void start() { + {% for packet in packets -% + } + if ({ + { packet.name } + } _order == nullptr) { ErrorHandler("Order {{packet.name}} not initialized"); } - {% endfor %} + { % endfor % } - {% for socket in ServerSockets -%} - {{socket.name}} = new ServerSocket("{{socket.board_ip}}",{{socket.port}}); - {%- endfor %} - {% for socket in Sockets -%} - {{socket.name}} = new Socket("{{socket.board_ip}}",{{socket.local_port}},"{{socket.remote_ip}}",{{socket.remote_port}}); - {% endfor %} + {% for socket in ServerSockets -% + } + {{socket.name}} = new ServerSocket("{{socket.board_ip}}", {{socket.port}}); + { % -endfor % } + {% for socket in Sockets -% + } + {{socket.name}} = new Socket( + "{{socket.board_ip}}", + {{socket.local_port}}, + "{{socket.remote_ip}}", + {{socket.remote_port}} + ); + { % endfor % } } private: - {% for packet in packets -%} - static void {{packet.name}}_cb() - { - {{packet.name}}_flag = true; + {% for packet in packets -% + } + static void { + { packet.name } + } + _cb() { + { + { packet.name } + } + _flag = true; } - {% endfor %} -}; \ No newline at end of file + { % endfor % } +}; diff --git a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py index c03c9692..d852d367 100644 --- a/Core/Inc/Code_generation/Packet_generation/Packet_generation.py +++ b/Core/Inc/Code_generation/Packet_generation/Packet_generation.py @@ -71,7 +71,7 @@ def GenerateDataPackets(board:BoardDescription): return Packets,totaldata packets,data = GenerateDataPackets(board) - + def GenerateGroupedSendingPackets(board: BoardDescription): datagram_sockets = [s["name"] for s in board.sockets.DatagramSockets] grouped_lookup = {} @@ -84,17 +84,17 @@ def GenerateGroupedSendingPackets(board: BoardDescription): period = packet["period"] period_type = packet["period_type"] names = packet["name"] - + key = (period, period_type) if key not in grouped_lookup: grouped_lookup[key] = [] - + if isinstance(names, list): for name in names: grouped_lookup[key].append({"socket": socket_name, "name": name}) else: grouped_lookup[key].append({"socket": socket_name, "name": names}) - + grouped_list = [] for (period, period_type), items in grouped_lookup.items(): grouped_list.append({ diff --git a/tools/binary_metadata_template.cpp b/tools/binary_metadata_template.cpp index d8f838da..7508d467 100644 --- a/tools/binary_metadata_template.cpp +++ b/tools/binary_metadata_template.cpp @@ -1,17 +1,17 @@ /* -* AUTOGENERATED FILE -* DO NOT MODIFY MANUALLY!!! -*/ -extern "C"{ - const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= - "****************" // placeholder for beggining - "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format - " " // alignment - "{{ STLIB_COMMIT }}" // STLIB commit - "{{ ADJ_COMMIT}}" // ADJ commit - "{{ BOARD_COMMIT }}" // Board commit - // the '=' is used for unparsing - {% for var_pair in variables -%} - "{{var_pair.name}}={{var_pair.value}}" - {% endfor %}; -} \ No newline at end of file + * AUTOGENERATED FILE + * DO NOT MODIFY MANUALLY!!! + */ +extern "C" { +const char DESCRIPTION[255] __attribute__((section(".metadata_pool"))) = + "****************" // placeholder for beggining + "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format + " " // alignment + "{{ STLIB_COMMIT }}" // STLIB commit + "{{ ADJ_COMMIT}}" // ADJ commit + "{{ BOARD_COMMIT }}" // Board commit +// the '=' is used for unparsing +{% for var_pair in variables -% +} +"{{var_pair.name}}={{var_pair.value}}" { % endfor % }; +} From e4ef34837178b64a4d1e561536d32d39d9ac6972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 13:13:56 +0100 Subject: [PATCH 14/15] fix(codegen): restore valid Jinja templates --- .../Packet_generation/DataTemplate.hpp | 124 +++++----------- .../Packet_generation/OrderTemplate.hpp | 135 ++++++------------ tools/binary_metadata_template.cpp | 32 ++--- 3 files changed, 96 insertions(+), 195 deletions(-) diff --git a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp index e79b6ede..23cc3d9f 100644 --- a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp @@ -1,102 +1,56 @@ #pragma once #include "ST-LIB.hpp" -/*Data packets for {{board}} +/*Data packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY-*/ -class DataPackets { +class DataPackets{ public: - {% for enum in enums -% - } - enum class {{enum.name}} : uint8_t + {% for enum in enums -%} + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - { % endfor % } - - {% for packet in packets -% - } - static void { - { packet.name } - } - _init( - { % for variable in packet.variables % } {{variable.type}} & - { - { variable.name } - } { % if not loop.last % }, - { % endif % } { % endfor % } - ) { - { - { packet.name } - } - _packet = new HeapPacket( - static_cast({{packet.id}}) { % if packet.variables % }, - { % for variable in packet.variables % } & - { - { variable.name } - } { % if not loop.last % }, - { % endif % } { % endfor % } { % endif % } - ); + {% endfor %} + + {% for packet in packets -%} + static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) + { + {{packet.name}}_packet = new HeapPacket(static_cast({{packet.id}}){% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); } - - { % endfor - % } - + + {% endfor -%} + public: - {%for packet in packets -% - } - inline static HeapPacket* { - { packet.name } - } - _packet{nullptr}; - { % endfor % } - {% for socket in DatagramSockets -% - } - inline static {{socket.type}}* { - { socket.name } - } - {nullptr}; - { % endfor % } - - static void start() { - {% for packet in packets -% - } - if ({ - { packet.name } - } _packet == nullptr) { + {%for packet in packets -%} + inline static HeapPacket *{{packet.name}}_packet{nullptr}; + {% endfor %} + {% for socket in DatagramSockets -%} + inline static {{socket.type}} *{{socket.name}}{nullptr}; + {% endfor %} + + static void start() + { + {% for packet in packets -%} + if ({{packet.name}}_packet == nullptr) { ErrorHandler("Packet {{packet.name}} not initialized"); } - { % endfor % } + {% endfor %} - {% for socket in DatagramSockets -% - } - {{socket.name}} = new DatagramSocket( - "{{socket.board_ip}}", - {{socket.port}}, - "{{socket.remote_ip}}", - {{socket.port}} - ); - { % endfor % } - - {%- for group in sending_packets % - } - Scheduler::register_task( - { % if group.period_type == "ms" % } { - { (group.period * 1000) | round | int } - } { % else % } { - { group.period | round | int } - } { % endif % }, - +[]() { - {% for packet in group.packets -% - } - DataPackets::{ - { packet.socket } - } -> send_packet(*DataPackets::{ - { packet.name } - } _packet); - { % endfor - % } - } - ); - { % -endfor % } + {% for socket in DatagramSockets -%} + {{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); + {% endfor %} + + {%- for group in sending_packets %} + Scheduler::register_task({% if group.period_type == "ms" %}{{ (group.period*1000)|round|int }}{% else %}{{ group.period|round|int }}{% endif %}, +[](){ + {% for packet in group.packets -%} + DataPackets::{{packet.socket}}->send_packet(*DataPackets::{{packet.name}}_packet); + {% endfor -%} + }); + {%- endfor %} } + + + }; diff --git a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp index fd60512c..46bdd414 100644 --- a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp @@ -1,119 +1,66 @@ #pragma once #include "ST-LIB.hpp" -/*Order packets for {{board}} +/*Order packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- */ -class OrderPackets { + +class OrderPackets{ public: - {% for enum in enums -% - } - enum class {{enum.name}} : uint8_t + {% for enum in enums -%} + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; - { % endfor % } + {% endfor %} - {% for packet in packets -% - } - inline static bool { - { packet.name } - } - _flag{false}; - { % endfor % } + {% for packet in packets -%} + inline static bool {{packet.name}}_flag{false}; + {% endfor %} OrderPackets() = default; - {% for packet in packets -% - } - inline static HeapOrder* { - { packet.name } + {% for packet in packets -%} + inline static HeapOrder *{{packet.name}}_order{nullptr}; + {% endfor %} + + {% for packet in packets -%} + static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) + { + {{packet.name}}_order = new HeapOrder({{packet.id}}, &{{packet.name}}_cb{% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); } - _order{nullptr}; - { % endfor % } + {% endfor %} - {% for packet in packets -% - } - static void { - { packet.name } - } - _init( - { % for variable in packet.variables % } {{variable.type}} & - { - { variable.name } - } { % if not loop.last % }, - { % endif % } { % endfor % } - ) { - { - { packet.name } - } - _order = new HeapOrder( - {{packet.id}}, - &{ - { packet.name } - } _cb { % if packet.variables % }, - { % for variable in packet.variables % } & - { - { variable.name } - } { % if not loop.last % }, - { % endif % } { % endfor % } { % endif % } - ); - } - { % endfor % } + {% for socket in Sockets -%} + inline static {{socket.type}} *{{socket.name}}{nullptr}; + {% endfor %} + {% for socket in ServerSockets -%} + inline static {{socket.type}} *{{socket.name}}{nullptr}; + {% endfor %} - {% for socket in Sockets -% - } - inline static {{socket.type}}* { - { socket.name } - } - {nullptr}; - { % endfor % } - {% for socket in ServerSockets -% - } - inline static {{socket.type}}* { - { socket.name } - } - {nullptr}; - { % endfor % } - - static void start() { - {% for packet in packets -% - } - if ({ - { packet.name } - } _order == nullptr) { + static void start() + { + {% for packet in packets -%} + if ({{packet.name}}_order == nullptr) { ErrorHandler("Order {{packet.name}} not initialized"); } - { % endfor % } + {% endfor %} - {% for socket in ServerSockets -% - } - {{socket.name}} = new ServerSocket("{{socket.board_ip}}", {{socket.port}}); - { % -endfor % } - {% for socket in Sockets -% - } - {{socket.name}} = new Socket( - "{{socket.board_ip}}", - {{socket.local_port}}, - "{{socket.remote_ip}}", - {{socket.remote_port}} - ); - { % endfor % } + {% for socket in ServerSockets -%} + {{socket.name}} = new ServerSocket("{{socket.board_ip}}",{{socket.port}}); + {%- endfor %} + {% for socket in Sockets -%} + {{socket.name}} = new Socket("{{socket.board_ip}}",{{socket.local_port}},"{{socket.remote_ip}}",{{socket.remote_port}}); + {% endfor %} } private: - {% for packet in packets -% - } - static void { - { packet.name } - } - _cb() { - { - { packet.name } - } - _flag = true; + {% for packet in packets -%} + static void {{packet.name}}_cb() + { + {{packet.name}}_flag = true; } - { % endfor % } -}; + {% endfor %} +}; \ No newline at end of file diff --git a/tools/binary_metadata_template.cpp b/tools/binary_metadata_template.cpp index 7508d467..d8f838da 100644 --- a/tools/binary_metadata_template.cpp +++ b/tools/binary_metadata_template.cpp @@ -1,17 +1,17 @@ /* - * AUTOGENERATED FILE - * DO NOT MODIFY MANUALLY!!! - */ -extern "C" { -const char DESCRIPTION[255] __attribute__((section(".metadata_pool"))) = - "****************" // placeholder for beggining - "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format - " " // alignment - "{{ STLIB_COMMIT }}" // STLIB commit - "{{ ADJ_COMMIT}}" // ADJ commit - "{{ BOARD_COMMIT }}" // Board commit -// the '=' is used for unparsing -{% for var_pair in variables -% -} -"{{var_pair.name}}={{var_pair.value}}" { % endfor % }; -} +* AUTOGENERATED FILE +* DO NOT MODIFY MANUALLY!!! +*/ +extern "C"{ + const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= + "****************" // placeholder for beggining + "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format + " " // alignment + "{{ STLIB_COMMIT }}" // STLIB commit + "{{ ADJ_COMMIT}}" // ADJ commit + "{{ BOARD_COMMIT }}" // Board commit + // the '=' is used for unparsing + {% for var_pair in variables -%} + "{{var_pair.name}}={{var_pair.value}}" + {% endfor %}; +} \ No newline at end of file From 05be5fbb30e14c49f4fdedf33d5bda50503041c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20S=C3=A1ez?= Date: Sat, 14 Feb 2026 13:15:28 +0100 Subject: [PATCH 15/15] chore(pre-commit): exclude Jinja templates from clang-format --- .pre-commit-config.yaml | 1 + .../Packet_generation/DataTemplate.hpp | 18 +++++++++--------- .../Packet_generation/OrderTemplate.hpp | 8 ++++---- tools/binary_metadata_template.cpp | 8 ++++---- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6aea970b..2b383cc9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,6 +14,7 @@ repos: hooks: - id: clang-format files: ^(Core/|tools/).* + exclude: ^(Core/Inc/Code_generation/Packet_generation/(DataTemplate\.hpp|OrderTemplate\.hpp)|tools/binary_metadata_template\.cpp)$ types_or: - c - c++ diff --git a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp index 23cc3d9f..02030066 100644 --- a/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/DataTemplate.hpp @@ -1,27 +1,27 @@ #pragma once #include "ST-LIB.hpp" -/*Data packets for {{board}} +/*Data packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY-*/ class DataPackets{ public: {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, {%- endfor %} }; {% endfor %} - + {% for packet in packets -%} static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) { {{packet.name}}_packet = new HeapPacket(static_cast({{packet.id}}){% if packet.variables %}, {% for variable in packet.variables %}&{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}); } - + {% endfor -%} - + public: {%for packet in packets -%} inline static HeapPacket *{{packet.name}}_packet{nullptr}; @@ -29,9 +29,9 @@ class DataPackets{ {% for socket in DatagramSockets -%} inline static {{socket.type}} *{{socket.name}}{nullptr}; {% endfor %} - + static void start() - { + { {% for packet in packets -%} if ({{packet.name}}_packet == nullptr) { ErrorHandler("Packet {{packet.name}} not initialized"); @@ -41,7 +41,7 @@ class DataPackets{ {% for socket in DatagramSockets -%} {{socket.name}} = new DatagramSocket("{{socket.board_ip}}",{{socket.port}},"{{socket.remote_ip}}",{{socket.port}}); {% endfor %} - + {%- for group in sending_packets %} Scheduler::register_task({% if group.period_type == "ms" %}{{ (group.period*1000)|round|int }}{% else %}{{ group.period|round|int }}{% endif %}, +[](){ {% for packet in group.packets -%} @@ -52,5 +52,5 @@ class DataPackets{ } - + }; diff --git a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp index 46bdd414..2ac2ced3 100644 --- a/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp +++ b/Core/Inc/Code_generation/Packet_generation/OrderTemplate.hpp @@ -1,14 +1,14 @@ #pragma once #include "ST-LIB.hpp" -/*Order packets for {{board}} +/*Order packets for {{board}} -AUTOGENERATED CODE, DO NOT MODIFY- */ class OrderPackets{ public: {% for enum in enums -%} - enum class {{enum.name}} : uint8_t + enum class {{enum.name}} : uint8_t { {%- for value in enum["values"] %} {{value}} = {{loop.index0}}, @@ -25,7 +25,7 @@ class OrderPackets{ {% for packet in packets -%} inline static HeapOrder *{{packet.name}}_order{nullptr}; {% endfor %} - + {% for packet in packets -%} static void {{packet.name}}_init({% for variable in packet.variables %}{{variable.type}} &{{variable.name}}{% if not loop.last %}, {% endif %}{% endfor %}) { @@ -63,4 +63,4 @@ class OrderPackets{ {{packet.name}}_flag = true; } {% endfor %} -}; \ No newline at end of file +}; diff --git a/tools/binary_metadata_template.cpp b/tools/binary_metadata_template.cpp index d8f838da..d038c950 100644 --- a/tools/binary_metadata_template.cpp +++ b/tools/binary_metadata_template.cpp @@ -1,9 +1,9 @@ /* -* AUTOGENERATED FILE +* AUTOGENERATED FILE * DO NOT MODIFY MANUALLY!!! */ extern "C"{ - const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= + const char DESCRIPTION[255] __attribute__((section(".metadata_pool")))= "****************" // placeholder for beggining "{{ DateTimeISO8601 }}" // DateTime using ISO-8601 format " " // alignment @@ -12,6 +12,6 @@ extern "C"{ "{{ BOARD_COMMIT }}" // Board commit // the '=' is used for unparsing {% for var_pair in variables -%} - "{{var_pair.name}}={{var_pair.value}}" + "{{var_pair.name}}={{var_pair.value}}" {% endfor %}; -} \ No newline at end of file +}