From fb2ca87ca2e5a42885e5cb667dca61e2c43adca5 Mon Sep 17 00:00:00 2001 From: Kaiser <706598421@qq.com> Date: Mon, 29 Sep 2025 10:42:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E8=BF=9C=E7=AB=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .clang-format | 31 + .clangd | 11 + Inc/FreeRTOSConfig.h | 170 + Inc/main.h | 84 + Inc/stm32h7xx_hal_conf.h | 514 +++ Inc/stm32h7xx_it.h | 69 + Inc/usb_device.h | 102 + Inc/usbd_cdc_if.h | 132 + Inc/usbd_conf.h | 173 + Inc/usbd_desc.h | 143 + MDK-ARM/RTE/_WTZS32-2/RTE_Components.h | 14 + MDK-ARM/RTE/_WTZS32V2/RTE_Components.h | 20 + MDK-ARM/WTZS32-2.uvprojx | 2895 +++++++++++++ MDK-ARM/WTZS32-2/WTZS32-2.axf | Bin 0 -> 2210972 bytes MDK-ARM/WTZS32-2/WTZS32-2.hex | 3729 +++++++++++++++++ MDK-ARM/WTZS32-2/WTZS32-2.map | 5270 ++++++++++++++++++++++++ MDK-ARM/startup_stm32h750xx.s | 611 +++ Src/Communicaion.c | 493 +++ Src/FlashRW.c | 53 + Src/freertos.c | 59 + Src/main.c | 1942 +++++++++ Src/stm32h7xx_hal_msp.c | 454 ++ Src/stm32h7xx_hal_timebase_tim.c | 130 + Src/stm32h7xx_it.c | 261 ++ Src/syscalls.c | 244 ++ Src/sysmem.c | 87 + Src/system_stm32h7xx.c | 450 ++ Src/usb_device.c | 101 + Src/usbd_cdc_if.c | 328 ++ Src/usbd_conf.c | 693 ++++ Src/usbd_desc.c | 418 ++ WTZS32-2.ioc | 549 +++ cmake/gcc-arm-none-eabi.cmake | 43 + cmake/starm-clang.cmake | 65 + cmake/stm32cubemx/CMakeLists.txt | 140 + startup_stm32h750xx.s | 755 ++++ 36 files changed, 21233 insertions(+) create mode 100644 .clang-format create mode 100644 .clangd create mode 100644 Inc/FreeRTOSConfig.h create mode 100644 Inc/main.h create mode 100644 Inc/stm32h7xx_hal_conf.h create mode 100644 Inc/stm32h7xx_it.h create mode 100644 Inc/usb_device.h create mode 100644 Inc/usbd_cdc_if.h create mode 100644 Inc/usbd_conf.h create mode 100644 Inc/usbd_desc.h create mode 100644 MDK-ARM/RTE/_WTZS32-2/RTE_Components.h create mode 100644 MDK-ARM/RTE/_WTZS32V2/RTE_Components.h create mode 100644 MDK-ARM/WTZS32-2.uvprojx create mode 100644 MDK-ARM/WTZS32-2/WTZS32-2.axf create mode 100644 MDK-ARM/WTZS32-2/WTZS32-2.hex create mode 100644 MDK-ARM/WTZS32-2/WTZS32-2.map create mode 100644 MDK-ARM/startup_stm32h750xx.s create mode 100644 Src/Communicaion.c create mode 100644 Src/FlashRW.c create mode 100644 Src/freertos.c create mode 100644 Src/main.c create mode 100644 Src/stm32h7xx_hal_msp.c create mode 100644 Src/stm32h7xx_hal_timebase_tim.c create mode 100644 Src/stm32h7xx_it.c create mode 100644 Src/syscalls.c create mode 100644 Src/sysmem.c create mode 100644 Src/system_stm32h7xx.c create mode 100644 Src/usb_device.c create mode 100644 Src/usbd_cdc_if.c create mode 100644 Src/usbd_conf.c create mode 100644 Src/usbd_desc.c create mode 100644 WTZS32-2.ioc create mode 100644 cmake/gcc-arm-none-eabi.cmake create mode 100644 cmake/starm-clang.cmake create mode 100644 cmake/stm32cubemx/CMakeLists.txt create mode 100644 startup_stm32h750xx.s diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..1048220 --- /dev/null +++ b/.clang-format @@ -0,0 +1,31 @@ +BasedOnStyle: LLVM + +# 强制花括号遵循 Allman 风格 +BreakBeforeBraces: Allman + +# 对齐连续的宏定义 +AlignConsecutiveMacros: AcrossEmptyLinesAndComments + +# 控制行宽,避免行太长 +ColumnLimit: 120 + +# 控制空格和标点符号风格 +SpaceBeforeParens: ControlStatements # 控制语句的括号前有空格 +SpaceBeforeAssignmentOperators: true # 赋值操作符前插入空格 + +# 缩进设置 +IndentWidth: 4 # 使用4个空格缩进 + +# 控制每行最大空行数(避免空行过多) +MaxEmptyLinesToKeep: 1 + +# 启用注释对齐,注释前保留一个空格 +AlignTrailingComments: true +SpacesBeforeTrailingComments: 1 + +# 对齐转义的换行符到左侧 +AlignEscapedNewlinesLeft: true + +# 允许将参数换行,但保持多个参数在同一行(打包参数) +AllowAllParametersOfDeclarationOnNextLine: true +BinPackParameters: true # 启用参数打包,减少换行次数 \ No newline at end of file diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..50c62c4 --- /dev/null +++ b/.clangd @@ -0,0 +1,11 @@ +CompileFlags: + Add: + - '-ferror-limit=0' + - '-Wno-implicit-int' + CompilationDatabase: build/Debug +Diagnostics: + Suppress: + - unused-includes + - unknown_typename + - unknown_typename_suggest + - typename_requires_specqual diff --git a/Inc/FreeRTOSConfig.h b/Inc/FreeRTOSConfig.h new file mode 100644 index 0000000..684cf03 --- /dev/null +++ b/Inc/FreeRTOSConfig.h @@ -0,0 +1,170 @@ +/* USER CODE BEGIN Header */ +/* + * FreeRTOS Kernel V10.3.1 + * Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Portion Copyright (C) 2019 StMicroelectronics, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ +/* USER CODE END Header */ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * These parameters and more are described within the 'configuration' section of the + * FreeRTOS API documentation available on the FreeRTOS.org web site. + * + * See http://www.freertos.org/a00110.html + *----------------------------------------------------------*/ + +/* USER CODE BEGIN Includes */ +/* Section where include file can be added */ +/* USER CODE END Includes */ + +/* Ensure definitions are only used by the compiler, and not by the assembler. */ +#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) + #include + extern uint32_t SystemCoreClock; +#endif +#ifndef CMSIS_device_header +#define CMSIS_device_header "stm32h7xx.h" +#endif /* CMSIS_device_header */ + +#define configENABLE_FPU 0 +#define configENABLE_MPU 0 + +#define configUSE_PREEMPTION 1 +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 1 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( SystemCoreClock ) +#define configTICK_RATE_HZ ((TickType_t)1000) +#define configMAX_PRIORITIES ( 56 ) +#define configMINIMAL_STACK_SIZE ((uint16_t)256) +#define configTOTAL_HEAP_SIZE ((size_t)20480) +#define configMAX_TASK_NAME_LEN ( 16 ) +#define configUSE_TRACE_FACILITY 1 +#define configUSE_16_BIT_TICKS 0 +#define configUSE_MUTEXES 1 +#define configQUEUE_REGISTRY_SIZE 8 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 +/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */ +/* Defaults to size_t for backward compatibility, but can be changed + if lengths will always be less than the number of bytes in a size_t. */ +#define configMESSAGE_BUFFER_LENGTH_TYPE size_t +/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */ + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Software timer definitions. */ +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY ( 2 ) +#define configTIMER_QUEUE_LENGTH 10 +#define configTIMER_TASK_STACK_DEPTH 256 + +/* CMSIS-RTOS V2 flags */ +#define configUSE_OS2_THREAD_SUSPEND_RESUME 1 +#define configUSE_OS2_THREAD_ENUMERATE 1 +#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1 +#define configUSE_OS2_THREAD_FLAGS 1 +#define configUSE_OS2_TIMER 1 +#define configUSE_OS2_MUTEX 1 + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 1 +#define INCLUDE_xTimerPendFunctionCall 1 +#define INCLUDE_xQueueGetMutexHolder 1 +#define INCLUDE_uxTaskGetStackHighWaterMark 1 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 +#define INCLUDE_eTaskGetState 1 + +/* + * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used + * by the application thus the correct define need to be enabled below + */ +#define USE_FreeRTOS_HEAP_4 + +/* Cortex-M specific definitions. */ +#ifdef __NVIC_PRIO_BITS + /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ + #define configPRIO_BITS __NVIC_PRIO_BITS +#else + #define configPRIO_BITS 4 +#endif + +/* The lowest interrupt priority that can be used in a call to a "set priority" +function. */ +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 + +/* The highest interrupt priority that can be used by any interrupt service +routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL +INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER +PRIORITY THAN THIS! (higher priorities are lower numeric values. */ +#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 + +/* Interrupt priorities used by the kernel port layer itself. These are generic +to all Cortex-M ports, and do not rely on any particular library functions. */ +#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! +See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ +#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) + +/* Normal assert() semantics without relying on the provision of an assert.h +header file. */ +/* USER CODE BEGIN 1 */ +#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );} +/* USER CODE END 1 */ + +/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS +standard names. */ +#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler + +/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */ + +#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0 + +/* USER CODE BEGIN Defines */ +/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ +/* USER CODE END Defines */ + +#endif /* FREERTOS_CONFIG_H */ diff --git a/Inc/main.h b/Inc/main.h new file mode 100644 index 0000000..d643f55 --- /dev/null +++ b/Inc/main.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32h7xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ +struct uCommunication +{ + uint16_t Deep; + uint8_t Gain; + uint8_t ChannelNum; + uint8_t MeasurementPrecision; + float MeasurementResult; + _Bool MeasurementFlag; + _Bool SingelStrengthMeasurementFlag; + float BatteryVoltage; + float BatteryCurrent; +}; +extern struct uCommunication CommunicationData; +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Inc/stm32h7xx_hal_conf.h b/Inc/stm32h7xx_hal_conf.h new file mode 100644 index 0000000..aa97ca0 --- /dev/null +++ b/Inc/stm32h7xx_hal_conf.h @@ -0,0 +1,514 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 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 */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32H7xx_HAL_CONF_H +#define STM32H7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + + #define HAL_ADC_MODULE_ENABLED +/* #define HAL_FDCAN_MODULE_ENABLED */ +/* #define HAL_FMAC_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +/* #define HAL_CORDIC_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_ETH_LEGACY_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_OTFDEC_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_HRTIM_MODULE_ENABLED */ +/* #define HAL_HSEM_MODULE_ENABLED */ +/* #define HAL_GFXMMU_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_OPAMP_MODULE_ENABLED */ +/* #define HAL_OSPI_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_RAMECC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +/* #define HAL_SWPMI_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_PCD_MODULE_ENABLED +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_PSSI_MODULE_ENABLED */ +/* #define HAL_DTS_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_MDMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_HSEM_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE (25000000UL) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal oscillator (CSI) default value. + * This value is the default CSI value after Reset. + */ +#if !defined (CSI_VALUE) + #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +#if !defined (LSI_VALUE) + #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY (15UL) /*!< tick interrupt priority */ +#define USE_RTOS 0 +#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ +#define USE_SPI_CRC 0U /*!< use CRC in SPI */ + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ +#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ +#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ +#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ +#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ +#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################### Ethernet Configuration ######################### */ +#define ETH_TX_DESC_CNT 4U /* number of Ethernet Tx DMA descriptors */ +#define ETH_RX_DESC_CNT 4U /* number of Ethernet Rx DMA descriptors */ + +#define ETH_MAC_ADDR0 (0x02UL) +#define ETH_MAC_ADDR1 (0x00UL) +#define ETH_MAC_ADDR2 (0x00UL) +#define ETH_MAC_ADDR3 (0x00UL) +#define ETH_MAC_ADDR4 (0x00UL) +#define ETH_MAC_ADDR5 (0x00UL) + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32h7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32h7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32h7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_MDMA_MODULE_ENABLED + #include "stm32h7xx_hal_mdma.h" +#endif /* HAL_MDMA_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32h7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32h7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32h7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32h7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32h7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DTS_MODULE_ENABLED + #include "stm32h7xx_hal_dts.h" +#endif /* HAL_DTS_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32h7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_ETH_LEGACY_MODULE_ENABLED + #include "stm32h7xx_hal_eth_legacy.h" +#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32h7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32h7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32h7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED + #include "stm32h7xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32h7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32h7xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CORDIC_MODULE_ENABLED + #include "stm32h7xx_hal_cordic.h" +#endif /* HAL_CORDIC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32h7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32h7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32h7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32h7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_GFXMMU_MODULE_ENABLED + #include "stm32h7xx_hal_gfxmmu.h" +#endif /* HAL_GFXMMU_MODULE_ENABLED */ + +#ifdef HAL_FMAC_MODULE_ENABLED + #include "stm32h7xx_hal_fmac.h" +#endif /* HAL_FMAC_MODULE_ENABLED */ + +#ifdef HAL_HRTIM_MODULE_ENABLED + #include "stm32h7xx_hal_hrtim.h" +#endif /* HAL_HRTIM_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED + #include "stm32h7xx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32h7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32h7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32h7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32h7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32h7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32h7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32h7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32h7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32h7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32h7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED +#include "stm32h7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED +#include "stm32h7xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_OSPI_MODULE_ENABLED + #include "stm32h7xx_hal_ospi.h" +#endif /* HAL_OSPI_MODULE_ENABLED */ + +#ifdef HAL_OTFDEC_MODULE_ENABLED +#include "stm32h7xx_hal_otfdec.h" +#endif /* HAL_OTFDEC_MODULE_ENABLED */ + +#ifdef HAL_PSSI_MODULE_ENABLED + #include "stm32h7xx_hal_pssi.h" +#endif /* HAL_PSSI_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32h7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32h7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RAMECC_MODULE_ENABLED + #include "stm32h7xx_hal_ramecc.h" +#endif /* HAL_RAMECC_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32h7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32h7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32h7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32h7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32h7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32h7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32h7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SWPMI_MODULE_ENABLED + #include "stm32h7xx_hal_swpmi.h" +#endif /* HAL_SWPMI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32h7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32h7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32h7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32h7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32h7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32h7xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32h7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32h7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32h7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t *file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32H7xx_HAL_CONF_H */ diff --git a/Inc/stm32h7xx_it.h b/Inc/stm32h7xx_it.h new file mode 100644 index 0000000..af6e755 --- /dev/null +++ b/Inc/stm32h7xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32H7xx_IT_H +#define __STM32H7xx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void DebugMon_Handler(void); +void DMA1_Stream5_IRQHandler(void); +void USART1_IRQHandler(void); +void TIM7_IRQHandler(void); +void OTG_FS_IRQHandler(void); +void DMAMUX2_OVR_IRQHandler(void); +void BDMA_Channel0_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32H7xx_IT_H */ diff --git a/Inc/usb_device.h b/Inc/usb_device.h new file mode 100644 index 0000000..7bba362 --- /dev/null +++ b/Inc/usb_device.h @@ -0,0 +1,102 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usb_device.h + * @version : v1.0_Cube + * @brief : Header for usb_device.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_DEVICE__H__ +#define __USB_DEVICE__H__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32h7xx.h" +#include "stm32h7xx_hal.h" +#include "usbd_def.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup USBD_OTG_DRIVER + * @{ + */ + +/** @defgroup USBD_DEVICE USBD_DEVICE + * @brief Device file for Usb otg low level driver. + * @{ + */ + +/** @defgroup USBD_DEVICE_Exported_Variables USBD_DEVICE_Exported_Variables + * @brief Public variables. + * @{ + */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* + * -- Insert your variables declaration here -- + */ +/* USER CODE BEGIN VARIABLES */ + +/* USER CODE END VARIABLES */ +/** + * @} + */ + +/** @defgroup USBD_DEVICE_Exported_FunctionsPrototype USBD_DEVICE_Exported_FunctionsPrototype + * @brief Declaration of public functions for Usb device. + * @{ + */ + +/** USB Device initialization function. */ +void MX_USB_DEVICE_Init(void); + +/* + * -- Insert functions declaration here -- + */ +/* USER CODE BEGIN FD */ + +/* USER CODE END FD */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_DEVICE__H__ */ diff --git a/Inc/usbd_cdc_if.h b/Inc/usbd_cdc_if.h new file mode 100644 index 0000000..f74a220 --- /dev/null +++ b/Inc/usbd_cdc_if.h @@ -0,0 +1,132 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_cdc_if.h + * @version : v1.0_Cube + * @brief : Header for usbd_cdc_if.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __USBD_CDC_IF_H__ +#define __USBD_CDC_IF_H__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_cdc.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @brief For Usb device. + * @{ + */ + +/** @defgroup USBD_CDC_IF USBD_CDC_IF + * @brief Usb VCP device module + * @{ + */ + +/** @defgroup USBD_CDC_IF_Exported_Defines USBD_CDC_IF_Exported_Defines + * @brief Defines. + * @{ + */ +/* Define size for the receive and transmit buffer over CDC */ +#define APP_RX_DATA_SIZE 2048 +#define APP_TX_DATA_SIZE 2048 +/* USER CODE BEGIN EXPORTED_DEFINES */ + +/* USER CODE END EXPORTED_DEFINES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_Types USBD_CDC_IF_Exported_Types + * @brief Types. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_TYPES */ + +/* USER CODE END EXPORTED_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_Macros USBD_CDC_IF_Exported_Macros + * @brief Aliases. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_MACRO */ + +/* USER CODE END EXPORTED_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** CDC Interface callback. */ +extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS; + +/* USER CODE BEGIN EXPORTED_VARIABLES */ + +/* USER CODE END EXPORTED_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_FunctionsPrototype USBD_CDC_IF_Exported_FunctionsPrototype + * @brief Public functions declaration. + * @{ + */ + +uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len); + +/* USER CODE BEGIN EXPORTED_FUNCTIONS */ + +/* USER CODE END EXPORTED_FUNCTIONS */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_CDC_IF_H__ */ + diff --git a/Inc/usbd_conf.h b/Inc/usbd_conf.h new file mode 100644 index 0000000..00effc8 --- /dev/null +++ b/Inc/usbd_conf.h @@ -0,0 +1,173 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_conf.h + * @version : v1.0_Cube + * @brief : Header for usbd_conf.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CONF__H__ +#define __USBD_CONF__H__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include +#include +#include +#include "main.h" +#include "stm32h7xx.h" +#include "stm32h7xx_hal.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup USBD_OTG_DRIVER + * @brief Driver for Usb device. + * @{ + */ + +/** @defgroup USBD_CONF USBD_CONF + * @brief Configuration file for Usb otg low level driver. + * @{ + */ + +/** @defgroup USBD_CONF_Exported_Variables USBD_CONF_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Defines USBD_CONF_Exported_Defines + * @brief Defines for configuration of the Usb device. + * @{ + */ + +/*---------- -----------*/ +#define USBD_MAX_NUM_INTERFACES 1U +/*---------- -----------*/ +#define USBD_MAX_NUM_CONFIGURATION 1U +/*---------- -----------*/ +#define USBD_MAX_STR_DESC_SIZ 512U +/*---------- -----------*/ +#define USBD_DEBUG_LEVEL 0U +/*---------- -----------*/ +#define USBD_LPM_ENABLED 1U +/*---------- -----------*/ +#define USBD_SELF_POWERED 1U + +/****************************************/ +/* #define for FS and HS identification */ +#define DEVICE_FS 0 +#define DEVICE_HS 1 + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Macros USBD_CONF_Exported_Macros + * @brief Aliases. + * @{ + */ +/* Memory management macros make sure to use static memory allocation */ +/** Alias for memory allocation. */ + +#define USBD_malloc (void *)USBD_static_malloc + +/** Alias for memory release. */ +#define USBD_free USBD_static_free + +/** Alias for memory set. */ +#define USBD_memset memset + +/** Alias for memory copy. */ +#define USBD_memcpy memcpy + +/** Alias for delay. */ +#define USBD_Delay HAL_Delay + +/* DEBUG macros */ + +#if (USBD_DEBUG_LEVEL > 0) +#define USBD_UsrLog(...) printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_UsrLog(...) +#endif /* (USBD_DEBUG_LEVEL > 0U) */ + +#if (USBD_DEBUG_LEVEL > 1) + +#define USBD_ErrLog(...) printf("ERROR: ");\ + printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_ErrLog(...) +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + +#if (USBD_DEBUG_LEVEL > 2) +#define USBD_DbgLog(...) printf("DEBUG : ");\ + printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_DbgLog(...) +#endif /* (USBD_DEBUG_LEVEL > 2U) */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Types USBD_CONF_Exported_Types + * @brief Types. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_FunctionsPrototype USBD_CONF_Exported_FunctionsPrototype + * @brief Declaration of public functions for Usb device. + * @{ + */ + +/* Exported functions -------------------------------------------------------*/ +void *USBD_static_malloc(uint32_t size); +void USBD_static_free(void *p); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_CONF__H__ */ + diff --git a/Inc/usbd_desc.h b/Inc/usbd_desc.h new file mode 100644 index 0000000..0146169 --- /dev/null +++ b/Inc/usbd_desc.h @@ -0,0 +1,143 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_desc.c + * @version : v1.0_Cube + * @brief : Header for usbd_conf.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_DESC__C__ +#define __USBD_DESC__C__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_DESC USBD_DESC + * @brief Usb device descriptors module. + * @{ + */ + +/** @defgroup USBD_DESC_Exported_Constants USBD_DESC_Exported_Constants + * @brief Constants. + * @{ + */ +#define DEVICE_ID1 (UID_BASE) +#define DEVICE_ID2 (UID_BASE + 0x4) +#define DEVICE_ID3 (UID_BASE + 0x8) + +#define USB_SIZ_STRING_SERIAL 0x1A + +/* USER CODE BEGIN EXPORTED_CONSTANTS */ + +/* USER CODE END EXPORTED_CONSTANTS */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Defines USBD_DESC_Exported_Defines + * @brief Defines. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_DEFINES */ + +/* USER CODE END EXPORTED_DEFINES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_TypesDefinitions USBD_DESC_Exported_TypesDefinitions + * @brief Types. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_TYPES */ + +/* USER CODE END EXPORTED_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Macros USBD_DESC_Exported_Macros + * @brief Aliases. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_MACRO */ + +/* USER CODE END EXPORTED_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Variables USBD_DESC_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** Descriptor for the Usb device. */ +extern USBD_DescriptorsTypeDef FS_Desc; + +/* USER CODE BEGIN EXPORTED_VARIABLES */ + +/* USER CODE END EXPORTED_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_FunctionsPrototype USBD_DESC_Exported_FunctionsPrototype + * @brief Public functions declaration. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_FUNCTIONS */ + +/* USER CODE END EXPORTED_FUNCTIONS */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_DESC__C__ */ + diff --git a/MDK-ARM/RTE/_WTZS32-2/RTE_Components.h b/MDK-ARM/RTE/_WTZS32-2/RTE_Components.h new file mode 100644 index 0000000..fa4a6b0 --- /dev/null +++ b/MDK-ARM/RTE/_WTZS32-2/RTE_Components.h @@ -0,0 +1,14 @@ +/* + * UVISION generated file: DO NOT EDIT! + * Generated by: uVision version 5.42.0.0 + * + * Project: 'WTZS32-2' + * Target: 'WTZS32-2' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + + +#endif /* RTE_COMPONENTS_H */ diff --git a/MDK-ARM/RTE/_WTZS32V2/RTE_Components.h b/MDK-ARM/RTE/_WTZS32V2/RTE_Components.h new file mode 100644 index 0000000..9944f68 --- /dev/null +++ b/MDK-ARM/RTE/_WTZS32V2/RTE_Components.h @@ -0,0 +1,20 @@ +/* + * UVISION generated file: DO NOT EDIT! + * Generated by: uVision version 5.40.0.0 + * + * Project: 'WTZS32V2' + * Target: 'WTZS32V2' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "stm32h7xx.h" + + + +#endif /* RTE_COMPONENTS_H */ diff --git a/MDK-ARM/WTZS32-2.uvprojx b/MDK-ARM/WTZS32-2.uvprojx new file mode 100644 index 0000000..2bd9b6c --- /dev/null +++ b/MDK-ARM/WTZS32-2.uvprojx @@ -0,0 +1,2895 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + WTZS32-2 + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7 + 5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7 + 0 + + + STM32H750IBTx + STMicroelectronics + Keil.STM32H7xx_DFP.4.1.0 + https://www.keil.com/pack/ + IRAM(0x20000000-0x2001FFFF) IRAM2(0x24000000-0x2407FFFF) IROM(0x8000000-0x801FFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE + + + + + + + + + + + + + + + $$Device:STM32H750IBTx$CMSIS\SVD\STM32H750.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + WTZS32-2\ + WTZS32-2 + 1 + 0 + 1 + 1 + 1 + + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 1 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4101 + + 1 + STLink\ST-LINKIII-KEIL_SWO.dll + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x80000 + + + + + + 1 + 2 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER,STM32H750xx,USE_PWR_LDO_SUPPLY + + ../Inc;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Inc;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Inc/Legacy;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/include;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Inc;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/CMSIS/Device/ST/STM32H7xx/Include;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/CMSIS/Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + ../Inc;C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/CMSIS/Include + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application/MDK-ARM + + + startup_stm32h750xx.s + 2 + startup_stm32h750xx.s + + + + + Application/User + + + Communicaion.c + 1 + ..\Src\Communicaion.c + + + main.c + 1 + ../Src/main.c + + + freertos.c + 1 + ../Src/freertos.c + + + usb_device.c + 1 + ../Src/usb_device.c + + + usbd_conf.c + 1 + ../Src/usbd_conf.c + + + usbd_desc.c + 1 + ../Src/usbd_desc.c + + + usbd_cdc_if.c + 1 + ../Src/usbd_cdc_if.c + + + stm32h7xx_it.c + 1 + ../Src/stm32h7xx_it.c + + + stm32h7xx_hal_msp.c + 1 + ../Src/stm32h7xx_hal_msp.c + + + stm32h7xx_hal_timebase_tim.c + 1 + ../Src/stm32h7xx_hal_timebase_tim.c + + + + + Drivers/CMSIS + + + system_stm32h7xx.c + 1 + ../Src/system_stm32h7xx.c + + + + + Drivers/STM32H7xx_HAL_Driver + + + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + + + + + + + + + + + + stm32h7xx_hal_tim.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_tim_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_pcd.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_pcd_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_ll_usb.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_rcc.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_rcc_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_flash.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_flash_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_gpio.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_hsem.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_dma.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_dma_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_mdma.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_pwr.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_pwr_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_cortex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_i2c.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_i2c_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_exti.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_adc.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_adc_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_uart.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32h7xx_hal_uart_ex.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + Middlewares/FreeRTOS + + + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + + + + + + + + + + + + croutine.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/croutine.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + event_groups.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + list.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/list.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + queue.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/queue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stream_buffer.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + tasks.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/tasks.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + timers.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/timers.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + cmsis_os2.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + heap_4.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + port.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F/port.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + Middlewares/USB_Device_Library + + + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + + + + + + + + + + + + usbd_core.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + usbd_ctlreq.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + usbd_ioreq.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + usbd_cdc.c + 1 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + WTZS32-2 + 1 + + + + +
diff --git a/MDK-ARM/WTZS32-2/WTZS32-2.axf b/MDK-ARM/WTZS32-2/WTZS32-2.axf new file mode 100644 index 0000000000000000000000000000000000000000..e05bdd9e37fcb0212aa092425a3d172e9d810869 GIT binary patch literal 2210972 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
_^PxlVArV?641XP2s8=U2V5eLF(z)TY;< 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

kXcSp5e1LTZ>8%%~oRx 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�JRu!=5@IT^KqDlLt7HbWhE!eQs+Tcyk4C4VZ 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Μ6&zyD}AS#RtzGs}fx6gXWOc7A)7oYm$IgtoSwY+7#QG;kEI)1f0_tFPXaF1;CqvR*4%L3 z-Irn~+)(D-pMZ;X`GF*$H8-4n52n}&HNWjHf{ZJCnnj6l+hg0l?8_L2*5^%A8 zKbi!z=7uxzu@pPuhH~+73zuv96G=cTZv5K*WQuLw@EZSA0#3Qut@Hm(0$Ov!x%hO7 zop3|B_?&~+cj(y-*8SZY<3;~@6HAzoOjx2{&@3k&;h>Z@Z7(VqPe;`%|B{K7gt_LI zHA@Lojjt$JysW=!VkKdoaIR^V5~hjfx`M^)_!}lx66U$(re-N&np18mSiEq*ZDJ*1 zo<{CymJ+7vGJuz0oo%EU^-oZVk*mJ+6{{zk#% z^7^ffmbCrC`kmn^bzV}x*Fa8SxSsxCqeXenVIK`o%TpHnq=8}q{nl$m| zndZ8tc*Qm`5hZn#^Aq8+2Oba$EYo547%E zVxW8!fIV_)B3$;s%fDroX*|#paJhl<0RVQ%6^U@!1Fr;ETBh+ptHD(U%5xL;$<>K) z*#pl`Yb?`vp!sR7f%4MOJ$1G&6)(H+%fs~vuJOT3#0?hAnG$>E##Fo&Bb+QZCAiiI zrOVA0O!?ByT3b@_R*Z1U+?wE8Ba}3^SukbI_Si>%PsLj?!ijTxf@_UX>fB+$lsnsF zN8OoBcEAj}ClznS2nyD|0Xv z&iaV>uq5~+!Hs<|8j6GOR~ay`FY&@0PKC=p{1Wp>f@^&6GV`bf)8KWlu^vmsTQS0e z_jrP9jnLpdVZl7dVvC$i#al7LJ>*n^YmHD3Ipe_9t61&*t61)_>9ZUw5$T5hHFa_(Bub_=XCRYTU*#4K!~`hEwzy)Vn1ivW;(>V4|j6 zo^Rtjnk99)jqggBY~y<-SWxzDd|$JqGPm&~2g8R?+PguDYkQ> z@OTBDTDWYBXGuUSZhV_OPqD2VZktyQjz=>vXE%1>S+UyMy|%%G4aEiC8^d!3VkEZ3 zTMgu?uu^|#gGF`DaqkUJt5bgapn%`du*XsV(FRNEjtj0o8JUX_4@hkMUo=o;{6RKal;>%Fu;FQWy7ogfkXPrp1RQFkMR{JC4>LS1Ppk4@HIUcj zc$7WdMvL;i9v@+NTAtS8qdc&#u{|DXan`}T^XOEV9GF9`m=7IbOoHoOL~2kReE8gg zDgWRKcw8#niVw~~;}cx#gYwV>1LjQRM#IEZyllj$qe%&_F~TWnY7E9j`Ztu6uwPC~ zg|j{)K3tgT32y9z(Rg8ISTL;xaT`4|6>h}`C#YEouJu7lYPJD$n!=7cClxOH@R@3E zf@^$mwwhonQ9*UBW=UPZq4GKf<8>lthV>>`Qs#4$4VtBt>BMBCf>Dlkw|_R7 zU`d(N^JdLb%9NP5C>R|xx5q5B)dWk*e8jv>vy?I&FYj=$YOlo|1h$3Pv39ButHvEG z=D{W2B`HqQW1s-|(w2nCjv@IV4`E~H^GuJcdP@NrIe{- z9aJ#UvHmc@k}`L!Lz<zzvi zT64o)@O+A$a6?`3LIN(j8l>8!8M1_uWOVFGyBcO~nZEp)ee7pUQiX>`GB_RvM?n;JG zqrK=o0pX2kbpmoV{LXH-34+Vr45ICbfQjxqIui73_UbU*vEfY8np*F0ZT zBroUB!6ZY-@d;Q@JOQHtOB+l)`|GPBc{$!z_LB@D$0uF_!gr|MhGl?`4AzP zH2IG7FA~Jb1`(#u=?RQj~Je7zv`J<38auR>umWoOi}4jufTL zGhTuy^|-G$P0+D|C}*FEiX%lS|4fn~e!>Rtj!o9Ff+**pDT*USDGU83L6nBv0(q*A z6+}4`O;a2xO1Wsd1W___pKF?-V+B#pM>7>iic&_JB|v=F-90liTgURE{&xEu#Sx-> zn|-bXQATo``FT245aoW^E%1DbPh%!=p%t%Xg ztRTu6X{q8!QOZcmB#1JSd+KMojuk{XBdt&zDM}e>r36t%YLDxnRXSD><&3miail0^ zq%{&m8Oc3Xv{uIoqMVV|DUKASjI>^YC?mDUjI=?=3Zk5mHY$!3rHr&mf+!=o=ax3> zSV5FC(iX*$qLh)gN)TnF_P9RUreg(B&Pcy2jufSgv|WHY(ALX67_~#k@}iCi8>pR% zBSZlOMZoEp1W`unfNP}PI#v+njI>8_q$p*i{SMSnZE73hP3-|0AiczHE552sujLHw1)oH*RWgsz_dr6Zb925OS2ZZwm-zZA{vCR3tCQDf_Nu2sujF_XI?4 zYVYe9|ep zI~^;Ca^88bI8u}{&j$&j)Z;d_A9buC%Gu|W;z&`-Kc6Lt5|Df3^NWrZL^%ijr8rWQ zvQVF&@vMvH@fu1)Zd2P=#|omHiTWvy6s26$Ux4KPa)6HIMg9JApyCKo-e3MAL6jWa z{&J9x6+}5X3|1T|O37h}1o8UAop|Y3L6nojFvXFgeBvcRlpNgta=4BaL^(N(P#h`B zCtean$-(U}N9kBWl#|0~#gU?X;w3?p9NhkLtd12#IXR3|94X2tUJ^vf!R;?6=vYCN zlfy*Ck)nL!B|(%N-2QU1juk{XIZRO;Dat2a5=6gdY+mgq*T_Iti4*x+fsd6aiLZ+Rl)`a&w_XOa zN}Rnn2z;zWnR{alpuCNH$W1bkRpOMrS>R(OO4nOr03~bOK5mtPtPH$SQGi-XZX@5+&xHF@VxCZW?#VKvsz}@@|2Tl_(qUi2;<0alg1%2C_<= zhW814tVAhze+-DXiU(vMtHinYpuopUlz0D#0dkjkNQJUuevf!qGGaO2As!JBP8II> zNrm!yoGp$?hR~yYaa=$sVYt2F2^Grgan3j?8A6ZGp9F-`hT9hYsX}=@&K##DL+J4V zlz>q3a67`YDwNmb{Bce)gdU$j2?(VSw;8;kLU}#TA{Qk?=~~)DKnKcb_^kIU9ZJ-Y%5pr= zd#yM^5m2c4MuIr2Rm-loI#kf)wDwMMq$VY{_Yy>z4fpLIbf}=osqLfUNKHy^pCpK~ z8!q}j>rg?H)7uxtk(!j?{*oZdaJc;I)5woORUM=QW+?sTF20_e;`%C%)TAWWPl71R z;X<i)OjX>NexNKHy~10{$u9WDuf(V>DSr@BFkBQ+`64VECvcDOhkqC*8uPIp5U zM`}{S8zw;C(6$SgiNESlUeobld<|C|p$RA`0)Aptf+*|Zy@ioFRM6zKH%f7&CMCYn z62vPjOhjXJtRTv3tFekBMJW-DlORq+xO^P1V+B#pL=zN8ic%(;C_%i&!c;U##|omH ziY6`(UYM#lQk3$-GzsF>4R3UPQ^P#Pk)o6u<_i$Nu;>fcmc zs5nBD-%wm6L6jTZif^%w6+}5XEKwXOO37iV1W|Hu&#x`hv4SWkhvkYRMJYL~kRVD9 zZtb^H#|omH99Aig6s6>_T7r0)g2`cxjuk{XIjmJ2DN4yv|sWu)IFh%%D9 zzp!1$3Zk5mb|{V%rHr&wf+!=o`wP2ttRTu6X}97?QOZbr1n4_jthoCNdvz=?>WHvf z*{3){6i`qE{Aj2IQATpluN}~_f+%OCgNh?XDI@(ML6ni)^J|B6tRTu6>9FERQOZb1 zB#1JSyT5Q$#|omHk&Y>j6s3%G(t+THa(nsw+9??zy~K_*qQW)(Q_!3wBcO~nZBGk; z*pZ&mp+qIAEWaZ?t2jcDcckYeh*}ocf#-Fopvet;L2;xeHS9$R;#6Plf-mV%L6bB6 zWyO)2lvq)!z`X!4HqnFLXe#~tZ&9V%#YihrRvQj=2rO9`SB?_T42rDFwA zPVui5M~d>%m;`Ym!c6p5#|omHiQXxW6s1h`UV`(UihLoQk3$-UlK%l!QF4@)5K3sRTJGeII8vW7)>q^q|e$bjufTD&`*LW zF}Rx!{dKHRQ_c(n6i13uW*8_zlo{NehhKE8Aj+v>km5*DN)3YrNbX37=vZFV??{I# zju7P?=`abR+~9Vkzv@^)l#|17#gU?v97aeGB?q@79jRjlQBDq{6i13uau_W^lpNfS zbc~J_L^(N(RU9cw$zhxX@iGN>q~mq0Aj-*Mg5pR~N)8hxNbE=_=~zLO7b=q#M~c!y zWr_q*MshpS-*l`X${A^@;z&_GBai1I8v0)$Rvm|lG~Ba)vCmqqMVUdDUKAS zjI`E)dcuaZXCr;p2A90+M1bVtujmE}Y_itJXeUH*V76(yAr8xLW^PoWM8#Z5js{wr zBqLS>4C-x;A@V!1TU02k=f4fRRWf2d{vPah2Z0-Y9ps(n9Wp>-?b>zzw%XfAALogv zP{o~s<`fx$72G8N-_b;ZH+XjIP@;xZmg9lm9>o!gfI`i^5=8R|uBP|tP(hQYk^PDz zHE9|-AVEBhRQvjaI#kf)S>zAJk(xA%9FicKMet7ZVI3-H@+5LZaik_qB1a{NCK24% zAJd_NCeIX`g0((5qV7b^K0>(m3raK{QU? zP2YYxRuJWJ+Fx;`D2>xW4g|+&9pufV!7@O4iA85bh2A?v(3~VApo}(chYEmLbPm&@ zL?x*#zv%o`afBi-I)_UT=lW^^I6{XCn%sp(Dvs2oE;LGlxC>R9qjjjD$vtR{;z&*E zL1QI|dJrx;$LUZ(lRMCO#gUrSfhI^$yy%>$Lj_IF^OF=uYEqt`EJ5+2bBYcXG&#-x zrZ`fQ()?5b5{u4hI+WM+i_YnaBQ$x@IYWZtMdwT%DroYebC%*rO`(Hrk{(Qk2i81V}DAx9C`2)Gs=> zDvl84MdvmNqIBf$VEwLR1yRmN+Z9KOQa;)tL1Lx5Q^yLToRD@YjufSYv|ED2N_UTr z6+}5X>{T2oO37iL1W|HuE8YD%RuJXna6oaSC?$u362!|CTD;-dp<~B(z2F1kjBBWC?$OxN+@ra+>sK`pcpw8+Ilye!u3dZh|8~8)wrTs2 z5mo4G_|Jd&`s@Gq|N6iGXU%sl|MRQ=@^3l)fBUzu{_B5*qVUik{>T3Y|L)5C>VN(J zQ4G3C6jM2Yr||ygzy0gB{+H^hjCR$%2q^DwfBULBy8Aa6Do?1Qooc)PJ2vQ7p>A#3 zKBZ{a+UADtb^mCoZ|Gdxt7|i1YU>(XIP!h(rZ#P#5xje+mJaPZb!qP1qp`lFOZOHm zvicuib%fS`MW~n#PlkZOYUlMj5v5*3_fecd#RldZ%S;%Bvfzz53vFrFy9wKmYFO6JAi>#{}*hf%^t=pAxul1rF}yL3y7O zxbFn+JH&lS;NZ$e?eab1`t%AHp?Bj?U4Hzjb7RBL?zSS{%;=j2(1oPmDa(}shWjP? z(dCR(@rw3O5?b0-*6BA;3vvU}?3#)VSFRc`1@@qb&Euh?Xtj>mYJ(HF9|Z0P#0^Q{ zYGn6>Q3$OxGzFCXvl9Y`rGT=7)*jg0jX)23|87Kapk#Y<`kB`wo2I43( zA%vS68l4KR+a}6DMus?`GfCisP=!FH$pO%bmGD$)iVS3whyzN$34Bnh5U4aY0D9sK zjJX>}{WKjSH8I}dDtI2~O;?5CMKTO!fP3lz{xCAxi;nqd;mSX~y-b&Yi`4c%R} z-F>FzCYWjJK!w_`(5%n^gu^yi8DI@PdUk0bVeCq)bS$Imi6FaLae}Htq3D_b>fPA0 zp|R2HV%J)m2xp{YI;gL+%wWJ{(Zl)x?fE0*rQiWO+lE9q;~}PlhmDpQJa{a6*c6~m z&5e+0TH4aAyVE65))Em<}#}x6EL|W6{I* z0PPX?3HJkiJ8U%LAR>c-orV|m8Hw_{0HMVqW`iGl5a9?~@22%2Y1G?t~o&*VjO6LQh zcc<<=PgP6c3o4S)ViqtiN=8sa49Z;!ke_LJg)8C9;_n$L#{i)#F*?XV97V2%a5X1) z>cvfnDd$=unh}iIAbZ_1gSf|{g&P416LdWL-;|MzGLb;^mcR$S3V~9$1Hetiq=s|; z9TUt51}bRY)vO>(I8?qDU~U2?WgIW}O)#SzsG$5nvw||=Q2Aki(UeQlIKMx#(TsLP z2Jy#+7t|Sv@=pTLO}0+m&FW80Fe4tQp#4mcr1G8^B?ZW z3+4gc;DQL*l@N3t28GcP8N=`x{U}kudul&S`e}p20 z6wW`uJu;0bSqg=KrBO+~vJ}qOif7gm8Wr68Qo`WQTnrA`LaN4Ozeg<*oaI%`4!<5X$1%bJFnKG0)&q8za6)8+ba4|7` zE=VIv#zG-rYhjYFOvN+XB1`b|6PUv3ZE+6MiY;Fd7+aDl!&-}`yyZmd(X$yQJ@}`( z4YMK{Pq{KBfTfiwHu;fwym+fL+#h?xL{n{2SEm6*JH8CyuSxQ?q39TWtsr#cn=F_W z)|pt|2Qk6Idd(8*6%LzXgMd|S^;2#49~+``3irb5#u6^?#})|IHWkVeE)^RMZw+Kv zJOU!xh~rttwlpB)QI!Gieoyj)ub6?3whKZhco?K>!++44vg%Abl5z4Q?p{G{p!BE& zVDC(^g&W4BnO!M(;$}%oYIl-rZ=IyLdjz*j@A@BWTAJu627B?|G$4Oj;xeEe_9gkE zAv^X}Y9TQz15ky$jxbBTp%25*|PyA}K+v&MZLsal`Ow)vg3Wv(a1+4Rb zwp16{T}ZbE#|Ao)N97wx7Y3$IX3G)o1QTtZN)zj$4V_JFsz39nf59dd1~yM;%Sqd; zm}v8iAi{`ftnKEWbaO88oa<~BL?#nCOBDqk&*e%H7GoYdJfEXwb68vi)B>b0WXs6q zGF!$)Sw=%$uf{ITbTQoq>rxt#zmQE)A>i_Ik}q3_8Q3&e1fffhmYK>=c%SA`|B_uQ4$MBwmXx+yG12Jrm{{MffhINgt&|rg zNVdd-Vb}^x1uri(E4F|*RDMISraHK&kQUO{^lbr^Zlg?jVC-GKEV7v5qS^OJs=AyX zvY>y(X}FjlbLAvm`b+sKra?P5Q4Ye*+-DOcPvTNy{h10a_C>Q|2Z+Pg>D$|lrrtf9 zy0^e#Cj1jq3XaNtHt3rpe!57KLA<{ql6r(h`CkawsYjI=>g(z4b5tK>VqRP>%>)_L z2WujU2OMe-Q7~Gux;Nj4nqVv9$OiFYnyAF-wV;s%g9DK25FPHv!Z@NQ-mvzg(g1Ry zo zC!W%v$V|~-cv-R7U_4aD{>-JdRZdzqeag*Y)4|acq}z_L?BMQE?pD1bV3tEEkgyMK6Cg-DX~Dp!?hpm;FNahy@2mr3lDG8-VxW9_f3qdBoo&^Aw@G2D)m6KLbV8o6?+(9ovPIp zE8`~Rkqu^~BQ9t^HoPFtNK}6kfW2$GH23V$)h!Zn6Y|ssGwKl+)Snq%P-i5nKbOF| z&isNNj>H!>T979)$iFl^DPJK`{#68QKn<3Br6Q+y^SEy*j^Ez zfq7?wIZaOm)%The={g)Le+V%6`dPOgeEx^y^`i-9lmiu%KWSD_CLAh%4zSv$e{`>_ zu0QSD@G;9Tsdz?T6aW_fN^paVfJP&I|4!?Mf40>5_Y&b5103P~Opq+_;e?wkV=CzP z*Q_8;5~w^t!_vtsxPqbw8cs5S3C=HuBVL|MR$*|&!Nkx=H;UZ@bwd*2%*CmT=um;7 zmKn7UW3hdPJ7{y`KdYr}Q$u`oG{VG4o_9D^tt1n~M{1Unj&LYEO2h1hi72o!fTBkm zj=3;~GsbYtg)yA5hSQ;X6B1r9$2TF9)gCW6KXr{KK^at#?c(*md3m+{F7PRY|vj2lvS$v}mcoS|uB_I_2D9Efgyd5BdthU6iD#$QFE_Ge(@Nmlf^d5okZ0+ zB10!xVtApKFcQ1TQUgqnI3~H=wal`TV@|S`TUK(^N!AL>N{&0pS`}Dud{Ezo@2TT% zaJ30$8Z}U%P1k5vXi~yqi>}qMbc2eb*BMT-IR$6E;UpVVa5flDvMB{;Q{ce3g0Gd( z;V-WEHk)9kB?A>&a*Jk#mLwduz!x1=a~o8cr|QgD7ZoMcN1&UV8|wxr?_r z`L(lqhQcK30cbwck6$qgm>f)=f zaRi>Q!9uHsmB~rNldW1Iu~knQV7^sD@qb!Ywp9b`v}I*mHL%WDR<>0G>s-WwVJg>V z=WUQ%HC~+IwF+eDtQQP1YF0vGvtBen*Q{cJX3M{1Y1pn}iDqe+Ee#u1EYd9Pilt%8 zie;LmU9~j3P_wjamS&e~mUi9J>|)K*ZdjUKu36fxh!!n5c>jMp5$2u~t=O>Khz>pH zj%7w&hq2gq?pkPOOft=-x_b#;dQ?i@{RA&PE+y|lf|nkdlJ_X$h53bFcX@21)WY#p zi7gz+(7;a&FKS;xV)H&Vz)b6k;-6Vox@`sPC9-FPl5YYm+$+I5*KbuMBg!n0d?y(}5HTqCAwcM;oaV2OGC*R{m2}SCeF4z= zB=AAXpYMMb0CVM3abF}_UonO5^N;H2ulgh0x#Vkw8@0YFl5RB5f{OH$3||w6!A2Y4 zARPBmJD9wN~?aVV=p zC0eHoh5j|5t4C?826CSxA1(r!267Z=pAj)SG!MkFbwPdI7-TU9;Rft+9I-RE8?P$<86C}g8jw>45XQG58TgW?sA}1+) zs+D5=WQ9+)RE(dBczEloOCwbtHz3pEKU2k{R2uMLae9QsDpM5eJHrRNa^qI{dS?9R zbomYs*jW+Qmk&`af3^>H=Eo1J^5?{VPM7cSfSns*efbc@^5^-WzgdNMj^>NMrxn6| zss%CHYxsLq3w^jNXG+|#EE0cDix30qu{cJ1kt&WgS>nT;Sp;teEfs%Hix2}umc?i< zQpHhZIfpwpbc0tDG0R}mUm*iY8P5Tol>*N~4uMK*5YV$*L$?fc2ENQbL znO%q_Z80RX2eG8BhGcdimbA@~%>KiYwhL0Y2a0zTcGzH{k1!cJ$xcHQy#$fiO?DYz zzMn+p@3ypTPl;%IEG^qtBHCU{%l4Ltw$IYC{UxI9x3p}JiD(BbE!$@z+CfXp_L_)x zNYH-j!FTlBP3yxpTIe^-hJJIz5JkU1B=(!52AJ&}q(Vn(Q-x z!!C0{!wNmdmwnNY^8Lk=E*Vn3w|LTJL(2CRPr71A`JUoQR}CrOPdw?GA?16CCtWwB zd>`?oTaHxQ4DTv6H_J84Z4*oN5J`m|a!1o#4~cNtL+)x=qK8Brw`RF#NVbO<(tSg+ zJ;ab67?SNFhV;;oY!5M{M}}m3h#@^TB-=v_>4_oP9%4w(1c_&*ufE1L%X1qn^bsaQ zCwXCrqL&~NyU9xf%=eS1{8yHi?I{uMwWVeIN<@2OY1!Tq(cW5Gw!cKQcb1mzF%j*( zrDgj}MEhWA*z8IqDH;BZ3^OphU`%P4SpZ~-&LK+1a z$o89v*4NUq{U)OIv$Sl#iD>;TE!%G*+5k(-_M3<{(9*K~CZhdfY1w`g(FRMJo2d9} zY(q@2)NA}CH&oMPp8*_pnPD1M=rO+RUkxeWUp#5JA?16ECyg+qd|&aTk%pA-DV{XS zkn;V+lSUg-zL$8?7(>eU5lx7WlXpboM?+0CKh9;^s987KS6-zex%ML#h^>~4NUg$Poghwz|@u{*NO~W#+7#ID! z;iOwK=In?#jrf>8-JioevC~F#jT*>M$z6sQ)sm1{%{?)&XP2J*a|L*#W3LJ38n}_E zpuJDCVrj&o@_r4=G;mz>0mDf*aLhSGoa$k_=5Fx2iFjiI=aR!ZMAeICucrE#2emt* zI8-^0!nz$*phVR?!OaxMG{aU*F^+2nu56;G$&K|Bnt{uj=uvXRI2AMg4)^x3?ePB8 zpE{InJK{mxomQNSbVDNWGFeBbl zp?uRJ4O;HDWQc~VbM1CVLbA=qMc!5TT%$4mp2FvvjPVa*d~X_d?k2=T70TA%(V+g1 zBqOdrV6fjjmXKWieUVQTK2v{>f2#1A`g{EI7~jaRZez}Vp+edEI~vsgrDVkQ2MpH# zm4xK#?~8n`@R|C1{2PVO)ZgRZ349&RS?)sz?{zHS0*(kx@Ii4z8vqI$;iCd&TfrCm zNi%Zo;2EDaBi9n1(dWNc=R~k#>IQwaM?I}iuq*V{A!>=}DILj!mguKA)DpgQY>EB~ zlxPW0aMSky&9E(@7y~uKwuE8~iWqgxo!Yy}7#C`Tb%LPF2~75yP)_acee7Mfhrk57mTW<`&7&c9SJ3 zYPza$Y`LifX>6`OMHdgxX)3~s;rZ^S`iKQ`(cOvBCdQJg zl2{^>fjCeV0Rol8N(bz89 z=+>{FI$s@%bi;Xf_3SY?(to#2(K%)GOP_l+CNczAFw5iM64*-+*4 zmT9W|jjQqn3oTZeB`zj-r7AP;vf+K}s_agBuO!0dIwKwGeAO~doxgQ;zGk7tIB@2Jl1pd%43*BR+h=i8QP>inIn^BoH<)|n;lCU~VfGw;6PeNT194E7)q zF4r09Q0Ir1Y3lsFtMelZE!LSO9w&IEIy3L7;dP`sV+wng2$$=Obg1)l%QSWF=<58! zLW^}~iI)jpsm{!MZFoOWoiT^KNrcOFMmp5_t!0`z|KRHU&O(cIW{LL+Ua8K^`)GJI zv<7pZH=3eHn6th%!&+Pku=w(_Buf{N&^-IND zsXVWG`X{)y^0XuykN}q}&oTp3%wpx4Imj|;UFMGL2B+e!RG!yALlRtDd0LzeO@Pal zXPIFsX0h_j9B!GkLTiutZA2>GO67SaG%~@pm8WIes06rNd6pTSViqgU%(0e9Yc=<| zl5wecE0yOp(f9<{R-P7Y6B6KZaXi!jRTVgwS%h4ih z637}jlF~?*#C56o*EVezSahmZl$jSAwDABA78z8cRy8e9tHl;+YgN+%WiHi7mz{O3 z@UQTiqeZ7`MJac=L7Q5&hvP7VO4O=-RjZX2X=~NKs?}EV~sA{#|B5kcYRJGcukuIO=TH#;e=QJ%kRVzx8n+@93>Kpj%mO&+I z^-Wc)trlr(^-Wc)-!;-DN?j}bYn!&)Ejm>z%6>Zx+SKY>ILI@oM6JH9YPHKEZLPko zYPClr-3C_I3jYdU%ChKGt!QVu&!A1MzH8HVzdBUA( z_2)Ki?d){AsRTS(yK4CXAFQ`#td^K9K^H(x&YI1#`*l zYy3rpfhJZGMkWaVqFG9q_EUot%;lM{@wjcUiIs$r3Bp4(O9}HSlY+Sv@HIY(G|a?G z!pH>SUo}e!)2?K=g1OP@KJYoh#7e@*1mTgIrG#nYFiOGP!1)@VNg8cpC1GTO@EFZf z!nC#@t6*+{{WTt}jWe;5FyDb0uUSf%mfsT;%&mdH#&=dGnpjDgZ-Y$IEG7K^G4^Kf zS{2)xr~W5g?n_v>_x3!`xq-D7!jWd}wLtf-i=wisPE}S`R%TY7YIarKpa_EWJ%V(C zA_{gON+*qU(xad>()X=^3J54Q=7=#OVl)xo&gVIvlZ^Kl?}#yDj+k?P^ZOQEA-}0) z;W9OR33{H1)r|SGi20gQ#&i+;mXd`l$?!vR3rwtL%pV9W)RZ!&>&!(;hF5j}24CRC zmmC+{Xw5sou)vlWPPu~;27-r8TF4CyJJ?bit=e-BTV^CJ&i0XwR_(dBeQY>wPu*=b346LaJK=9H4#WSQZ`^Bq0cAlipoQJrjsYjZXD(0K zC;|qB=Tt5L7byB-LBZiorq6xaJWmc26%&SJ*LgIZjJT<<_XRDh!RO=#m-nhc=jKKi zXjKii+vL+Ns=@STkEY&$?+R@31ud(=En=(7d)1&;vCRcqRfFxm^63`UV0wo~Q>(&@ zft|jfWi_~C?Q(gq8q~RVyFjaIu-(@_-J%*y@AYWvocMmhK3~wX8r(qlyS!HoYNQ8T zpj9>4?x0V%s0P!AJ(?RiUPFB2D_WL=8~V2{@0EiZ`weDUC!SweYP1nug zqT-mZXju-vgg)-_UODJu`h*L#DhJ!0^ywDmVEU9t)75;q$~f&ST9$(^?9aHoR}Q+w zKkEXm%E5N$e7Z$Bn7-iAbdM3fV0Y11v@8eTZd`JCuN-vaaoGi0m4ofB_;ibMFn!IV z>CUGQw$kgqqGdVwCg_ICd*z_pp_?wysvK;0%conEgXteVn(xQLTU>Vvl9mODcV>6} z5xkP{J=#4VX;qYH`BQ;!QI^R6;_`fLiWjH%3zF7#;VZre{s?Ye=mPbjkF=}{TmD+$ zTh)d6$1YD-so~wPCk09Cy70B%Z~h2wUFcHvcOPk47q)y_;9J#&`B(m1=cWul6M*L$ z;kB?=3zF7#;j6&W{s?Ye=%V#CA8A<^wj5L7Th)d6*Ik~jT*Dh<;|h}2b>Zv5@%{*I zUFh=l4IgP)7q*;G;9J#&`AIHM*RbJbvdINW>$>oT;S_%aw=Q%YJJm;8)`cyn75G+l zVSZ-dyGC@uw&6kvawQA|Kh$M}cH%h{9)irZl$oxj=4pyI zm*y*o^KGy?Q*O_18BWiX_K^ifSeq#iztB>ZnKHFlQ`j`=&%7+L!Rk!8;l6D+JyY5l zmKtGgrab&IOI2pd)VrF(HrOkCda>LFt25;m`kvwROsUteFv8kQdHDA&RhcPMD>X$e z9j~BQ*RJyp7q-*1Gqsq*j#ELE8*Q-?GaZe8JK10R4McEZ)k z#yj6{EUBjpS{Mu7Z?w|dgrmg~hpS9Ea^D$_ubJ?M{Cg){pEF;f9J8dEGhH|xx6XMaK=gbzD9j-QK=B^r!uBgII@--)1pEF;-T(_i|GhJ5Qu+r+B z+2W?d)#l9HZNt&ERk#8E(Fxb*%oj3uENSLU*H?F~v^rRxgcEq@XK*CRj6ndFPdgaBDVt#@bG+0NVrvCub87kWk2o~b0s1C zs9(G(B-Aj%C)M**sO-l*W4vknl#^QWYxuaTi%83E@Y5WO<=r1 zK3K5=VED#sF5rdP>?|M1K+%a;PP78o=7M|=`&t0C)&d{=Yo6>+ad!+C*H%h3VrTG zd)T&Ikndq%$w1MG_pt3kpF7bWwj&qFJ#42670u!vwo4MZ9q(bgg@juL?qOf6P}z^W z#U4orKk65Ig+%OO`&6jx$30`eB!nMzjRQg=_OOF0RQBV}aYz!vk9x;pArX7nH!4*2 zQf~%15@@#gpQz}xnBg(TnSepHdN9q)8^Bq8i*ue&QG`DS-dMap)(-Tfp9VMiO@&q9*# zc)zGf*^c+T`;riLwCg<(61nX?)UmQ--1vS~jPT^G?~xR7bHTmuv5r+txxYM7j5MVV z^P3cj4e)mztC(_^d8!y`N_}S3e}_+PsI~IzRpCzV6&pE63<-RjcG18Pe&-h%#Kc^ht5q?93ik1O`eQkmyazoGn z4_|^65?;6XoM@5?mHl|tPL_o5qcuB4NO;NO)1s*=RQBTqJ53V8kCy9nA)#%t4?Z)R zp+aRpUaK=DA^d2i&Jq$@sNwU#*(y}_<7GNW62gxb>0BY9HQI)K=S>wV`|%2$Ckf$4 z>vO)4(9YO~pZ&e1LS;YR8W%`H_|ew5P)KNNY{Tcxi&UuW$9v;qNeDmM8N0KEWj@fciYfP*m5Pz3)M-{p5w)7|QQn6-Rx#yf^O0htDYcuArHJ}X z8}^$|bgW{^9p_WUNK@)LtEGsVPWS+CjgD1Jx$S(W7->q4XRQ=b=jn@`=W`vam~!v= zLNU^my3d9n8r=S3_el6pe#^K~ha6AA!Tz{OF~KvbUBHl*B`=}>OuwolG(vzB!#=MpOpk&;Rub@S@R{LR z6RbINUpl8LH1>04ZRaY{RVUo z9@%d|Pv_u#YrkuQKok8&t{=j3NgnYWKD^^2wQ zKgm{@%6&`af0nI4J&*4em zOdGA1m3Qb_hSO!GJ$kkg*2>Dm&#_dctW3?dRHdv;y=kdRS(%!rDSp6+JJx&~t(KK< zm)ttW}kV-)yN$RhimisY+Fu+G?pvRhinRDSoDd zE%GZTTCHn*th3#cy0ZLeXNQ&6Y8x$fI$Wi?k=x~PmHI|*x5HH`9J#Lzhj&!)T0LIk z?{UKQ8uJa=UQ3!9(>>`vE3MX;E%rNHt;Wn9aJX8HnLFrkwHh;b$Z&Xn1vSR&{liYU zUSqyJ`^J){#`L)ETPv;Bm@SStT&>2;9d)=`jhXw-;c7Kz?t8=G%@%*{_m~r|*O>3s zj$6{ym~K~3SZTG!Y;n@zYBgr=2ZyWGn7LC9SF15|rwxa9UQlD)=FT|bdX4$U?W`qD zjp^R?oRwB<%ogVzu2y5_E;wAR#>`!GxLS>wyJR@L4TBovo_E;^*K5poaaSy9YD_n> zSFN;KW45^FaJ3pUcirJ?HD>OH!_{ic+-<>i4@|cRd{qa3uS99mEdpua5B}Uynskdm znm%x^aaW1bJpzm1X5*d`rJDp6!C!LuNr}>30*l~w<7XvGw+SqQ`;A|eDBUNpsQL38 z|88JU=a7-zBfGkXwGZlmzXbAc@Y~nTr`^A+2roc-@NY0co=T*b)W87GJUi;Yr+;i8 z*4@c|xaeO|5#KLi;PmH<~4bhqcq^Dd9zl*F=EK==;W$A|v25CRei$#?fUQ zg$Fxz9B*Ro%mfOKZ)l8MlMbCHBv~p=ukhy+CYo5uIicV@Nn^=5uk7R`<3jcNL#XW( z6(UKvdmUy<3;RPRD z)-@-|922V<^QGckO(|o#Vt!M}@G1!Qh{kxHiPenx`f0wVlrddKzNKV%X#fYeFF#T;EeNe6rRn{K1zMCRQ_!&*U_vjOmf&2TGQ| zsj||r|qei zt=B?oX5kf<4K`Y}=YF=)aN3?a+9oZemKNS)`O-$K_T1Gr8&2C(U)!RE)Y!tyEL&}~ zYR|oGo8h!Qb+@myklI^#B(mK`tM=UCb{J0EQ;*xJh1BHw;Oo!3Y_w|6eQvkmv^{mY zueFd`UHGB(JvLgk=We&xaN3^w-99a(h8MnqvEN3k_T2Lh7*5+$*E^_$ZFIpFKBqlo zqc!^g!{x_e!zp`E!a&bF`;8V-*9%|J_|`_N_T2T37*5+$*E_0(eDQ`?Z{OKy)tnv^{mbb6QAUFMQSGyp2}vx$9jpoVKT~cTo$e>xD0UT(Z%sJ$Jp! zhST=c^{!|kb-nOt>#B`b?YZk+Gn}@ku6JDvsq2L=g50ptsy%nTn}*Z&)b(yDVPEQc z;VU7xZM0?|VCZ^38cx}R5(a{YRa!`0FWi^kwb80QcfEUt)ArQ$eu={N<{rI0zem4s zV!n4q!pt9NDmt?c=lxL0Xxey%`>To7jCszFG^LDb#*dYZ+kA7Y{KUj+#@yq7)08r% z4*$E7QG*XZ2WMh6WA5&w{s(;S1&=>MY5OW;>g}&68MSu&aNt!Fs~K}&AFU~6OkMpo zC8MSuek{(!YR25r$7)I$Q$K%Q$*7%&-;Oh}nlbnC@tRV`)XCpaGHT@Er{qkmX3SlD zqNbEF_3%kbMlBql(@r+Anlbn9DVkEo)V-%F88z?lLvtopGv>}cT~o@K`t}SZllSN| zZM5bc@6l%&PPy|v`fM%a1{R(&+Gy3Dd)QpVX?yBoZ)zd6G5S?H8?D-NC!23LZO_je zwUC+_{YagSR_(c;Ei|0A=ckTZNG*+iv(84V_T1H$7*5;svqvqY#zsG3XQNen?rqBq zr|tO(q!vn+Gy3DJKS=^X?uPSsfE163Tn@Pi?ejAMepu8&28tJ^C6g zq^=k4(Lb}%sy%nTwT9F7)b&2sLcVyzd-N}Cv}(^?Z=K<^JwKV$Lh5?q9({w2R_(d# zZ8V&==O>d|NL?@7qkn0mReSDwn+>P!`N^afQr8Rj=v!^HYR_G7o8h!QKbh1*>U!ZG zeY=fT?YZmiFr2pMCzD!8T`%0D@3PUVJ$Jp`hST=^WKs*M>xFytJvLgk=dQQcaN3@q zOll!@y>O4d-$twU-1QC^PTTX7NhOr`=!a~yW*_g-4;xO|^F8`ET1Z_l+@pVMqg8wE zdPfYW?Wya1AB8>5J^FzB9{re!`Q8}`_qoS46`ffJqdfEM2_>Ux;}z~n6RR2XoPW@i zGNu`yQZjDy%{}^Q6RR0>k3XX+WlSCZtddcK$9wd1CRQ`%?tWfV%9wil1tp`_j`!#n zO{`|jef^TAlreSn%SuK~9q-Yvm{`r2JNi{kDP!vA*OZLfIo_jRH?f*A_wpN>QpVKD zZz>rza=b^sWnwjB?&7yKrHrYE|EOft!toycj)~Qbxqsi)lrpC7eNV}#dE-6$PbO9~ z=Fa`Irj#-D?O&8k-lN~Q(VBO>M}J^A<<9r$54DgRSa`~4qg8wEVUG-_?Wv1B)hJ*`pRxV+;4_V{Ei)&%JG|;j}$Jfz(23Z{Z$&oQ+oPxxrJ^E}dq^=k4(dXD`)tUwW#Az!?O zw;*k_YR_G7zTvbzKbh1*>U!ZGeSwWu?YZkMG@Q2QCzD!8T`%0DFSgODJ$Jn&hST=^ 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ы-Y&h^z7Y#_ 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 z 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 +;****************************************************************************** +;* @attention +;* +;* Copyright (c) 2018 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. +;* +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog interrupt ( wwdg1_it) + DCD PVD_AVD_IRQHandler ; PVD/AVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 + DCD FDCAN1_IT0_IRQHandler ; FDCAN1 interrupt line 0 + DCD FDCAN2_IT0_IRQHandler ; FDCAN2 interrupt line 0 + DCD FDCAN1_IT1_IRQHandler ; FDCAN1 interrupt line 1 + DCD FDCAN2_IT1_IRQHandler ; FDCAN2 interrupt line 1 + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_IRQHandler ; TIM1 Break interrupt + DCD TIM1_UP_IRQHandler ; TIM1 Update Interrupt + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation Interrupt + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10] + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD 0 ; Reserved + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break Interrupt and TIM12 global interrupt + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update Interrupt and TIM13 global interrupt + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare Interrupt + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FMC_IRQHandler ; FMC + DCD SDMMC1_IRQHandler ; SDMMC1 + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD FDCAN_CAL_IRQHandler ; FDCAN calibration unit interrupt + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng + DCD FPU_IRQHandler ; FPU + DCD UART7_IRQHandler ; UART7 + DCD UART8_IRQHandler ; UART8 + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + DCD SPI6_IRQHandler ; SPI6 + DCD SAI1_IRQHandler ; SAI1 + DCD LTDC_IRQHandler ; LTDC + DCD LTDC_ER_IRQHandler ; LTDC error + DCD DMA2D_IRQHandler ; DMA2D + DCD SAI2_IRQHandler ; SAI2 + DCD QUADSPI_IRQHandler ; QUADSPI + DCD LPTIM1_IRQHandler ; LPTIM1 + DCD CEC_IRQHandler ; HDMI_CEC + DCD I2C4_EV_IRQHandler ; I2C4 Event + DCD I2C4_ER_IRQHandler ; I2C4 Error + DCD SPDIF_RX_IRQHandler ; SPDIF_RX + DCD OTG_FS_EP1_OUT_IRQHandler ; USB OTG FS End Point 1 Out + DCD OTG_FS_EP1_IN_IRQHandler ; USB OTG FS End Point 1 In + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMAMUX1_OVR_IRQHandler ; DMAMUX1 Overrun interrupt + DCD HRTIM1_Master_IRQHandler ; HRTIM Master Timer global Interrupts + DCD HRTIM1_TIMA_IRQHandler ; HRTIM Timer A global Interrupt + DCD HRTIM1_TIMB_IRQHandler ; HRTIM Timer B global Interrupt + DCD HRTIM1_TIMC_IRQHandler ; HRTIM Timer C global Interrupt + DCD HRTIM1_TIMD_IRQHandler ; HRTIM Timer D global Interrupt + DCD HRTIM1_TIME_IRQHandler ; HRTIM Timer E global Interrupt + DCD HRTIM1_FLT_IRQHandler ; HRTIM Fault global Interrupt + DCD DFSDM1_FLT0_IRQHandler ; DFSDM Filter0 Interrupt + DCD DFSDM1_FLT1_IRQHandler ; DFSDM Filter1 Interrupt + DCD DFSDM1_FLT2_IRQHandler ; DFSDM Filter2 Interrupt + DCD DFSDM1_FLT3_IRQHandler ; DFSDM Filter3 Interrupt + DCD SAI3_IRQHandler ; SAI3 global Interrupt + DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt + DCD TIM15_IRQHandler ; TIM15 global Interrupt + DCD TIM16_IRQHandler ; TIM16 global Interrupt + DCD TIM17_IRQHandler ; TIM17 global Interrupt + DCD MDIOS_WKUP_IRQHandler ; MDIOS Wakeup Interrupt + DCD MDIOS_IRQHandler ; MDIOS global Interrupt + DCD JPEG_IRQHandler ; JPEG global Interrupt + DCD MDMA_IRQHandler ; MDMA global Interrupt + DCD 0 ; Reserved + DCD SDMMC2_IRQHandler ; SDMMC2 global Interrupt + DCD HSEM1_IRQHandler ; HSEM1 global Interrupt + DCD 0 ; Reserved + DCD ADC3_IRQHandler ; ADC3 global Interrupt + DCD DMAMUX2_OVR_IRQHandler ; DMAMUX Overrun interrupt + DCD BDMA_Channel0_IRQHandler ; BDMA Channel 0 global Interrupt + DCD BDMA_Channel1_IRQHandler ; BDMA Channel 1 global Interrupt + DCD BDMA_Channel2_IRQHandler ; BDMA Channel 2 global Interrupt + DCD BDMA_Channel3_IRQHandler ; BDMA Channel 3 global Interrupt + DCD BDMA_Channel4_IRQHandler ; BDMA Channel 4 global Interrupt + DCD BDMA_Channel5_IRQHandler ; BDMA Channel 5 global Interrupt + DCD BDMA_Channel6_IRQHandler ; BDMA Channel 6 global Interrupt + DCD BDMA_Channel7_IRQHandler ; BDMA Channel 7 global Interrupt + DCD COMP1_IRQHandler ; COMP1 global Interrupt + DCD LPTIM2_IRQHandler ; LP TIM2 global interrupt + DCD LPTIM3_IRQHandler ; LP TIM3 global interrupt + DCD LPTIM4_IRQHandler ; LP TIM4 global interrupt + DCD LPTIM5_IRQHandler ; LP TIM5 global interrupt + DCD LPUART1_IRQHandler ; LP UART1 interrupt + DCD 0 ; Reserved + DCD CRS_IRQHandler ; Clock Recovery Global Interrupt + DCD ECC_IRQHandler ; ECC diagnostic Global Interrupt + DCD SAI4_IRQHandler ; SAI4 global interrupt + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD WAKEUP_PIN_IRQHandler ; Interrupt for all 6 wake-up pins + + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_AVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT FDCAN1_IT0_IRQHandler [WEAK] + EXPORT FDCAN2_IT0_IRQHandler [WEAK] + EXPORT FDCAN1_IT1_IRQHandler [WEAK] + EXPORT FDCAN2_IT1_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT SDMMC1_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT FDCAN_CAL_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT CRYP_IRQHandler [WEAK] + EXPORT HASH_RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT UART7_IRQHandler [WEAK] + EXPORT UART8_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + EXPORT SPI6_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT LTDC_IRQHandler [WEAK] + EXPORT LTDC_ER_IRQHandler [WEAK] + EXPORT DMA2D_IRQHandler [WEAK] + EXPORT SAI2_IRQHandler [WEAK] + EXPORT QUADSPI_IRQHandler [WEAK] + EXPORT LPTIM1_IRQHandler [WEAK] + EXPORT CEC_IRQHandler [WEAK] + EXPORT I2C4_EV_IRQHandler [WEAK] + EXPORT I2C4_ER_IRQHandler [WEAK] + EXPORT SPDIF_RX_IRQHandler [WEAK] + EXPORT OTG_FS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_FS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMAMUX1_OVR_IRQHandler [WEAK] + EXPORT HRTIM1_Master_IRQHandler [WEAK] + EXPORT HRTIM1_TIMA_IRQHandler [WEAK] + EXPORT HRTIM1_TIMB_IRQHandler [WEAK] + EXPORT HRTIM1_TIMC_IRQHandler [WEAK] + EXPORT HRTIM1_TIMD_IRQHandler [WEAK] + EXPORT HRTIM1_TIME_IRQHandler [WEAK] + EXPORT HRTIM1_FLT_IRQHandler [WEAK] + EXPORT DFSDM1_FLT0_IRQHandler [WEAK] + EXPORT DFSDM1_FLT1_IRQHandler [WEAK] + EXPORT DFSDM1_FLT2_IRQHandler [WEAK] + EXPORT DFSDM1_FLT3_IRQHandler [WEAK] + EXPORT SAI3_IRQHandler [WEAK] + EXPORT SWPMI1_IRQHandler [WEAK] + EXPORT TIM15_IRQHandler [WEAK] + EXPORT TIM16_IRQHandler [WEAK] + EXPORT TIM17_IRQHandler [WEAK] + EXPORT MDIOS_WKUP_IRQHandler [WEAK] + EXPORT MDIOS_IRQHandler [WEAK] + EXPORT JPEG_IRQHandler [WEAK] + EXPORT MDMA_IRQHandler [WEAK] + EXPORT SDMMC2_IRQHandler [WEAK] + EXPORT HSEM1_IRQHandler [WEAK] + EXPORT ADC3_IRQHandler [WEAK] + EXPORT DMAMUX2_OVR_IRQHandler [WEAK] + EXPORT BDMA_Channel0_IRQHandler [WEAK] + EXPORT BDMA_Channel1_IRQHandler [WEAK] + EXPORT BDMA_Channel2_IRQHandler [WEAK] + EXPORT BDMA_Channel3_IRQHandler [WEAK] + EXPORT BDMA_Channel4_IRQHandler [WEAK] + EXPORT BDMA_Channel5_IRQHandler [WEAK] + EXPORT BDMA_Channel6_IRQHandler [WEAK] + EXPORT BDMA_Channel7_IRQHandler [WEAK] + EXPORT COMP1_IRQHandler [WEAK] + EXPORT LPTIM2_IRQHandler [WEAK] + EXPORT LPTIM3_IRQHandler [WEAK] + EXPORT LPTIM4_IRQHandler [WEAK] + EXPORT LPTIM5_IRQHandler [WEAK] + EXPORT LPUART1_IRQHandler [WEAK] + EXPORT CRS_IRQHandler [WEAK] + EXPORT ECC_IRQHandler [WEAK] + EXPORT SAI4_IRQHandler [WEAK] + EXPORT WAKEUP_PIN_IRQHandler [WEAK] + + +WWDG_IRQHandler +PVD_AVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +FDCAN1_IT0_IRQHandler +FDCAN2_IT0_IRQHandler +FDCAN1_IT1_IRQHandler +FDCAN2_IT1_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FMC_IRQHandler +SDMMC1_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +FDCAN_CAL_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +CRYP_IRQHandler +HASH_RNG_IRQHandler +FPU_IRQHandler +UART7_IRQHandler +UART8_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler +SPI6_IRQHandler +SAI1_IRQHandler +LTDC_IRQHandler +LTDC_ER_IRQHandler +DMA2D_IRQHandler +SAI2_IRQHandler +QUADSPI_IRQHandler +LPTIM1_IRQHandler +CEC_IRQHandler +I2C4_EV_IRQHandler +I2C4_ER_IRQHandler +SPDIF_RX_IRQHandler +OTG_FS_EP1_OUT_IRQHandler +OTG_FS_EP1_IN_IRQHandler +OTG_FS_WKUP_IRQHandler +OTG_FS_IRQHandler +DMAMUX1_OVR_IRQHandler +HRTIM1_Master_IRQHandler +HRTIM1_TIMA_IRQHandler +HRTIM1_TIMB_IRQHandler +HRTIM1_TIMC_IRQHandler +HRTIM1_TIMD_IRQHandler +HRTIM1_TIME_IRQHandler +HRTIM1_FLT_IRQHandler +DFSDM1_FLT0_IRQHandler +DFSDM1_FLT1_IRQHandler +DFSDM1_FLT2_IRQHandler +DFSDM1_FLT3_IRQHandler +SAI3_IRQHandler +SWPMI1_IRQHandler +TIM15_IRQHandler +TIM16_IRQHandler +TIM17_IRQHandler +MDIOS_WKUP_IRQHandler +MDIOS_IRQHandler +JPEG_IRQHandler +MDMA_IRQHandler +SDMMC2_IRQHandler +HSEM1_IRQHandler +ADC3_IRQHandler +DMAMUX2_OVR_IRQHandler +BDMA_Channel0_IRQHandler +BDMA_Channel1_IRQHandler +BDMA_Channel2_IRQHandler +BDMA_Channel3_IRQHandler +BDMA_Channel4_IRQHandler +BDMA_Channel5_IRQHandler +BDMA_Channel6_IRQHandler +BDMA_Channel7_IRQHandler +COMP1_IRQHandler +LPTIM2_IRQHandler +LPTIM3_IRQHandler +LPTIM4_IRQHandler +LPTIM5_IRQHandler +LPUART1_IRQHandler +CRS_IRQHandler +ECC_IRQHandler +SAI4_IRQHandler +WAKEUP_PIN_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/Src/Communicaion.c b/Src/Communicaion.c new file mode 100644 index 0000000..2728cbf --- /dev/null +++ b/Src/Communicaion.c @@ -0,0 +1,493 @@ + +#include "cmsis_os.h" +#include "cmsis_os2.h" +#include "main.h" +#include "stdio.h" +#include "usb_device.h" +#include +#include +#include + +typedef struct +{ + const char *cmd; + int cmd_id; +} CmdTable; + +/* +自定义协议 +帧头 0xAA 55 +帧长度 1字节 +帧序号 1字节 +帧类型 1字节 +数据域 N字节 +帧校验 1字节 + +| 帧头 | 命令 | 长度 | 帧号 | 数据 (128B) | CRC16 | +|--------|------|--------|------|-------------|--------| +| AA 55 | 01 | 00 80 | 01 | [0xXX...] | 2字节 | + +| 帧头 | 命令 | 长度 | 帧号 | 数据 (128B) | CRC16 | +|--------|------|--------|------|-------------|--------| +| AA 55 | 04 | 00 80 | FF | 00 | +*/ +// extern uint8_t Uart_ReadCache[128]; +// extern _Bool ReadFlag; +// uint8_t CPk = 0; // 当前包计数 +// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +// { +// UNUSED(huart); +// __HAL_UART_CLEAR_OREFLAG(huart); +// __HAL_UART_CLEAR_IDLEFLAG(huart); +// if(__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET) // +// 空闲中断标记被置位 +// { +// __HAL_UART_CLEAR_IDLEFLAG(huart); // 清除中断标记 +// HAL_UART_DMAStop(huart); // 停止DMA接收 +// CPk = __HAL_DMA_GET_COUNTER(huart->hdmarx); // 总数据量 +// HAL_UARTEx_ReceiveToIdle_DMA(huart, Uart_ReadCache, 128); // +// 重新启动DMA接收 +// } + +// // if ((Uart_ReadCache[0] == 'C') && (Uart_ReadCache[1] == 'M') && +// (Uart_ReadCache[2] == 'D')) +// // { +// // char buf[10]; +// // uint16_t i,j,k= 0; + +// // HAL_GPIO_WritePin( GPIOA, GPIO_PIN_8, GPIO_PIN_SET); +// // for( k = 0; k < 8; k ++ ) +// // { +// // for( i = 0; i < 3; i ++) +// // { +// // for( j = 0; j < 98; j ++) +// // { +// // sprintf( buf, "%.4f\r\n", OutPut1[k][i][j]); +// // HAL_UART_Transmit(&huart, (uint8_t +// *)buf,strlen(buf),0xFFFF); +// // while(HAL_UART_GetState(&huart) == +// HAL_UART_STATE_BUSY_TX);//锟斤拷锟経ART锟斤拷锟酵斤拷锟斤拷 +// // } +// // } +// // } +// // ReadFlag = 1; +// // HAL_GPIO_WritePin( GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); +// // } +// // HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t *)&Uart_ReadCache, 100); +// //锟劫匡拷锟斤拷锟斤拷锟斤拷锟叫讹拷 + +// } + +// #include "command.h" +// 假设每个通道每个频率点4字节(float),每帧最大数据长度为120字节(30个float) +#define MAX_FRAME_DATA_LEN 120 +// 指令的最小长度 +#define COMMAND_MIN_LENGTH 4 +// 循环缓冲区大小 +#define BUFFER_SIZE 121 +// 循环缓冲区 +uint8_t buffer[BUFFER_SIZE]; +// 循环缓冲区读索引 +uint8_t readIndex = 0; +// 循环缓冲区写索引 +uint8_t writeIndex = 0; + +/** + * @brief 增加读索引 + * @param length 要增加的长度 + */ +void Command_AddReadIndex(uint8_t length) +{ + readIndex += length; + readIndex %= BUFFER_SIZE; +} + +/** + * @brief 读取第i位数据 超过缓存区长度自动循环 + * @param i 要读取的数据索引 + */ + +uint8_t Command_Read(uint8_t i) +{ + uint8_t index = i % BUFFER_SIZE; + return buffer[index]; +} + +/** + * @brief 计算未处理的数据长度 + * @return 未处理的数据长度 + * @retval 0 缓冲区为空 + * @retval 1~BUFFER_SIZE-1 未处理的数据长度 + * @retval BUFFER_SIZE 缓冲区已满 + */ +// uint8_t Command_GetLength() { +// // 读索引等于写索引时,缓冲区为空 +// if (readIndex == writeIndex) { +// return 0; +// } +// // 如果缓冲区已满,返回BUFFER_SIZE +// if (writeIndex + 1 == readIndex || (writeIndex == BUFFER_SIZE - 1 && +// readIndex == 0)) { +// return BUFFER_SIZE; +// } +// // 如果缓冲区未满,返回未处理的数据长度 +// if (readIndex <= writeIndex) { +// return writeIndex - readIndex; +// } else { +// return BUFFER_SIZE - readIndex + writeIndex; +// } +// } + +uint8_t Command_GetLength() { return (writeIndex + BUFFER_SIZE - readIndex) % BUFFER_SIZE; } + +/** + * @brief 计算缓冲区剩余空间 + * @return 剩余空间 + * @retval 0 缓冲区已满 + * @retval 1~BUFFER_SIZE-1 剩余空间 + * @retval BUFFER_SIZE 缓冲区为空 + */ +uint8_t Command_GetRemain() { return BUFFER_SIZE - Command_GetLength(); } + +/** + * @brief 向缓冲区写入数据 + * @param data 要写入的数据指针 + * @param length 要写入的数据长度 + * @return 写入的数据长度 + */ +uint8_t Command_Write(uint8_t *data, uint16_t length) +{ + // 如果缓冲区不足 则不写入数据 返回0 + if (Command_GetRemain() < length) + { + return 0; + } + // 使用memcpy函数将数据写入缓冲区 + if (writeIndex + length < BUFFER_SIZE) + { + memcpy(buffer + writeIndex, data, length); + writeIndex += length; + } + else + { + uint8_t firstLength = BUFFER_SIZE - writeIndex; + memcpy(buffer + writeIndex, data, firstLength); + memcpy(buffer, data + firstLength, length - firstLength); + writeIndex = length - firstLength; + } + return length; +} + +/** + * @brief 尝试获取一条指令 + * @param command 指令存放指针 + * @return 获取的指令长度 + * @retval 0 没有获取到指令 + */ +uint8_t Command_GetCommand(uint8_t *command) +{ + /* + | 帧头 | 命令 | 长度 | 帧号 | 数据 (128B) | CRC16 | + |--------|------|--------|------|-------------|--------| + | AA 55 | 04 | 80 | FF | 00 | + */ + // 寻找完整指令 + while (1) + { + // 如果缓冲区长度小于COMMAND_MIN_LENGTH 则不可能有完整的指令 + if (Command_GetLength() < COMMAND_MIN_LENGTH) + { + return 0; + } + // 如果不是包头 则跳过 重新开始寻找 + if (((Command_Read(readIndex) != 0xAA) || (Command_Read(readIndex + 1) != 0x55))) + { + Command_AddReadIndex(1); + continue; + } + // 如果缓冲区长度小于指令长度 则不可能有完整的指令 + uint8_t length = Command_Read(readIndex + 3); + if (Command_GetLength() < length) + { + return 0; + } + // 如果校验和不正确 则跳过 重新开始寻找 + uint16_t sum = 0; + for (uint8_t i = 0; i < length - 2; i++) + { + sum += Command_Read(readIndex + i); + } + if (sum != (Command_Read(readIndex + length - 2) << 8 | Command_Read(readIndex + length - 1))) + { + Command_AddReadIndex(1); + continue; + } + // 如果找到完整指令 则将指令写入command 返回指令长度 + for (uint8_t i = 0; i < length; i++) + { + command[i] = Command_Read(readIndex + i); + } + Command_AddReadIndex(length); + return length; + } +} +extern osSemaphoreId_t Command_Semaphore; +extern UART_HandleTypeDef huart1; +extern uint16_t CLKHZ[98]; +extern void CLKHZSET(uint16_t Deep); +extern float LineCheckF[32]; +union +{ + float ufloat; + uint32_t u32; + uint16_t u16[2]; + uint8_t u8[4]; +} uDataCover; + +uint16_t FramePack(uint8_t *buf, uint8_t cmd, uint8_t frameNum, uint8_t *data, uint16_t dataLength) +{ + uint8_t Lenth = 0; + uint16_t crcSum = 0; + memset(buf, 0, 128); + buf[0] = 0xAA; // 帧头 + buf[1] = 0x55; // 帧头 + buf[2] = cmd; // 命令 + buf[3] = 0x00; // 长度 + buf[4] = frameNum; // 帧号 + Lenth = 7; + + for (uint8_t i = 0; i < 5; i++) + { + crcSum += buf[i]; + } + for (uint8_t i = 0; i < dataLength; i++) + { + buf[i + 5] = data[i]; + crcSum += data[i]; + Lenth += 1; + } + buf[3] = Lenth; // 更新长度 + crcSum +=Lenth; + buf[Lenth - 2] = crcSum >> 8; // CRC高字节 + buf[Lenth - 1] = crcSum & 0xFF; // CRC低字节 + return Lenth; +} +struct uCommunication CommunicationData; +extern float OutPut1[8][4][98]; +extern float OutPut2[8][4][98]; +extern float OutPut3[8][4][98]; +extern float OutPut4[8][4][98]; +extern uint8_t Uart_ReadCache[128]; +uint8_t command[50]; +uint8_t SendBuf[128]; +int commandLength = 0; +uint8_t dtime = 10; +void Command_Deal(void) +{ + + osSemaphoreAcquire(Command_Semaphore, osWaitForever); // 等待命令信号量 + + + do + { + memset(command,0,50); + commandLength = Command_GetCommand(command); + if (commandLength == 0) + { + return; + } + uint8_t cmd = command[2]; // 获取命令 + uint8_t SenDataLenth = 0; + + switch (cmd) + { + case 1: // 开始测试命令 + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_RESET); + osDelay(50); + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); + CommunicationData.MeasurementPrecision = 0; + CommunicationData.MeasurementFlag = 1; + break; + case 2: // 终止测试命令 + CommunicationData.MeasurementPrecision = 0; + CommunicationData.MeasurementFlag = 0; + break; + case 3: // 设定深度 + CommunicationData.Deep = (command[5] << 8) | command[6]; + CLKHZSET(CommunicationData.Deep); + break; + case 4: // 设置增益 + CommunicationData.Gain = command[5]; + break; + case 5: // 设定通道数量 + CommunicationData.ChannelNum = command[5]; + break; + case 6: // 道接地信号强度测试命令 + CommunicationData.SingelStrengthMeasurementFlag = 1; + CommunicationData.MeasurementPrecision = 0; + break; + case 7: // 获取通道接地信号强度 + if (CommunicationData.MeasurementPrecision == 100.0f) + { + SenDataLenth = FramePack(SendBuf, 0x07, 0x01, (uint8_t *)LineCheckF, 16 * 4); + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; // 等待UART发送完成 + osDelay(50); + + SenDataLenth = FramePack(SendBuf, 0x07, 0xFF, (uint8_t *)(LineCheckF + 16), 16 * 4); + + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + osDelay(100); + HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Uart_ReadCache, 128); // 重新启动DMA接收 + } + break; + case 8: // 获取测量进度 + { + SenDataLenth = FramePack(SendBuf, 0x08, 0xFF, (uint8_t *)&CommunicationData.MeasurementPrecision, 1); + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; // 等待UART发送完成 + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + break; + } + case 9: // 获取测量结果 + if (CommunicationData.MeasurementPrecision == 100.0f) + { + uint8_t totalChannels = CommunicationData.ChannelNum; + uint8_t totalFreqs = 0; + for (uint8_t i = 0; i < 98; i++) + { + if (CLKHZ[i] != 0) + totalFreqs++; + else + break; + } + uint32_t totalDataLen = totalChannels * totalFreqs * 4; + uint8_t frameNum = 1; + uint32_t sentLen = 0; + + while (sentLen < totalDataLen) + { + /** + * 根据剩余待发送数据长度,计算本次发送的数据长度,并组装数据帧。 + * + * 1. 计算本次发送的数据长度 sendLen,不超过 MAX_FRAME_DATA_LEN。 + * 2. 初始化数据缓冲区 dataBuf。 + * 3. 遍历每个待发送的 float 数据(每 4 字节为一个 float),根据 globalIdx 计算通道号 ch 和频点 freq。 + * 4. 根据通道号 ch 从对应的 OutPut 数组中获取数据 val。 + * - ch < 8: 从 OutPut1 取数据 + * - ch < 16: 从 OutPut2 取数据 + * - ch < 24: 从 OutPut3 取数据 + * - ch < 32: 从 OutPut4 取数据 + * 5. 将获取到的 float 数据 val 拷贝到 dataBuf 中,准备发送。 + * + * 参数说明: + * - totalDataLen: 总数据长度(字节) + * - sentLen: 已发送的数据长度(字节) + * - MAX_FRAME_DATA_LEN: 单帧最大数据长度(字节) + * - totalChannels: 总通道数 + * - OutPut1~4: 四组输出数据数组 + */ + uint32_t remain = totalDataLen - sentLen; + uint8_t sendLen = (remain > MAX_FRAME_DATA_LEN) ? MAX_FRAME_DATA_LEN : remain; + uint8_t dataBuf[MAX_FRAME_DATA_LEN]; + // 组装数据 + uint32_t dataIdx = 0; + uint32_t globalIdx = sentLen / 4; + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + osDelay(dtime); + for (uint8_t i = 0; i < sendLen / 4; i++) + { + uint8_t ch = (globalIdx % totalChannels); + uint8_t freq = (globalIdx / totalChannels); + float val = 0.0f; + if (ch < 8) + val = OutPut1[ch][0][freq]; + else if (ch < 16) + val = OutPut2[ch - 8][0][freq]; + else if (ch < 24) + val = OutPut3[ch - 16][0][freq]; + else if (ch < 32) + val = OutPut4[ch - 24][0][freq]; + memcpy(&dataBuf[dataIdx], &val, 4); + dataIdx += 4; + globalIdx++; + } + + uint8_t thisFrameNum = (sentLen + sendLen >= totalDataLen) ? 0xFF : frameNum; + SenDataLenth = FramePack(SendBuf, 0x09, thisFrameNum, dataBuf, sendLen); + + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; + sentLen += sendLen; + frameNum++; + } + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + osDelay(100); + HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Uart_ReadCache, 128); // 重新启动DMA接收 + + } + break; + case 10: // 获取电池电压 + SenDataLenth = FramePack(SendBuf, 0x0A, 0x01, (uint8_t *)&CommunicationData.BatteryVoltage, 4); + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; // 等待UART发送完成 + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + break; + case 11: // 获取电流 + SenDataLenth = FramePack(SendBuf, 0x0B, 0x01, (uint8_t *)&CommunicationData.BatteryCurrent, 4); + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + HAL_UART_Transmit(&huart1, SendBuf, SenDataLenth, HAL_MAX_DELAY); + while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) + ; // 等待UART发送完成 + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + break; + } + } + while(commandLength != 0); +} + +/* + | 帧头 | 命令 | 长度 | 帧号 | 数据 (128B) | CRC16 | + |--------|------|--------|------|-------------|--------| + | AA 55 | 04 | 80 | FF | 00 | + +设定频率 +设置增益 +设定通道数量 +道接地信号强度测试命令 +获取通道接地信号强度 +开始测试命令 +终止测试命令 +获取测量进度 +获取测量结果 +获取电池电压 +获取电流 +CmdTable cmd_table[] = { + {"CMD_START", 1}, // 开始测试命令 + {"CMD_STOP", 2}, // 终止测试命令 + {"CMD_SET_FREQ", 3}, // 设定深度 + {"CMD_SET_GAIN", 4}, // 设置增益 + {"CMD_SET_CHANNELS", 5}, // 设定通道数量 + {"CMD_TEST_GROUND", 6}, // 道接地信号强度测试命令 + {"CMD_GET_GROUND", 7}, // 获取通道接地信号强度 + {"CMD_GET_PROGRESS", 8}, // 获取测量进度 + {"CMD_GET_RESULT", 9}, // 获取测量结果 + {"CMD_GET_BATTERY_VOLTAGE", 10}, // 获取电池电压 + {"CMD_GET_CURRENT", 11}, // 获取电流 + // ...更多命令 +}; +*/ diff --git a/Src/FlashRW.c b/Src/FlashRW.c new file mode 100644 index 0000000..2b1bc52 --- /dev/null +++ b/Src/FlashRW.c @@ -0,0 +1,53 @@ +#include "main.h" +#include "stm32h7xx_hal.h" + + + +void Store_Data_To_Flash(float *data, uint32_t size); +void Read_Data_From_Flash(float *data, uint32_t size); + + +void Store_Data_To_Flash(float *data, uint32_t size) +{ + HAL_StatusTypeDef status; + FLASH_EraseInitTypeDef erase_init; + uint32_t page_error; + + // Flash + HAL_FLASH_Unlock(); + + // ʼṹ +// erase_init.TypeErase = FLASH_TYPEERASE_SECTORS; + erase_init.Banks = FLASH_BANK_1; // For dual bank STM32H7 devices, select the appropriate bank + erase_init.Sector = FLASH_SECTOR_2; // Specify the starting sector + erase_init.NbSectors = (size * sizeof(float) + FLASH_SECTOR_SIZE - 1) / FLASH_SECTOR_SIZE; // ҪFlash + + // Flash + status = HAL_FLASHEx_Erase(&erase_init, &page_error); + if(status != HAL_OK) + { + // ʧܴ + } + + // дFlash + for (uint32_t i = 0; i < size; i++) + { + status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, FLASH_DATA_ADDRESS + i * sizeof(float), *((uint32_t *)(data + i))); + if(status != HAL_OK) + { + // дʧܴ + } + } + // Flash + HAL_FLASH_Lock(); +} + +void Read_Data_From_Flash(float *data, uint32_t size) +{ + // Flashжȡ + for (uint32_t i = 0; i < size; i ++) + { + data[i] = *(uint32_t *)(FLASH_DATA_ADDRESS + i); + } +} + diff --git a/Src/freertos.c b/Src/freertos.c new file mode 100644 index 0000000..4c1aa6f --- /dev/null +++ b/Src/freertos.c @@ -0,0 +1,59 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : freertos.c + * Description : Code for freertos applications + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "FreeRTOS.h" +#include "task.h" +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN Variables */ + +/* USER CODE END Variables */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN FunctionPrototypes */ + +/* USER CODE END FunctionPrototypes */ + +/* Private application code --------------------------------------------------*/ +/* USER CODE BEGIN Application */ + +/* USER CODE END Application */ + diff --git a/Src/main.c b/Src/main.c new file mode 100644 index 0000000..67485b5 --- /dev/null +++ b/Src/main.c @@ -0,0 +1,1942 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "main.h" +#include "cmsis_os.h" +#include "usb_device.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +// #include "arm_math.h" +#include "stm32h7xx_hal_pwr.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ +#include "stdio.h" +#include +#include + +#define ITM_PORT8(n) (*(volatile unsigned char *)(0xe0000000 + 4 * (n))) +#define ITM_PORT16(n) (*(volatile unsigned short *)(0xe0000000 + 4 * (n))) +#define ITM_PORT32(n) (*(volatile unsigned long *)(0xe0000000 + 4 * (n))) +#define DEMCR (*(volatile unsigned long *)(0xE000EDFC)) +#define TRCENA 0X01000000 + +int fputc(int ch, FILE *f) +{ + if (DEMCR & TRCENA) + { + while (ITM_PORT32(0) == 0) + ; + ITM_PORT8(0) = ch; + } + return ch; +} +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +ADC_HandleTypeDef hadc3; +DMA_HandleTypeDef hdma_adc3; + +TIM_HandleTypeDef htim1; +TIM_HandleTypeDef htim2; +TIM_HandleTypeDef htim4; + +UART_HandleTypeDef huart1; +DMA_HandleTypeDef hdma_usart1_rx; + +DMA_HandleTypeDef hdma_memtomem_dma2_stream0; +/* Definitions for defaultTask */ +osThreadId_t defaultTaskHandle; + +/* USER CODE BEGIN PV */ +const osThreadAttr_t defaultTask_attributes = { + .name = "defaultTask", + .stack_size = 4096, + .priority = (osPriority_t)osPriorityNormal, +}; +const osThreadAttr_t CommunicationResponeTask_attributes = { + .name = "CommunicationResponeTask", + .stack_size = 4096, + .priority = (osPriority_t)osPriorityNormal, +}; +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_BDMA_Init(void); +static void MX_DMA_Init(void); +static void MX_ADC3_Init(void); +static void MX_USART1_UART_Init(void); +static void MX_TIM2_Init(void); +static void MX_TIM1_Init(void); +static void MX_TIM4_Init(void); +void StartDefaultTask(void *argument); + +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ +//_Bool ADC1Finish = 1; +//_Bool ADC2Finish = 1; +_Bool ADC3Finish = 1; +// uint32_t ADC3DataBuf[1024 * 10 / 2] __attribute__((section(".ADC3DataBufAddr"))); +// uint32_t ADC3DataBufTrans[4096 * 10 / 2] __attribute__((section(".ADC3DataBufTransAddr"))); +#define ADC3DataBuf ((uint32_t *)(D3_SRAM_BASE + 0x1000)) +#define ADC3DataBufTrans ((uint32_t *)(D1_AXISRAM_BASE + 0x50000)) +void ExitRun0Mode(void) {} +_Bool StartFlag = 0; +static uint8_t HFk = 0; +static uint8_t CPk = 0; +void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) +{ + __HAL_DMA_CLEAR_FLAG(hadc3.DMA_Handle, BDMA_FLAG_HT0); + if (StartFlag) + { + if (hadc->Instance == ADC3) + { + if (HFk < 4) + { + if (HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK) + { + Error_Handler(); + } + HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t)(ADC3DataBuf), + (uint32_t)(ADC3DataBufTrans + 1024 * 10 * 2 * HFk / 4), 1024 * 10); + while (__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_HTIF0_4) == RESET) + ; + __HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_HTIF0_4); + __HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_TCIF0_4); + HFk++; + } + else + { + HFk = 4; + } + } + } + else + { + HFk = 0; + } +} +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) +{ + __HAL_DMA_CLEAR_FLAG(hadc3.DMA_Handle, BDMA_FLAG_TC0); + if (StartFlag) + { + + if (hadc->Instance == ADC3) + { + + if (CPk < 4) + { + if (HFk <= CPk) + return; + if (HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK) + { + Error_Handler(); + } + HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t)(ADC3DataBuf + 1024 * 10 / 4), + (uint32_t)(ADC3DataBufTrans + 1024 * 10 / 4 + 1024 * 10 * 2 * CPk / 4), 1024 * 10); + while (__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_TCIF0_4) == RESET) + ; + __HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_HTIF0_4); + __HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_TCIF0_4); + CPk++; + if (CPk == 4) + { + ADC3Finish = 1; + StartFlag = 0; + } + } + else + { + CPk = 4; + ADC3Finish = 1; + StartFlag = 0; + } + } + } + else + { + CPk = 0; + } +} + +/* FFT相关参数,默认使用4096点FFT + * 可选范围为: 16, 64, 256, 1024, 4096 + */ +#define FFT_LENGTH 4096 + +uint16_t fft_inputbuf[FFT_LENGTH]; /* FFT输入缓冲区 */ +uint8_t Uart_ReadCache[128]; +_Bool ReadFlag = 0; +uint8_t gain = 0; +void CommunicationResponse(void *P_grg); +osSemaphoreId_t Command_Semaphore; +osSemaphoreId_t CommandResponse_Semaphore; +extern uint8_t Command_Write(uint8_t *data, uint16_t length); +extern uint8_t Command_GetCommand(uint8_t *command); + +void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) +{ + UNUSED(huart); +//HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_RESET); +//osDelay(10); +//HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); +// HAL_UART_DMAStop(huart); // 停止DMA接收 + if (Command_Write(Uart_ReadCache, Size) >= 4) + { + // 如果写入成功,释放信号量,允许其他线程获取 + osSemaphoreRelease(Command_Semaphore); + } + // 处理接收到的数据 +// HAL_UARTEx_ReceiveToIdle_DMA(huart, Uart_ReadCache, 128); // 重新启动DMA接收 +} + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /*************************************************************************************** */ + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_BDMA_Init(); + MX_DMA_Init(); + MX_ADC3_Init(); + MX_USART1_UART_Init(); + MX_TIM2_Init(); + MX_TIM1_Init(); + MX_TIM4_Init(); + /* USER CODE BEGIN 2 */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + + /* USER CODE END 2 */ + + /* Init scheduler */ + osKernelInitialize(); + + /* USER CODE BEGIN RTOS_MUTEX */ + /* add mutexes, ... */ + /* USER CODE END RTOS_MUTEX */ + + /* USER CODE BEGIN RTOS_SEMAPHORES */ + /* add semaphores, ... */ + /* USER CODE END RTOS_SEMAPHORES */ + + /* USER CODE BEGIN RTOS_TIMERS */ + /* start timers, add new ones, ... */ + /* USER CODE END RTOS_TIMERS */ + + /* USER CODE BEGIN RTOS_QUEUES */ + + /* USER CODE END RTOS_QUEUES */ + + /* Create the thread(s) */ + /* creation of defaultTask */ + + defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + + /* USER CODE BEGIN RTOS_THREADS */ + + + /* add threads, ... */ + /* USER CODE END RTOS_THREADS */ + + /* USER CODE BEGIN RTOS_EVENTS */ + /* add events, ... */ + /* USER CODE END RTOS_EVENTS */ + + /* Start scheduler */ + osKernelStart(); + + /* We should never get here as control is now taken by the scheduler */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); + + while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) + { + } + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 5; + RCC_OscInitStruct.PLL.PLLN = 192; + RCC_OscInitStruct.PLL.PLLP = 2; + RCC_OscInitStruct.PLL.PLLQ = 15; + RCC_OscInitStruct.PLL.PLLR = 2; + RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; + RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; + RCC_OscInitStruct.PLL.PLLFRACN = 0; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | + RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 | RCC_CLOCKTYPE_D1PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ADC3 Initialization Function + * @param None + * @retval None + */ +static void MX_ADC3_Init(void) +{ + + /* USER CODE BEGIN ADC3_Init 0 */ + + /* USER CODE END ADC3_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC3_Init 1 */ + + /* USER CODE END ADC3_Init 1 */ + + /** Common config + */ + hadc3.Instance = ADC3; + hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; + hadc3.Init.Resolution = ADC_RESOLUTION_16B; + hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV; + hadc3.Init.LowPowerAutoWait = DISABLE; + hadc3.Init.ContinuousConvMode = DISABLE; + hadc3.Init.NbrOfConversion = 10; + hadc3.Init.DiscontinuousConvMode = DISABLE; + hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T4_TRGO; + hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; + hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; + hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; + hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; + hadc3.Init.OversamplingMode = DISABLE; + hadc3.Init.Oversampling.Ratio = 1; + if (HAL_ADC_Init(&hadc3) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + sConfig.OffsetSignedSaturation = DISABLE; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_1; + sConfig.Rank = ADC_REGULAR_RANK_2; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_5; + sConfig.Rank = ADC_REGULAR_RANK_3; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_4; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_10; + sConfig.Rank = ADC_REGULAR_RANK_5; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_11; + sConfig.Rank = ADC_REGULAR_RANK_6; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_13; + sConfig.Rank = ADC_REGULAR_RANK_7; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_14; + sConfig.Rank = ADC_REGULAR_RANK_8; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_15; + sConfig.Rank = ADC_REGULAR_RANK_9; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_16; + sConfig.Rank = ADC_REGULAR_RANK_10; + if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC3_Init 2 */ + + /* USER CODE END ADC3_Init 2 */ +} + +/** + * @brief TIM1 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM1_Init(void) +{ + + /* USER CODE BEGIN TIM1_Init 0 */ + + /* USER CODE END TIM1_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; + + /* USER CODE BEGIN TIM1_Init 1 */ + + /* USER CODE END TIM1_Init 1 */ + htim1.Instance = TIM1; + htim1.Init.Prescaler = 240000000 / 1000000 - 1; + htim1.Init.CounterMode = TIM_COUNTERMODE_UP; + htim1.Init.Period = 100 - 1; + htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim1.Init.RepetitionCounter = 0; + htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; + if (HAL_TIM_Base_Init(&htim1) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 5; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; + sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; + if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; + sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; + sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; + sBreakDeadTimeConfig.DeadTime = 0; + sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; + sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; + sBreakDeadTimeConfig.BreakFilter = 0; + sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE; + sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH; + sBreakDeadTimeConfig.Break2Filter = 0; + sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; + if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM1_Init 2 */ + + /* USER CODE END TIM1_Init 2 */ +} + +/** + * @brief TIM2 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 240000000 / 1000000 - 1; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 100 - 1; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; + if (HAL_TIM_Base_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + HAL_TIM_MspPostInit(&htim2); +} + +/** + * @brief TIM4 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM4_Init(void) +{ + + /* USER CODE BEGIN TIM4_Init 0 */ + + /* USER CODE END TIM4_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM4_Init 1 */ + + /* USER CODE END TIM4_Init 1 */ + htim4.Instance = TIM4; + htim4.Init.Prescaler = 240000000 / 1000000 - 1; + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + htim4.Init.Period = 100 - 1; + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 5; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM4_Init 2 */ + + /* USER CODE END TIM4_Init 2 */ +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ +} + +/** + * Enable DMA controller clock + */ +static void MX_BDMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_BDMA_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMAMUX2_OVR_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMAMUX2_OVR_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMAMUX2_OVR_IRQn); + /* BDMA_Channel0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(BDMA_Channel0_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(BDMA_Channel0_IRQn); +} + +/** + * Enable DMA controller clock + * Configure DMA for memory to memory transfers + * hdma_memtomem_dma2_stream0 + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA2_CLK_ENABLE(); + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* Configure DMA request hdma_memtomem_dma2_stream0 on DMA2_Stream0 */ + hdma_memtomem_dma2_stream0.Instance = DMA2_Stream0; + hdma_memtomem_dma2_stream0.Init.Request = DMA_REQUEST_MEM2MEM; + hdma_memtomem_dma2_stream0.Init.Direction = DMA_MEMORY_TO_MEMORY; + hdma_memtomem_dma2_stream0.Init.PeriphInc = DMA_PINC_ENABLE; + hdma_memtomem_dma2_stream0.Init.MemInc = DMA_MINC_ENABLE; + hdma_memtomem_dma2_stream0.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_memtomem_dma2_stream0.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_memtomem_dma2_stream0.Init.Mode = DMA_NORMAL; + hdma_memtomem_dma2_stream0.Init.Priority = DMA_PRIORITY_LOW; + hdma_memtomem_dma2_stream0.Init.FIFOMode = DMA_FIFOMODE_ENABLE; + hdma_memtomem_dma2_stream0.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + hdma_memtomem_dma2_stream0.Init.MemBurst = DMA_MBURST_SINGLE; + hdma_memtomem_dma2_stream0.Init.PeriphBurst = DMA_PBURST_SINGLE; + if (HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK) + { + Error_Handler(); + } + + /* DMA interrupt init */ + /* DMA1_Stream5_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + /* USER CODE BEGIN MX_GPIO_Init_1 */ + /* USER CODE END MX_GPIO_Init_1 */ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_11, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7, + GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14, + GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); + + /*Configure GPIO pin : PA8 */ + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin : PC11 */ + GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /*Configure GPIO pins : PD0 PD1 PD3 PD4 + PD5 */ + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /*Configure GPIO pins : PD2 PD7 */ + GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /*Configure GPIO pins : PG9 PG10 PG11 PG12 + PG13 PG14 */ + GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /*Configure GPIO pin : PI7 */ + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + + /* USER CODE BEGIN MX_GPIO_Init_2 */ + /* USER CODE END MX_GPIO_Init_2 */ +} + +/* USER CODE BEGIN 4 */ +void LOWPower() +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) + { + } + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); + + while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) + { + } + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 5; + RCC_OscInitStruct.PLL.PLLN = 32; + RCC_OscInitStruct.PLL.PLLP = 2; + RCC_OscInitStruct.PLL.PLLQ = 15; + RCC_OscInitStruct.PLL.PLLR = 2; + RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; + RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; + RCC_OscInitStruct.PLL.PLLFRACN = 0; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | + RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 | RCC_CLOCKTYPE_D1PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } + + MX_USART1_UART_Init(); +} + +uint16_t CLKHZ[98] = {5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, + 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // 500mi +float BaseNiose[4]; +float BaseNioseGain[4]; +float OutPut1[8][4][98]; +float OutPut2[8][4][98]; +float OutPut3[8][4][98]; +float OutPut4[8][4][98]; +uint8_t CLKCount = 98; +float Datav; +void CLKHZSET(uint16_t Deep) +{ + switch (Deep) + { + case 150: + { + uint16_t HZ[98] = {5000, 4500, 4000, 3500, 3000, 2500, 2200, 2000, 1800, 1600, 1400, 1300, 1200, 1100, + 1000, 950, 900, 850, 800, 750, 700, 650, 600, 550, 500, 460, 400, 350, + 320, 300, 260, 230, 210, 190, 180, 170, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 500mi + memcpy(CLKHZ, HZ, sizeof(HZ)); + CLKCount = 36; + break; + } + case 600: + { + + uint16_t HZ[98] = {5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, + 400, 350, 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, + 85, 80, 77, 75, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, + 61, 60, 59, 58, 57, 56, 55, 54, 45, 44, 43, 42, 41, 40, 39, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + + }; + CLKCount = 60; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + case 800: + { + uint16_t HZ[98] = { + 5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + CLKCount = 64; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + case 1200: + { + uint16_t HZ[98] = { + 5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + CLKCount = 68; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + case 1500: + { + uint16_t HZ[98] = { + 5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + CLKCount = 78; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + case 2000: + { + uint16_t HZ[98] = { + 5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, + 13, 12, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + CLKCount = 88; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + default: + case 3000: + { + uint16_t HZ[98] = { + 5000, 4000, 3000, 2500, 2000, 1500, 1300, 1200, 1100, 1000, 900, 800, 700, 520, 460, 400, 350, + 300, 260, 230, 210, 190, 170, 160, 140, 130, 120, 110, 105, 90, 85, 80, 77, 75, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + 55, 54, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, + 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, + }; + CLKCount = 98; + memcpy(CLKHZ, HZ, sizeof(HZ)); + break; + } + } +} + +_Bool CheckMaxV(uint16_t Vmv) +{ + uint8_t j, k = 0; + for (k = 0; k < 100; k++) + { + for (j = 0; j < 128; j++) + { + // for( i = 0; i < 14/2; i++) + // { + // if( ADC1DataBuf[i+j*7] /65535 *3300 > Vmv ) + // return 1; + // if( ADC1DataBuf[i+j*7]>>16 /65535 *3300 > Vmv ) + // return 1; + // } + // if( ADC2DataBuf[j] /65535 *3300 > Vmv ) + // return 1; + // if( ADC2DataBuf[j]>>16 /65535 *3300 > Vmv ) + // return 1; + // for( i = 0; i < 16/2; i++) + { + // if( ADC3DataBuf[7+j*8] /65535 *3300 > Vmv ) + // return 1; + Datav = (ADC3DataBuf[7 + j * 8] >> 16) / 65535.0f * 3300; + if (Datav > Vmv + 1650) + return 1; + Datav = (ADC3DataBuf[7 + j * 8] & 0x00FF) / 65535.0f * 3300; + if (Datav > Vmv + 1650) + return 1; + Datav = (ADC3DataBuf[6 + j * 8] >> 16) / 65535.0f * 3300; + if (Datav > Vmv + 1650) + return 1; + Datav = (ADC3DataBuf[6 + j * 8] & 0x00FF) / 65535.0f * 3300; + if (Datav > Vmv + 1650) + return 1; + Datav = (ADC3DataBuf[0 + j * 8] >> 16) / 65535.0f * 3300; + if (Datav > Vmv + 1650) + return 1; + } + } + } + return 0; +} + +void ChannelSelect(uint8_t Channel) +{ + switch (Channel) + { + default: + case 0: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_RESET); + break; + case 1: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_RESET); + break; + case 2: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_RESET); + break; + case 3: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_RESET); + break; + case 4: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_SET); + break; + case 5: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_SET); + break; + case 6: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_SET); + break; + case 7: + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_12, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_10, GPIO_PIN_SET); + break; + } +} +void SampleRate_Set(uint32_t Rate) +{ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM4_Init 1 */ + + /* USER CODE END TIM4_Init 1 */ + htim4.Instance = TIM4; + htim4.Init.Prescaler = 240000000 / Rate / 100 - 1; + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + htim4.Init.Period = 100 - 1; + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 5; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } +} +void Clk_Set(uint16_t Clk) +{ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + htim2.Instance = TIM2; + if (Clk == 0) + { + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); + return; + } + + if (Clk < 5) + { + htim2.Init.Prescaler = 240000000 / (Clk * 100 * 100) - 1; + htim2.Init.Period = 100 - 1; + } + else + { + htim2.Init.Prescaler = 240000000 / (Clk * 10 * 100) - 1; + htim2.Init.Period = 10 - 1; + } + + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; + if (HAL_TIM_Base_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + if (Clk < 5) + { + + sConfigOC.Pulse = 50; + } + else + { + sConfigOC.Pulse = 5; + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + HAL_TIM_MspPostInit(&htim2); + + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); +} +void SlopeSet(uint8_t Level) +{ + osDelay(100); + + switch (Level) + { + default: + case 0: // 1 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET); + break; + case 1: // 10 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET); + break; + case 2: // 100 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET); + break; + case 3: // 1000 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET); + break; + case 4: // 10000 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET); + break; + case 5: // 100000 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_SET); + break; + } + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_11, GPIO_PIN_SET); + osDelay(100); + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_11, GPIO_PIN_RESET); +} +uint16_t i, j = 0; +union floattouint16_t +{ // 32位float与16位uint16的联合体 + float f; + uint32_t u32; + uint16_t u16[2]; + uint8_t u8[4]; +}; +union floattouint16_t FtU; + +// 计算一个数组的平均值 +float calculateAverage(uint16_t arr[], int size) +{ + double sum = 0.0; + + // 累加 + int i; + for (i = 0; i < size; i++) + { + sum += arr[i]; + } + + // 计算平均值 + double average = sum / size; + + return average / 65535.0f * 3300 * 2.828; +} + +_Bool LineCheckResult[32]; +float LineCheckF[32]; +char bufx[80]; +void LineCheck(void) +{ + uint16_t i, j, k = 0; + float TempCheck; + CommunicationData.MeasurementPrecision = 0; + SampleRate_Set(4096 * 2); + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET); + for (j = 0; j < 8; j++) + { + CommunicationData.MeasurementPrecision = 96 / 3 / 8 * j; + HAL_ADC_Stop_DMA(&hadc3); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + ChannelSelect(j); + memset(ADC3DataBuf, 0, sizeof(ADC3DataBuf)); + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + osDelay(500); + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 2] >> 0); // CH1 + } + LineCheckF[j + 0] = calculateAverage(fft_inputbuf, 1024); + + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 2] >> 16); // CH2 + } + LineCheckF[j + 8] = calculateAverage(fft_inputbuf, 1024); + + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 0] >> 16); // CH3 + } + LineCheckF[j + 16] = calculateAverage(fft_inputbuf, 1024); + + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 0] >> 0); // CH4 + } + LineCheckF[j + 24] = calculateAverage(fft_inputbuf, 1024); + } + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET); + for (j = 0; j < 8; j++) + { + CommunicationData.MeasurementPrecision = 96 / 3 / 8 * j + 30; + HAL_ADC_Stop_DMA(&hadc3); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + ChannelSelect(j); + memset(ADC3DataBuf, 0, sizeof(ADC3DataBuf)); + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + for (i = 0; i < 50; i++) + { + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET); + osDelay(5); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET); + osDelay(5); + } + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 2] >> 0); // CH1 + } + TempCheck = calculateAverage(fft_inputbuf, 1024); + LineCheckF[j + 0] = (TempCheck > LineCheckF[j + 0] ? (TempCheck - LineCheckF[j + 0]) : 0); + if (LineCheckF[j + 0] > 100) + { + LineCheckResult[j + 0] = 1; + } + else + { + LineCheckResult[j + 0] = 0; + } + + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 0] >> 16); // CH3 + } + TempCheck = calculateAverage(fft_inputbuf, 1024); + LineCheckF[j + 16] = (TempCheck > LineCheckF[j + 16] ? (TempCheck - LineCheckF[j + 16]) : 0); + if (LineCheckF[j + 16] > 100) + { + LineCheckResult[j + 16] = 1; + } + else + { + LineCheckResult[j + 16] = 0; + } + } + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_SET); // A1 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); // A0 + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); // A1 + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET); // A0 + for (j = 0; j < 8; j++) + { + CommunicationData.MeasurementPrecision = 96 / 3 / 8 * j + 60; + HAL_ADC_Stop_DMA(&hadc3); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + ChannelSelect(j); + memset(ADC3DataBuf, 0, sizeof(ADC3DataBuf)); + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + for (i = 0; i < 50; i++) + { + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); + osDelay(5); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); + osDelay(5); + } + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 2] >> 16); // CH2 + } + TempCheck = calculateAverage(fft_inputbuf, 1024); + LineCheckF[j + 8] = (TempCheck > LineCheckF[j + 8] ? (TempCheck - LineCheckF[j + 8]) : 0); + if (LineCheckF[j + 8] > 100) + { + LineCheckResult[j + 8] = 1; + } + else + { + LineCheckResult[j + 8] = 0; + } + + for (k = 0; k < 1024; k++) + { + fft_inputbuf[k] = (uint16_t)(ADC3DataBuf[k * 5 + 0] >> 0); // CH4 + } + TempCheck = calculateAverage(fft_inputbuf, 1024); + LineCheckF[j + 24] = (TempCheck > LineCheckF[j + 24] ? (TempCheck - LineCheckF[j + 24]) : 0); + if (LineCheckF[j + 24] > 100) + { + LineCheckResult[j + 24] = 1; + } + else + { + LineCheckResult[j + 24] = 0; + } + } + + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); +// osDelay(500); +// sprintf(bufx, "%s\r\n", "\r\n\r\n\r\n----------------------接线测试----------------------\r\n"); +// HAL_UART_Transmit(&huart1, (uint8_t *)bufx, strlen(bufx), 0xFFFF); +// while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) +// ; // 等待UART发送完成 +// osDelay(3000); +// for (i = 0; i < 32; i++) +// { + +// sprintf(bufx, "通道%02d: %.1f\r\n", i + 1, LineCheckF[i]); +// HAL_UART_Transmit(&huart1, (uint8_t *)bufx, strlen(bufx), 0xFFFF); +// while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) +// ; // 等待UART发送完成 +// } +// for (i = 0; i < 32; i++) +// { + +// sprintf(bufx, "通道%02d: %d\r\n", i + 1, LineCheckResult[i]); +// HAL_UART_Transmit(&huart1, (uint8_t *)bufx, strlen(bufx), 0xFFFF); +// while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) +// ; // 等待UART发送完成 +// } + ReadFlag = 1; +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); +// HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t *)&Uart_ReadCache, 100); // 锟劫匡拷锟斤拷锟斤拷锟斤拷锟叫讹拷 + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_RESET); + osDelay(1000); + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET); + CommunicationData.MeasurementPrecision = 100; +} + +extern void Command_Deal(void); +float FindMaxValue(float *data, uint16_t length) +{ + float maxValue = data[0]; + for (uint16_t i = 1; i < length; i++) + { + if (data[i] > maxValue) + { + maxValue = data[i]; + } + } + if(maxValue < 0.05) + { + maxValue = data[2]; + + } + return maxValue; +} +void CommunicationResponse(void *P_grg) +{ + float FindmaxDatabuf[4]; + for (;;) + { + + osSemaphoreAcquire(CommandResponse_Semaphore, osWaitForever); + + if (CommunicationData.MeasurementFlag) + { + uint8_t l, m, n = 0; + CommunicationData.MeasurementPrecision = 0; + SampleRate_Set(4096 * 2); + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + HAL_ADC_Stop_DMA(&hadc3); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + ChannelSelect(0); + Clk_Set(CLKHZ[0]); + osDelay(1000); // 10 + SlopeSet(2); +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); + HFk = 0; + CPk = 0; + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + + for (l = 0; l < CLKCount; l++) + { + if (!CommunicationData.MeasurementFlag) + break; + CommunicationData.MeasurementPrecision = 100.0 / CLKCount * l; + + osDelay(10); // 10 + for (m = 0; m < 8; m++) + { + if (!CommunicationData.MeasurementFlag) + break; + for (n = 0; n < 3; n++) + { + if (!CommunicationData.MeasurementFlag) + break; + if (l >= 90) + osDelay(2000); // 10 + else + osDelay(200); // 10 + ADC3Finish = 0; + StartFlag = 1; + do + { + osDelay(30); + } while (!ADC3Finish); + + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + HAL_ADC_Stop_DMA(&hadc3); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + if (n < 2) + { + SlopeSet(n + 3); + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + } + else + { + if ((m == 7) && (l < 97)) + { + Clk_Set(CLKHZ[l + 1]); + } + ChannelSelect(m + 1); + SlopeSet(2); + if ((m == 7) && (l < 97)) + { + } + HFk = 0; + CPk = 0; + if (l >= 90) + { + SampleRate_Set(4096 / 2); + osDelay(1500); // 10 + } + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); + } + + int x = 0; + for (x = 0; x < FFT_LENGTH; x++) + { + fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 0); // CH1 + } + OutPut1[m][n][l] = (calculateAverage(fft_inputbuf, FFT_LENGTH)) / pow(10, n + 2);// - BaseNioseGain[0]; + if (OutPut1[m][n][l] < 0) + OutPut1[m][n][l] = 0; + for (x = 0; x < FFT_LENGTH; x++) + { + fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 16); // CH2 + } + OutPut2[m][n][l] = (calculateAverage(fft_inputbuf, FFT_LENGTH) ) / pow(10, n + 2);// - BaseNioseGain[1]; + if (OutPut2[m][n][l] < 0) + OutPut2[m][n][l] = 0; + for (x = 0; x < FFT_LENGTH; x++) + { + fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 0); // CH3 + } + OutPut3[m][n][l] = (calculateAverage(fft_inputbuf, FFT_LENGTH) ) / pow(10, n + 2);// - BaseNioseGain[2]; + if (OutPut3[m][n][l] < 0) + OutPut3[m][n][l] = 0; + for (x = 0; x < FFT_LENGTH; x++) + { + fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 16); // CH4 + } + OutPut4[m][n][l] = (calculateAverage(fft_inputbuf, FFT_LENGTH) ) / pow(10, n + 2);// - BaseNioseGain[3]; + if (OutPut4[m][n][l] < 0) + OutPut4[m][n][l] = 0; + } + } + } + for (l = 0; l < CLKCount; l++) + { + for (m = 0; m < 8; m++) + { + FindmaxDatabuf[0] = OutPut1[m][0][l]; + FindmaxDatabuf[1] = OutPut1[m][1][l]; + FindmaxDatabuf[2] = OutPut1[m][2][l]; +// FindmaxDatabuf[3] = OutPut1[m][3][l]; + OutPut1[m][0][l] = FindMaxValue(FindmaxDatabuf, 3); + FindmaxDatabuf[0] = OutPut2[m][0][l]; + FindmaxDatabuf[1] = OutPut2[m][1][l]; + FindmaxDatabuf[2] = OutPut2[m][2][l]; +// FindmaxDatabuf[3] = OutPut2[m][3][l]; + OutPut2[m][0][l] = FindMaxValue(FindmaxDatabuf, 3); + FindmaxDatabuf[0] = OutPut3[m][0][l]; + FindmaxDatabuf[1] = OutPut3[m][1][l]; + FindmaxDatabuf[2] = OutPut3[m][2][l]; +// FindmaxDatabuf[3] = OutPut3[m][3][l]; + OutPut3[m][0][l] = FindMaxValue(FindmaxDatabuf, 3); + FindmaxDatabuf[0] = OutPut4[m][0][l]; + FindmaxDatabuf[1] = OutPut4[m][1][l]; + FindmaxDatabuf[2] = OutPut4[m][2][l]; +// FindmaxDatabuf[3] = OutPut4[m][3][l]; + OutPut4[m][0][l] = FindMaxValue(FindmaxDatabuf, 3); + } + } + HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); + HAL_ADC_Stop_DMA(&hadc3); + + + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_RESET); + osDelay(1500); + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); + if (!CommunicationData.MeasurementFlag) + { + CommunicationData.MeasurementPrecision = 0; + CommunicationData.MeasurementFlag = 0; + } + else + { + CommunicationData.MeasurementPrecision = 100; + CommunicationData.MeasurementFlag = 0; + } + } + if (CommunicationData.SingelStrengthMeasurementFlag) + { + LineCheck(); + CommunicationData.SingelStrengthMeasurementFlag = 0; + } + } +} +/* USER CODE END 4 */ + +/* USER CODE BEGIN Header_StartDefaultTask */ +/** + * @brief Function implementing the defaultTask thread. + * @param argument: Not used + * @retval None + */ +#include "usbd_cdc_if.h" +/* USER CODE END Header_StartDefaultTask */ +void StartDefaultTask(void *argument) +{ + /* init code for USB_DEVICE */ +// MX_USB_DEVICE_Init(); + /* USER CODE BEGIN 5 */ + /* Infinite loop */ + CommunicationData.Deep = 150; // 默认深度150 + CommunicationData.ChannelNum = 8; // 默认通道数8 + HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET); + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); + SlopeSet(0); + Clk_Set(CLKHZ[0]); + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); + + osDelay(5000); // 10 + HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); + HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED); + HAL_ADC_Start_DMA(&hadc3, ADC3DataBuf, 1024 * 10); + HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Uart_ReadCache, 128); // 开启DMA串口接收 + __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 开启空闲中断 /* USER CODE END RTOS_EVENTS */ + __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); // 禁止半传输完成中断 + CommandResponse_Semaphore = osSemaphoreNew(1, 0, NULL); // 创建命令响应信号量,初始值为0,最大值为1 + Command_Semaphore = osSemaphoreNew(1, 0, NULL); // 创建信号量,初始值为0,最大值为1 + // osThreadId_t communicationTaskHandle = + osThreadNew(CommunicationResponse, NULL, &CommunicationResponeTask_attributes); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + +// HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); +// osDelay(500); // 10 +// { +// ADC3Finish = 0; +// StartFlag = 1; +// do +// { +// osDelay(50); +// } while (!ADC3Finish); +// HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); +// int x = 0; + +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 0); // CH1 +// } +// BaseNiose[0] = calculateAverage(fft_inputbuf, FFT_LENGTH); +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 16); // CH2 +// } +// BaseNiose[1] = calculateAverage(fft_inputbuf, FFT_LENGTH); +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 0); // CH3 +// } +// BaseNiose[2] = calculateAverage(fft_inputbuf, FFT_LENGTH); +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 16); // CH4 +// } +// BaseNiose[3] = calculateAverage(fft_inputbuf, FFT_LENGTH); +// } + + + + +// +// SlopeSet(4); +// Clk_Set(CLKHZ[0]); +// osDelay(1000); // 10 + +// HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); +// osDelay(500); // 10 +// { +// ADC3Finish = 0; +// StartFlag = 1; +// do +// { +// osDelay(50); +// } while (!ADC3Finish); +// HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); +// int x = 0; + +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 0); // CH1 +// } +// BaseNioseGain[0] = (calculateAverage(fft_inputbuf, FFT_LENGTH) - BaseNiose[0]) / 10000.0f; +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 3] >> 16); // CH2 +// } +// BaseNioseGain[1] = (calculateAverage(fft_inputbuf, FFT_LENGTH) - BaseNiose[1]) / 10000.0f; +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 0); // CH3 +// } +// BaseNioseGain[2] = (calculateAverage(fft_inputbuf, FFT_LENGTH) - BaseNiose[2]) / 10000.0f; +// for (x = 0; x < FFT_LENGTH; x++) +// { +// fft_inputbuf[x] = (uint16_t)(ADC3DataBufTrans[x * 5 + 4] >> 16); // CH4 +// } +// BaseNioseGain[3] = (calculateAverage(fft_inputbuf, FFT_LENGTH) - BaseNiose[3]) / 10000.0f; +// } + + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_RESET); + osDelay(500); + HAL_GPIO_WritePin(GPIOI, GPIO_PIN_7, GPIO_PIN_SET); + + + +// char buf[80]; + +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); +// sprintf(buf, "%.4f,%.4f,%.4f,%.4f,%.4f,%.4f,%.4f,%.4f,\r\n", BaseNiose[0],BaseNiose[1],BaseNiose[2],BaseNiose[3],BaseNioseGain[0],BaseNioseGain[1],BaseNioseGain[2],BaseNioseGain[3]); +// HAL_UART_Transmit(&huart1, (uint8_t *)buf, strlen(buf), HAL_MAX_DELAY); +// while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX); +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + while (1) + { + + Command_Deal(); + osSemaphoreRelease(CommandResponse_Semaphore); + osDelay(300); // + } + + // LOWPower(); + + /* USER CODE END 5 */ +} + +/** + * @brief Period elapsed callback in non blocking mode + * @note This function is called when TIM7 interrupt took place, inside + * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment + * a global variable "uwTick" used as application time base. + * @param htim : TIM handle + * @retval None + */ +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* USER CODE BEGIN Callback 0 */ + + /* USER CODE END Callback 0 */ + if (htim->Instance == TIM7) + { + HAL_IncTick(); + } + /* USER CODE BEGIN Callback 1 */ + + /* USER CODE END Callback 1 */ +} + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/Src/stm32h7xx_hal_msp.c b/Src/stm32h7xx_hal_msp.c new file mode 100644 index 0000000..e700cc1 --- /dev/null +++ b/Src/stm32h7xx_hal_msp.c @@ -0,0 +1,454 @@ +/* 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) 2024 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 ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_adc3; + +extern DMA_HandleTypeDef hdma_usart1_rx; + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 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 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + /* PendSV_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** + * @brief ADC MSP Initialization + * This function configures the hardware resources used in this example + * @param hadc: ADC handle pointer + * @retval None + */ +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + HAL_DMA_MuxSyncConfigTypeDef pSyncConfig; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hadc->Instance==ADC3) + { + /* USER CODE BEGIN ADC3_MspInit 0 */ + + /* USER CODE END ADC3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInitStruct.PLL2.PLL2M = 5; + PeriphClkInitStruct.PLL2.PLL2N = 144; + PeriphClkInitStruct.PLL2.PLL2P = 10; + PeriphClkInitStruct.PLL2.PLL2Q = 2; + PeriphClkInitStruct.PLL2.PLL2R = 2; + PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2; + PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; + PeriphClkInitStruct.PLL2.PLL2FRACN = 0; + PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_ADC3_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + /**ADC3 GPIO Configuration + PF3 ------> ADC3_INP5 + PC0 ------> ADC3_INP10 + PC1 ------> ADC3_INP11 + PC2_C ------> ADC3_INP0 + PC3_C ------> ADC3_INP1 + PH2 ------> ADC3_INP13 + PH3 ------> ADC3_INP14 + PH4 ------> ADC3_INP15 + PH5 ------> ADC3_INP16 + */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN); + + HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN); + + /* ADC3 DMA Init */ + /* ADC3 Init */ + hdma_adc3.Instance = BDMA_Channel0; + hdma_adc3.Init.Request = BDMA_REQUEST_ADC3; + hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc3.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_adc3.Init.Mode = DMA_CIRCULAR; + hdma_adc3.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_adc3) != HAL_OK) + { + Error_Handler(); + } + + pSyncConfig.SyncSignalID = HAL_DMAMUX2_SYNC_EXTI0; + pSyncConfig.SyncPolarity = HAL_DMAMUX_SYNC_NO_EVENT; + pSyncConfig.SyncEnable = DISABLE; + pSyncConfig.EventEnable = ENABLE; + pSyncConfig.RequestNumber = 1; + if (HAL_DMAEx_ConfigMuxSync(&hdma_adc3, &pSyncConfig) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc3); + + /* USER CODE BEGIN ADC3_MspInit 1 */ + + /* USER CODE END ADC3_MspInit 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) +{ + if(hadc->Instance==ADC3) + { + /* USER CODE BEGIN ADC3_MspDeInit 0 */ + + /* USER CODE END ADC3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC3_CLK_DISABLE(); + + /**ADC3 GPIO Configuration + PF3 ------> ADC3_INP5 + PC0 ------> ADC3_INP10 + PC1 ------> ADC3_INP11 + PC2_C ------> ADC3_INP0 + PC3_C ------> ADC3_INP1 + PH2 ------> ADC3_INP13 + PH3 ------> ADC3_INP14 + PH4 ------> ADC3_INP15 + PH5 ------> ADC3_INP16 + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_3); + + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_1); + + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5); + + /* ADC3 DMA DeInit */ + HAL_DMA_DeInit(hadc->DMA_Handle); + /* USER CODE BEGIN ADC3_MspDeInit 1 */ + + /* USER CODE END ADC3_MspDeInit 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==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_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + else if(htim_base->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 */ + } + +} + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspPostInit 0 */ + + /* USER CODE END TIM2_MspPostInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM2 GPIO Configuration + PA15 (JTDI) ------> TIM2_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM2_MspPostInit 1 */ + + /* USER CODE END TIM2_MspPostInit 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==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_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + else if(htim_base->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 */ + } + +} + +/** + * @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_USART16CLKSOURCE_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); + + /* USART1 DMA Init */ + /* USART1_RX Init */ + hdma_usart1_rx.Instance = DMA1_Stream5; + hdma_usart1_rx.Init.Request = DMA_REQUEST_USART1_RX; + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_rx.Init.Mode = DMA_NORMAL; + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx); + + /* USART1 interrupt Init */ + HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_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); + + /* USART1 DMA DeInit */ + HAL_DMA_DeInit(huart->hdmarx); + + /* USART1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Src/stm32h7xx_hal_timebase_tim.c b/Src/stm32h7xx_hal_timebase_tim.c new file mode 100644 index 0000000..6d550ba --- /dev/null +++ b/Src/stm32h7xx_hal_timebase_tim.c @@ -0,0 +1,130 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_hal_timebase_TIM.c + * @brief HAL time base based on the hardware TIM. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "stm32h7xx_hal.h" +#include "stm32h7xx_hal_tim.h" + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_HandleTypeDef htim7; +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief This function configures the TIM7 as a time base source. + * The time source is configured to have 1ms time base with a dedicated + * Tick interrupt priority. + * @note This function is called automatically at the beginning of program after + * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig(). + * @param TickPriority: Tick interrupt priority. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + RCC_ClkInitTypeDef clkconfig; + uint32_t uwTimclock, uwAPB1Prescaler; + uint32_t uwPrescalerValue; + uint32_t pFLatency; + + /*Configure the TIM7 IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + { + HAL_NVIC_SetPriority(TIM7_IRQn, TickPriority ,0); + + /* Enable the TIM7 global Interrupt */ + HAL_NVIC_EnableIRQ(TIM7_IRQn); + uwTickPrio = TickPriority; + } + else + { + return HAL_ERROR; + } + + /* Enable TIM7 clock */ + __HAL_RCC_TIM7_CLK_ENABLE(); + + /* Get clock configuration */ + HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); + + /* Get APB1 prescaler */ + uwAPB1Prescaler = clkconfig.APB1CLKDivider; + /* Compute TIM7 clock */ + if (uwAPB1Prescaler == RCC_HCLK_DIV1) + { + uwTimclock = HAL_RCC_GetPCLK1Freq(); + } + else + { + uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq(); + } + + /* Compute the prescaler value to have TIM7 counter clock equal to 1MHz */ + uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); + + /* Initialize TIM7 */ + htim7.Instance = TIM7; + + /* Initialize TIMx peripheral as follow: + * Period = [(TIM7CLK/1000) - 1]. to have a (1/1000) s time base. + * Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. + * ClockDivision = 0 + * Counter direction = Up + */ + htim7.Init.Period = (1000000U / 1000U) - 1U; + htim7.Init.Prescaler = uwPrescalerValue; + htim7.Init.ClockDivision = 0; + htim7.Init.CounterMode = TIM_COUNTERMODE_UP; + + if(HAL_TIM_Base_Init(&htim7) == HAL_OK) + { + /* Start the TIM time Base generation in interrupt mode */ + return HAL_TIM_Base_Start_IT(&htim7); + } + + /* Return function status */ + return HAL_ERROR; +} + +/** + * @brief Suspend Tick increment. + * @note Disable the tick increment by disabling TIM7 update interrupt. + * @param None + * @retval None + */ +void HAL_SuspendTick(void) +{ + /* Disable TIM7 update Interrupt */ + __HAL_TIM_DISABLE_IT(&htim7, TIM_IT_UPDATE); +} + +/** + * @brief Resume Tick increment. + * @note Enable the tick increment by Enabling TIM7 update interrupt. + * @param None + * @retval None + */ +void HAL_ResumeTick(void) +{ + /* Enable TIM7 Update interrupt */ + __HAL_TIM_ENABLE_IT(&htim7, TIM_IT_UPDATE); +} + diff --git a/Src/stm32h7xx_it.c b/Src/stm32h7xx_it.c new file mode 100644 index 0000000..81baaef --- /dev/null +++ b/Src/stm32h7xx_it.c @@ -0,0 +1,261 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32h7xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern PCD_HandleTypeDef hpcd_USB_OTG_FS; +extern DMA_HandleTypeDef hdma_adc3; +extern DMA_HandleTypeDef hdma_usart1_rx; +extern UART_HandleTypeDef huart1; +extern TIM_HandleTypeDef htim7; + +/* USER CODE BEGIN EV */ +extern uint32_t ADC1DataBuf[1024*14/2]; +extern uint32_t ADC2DataBuf[1024*2/2]; +extern uint32_t ADC3DataBuf[1024*16/2]; +extern uint32_t ADC1DataBufTrans[4096*14/2]; +extern uint32_t ADC2DataBufTrans[4096*2/2]; +extern uint32_t ADC3DataBufTrans[4096*16/2]; +extern DMA_HandleTypeDef hdma_memtomem_dma2_stream0; +extern uint8_t Uart_ReadCache[128]; + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +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 Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_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 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 1 */ +} + +/******************************************************************************/ +/* STM32H7xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32h7xx.s). */ +/******************************************************************************/ + +/** + * @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_usart1_rx); + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + /* USER CODE BEGIN USART1_IRQn 0 */ + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + /* USER CODE BEGIN USART1_IRQn 1 */ +// HAL_UART_DMAStop(&huart1); // ֹͣDMA + HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Uart_ReadCache, 128); // DMA + /* USER CODE END USART1_IRQn 1 */ +} + +/** + * @brief This function handles TIM7 global interrupt. + */ +void TIM7_IRQHandler(void) +{ + /* USER CODE BEGIN TIM7_IRQn 0 */ + + /* USER CODE END TIM7_IRQn 0 */ + HAL_TIM_IRQHandler(&htim7); + /* USER CODE BEGIN TIM7_IRQn 1 */ + + /* USER CODE END TIM7_IRQn 1 */ +} + +/** + * @brief This function handles USB On The Go FS global interrupt. + */ +void OTG_FS_IRQHandler(void) +{ + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + +/** + * @brief This function handles DMAMUX2 overrun interrupt. + */ +void DMAMUX2_OVR_IRQHandler(void) +{ + /* USER CODE BEGIN DMAMUX2_OVR_IRQn 0 */ + + /* USER CODE END DMAMUX2_OVR_IRQn 0 */ + // Handle BDMA_Channel0 + HAL_DMAEx_MUX_IRQHandler(&hdma_adc3); + /* USER CODE BEGIN DMAMUX2_OVR_IRQn 1 */ + + /* USER CODE END DMAMUX2_OVR_IRQn 1 */ +} + +/** + * @brief This function handles BDMA channel0 global interrupt. + */ +void BDMA_Channel0_IRQHandler(void) +{ + /* USER CODE BEGIN BDMA_Channel0_IRQn 0 */ + + /* USER CODE END BDMA_Channel0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc3); + /* USER CODE BEGIN BDMA_Channel0_IRQn 1 */ + + /* USER CODE END BDMA_Channel0_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Src/syscalls.c b/Src/syscalls.c new file mode 100644 index 0000000..e10d76f --- /dev/null +++ b/Src/syscalls.c @@ -0,0 +1,244 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeMX + * @brief Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib or Picolibc libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2025 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. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + (void)file; + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + (void)file; + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int _open(char *path, int flags, ...) +{ + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + (void)status; + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + (void)name; + errno = ENOENT; + return -1; +} + +clock_t _times(struct tms *buf) +{ + (void)buf; + return -1; +} + +int _stat(const char *file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} + +// --- Picolibc Specific Section --- +#if defined(__PICOLIBC__) + +/** + * @brief Picolibc helper function to output a character to a FILE stream. + * This redirects the output to the low-level __io_putchar function. + * @param c Character to write. + * @param file FILE stream pointer (ignored). + * @retval int The character written. + */ +static int starm_putc(char c, FILE *file) +{ + (void) file; + __io_putchar(c); + return c; +} + +/** + * @brief Picolibc helper function to input a character from a FILE stream. + * This redirects the input from the low-level __io_getchar function. + * @param file FILE stream pointer (ignored). + * @retval int The character read, cast to an unsigned char then int. + */ +static int starm_getc(FILE *file) +{ + unsigned char c; + (void) file; + c = __io_getchar(); + return c; +} + +// Define and initialize the standard I/O streams for Picolibc. +// FDEV_SETUP_STREAM connects the starm_putc and starm_getc helper functions to a FILE structure. +// _FDEV_SETUP_RW indicates the stream is for reading and writing. +static FILE __stdio = FDEV_SETUP_STREAM(starm_putc, + starm_getc, + NULL, + _FDEV_SETUP_RW); + +// Assign the standard stream pointers (stdin, stdout, stderr) to the initialized stream. +// Picolibc uses these pointers for standard I/O operations (printf, scanf, etc.). +FILE *const stdin = &__stdio; +__strong_reference(stdin, stdout); +__strong_reference(stdin, stderr); + +// Create strong aliases mapping standard C library function names (without underscore) +// to the implemented system call stubs (with underscore). Picolibc uses these +// standard names internally, so this linking is required. +__strong_reference(_read, read); +__strong_reference(_write, write); +__strong_reference(_times, times); +__strong_reference(_execve, execve); +__strong_reference(_fork, fork); +__strong_reference(_link, link); +__strong_reference(_unlink, unlink); +__strong_reference(_stat, stat); +__strong_reference(_wait, wait); +__strong_reference(_open, open); +__strong_reference(_close, close); +__strong_reference(_lseek, lseek); +__strong_reference(_isatty, isatty); +__strong_reference(_fstat, fstat); +__strong_reference(_exit, exit); +__strong_reference(_kill, kill); +__strong_reference(_getpid, getpid); + +#endif //__PICOLIBC__ diff --git a/Src/sysmem.c b/Src/sysmem.c new file mode 100644 index 0000000..a875d42 --- /dev/null +++ b/Src/sysmem.c @@ -0,0 +1,87 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeMX + * @brief System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the Newlib or Picolibc libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} + +#if defined(__PICOLIBC__) + // Picolibc expects syscalls without the leading underscore. + // This creates a strong alias so that + // calls to `sbrk()` are resolved to our `_sbrk()` implementation. + __strong_reference(_sbrk, sbrk); +#endif diff --git a/Src/system_stm32h7xx.c b/Src/system_stm32h7xx.c new file mode 100644 index 0000000..f024f51 --- /dev/null +++ b/Src/system_stm32h7xx.c @@ -0,0 +1,450 @@ +/** + ****************************************************************************** + * @file system_stm32h7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-Mx Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32h7xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock, it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32h7xx_system + * @{ + */ + +/** @addtogroup STM32H7xx_System_Private_Includes + * @{ + */ + +#include "stm32h7xx.h" +#include + +#if !defined (HSE_VALUE) +#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (CSI_VALUE) +#define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +#if !defined (HSI_VALUE) +#define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use initialized data in D2 domain SRAM (AHB SRAM) */ +/* #define DATA_IN_D2_SRAM */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in FLASH BANK1 or AXI SRAM, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +#if defined(DUAL_CORE) && defined(CORE_CM4) +/*!< Uncomment the following line if you need to relocate your vector Table + in D2 AXI SRAM else user remap will be done in FLASH BANK2. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D2_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x300. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x300. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK2_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x300. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x300. */ +#endif /* VECT_TAB_SRAM */ +#else +/*!< Uncomment the following line if you need to relocate your vector Table + in D1 AXI SRAM else user remap will be done in FLASH BANK1. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D1_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x300. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x300. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK1_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x300. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x300. */ +#endif /* VECT_TAB_SRAM */ +#endif /* DUAL_CORE && CORE_CM4 */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Variables + * @{ + */ +/* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. +*/ +uint32_t SystemCoreClock = 480000000; +uint32_t SystemD2Clock = 64000000; +const uint8_t D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting and vector table location + * configuration. + * @param None + * @retval None + */ +void SystemInit (void) +{ +#if defined (DATA_IN_D2_SRAM) + __IO uint32_t tmpreg; +#endif /* DATA_IN_D2_SRAM */ + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */ +#endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + + /* Increasing the CPU frequency */ + if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + + /* Set HSION bit */ + RCC->CR |= RCC_CR_HSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */ + RCC->CR &= 0xEAF6ED7FU; + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + +#if defined(D3_SRAM_BASE) + /* Reset D1CFGR register */ + RCC->D1CFGR = 0x00000000; + + /* Reset D2CFGR register */ + RCC->D2CFGR = 0x00000000; + + /* Reset D3CFGR register */ + RCC->D3CFGR = 0x00000000; +#else + /* Reset CDCFGR1 register */ + RCC->CDCFGR1 = 0x00000000; + + /* Reset CDCFGR2 register */ + RCC->CDCFGR2 = 0x00000000; + + /* Reset SRDCFGR register */ + RCC->SRDCFGR = 0x00000000; +#endif + /* Reset PLLCKSELR register */ + RCC->PLLCKSELR = 0x02020200; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x01FF0000; + /* Reset PLL1DIVR register */ + RCC->PLL1DIVR = 0x01010280; + /* Reset PLL1FRACR register */ + RCC->PLL1FRACR = 0x00000000; + + /* Reset PLL2DIVR register */ + RCC->PLL2DIVR = 0x01010280; + + /* Reset PLL2FRACR register */ + + RCC->PLL2FRACR = 0x00000000; + /* Reset PLL3DIVR register */ + RCC->PLL3DIVR = 0x01010280; + + /* Reset PLL3FRACR register */ + RCC->PLL3FRACR = 0x00000000; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000; + +#if (STM32H7_DEV_ID == 0x450UL) + /* dual core CM7 or single core line */ + if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U) + { + /* if stm32h7 revY*/ + /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */ + *((__IO uint32_t*)0x51008108) = 0x000000001U; + } +#endif /* STM32H7_DEV_ID */ + +#if defined(DATA_IN_D2_SRAM) + /* in case of initialized data in D2 SRAM (AHB SRAM), enable the D2 SRAM clock (AHB SRAM clock) */ +#if defined(RCC_AHB2ENR_D2SRAM3EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); +#elif defined(RCC_AHB2ENR_D2SRAM2EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN); +#else + RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN); +#endif /* RCC_AHB2ENR_D2SRAM3EN */ + + tmpreg = RCC->AHB2ENR; + (void) tmpreg; +#endif /* DATA_IN_D2_SRAM */ + +#if defined(DUAL_CORE) && defined(CORE_CM4) + /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#else + /* + * Disable the FMC bank1 (enabled after reset). + * This, prevents CPU speculation access on this bank which blocks the use of FMC during + * 24us. During this time the others FMC master (such as LTDC) cannot use it! + */ + FMC_Bank1_R->BTCR[0] = 0x000030D2; + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#endif /*DUAL_CORE && CORE_CM4*/ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock , it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is CSI, SystemCoreClock will contain the CSI_VALUE(*) + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * - If SYSCLK source is PLL, SystemCoreClock will contain the CSI_VALUE(*), + * HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors. + * + * (*) CSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * (**) HSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 64 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***)HSE_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t pllp, pllsource, pllm, pllfracen, hsivalue, tmp; + uint32_t common_system_clock; + float_t fracn1, pllvco; + + + /* Get SYSCLK source -------------------------------------------------------*/ + + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + + case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */ + common_system_clock = CSI_VALUE; + break; + + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + common_system_clock = HSE_VALUE; + break; + + case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC); + pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ; + pllfracen = ((RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos); + fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3)); + + if (pllm != 0U) + { + switch (pllsource) + { + case RCC_PLLCKSELR_PLLSRC_HSI: /* HSI used as PLL clock source */ + + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + + break; + + case RCC_PLLCKSELR_PLLSRC_CSI: /* CSI used as PLL clock source */ + pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + case RCC_PLLCKSELR_PLLSRC_HSE: /* HSE used as PLL clock source */ + pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + default: + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + } + pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ; + common_system_clock = (uint32_t)(float_t)(pllvco/(float_t)pllp); + } + else + { + common_system_clock = 0U; + } + break; + + default: + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + } + + /* Compute SystemClock frequency --------------------------------------------------*/ +#if defined (RCC_D1CFGR_D1CPRE) + tmp = D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : CM4 CPU, AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU)); + +#else + tmp = D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_HPRE)>> RCC_CDCFGR1_HPRE_Pos]) & 0x1FU)); + +#endif + +#if defined(DUAL_CORE) && defined(CORE_CM4) + SystemCoreClock = SystemD2Clock; +#else + SystemCoreClock = common_system_clock; +#endif /* DUAL_CORE && CORE_CM4 */ +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/Src/usb_device.c b/Src/usb_device.c new file mode 100644 index 0000000..9a86291 --- /dev/null +++ b/Src/usb_device.c @@ -0,0 +1,101 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usb_device.c + * @version : v1.0_Cube + * @brief : This file implements the USB Device + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ + +#include "usb_device.h" +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_cdc.h" +#include "usbd_cdc_if.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ + +/* USER CODE END PFP */ + +/* USB Device Core handle declaration. */ +USBD_HandleTypeDef hUsbDeviceFS; + +/* + * -- Insert your variables declaration here -- + */ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* + * -- Insert your external function declaration here -- + */ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * Init USB device Library, add supported class and start the library + * @retval None + */ +void MX_USB_DEVICE_Init(void) +{ + /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */ + + /* USER CODE END USB_DEVICE_Init_PreTreatment */ + + /* Init Device Library, add supported class and start the library. */ + if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK) + { + Error_Handler(); + } + if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK) + { + Error_Handler(); + } + if (USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK) + { + Error_Handler(); + } + if (USBD_Start(&hUsbDeviceFS) != USBD_OK) + { + Error_Handler(); + } + + /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */ + HAL_PWREx_EnableUSBVoltageDetector(); + + /* USER CODE END USB_DEVICE_Init_PostTreatment */ +} + +/** + * @} + */ + +/** + * @} + */ + diff --git a/Src/usbd_cdc_if.c b/Src/usbd_cdc_if.c new file mode 100644 index 0000000..68f2cfb --- /dev/null +++ b/Src/usbd_cdc_if.c @@ -0,0 +1,328 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_cdc_if.c + * @version : v1.0_Cube + * @brief : Usb device for Virtual Com Port. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "usbd_cdc_if.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @brief Usb device library. + * @{ + */ + +/** @addtogroup USBD_CDC_IF + * @{ + */ + +/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions + * @brief Private types. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_TYPES */ + +/* USER CODE END PRIVATE_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines + * @brief Private defines. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_DEFINES */ +/* USER CODE END PRIVATE_DEFINES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros + * @brief Private macros. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_MACRO */ + +/* USER CODE END PRIVATE_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables + * @brief Private variables. + * @{ + */ +/* Create buffer for reception and transmission */ +/* It's up to user to redefine and/or remove those define */ +/** Received data over USB are stored in this buffer */ +uint8_t UserRxBufferFS[APP_RX_DATA_SIZE]; + +/** Data to send over USB CDC are stored in this buffer */ +uint8_t UserTxBufferFS[APP_TX_DATA_SIZE]; + +/* USER CODE BEGIN PRIVATE_VARIABLES */ + +/* USER CODE END PRIVATE_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables + * @brief Public variables. + * @{ + */ + +extern USBD_HandleTypeDef hUsbDeviceFS; + +/* USER CODE BEGIN EXPORTED_VARIABLES */ + +/* USER CODE END EXPORTED_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes + * @brief Private functions declaration. + * @{ + */ + +static int8_t CDC_Init_FS(void); +static int8_t CDC_DeInit_FS(void); +static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length); +static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len); +static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum); + +/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */ + +/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */ + +/** + * @} + */ + +USBD_CDC_ItfTypeDef USBD_Interface_fops_FS = +{ + CDC_Init_FS, + CDC_DeInit_FS, + CDC_Control_FS, + CDC_Receive_FS, + CDC_TransmitCplt_FS +}; + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Initializes the CDC media low layer over the FS USB IP + * @retval USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Init_FS(void) +{ + /* USER CODE BEGIN 3 */ + /* Set Application Buffers */ + USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0); + USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS); + return (USBD_OK); + /* USER CODE END 3 */ +} + +/** + * @brief DeInitializes the CDC media low layer + * @retval USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_DeInit_FS(void) +{ + /* USER CODE BEGIN 4 */ + return (USBD_OK); + /* USER CODE END 4 */ +} + +/** + * @brief Manage the CDC class requests + * @param cmd: Command code + * @param pbuf: Buffer containing command data (request parameters) + * @param length: Number of data to be sent (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) +{ + /* USER CODE BEGIN 5 */ + switch(cmd) + { + case CDC_SEND_ENCAPSULATED_COMMAND: + + break; + + case CDC_GET_ENCAPSULATED_RESPONSE: + + break; + + case CDC_SET_COMM_FEATURE: + + break; + + case CDC_GET_COMM_FEATURE: + + break; + + case CDC_CLEAR_COMM_FEATURE: + + break; + + /*******************************************************************************/ + /* Line Coding Structure */ + /*-----------------------------------------------------------------------------*/ + /* Offset | Field | Size | Value | Description */ + /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/ + /* 4 | bCharFormat | 1 | Number | Stop bits */ + /* 0 - 1 Stop bit */ + /* 1 - 1.5 Stop bits */ + /* 2 - 2 Stop bits */ + /* 5 | bParityType | 1 | Number | Parity */ + /* 0 - None */ + /* 1 - Odd */ + /* 2 - Even */ + /* 3 - Mark */ + /* 4 - Space */ + /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */ + /*******************************************************************************/ + case CDC_SET_LINE_CODING: + + break; + + case CDC_GET_LINE_CODING: + + break; + + case CDC_SET_CONTROL_LINE_STATE: + + break; + + case CDC_SEND_BREAK: + + break; + + default: + break; + } + + return (USBD_OK); + /* USER CODE END 5 */ +} + +/** + * @brief Data received over USB OUT endpoint are sent over CDC interface + * through this function. + * + * @note + * This function will issue a NAK packet on any OUT packet received on + * USB endpoint until exiting this function. If you exit this function + * before transfer is complete on CDC interface (ie. using DMA controller) + * it will result in receiving more data while previous ones are still + * not sent. + * + * @param Buf: Buffer of data to be received + * @param Len: Number of data received (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) +{ + /* USER CODE BEGIN 6 */ + USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); + USBD_CDC_ReceivePacket(&hUsbDeviceFS); + return (USBD_OK); + /* USER CODE END 6 */ +} + +/** + * @brief CDC_Transmit_FS + * Data to send over USB IN endpoint are sent over CDC interface + * through this function. + * @note + * + * + * @param Buf: Buffer of data to be sent + * @param Len: Number of data to be sent (in bytes) + * @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY + */ +uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) +{ + uint8_t result = USBD_OK; + /* USER CODE BEGIN 7 */ + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; + if (hcdc->TxState != 0){ + return USBD_BUSY; + } + USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len); + result = USBD_CDC_TransmitPacket(&hUsbDeviceFS); + /* USER CODE END 7 */ + return result; +} + +/** + * @brief CDC_TransmitCplt_FS + * Data transmitted callback + * + * @note + * This function is IN transfer complete callback used to inform user that + * the submitted Data is successfully sent over USB. + * + * @param Buf: Buffer of data to be received + * @param Len: Number of data received (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum) +{ + uint8_t result = USBD_OK; + /* USER CODE BEGIN 13 */ + UNUSED(Buf); + UNUSED(Len); + UNUSED(epnum); + /* USER CODE END 13 */ + return result; +} + +/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */ + +/* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/Src/usbd_conf.c b/Src/usbd_conf.c new file mode 100644 index 0000000..7c5c926 --- /dev/null +++ b/Src/usbd_conf.c @@ -0,0 +1,693 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_conf.c + * @version : v1.0_Cube + * @brief : This file implements the board support package for the USB device library + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "stm32h7xx.h" +#include "stm32h7xx_hal.h" +#include "usbd_def.h" +#include "usbd_core.h" +#include "usbd_cdc.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +PCD_HandleTypeDef hpcd_USB_OTG_FS; +void Error_Handler(void); + +/* External functions --------------------------------------------------------*/ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ +USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status); + +/* USER CODE END PFP */ + +/* Private functions ---------------------------------------------------------*/ + +/* USER CODE BEGIN 1 */ +/* USER CODE END 1 */ + +/******************************************************************************* + LL Driver Callbacks (PCD -> USB Device Library) +*******************************************************************************/ +/* MSP Init */ + +void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(pcdHandle->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ + + /* USER CODE END USB_OTG_FS_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; + PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Enable USB Voltage detector + */ + HAL_PWREx_EnableUSBVoltageDetector(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USB_OTG_FS GPIO Configuration + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + GPIO_InitStruct.Pin = 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_AF10_OTG1_FS; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + + /* Peripheral interrupt init */ + HAL_NVIC_SetPriority(OTG_FS_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(OTG_FS_IRQn); + /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */ + + /* USER CODE END USB_OTG_FS_MspInit 1 */ + } +} + +void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle) +{ + if(pcdHandle->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); + + /**USB_OTG_FS GPIO Configuration + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); + + /* Peripheral interrupt Deinit*/ + HAL_NVIC_DisableIRQ(OTG_FS_IRQn); + + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 1 */ + } +} + +/** + * @brief Setup stage callback + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup); +} + +/** + * @brief Data Out stage callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); +} + +/** + * @brief Data In stage callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); +} + +/** + * @brief SOF callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Reset callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_SpeedTypeDef speed = USBD_SPEED_FULL; + + if ( hpcd->Init.speed == PCD_SPEED_HIGH) + { + speed = USBD_SPEED_HIGH; + } + else if ( hpcd->Init.speed == PCD_SPEED_FULL) + { + speed = USBD_SPEED_FULL; + } + else + { + Error_Handler(); + } + /* Set Speed. */ + USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed); + + /* Reset Device. */ + USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Suspend callback. + * When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + /* Inform USB library that core enters in suspend Mode. */ + USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData); + __HAL_PCD_GATE_PHYCLOCK(hpcd); + /* Enter in STOP mode. */ + /* USER CODE BEGIN 2 */ + if (hpcd->Init.low_power_enable) + { + /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */ + SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); + } + /* USER CODE END 2 */ +} + +/** + * @brief Resume callback. + * When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + /* USER CODE BEGIN 3 */ + + /* USER CODE END 3 */ + USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief ISOOUTIncomplete callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); +} + +/** + * @brief ISOINIncomplete callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); +} + +/** + * @brief Connect callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Disconnect callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData); +} + +/******************************************************************************* + LL Driver Interface (USB Device Library --> PCD) +*******************************************************************************/ + +/** + * @brief Initializes the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev) +{ + /* Init USB Ip. */ + if (pdev->id == DEVICE_FS) { + /* Link the driver to the stack. */ + hpcd_USB_OTG_FS.pData = pdev; + pdev->pData = &hpcd_USB_OTG_FS; + + hpcd_USB_OTG_FS.Instance = USB_OTG_FS; + hpcd_USB_OTG_FS.Init.dev_endpoints = 9; + hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; + hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; + hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; + hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE; + hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; + hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE; + hpcd_USB_OTG_FS.Init.battery_charging_enable = DISABLE; + hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE; + hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE; + if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK) + { + Error_Handler( ); + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + /* Register USB PCD CallBacks */ + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback); + + HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_OTG_FS, PCD_DataOutStageCallback); + HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_OTG_FS, PCD_DataInStageCallback); + HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_OTG_FS, PCD_ISOOUTIncompleteCallback); + HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_OTG_FS, PCD_ISOINIncompleteCallback); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + /* USER CODE BEGIN TxRx_Configuration */ + HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80); + HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40); + HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80); + /* USER CODE END TxRx_Configuration */ + } + return USBD_OK; +} + +/** + * @brief De-Initializes the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_DeInit(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Starts the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_Start(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Stops the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_Stop(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Opens an endpoint of the low level driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param ep_type: Endpoint type + * @param ep_mps: Endpoint max packet size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Closes an endpoint of the low level driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Flushes an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Sets a Stall condition on an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Clears a Stall condition on an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Returns Stall condition. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval Stall (1: Yes, 0: No) + */ +uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData; + + if((ep_addr & 0x80) == 0x80) + { + return hpcd->IN_ep[ep_addr & 0x7F].is_stall; + } + else + { + return hpcd->OUT_ep[ep_addr & 0x7F].is_stall; + } +} + +/** + * @brief Assigns a USB address to the device. + * @param pdev: Device handle + * @param dev_addr: Device address + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Transmits data over an endpoint. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param pbuf: Pointer to data to be sent + * @param size: Data size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Prepares an endpoint for reception. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param pbuf: Pointer to data to be received + * @param size: Data size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Returns the last transferred packet size. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval Received Data Size + */ +uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr); +} + +#ifdef USBD_HS_TESTMODE_ENABLE +/** + * @brief Set High speed Test mode. + * @param pdev: Device handle + * @param testmode: test mode + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_LL_SetTestMode(USBD_HandleTypeDef *pdev, uint8_t testmode) +{ + UNUSED(pdev); + UNUSED(testmode); + + return USBD_OK; +} +#endif /* USBD_HS_TESTMODE_ENABLE */ +/** + * @brief Static single allocation. + * @param size: Size of allocated memory + * @retval None + */ +void *USBD_static_malloc(uint32_t size) +{ + UNUSED(size); + static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */ + return mem; +} + +/** + * @brief Dummy memory free + * @param p: Pointer to allocated memory address + * @retval None + */ +void USBD_static_free(void *p) +{ + UNUSED(p); +} + +/** + * @brief Delays routine for the USB device library. + * @param Delay: Delay in ms + * @retval None + */ +void USBD_LL_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/** + * @brief Returns the USB status depending on the HAL status: + * @param hal_status: HAL status + * @retval USB status + */ +USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status) +{ + USBD_StatusTypeDef usb_status = USBD_OK; + + switch (hal_status) + { + case HAL_OK : + usb_status = USBD_OK; + break; + case HAL_ERROR : + usb_status = USBD_FAIL; + break; + case HAL_BUSY : + usb_status = USBD_BUSY; + break; + case HAL_TIMEOUT : + usb_status = USBD_FAIL; + break; + default : + usb_status = USBD_FAIL; + break; + } + return usb_status; +} diff --git a/Src/usbd_desc.c b/Src/usbd_desc.c new file mode 100644 index 0000000..65692b7 --- /dev/null +++ b/Src/usbd_desc.c @@ -0,0 +1,418 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_desc.c + * @version : v1.0_Cube + * @brief : This file implements the USB device descriptors. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 ------------------------------------------------------------------*/ +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_conf.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @addtogroup USBD_DESC + * @{ + */ + +/** @defgroup USBD_DESC_Private_TypesDefinitions USBD_DESC_Private_TypesDefinitions + * @brief Private types. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_TYPES */ + +/* USER CODE END PRIVATE_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines + * @brief Private defines. + * @{ + */ + +#define USBD_VID 1155 +#define USBD_LANGID_STRING 1033 +#define USBD_MANUFACTURER_STRING "STMicroelectronics" +#define USBD_PID_FS 22336 +#define USBD_PRODUCT_STRING_FS "STM32 Virtual ComPort" +#define USBD_CONFIGURATION_STRING_FS "CDC Config" +#define USBD_INTERFACE_STRING_FS "CDC Interface" + +#define USB_SIZ_BOS_DESC 0x0C + +/* USER CODE BEGIN PRIVATE_DEFINES */ + +/* USER CODE END PRIVATE_DEFINES */ + +/** + * @} + */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** @defgroup USBD_DESC_Private_Macros USBD_DESC_Private_Macros + * @brief Private macros. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_MACRO */ + +/* USER CODE END PRIVATE_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes + * @brief Private functions declaration. + * @{ + */ + +static void Get_SerialNum(void); +static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len); + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes + * @brief Private functions declaration for FS. + * @{ + */ + +uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables + * @brief Private variables. + * @{ + */ + +USBD_DescriptorsTypeDef FS_Desc = +{ + USBD_FS_DeviceDescriptor +, USBD_FS_LangIDStrDescriptor +, USBD_FS_ManufacturerStrDescriptor +, USBD_FS_ProductStrDescriptor +, USBD_FS_SerialStrDescriptor +, USBD_FS_ConfigStrDescriptor +, USBD_FS_InterfaceStrDescriptor +}; + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +/** USB standard device descriptor. */ +__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = +{ + 0x12, /*bLength */ + USB_DESC_TYPE_DEVICE, /*bDescriptorType*/ + 0x00, /*bcdUSB */ + 0x02, + 0x02, /*bDeviceClass*/ + 0x02, /*bDeviceSubClass*/ + 0x00, /*bDeviceProtocol*/ + USB_MAX_EP0_SIZE, /*bMaxPacketSize*/ + LOBYTE(USBD_VID), /*idVendor*/ + HIBYTE(USBD_VID), /*idVendor*/ + LOBYTE(USBD_PID_FS), /*idProduct*/ + HIBYTE(USBD_PID_FS), /*idProduct*/ + 0x00, /*bcdDevice rel. 2.00*/ + 0x02, + USBD_IDX_MFC_STR, /*Index of manufacturer string*/ + USBD_IDX_PRODUCT_STR, /*Index of product string*/ + USBD_IDX_SERIAL_STR, /*Index of serial number string*/ + USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/ +}; + +/* USB_DeviceDescriptor */ +/** BOS descriptor. */ +#if (USBD_LPM_ENABLED == 1) +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +__ALIGN_BEGIN uint8_t USBD_FS_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END = +{ + 0x5, + USB_DESC_TYPE_BOS, + 0xC, + 0x0, + 0x1, /* 1 device capability*/ + /* device capability*/ + 0x7, + USB_DEVICE_CAPABITY_TYPE, + 0x2, + 0x2, /* LPM capability bit set*/ + 0x0, + 0x0, + 0x0 +}; +#endif /* (USBD_LPM_ENABLED == 1) */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables + * @brief Private variables. + * @{ + */ + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ + +/** USB lang identifier descriptor. */ +__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = +{ + USB_LEN_LANGID_STR_DESC, + USB_DESC_TYPE_STRING, + LOBYTE(USBD_LANGID_STRING), + HIBYTE(USBD_LANGID_STRING) +}; + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +/* Internal string descriptor. */ +__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END; + +#if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 +#endif +__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = { + USB_SIZ_STRING_SERIAL, + USB_DESC_TYPE_STRING, +}; + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Functions USBD_DESC_Private_Functions + * @brief Private functions. + * @{ + */ + +/** + * @brief Return the device descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = sizeof(USBD_FS_DeviceDesc); + return USBD_FS_DeviceDesc; +} + +/** + * @brief Return the LangID string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = sizeof(USBD_LangIDDesc); + return USBD_LangIDDesc; +} + +/** + * @brief Return the product string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == 0) + { + USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +/** + * @brief Return the manufacturer string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); + return USBD_StrDesc; +} + +/** + * @brief Return the serial number string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = USB_SIZ_STRING_SERIAL; + + /* Update the serial number string descriptor with the data from the unique + * ID */ + Get_SerialNum(); + /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */ + + /* USER CODE END USBD_FS_SerialStrDescriptor */ + return (uint8_t *) USBD_StringSerial; +} + +/** + * @brief Return the configuration string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == USBD_SPEED_HIGH) + { + USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +/** + * @brief Return the interface string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == 0) + { + USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +/** + * @brief Create the serial number string descriptor + * @param None + * @retval None + */ +static void Get_SerialNum(void) +{ + uint32_t deviceserial0; + uint32_t deviceserial1; + uint32_t deviceserial2; + + deviceserial0 = *(uint32_t *) DEVICE_ID1; + deviceserial1 = *(uint32_t *) DEVICE_ID2; + deviceserial2 = *(uint32_t *) DEVICE_ID3; + + deviceserial0 += deviceserial2; + + if (deviceserial0 != 0) + { + IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8); + IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4); + } +} + +/** + * @brief Convert Hex 32Bits value into char + * @param value: value to convert + * @param pbuf: pointer to the buffer + * @param len: buffer length + * @retval None + */ +static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len) +{ + uint8_t idx = 0; + + for (idx = 0; idx < len; idx++) + { + if (((value >> 28)) < 0xA) + { + pbuf[2 * idx] = (value >> 28) + '0'; + } + else + { + pbuf[2 * idx] = (value >> 28) + 'A' - 10; + } + + value = value << 4; + + pbuf[2 * idx + 1] = 0; + } +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/WTZS32-2.ioc b/WTZS32-2.ioc new file mode 100644 index 0000000..5ed3a25 --- /dev/null +++ b/WTZS32-2.ioc @@ -0,0 +1,549 @@ +#MicroXplorer Configuration settings - do not modify +ADC3.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_0 +ADC3.Channel-10\#ChannelRegularConversion=ADC_CHANNEL_16 +ADC3.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC3.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_5 +ADC3.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_5 +ADC3.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_10 +ADC3.Channel-6\#ChannelRegularConversion=ADC_CHANNEL_11 +ADC3.Channel-7\#ChannelRegularConversion=ADC_CHANNEL_13 +ADC3.Channel-8\#ChannelRegularConversion=ADC_CHANNEL_14 +ADC3.Channel-9\#ChannelRegularConversion=ADC_CHANNEL_15 +ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV4 +ADC3.ClockPrescalerADC3=ADC_CLOCK_ASYNC_DIV4 +ADC3.ContinuousConvMode=DISABLE +ADC3.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR +ADC3.EOCSelection=ADC_EOC_SEQ_CONV +ADC3.EnableRegularConversion=ENABLE +ADC3.ExternalTrigConv=ADC_EXTERNALTRIG_T4_TRGO +ADC3.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_RISING +ADC3.IPParameters=ClockPrescaler,ClockPrescalerADC3,ConversionDataManagement,ContinuousConvMode,Overrun,EnableRegularConversion,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,OffsetSignedSaturation-1\#ChannelRegularConversion,NbrOfConversionFlag,OversamplingMode,ExternalTrigConv,EOCSelection,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,OffsetSignedSaturation-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,OffsetSignedSaturation-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,OffsetSignedSaturation-4\#ChannelRegularConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,OffsetNumber-5\#ChannelRegularConversion,OffsetSignedSaturation-5\#ChannelRegularConversion,Rank-6\#ChannelRegularConversion,Channel-6\#ChannelRegularConversion,SamplingTime-6\#ChannelRegularConversion,OffsetNumber-6\#ChannelRegularConversion,OffsetSignedSaturation-6\#ChannelRegularConversion,Rank-7\#ChannelRegularConversion,Channel-7\#ChannelRegularConversion,SamplingTime-7\#ChannelRegularConversion,OffsetNumber-7\#ChannelRegularConversion,OffsetSignedSaturation-7\#ChannelRegularConversion,Rank-8\#ChannelRegularConversion,Channel-8\#ChannelRegularConversion,SamplingTime-8\#ChannelRegularConversion,OffsetNumber-8\#ChannelRegularConversion,OffsetSignedSaturation-8\#ChannelRegularConversion,Rank-9\#ChannelRegularConversion,Channel-9\#ChannelRegularConversion,SamplingTime-9\#ChannelRegularConversion,OffsetNumber-9\#ChannelRegularConversion,OffsetSignedSaturation-9\#ChannelRegularConversion,ExternalTrigConvEdge,Rank-10\#ChannelRegularConversion,Channel-10\#ChannelRegularConversion,SamplingTime-10\#ChannelRegularConversion,OffsetNumber-10\#ChannelRegularConversion,OffsetSignedSaturation-10\#ChannelRegularConversion +ADC3.NbrOfConversion=10 +ADC3.NbrOfConversionFlag=1 +ADC3.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-10\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-3\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-5\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-6\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-7\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-8\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetNumber-9\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC3.OffsetSignedSaturation-1\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-10\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-2\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-3\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-4\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-5\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-6\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-7\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-8\#ChannelRegularConversion=DISABLE +ADC3.OffsetSignedSaturation-9\#ChannelRegularConversion=DISABLE +ADC3.Overrun=ADC_OVR_DATA_OVERWRITTEN +ADC3.OversamplingMode=DISABLE +ADC3.Rank-1\#ChannelRegularConversion=1 +ADC3.Rank-10\#ChannelRegularConversion=10 +ADC3.Rank-2\#ChannelRegularConversion=2 +ADC3.Rank-3\#ChannelRegularConversion=3 +ADC3.Rank-4\#ChannelRegularConversion=4 +ADC3.Rank-5\#ChannelRegularConversion=5 +ADC3.Rank-6\#ChannelRegularConversion=6 +ADC3.Rank-7\#ChannelRegularConversion=7 +ADC3.Rank-8\#ChannelRegularConversion=8 +ADC3.Rank-9\#ChannelRegularConversion=9 +ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-10\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-6\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-7\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-8\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC3.SamplingTime-9\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +Bdma.ADC3.0.Direction=DMA_PERIPH_TO_MEMORY +Bdma.ADC3.0.EventEnable=ENABLE +Bdma.ADC3.0.Instance=BDMA_Channel0 +Bdma.ADC3.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Bdma.ADC3.0.MemInc=DMA_MINC_ENABLE +Bdma.ADC3.0.Mode=DMA_CIRCULAR +Bdma.ADC3.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Bdma.ADC3.0.PeriphInc=DMA_PINC_DISABLE +Bdma.ADC3.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Bdma.ADC3.0.Priority=DMA_PRIORITY_LOW +Bdma.ADC3.0.RequestNumber=1 +Bdma.ADC3.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Bdma.ADC3.0.SignalID=NONE +Bdma.ADC3.0.SyncEnable=DISABLE +Bdma.ADC3.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Bdma.ADC3.0.SyncRequestNumber=1 +Bdma.ADC3.0.SyncSignalID=NONE +Bdma.Request0=ADC3 +Bdma.RequestsNb=1 +CAD.formats= +CAD.pinconfig= +CAD.provider= +CORTEX_M7.BaseAddress_Spec=0x24000000 +CORTEX_M7.CPU_DCache=Disabled +CORTEX_M7.CPU_ICache=Disabled +CORTEX_M7.DisableExec_Spec=MPU_INSTRUCTION_ACCESS_ENABLE +CORTEX_M7.IPParameters=default_mode_Activation,CPU_ICache,CPU_DCache,BaseAddress_Spec,Size_Spec,TypeExtField_Spec,DisableExec_Spec,IsShareable_Spec +CORTEX_M7.IsShareable_Spec=MPU_ACCESS_NOT_SHAREABLE +CORTEX_M7.Size_Spec=MPU_REGION_SIZE_512KB +CORTEX_M7.TypeExtField_Spec=MPU_TEX_LEVEL1 +CORTEX_M7.default_mode_Activation=0 +Dma.MEMTOMEM.0.Direction=DMA_MEMORY_TO_MEMORY +Dma.MEMTOMEM.0.EventEnable=DISABLE +Dma.MEMTOMEM.0.FIFOMode=DMA_FIFOMODE_ENABLE +Dma.MEMTOMEM.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL +Dma.MEMTOMEM.0.Instance=DMA2_Stream0 +Dma.MEMTOMEM.0.MemBurst=DMA_MBURST_SINGLE +Dma.MEMTOMEM.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.MEMTOMEM.0.MemInc=DMA_MINC_ENABLE +Dma.MEMTOMEM.0.Mode=DMA_NORMAL +Dma.MEMTOMEM.0.PeriphBurst=DMA_PBURST_SINGLE +Dma.MEMTOMEM.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.MEMTOMEM.0.PeriphInc=DMA_PINC_ENABLE +Dma.MEMTOMEM.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.MEMTOMEM.0.Priority=DMA_PRIORITY_LOW +Dma.MEMTOMEM.0.RequestNumber=1 +Dma.MEMTOMEM.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.MEMTOMEM.0.SignalID=NONE +Dma.MEMTOMEM.0.SyncEnable=DISABLE +Dma.MEMTOMEM.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.MEMTOMEM.0.SyncRequestNumber=1 +Dma.MEMTOMEM.0.SyncSignalID=NONE +Dma.Request0=MEMTOMEM +Dma.Request1=USART1_RX +Dma.RequestsNb=2 +Dma.USART1_RX.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.1.EventEnable=DISABLE +Dma.USART1_RX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.1.Instance=DMA1_Stream5 +Dma.USART1_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.1.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.1.Mode=DMA_NORMAL +Dma.USART1_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.1.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART1_RX.1.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.1.RequestNumber=1 +Dma.USART1_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART1_RX.1.SignalID=NONE +Dma.USART1_RX.1.SyncEnable=DISABLE +Dma.USART1_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART1_RX.1.SyncRequestNumber=1 +Dma.USART1_RX.1.SyncSignalID=NONE +FREERTOS.FootprintOK=true +FREERTOS.IPParameters=Tasks01,FootprintOK +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +MMTAppReg1.MEMORYMAP.AppRegionName=DTCMRAM +MMTAppReg1.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg1.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg1.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg1.MEMORYMAP.Name=DTCMRAM +MMTAppReg1.MEMORYMAP.Size=131072 +MMTAppReg1.MEMORYMAP.StartAddress=0x20000000 +MMTAppReg2.MEMORYMAP.AppRegionName=RAM +MMTAppReg2.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg2.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg2.MEMORYMAP.DefaultDataRegion=true +MMTAppReg2.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,DefaultDataRegion +MMTAppReg2.MEMORYMAP.Name=RAM +MMTAppReg2.MEMORYMAP.Size=524288 +MMTAppReg2.MEMORYMAP.StartAddress=0x24000000 +MMTAppReg3.MEMORYMAP.AppRegionName=RAM_D2 +MMTAppReg3.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg3.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg3.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg3.MEMORYMAP.Name=RAM_D2 +MMTAppReg3.MEMORYMAP.Size=294912 +MMTAppReg3.MEMORYMAP.StartAddress=0x30000000 +MMTAppReg4.MEMORYMAP.AppRegionName=RAM_D3 +MMTAppReg4.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg4.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg4.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg4.MEMORYMAP.Name=RAM_D3 +MMTAppReg4.MEMORYMAP.Size=65536 +MMTAppReg4.MEMORYMAP.StartAddress=0x38000000 +MMTAppReg5.MEMORYMAP.AppRegionName=ITCMRAM +MMTAppReg5.MEMORYMAP.Cacheability=WTRA +MMTAppReg5.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg5.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg5.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability +MMTAppReg5.MEMORYMAP.Name=ITCMRAM +MMTAppReg5.MEMORYMAP.Size=65536 +MMTAppReg5.MEMORYMAP.StartAddress=0x00000000 +MMTAppReg6.MEMORYMAP.AP=RO_priv_only +MMTAppReg6.MEMORYMAP.AppRegionName=FLASH +MMTAppReg6.MEMORYMAP.Cacheability=WTRA +MMTAppReg6.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg6.MEMORYMAP.CoreName=ARM Cortex-M7 +MMTAppReg6.MEMORYMAP.DefaultCodeRegion=true +MMTAppReg6.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,MemType,ContextName,Name,AP,Cacheability,DefaultCodeRegion,ISRRegion,RootBootRegion +MMTAppReg6.MEMORYMAP.ISRRegion=true +MMTAppReg6.MEMORYMAP.MemType=ROM +MMTAppReg6.MEMORYMAP.Name=FLASH +MMTAppReg6.MEMORYMAP.RootBootRegion=true +MMTAppReg6.MEMORYMAP.Size=131072 +MMTAppReg6.MEMORYMAP.StartAddress=0x08000000 +MMTAppRegionsCount=6 +MMTConfigApplied=false +Mcu.CPN=STM32H750IBT6 +Mcu.Family=STM32H7 +Mcu.IP0=ADC3 +Mcu.IP1=BDMA +Mcu.IP10=TIM2 +Mcu.IP11=TIM4 +Mcu.IP12=USART1 +Mcu.IP13=USB_DEVICE +Mcu.IP14=USB_OTG_FS +Mcu.IP2=CORTEX_M7 +Mcu.IP3=DMA +Mcu.IP4=FREERTOS +Mcu.IP5=MEMORYMAP +Mcu.IP6=NVIC +Mcu.IP7=RCC +Mcu.IP8=SYS +Mcu.IP9=TIM1 +Mcu.IPNb=15 +Mcu.Name=STM32H750IBTx +Mcu.Package=LQFP176 +Mcu.Pin0=PF3 +Mcu.Pin1=PH0-OSC_IN (PH0) +Mcu.Pin10=PH5 +Mcu.Pin11=PA8 +Mcu.Pin12=PA9 +Mcu.Pin13=PA10 +Mcu.Pin14=PA11 +Mcu.Pin15=PA12 +Mcu.Pin16=PA15 (JTDI) +Mcu.Pin17=PC11 +Mcu.Pin18=PD0 +Mcu.Pin19=PD1 +Mcu.Pin2=PH1-OSC_OUT (PH1) +Mcu.Pin20=PD2 +Mcu.Pin21=PD3 +Mcu.Pin22=PD4 +Mcu.Pin23=PD5 +Mcu.Pin24=PD7 +Mcu.Pin25=PG9 +Mcu.Pin26=PG10 +Mcu.Pin27=PG11 +Mcu.Pin28=PG12 +Mcu.Pin29=PG13 +Mcu.Pin3=PC0 +Mcu.Pin30=PG14 +Mcu.Pin31=PI7 +Mcu.Pin32=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin33=VP_SYS_VS_tim7 +Mcu.Pin34=VP_TIM1_VS_ClockSourceINT +Mcu.Pin35=VP_TIM1_VS_no_output1 +Mcu.Pin36=VP_TIM2_VS_ClockSourceINT +Mcu.Pin37=VP_TIM4_VS_ClockSourceINT +Mcu.Pin38=VP_TIM4_VS_no_output1 +Mcu.Pin39=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS +Mcu.Pin4=PC1 +Mcu.Pin40=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin5=PC2_C +Mcu.Pin6=PC3_C +Mcu.Pin7=PH2 +Mcu.Pin8=PH3 +Mcu.Pin9=PH4 +Mcu.PinsNb=41 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H750IBTx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BDMA_Channel0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMAMUX2_OVR_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.OTG_FS_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM7_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TimeBase=TIM7_IRQn +NVIC.TimeBaseIP=TIM7 +NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA15\ (JTDI).GPIOParameters=GPIO_ModeDefaultPP +PA15\ (JTDI).GPIO_ModeDefaultPP=GPIO_MODE_AF_OD +PA15\ (JTDI).Locked=true +PA15\ (JTDI).Signal=S_TIM2_CH1_ETR +PA8.Locked=true +PA8.Signal=GPIO_Output +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PC0.Signal=ADCx_INP10 +PC1.Signal=ADCx_INP11 +PC11.GPIOParameters=PinState,GPIO_PuPd,GPIO_ModeDefaultOutputPP +PC11.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PC11.GPIO_PuPd=GPIO_NOPULL +PC11.Locked=true +PC11.PinState=GPIO_PIN_RESET +PC11.Signal=GPIO_Output +PC2_C.Mode=IN0-Single-Ended +PC2_C.Signal=ADC3_INP0 +PC3_C.Mode=IN1-Single-Ended +PC3_C.Signal=ADC3_INP1 +PD0.GPIOParameters=GPIO_PuPd,GPIO_ModeDefaultOutputPP +PD0.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PD0.GPIO_PuPd=GPIO_NOPULL +PD0.Locked=true +PD0.Signal=GPIO_Output +PD1.GPIOParameters=GPIO_PuPd,GPIO_ModeDefaultOutputPP +PD1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PD1.GPIO_PuPd=GPIO_NOPULL +PD1.Locked=true +PD1.Signal=GPIO_Output +PD2.Locked=true +PD2.Signal=GPIO_Output +PD3.GPIOParameters=GPIO_PuPd,GPIO_ModeDefaultOutputPP +PD3.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PD3.GPIO_PuPd=GPIO_NOPULL +PD3.Locked=true +PD3.Signal=GPIO_Output +PD4.GPIOParameters=GPIO_PuPd,GPIO_ModeDefaultOutputPP +PD4.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PD4.GPIO_PuPd=GPIO_NOPULL +PD4.Locked=true +PD4.Signal=GPIO_Output +PD5.GPIOParameters=GPIO_PuPd,GPIO_ModeDefaultOutputPP +PD5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PD5.GPIO_PuPd=GPIO_NOPULL +PD5.Locked=true +PD5.Signal=GPIO_Output +PD7.Locked=true +PD7.Signal=GPIO_Output +PF3.Mode=IN5-Single-Ended +PF3.Signal=ADC3_INP5 +PG10.Locked=true +PG10.Signal=GPIO_Output +PG11.Locked=true +PG11.Signal=GPIO_Output +PG12.Locked=true +PG12.Signal=GPIO_Output +PG13.Locked=true +PG13.Signal=GPIO_Output +PG14.Locked=true +PG14.Signal=GPIO_Output +PG9.Locked=true +PG9.Signal=GPIO_Output +PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator +PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN +PH1-OSC_OUT\ (PH1).Locked=true +PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator +PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT +PH2.Mode=IN13-Single-Ended +PH2.Signal=ADC3_INP13 +PH3.Mode=IN14-Single-Ended +PH3.Signal=ADC3_INP14 +PH4.Mode=IN15-Single-Ended +PH4.Signal=ADC3_INP15 +PH5.Mode=IN16-Single-Ended +PH5.Signal=ADC3_INP16 +PI7.GPIOParameters=PinState +PI7.Locked=true +PI7.PinState=GPIO_PIN_SET +PI7.Signal=GPIO_Output +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H750IBTx +ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.12.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=2 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=WTZS32-2.ioc +ProjectManager.ProjectName=WTZS32-2 +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=CMake +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_BDMA_Init-BDMA-false-HAL-true,4-MX_DMA_Init-DMA-false-HAL-true,5-MX_ADC3_Init-ADC3-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true,9-MX_TIM4_Init-TIM4-false-HAL-true,10-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=72000000 +RCC.AHB12Freq_Value=240000000 +RCC.AHB4Freq_Value=240000000 +RCC.APB1Freq_Value=120000000 +RCC.APB2Freq_Value=120000000 +RCC.APB3Freq_Value=120000000 +RCC.APB4Freq_Value=120000000 +RCC.AXIClockFreq_Value=240000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=25000000 +RCC.CKPERSourceSelection=RCC_CLKPSOURCE_HSE +RCC.CortexFreq_Value=480000000 +RCC.CpuClockFreq_Value=480000000 +RCC.D1CPREFreq_Value=480000000 +RCC.D1PPRE=RCC_APB3_DIV2 +RCC.D2PPRE1=RCC_APB1_DIV2 +RCC.D2PPRE2=RCC_APB2_DIV2 +RCC.D3PPRE=RCC_APB4_DIV2 +RCC.DFSDMACLkFreq_Value=64000000 +RCC.DFSDMFreq_Value=120000000 +RCC.DIVM1=5 +RCC.DIVM2=5 +RCC.DIVM3=5 +RCC.DIVN1=192 +RCC.DIVN2=144 +RCC.DIVN3=192 +RCC.DIVP1Freq_Value=480000000 +RCC.DIVP2=10 +RCC.DIVP2Freq_Value=72000000 +RCC.DIVP3Freq_Value=480000000 +RCC.DIVQ1=15 +RCC.DIVQ1Freq_Value=64000000 +RCC.DIVQ2Freq_Value=360000000 +RCC.DIVQ3Freq_Value=480000000 +RCC.DIVR1Freq_Value=480000000 +RCC.DIVR2Freq_Value=360000000 +RCC.DIVR3Freq_Value=480000000 +RCC.FDCANFreq_Value=64000000 +RCC.FMCFreq_Value=240000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=240000000 +RCC.HCLKFreq_Value=240000000 +RCC.HPRE=RCC_HCLK_DIV2 +RCC.HRTIMFreq_Value=240000000 +RCC.HSE_VALUE=25000000 +RCC.I2C123Freq_Value=120000000 +RCC.I2C4Freq_Value=120000000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CKPERSourceSelection,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.LPTIM1Freq_Value=120000000 +RCC.LPTIM2Freq_Value=120000000 +RCC.LPTIM345Freq_Value=120000000 +RCC.LPUART1Freq_Value=120000000 +RCC.LTDCFreq_Value=480000000 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=480000000 +RCC.PLL2FRACN=0 +RCC.PLLFRACN=0 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.QSPIFreq_Value=240000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=64000000 +RCC.SAI23Freq_Value=64000000 +RCC.SAI4AFreq_Value=64000000 +RCC.SAI4BFreq_Value=64000000 +RCC.SDMMCFreq_Value=64000000 +RCC.SPDIFRXFreq_Value=64000000 +RCC.SPI123Freq_Value=64000000 +RCC.SPI45Freq_Value=120000000 +RCC.SPI6Freq_Value=120000000 +RCC.SWPMI1Freq_Value=120000000 +RCC.SYSCLKFreq_VALUE=480000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.Tim1OutputFreq_Value=240000000 +RCC.Tim2OutputFreq_Value=240000000 +RCC.TraceFreq_Value=64000000 +RCC.USART16Freq_Value=120000000 +RCC.USART234578Freq_Value=120000000 +RCC.USBFreq_Value=64000000 +RCC.VCO1OutputFreq_Value=960000000 +RCC.VCO2OutputFreq_Value=720000000 +RCC.VCO3OutputFreq_Value=960000000 +RCC.VCOInput1Freq_Value=5000000 +RCC.VCOInput2Freq_Value=5000000 +RCC.VCOInput3Freq_Value=5000000 +SH.ADCx_INP10.0=ADC3_INP10,IN10-Single-Ended +SH.ADCx_INP10.ConfNb=1 +SH.ADCx_INP11.0=ADC3_INP11,IN11-Single-Ended +SH.ADCx_INP11.ConfNb=1 +SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 +SH.S_TIM2_CH1_ETR.ConfNb=1 +TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM1.Channel-PWM\ Generation1\ No\ Output=TIM_CHANNEL_1 +TIM1.IPParameters=Prescaler,Period,AutoReloadPreload,Channel-PWM Generation1 No Output,TIM_MasterSlaveMode,TIM_MasterOutputTrigger,Pulse-PWM Generation1 No Output +TIM1.Period=100-1 +TIM1.Prescaler=240000000 / 1000000-1 +TIM1.Pulse-PWM\ Generation1\ No\ Output=5 +TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM1.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE +TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM2.IPParameters=Prescaler,Period,AutoReloadPreload,TIM_MasterSlaveMode,TIM_MasterOutputTrigger,Channel-PWM Generation1 CH1 +TIM2.Period=100-1 +TIM2.Prescaler=240000000 / 1000000-1 +TIM2.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM2.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE +TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM4.Channel-PWM\ Generation1\ No\ Output=TIM_CHANNEL_1 +TIM4.IPParameters=Channel-PWM Generation1 No Output,Prescaler,Period,AutoReloadPreload,TIM_MasterSlaveMode,TIM_MasterOutputTrigger,Pulse-PWM Generation1 No Output +TIM4.Period=100-1 +TIM4.Prescaler=240000000 / 1000000-1 +TIM4.Pulse-PWM\ Generation1\ No\ Output=5 +TIM4.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM4.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE +USART1.DMADisableonRxErrorParam=ADVFEATURE_DMA_ENABLEONRXERROR +USART1.IPParameters=VirtualMode-Asynchronous,DMADisableonRxErrorParam,OverrunDisableParam +USART1.OverrunDisableParam=ADVFEATURE_OVERRUN_ENABLE +USART1.VirtualMode-Asynchronous=VM_ASYNC +USB_DEVICE.CLASS_NAME_FS=CDC +USB_DEVICE.IPParameters=VirtualMode-CDC_FS,VirtualModeFS,CLASS_NAME_FS +USB_DEVICE.VirtualMode-CDC_FS=Cdc +USB_DEVICE.VirtualModeFS=Cdc_FS +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_SYS_VS_tim7.Mode=TIM7 +VP_SYS_VS_tim7.Signal=SYS_VS_tim7 +VP_TIM1_VS_ClockSourceINT.Mode=Internal +VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT +VP_TIM1_VS_no_output1.Mode=PWM Generation1 No Output +VP_TIM1_VS_no_output1.Signal=TIM1_VS_no_output1 +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +VP_TIM4_VS_ClockSourceINT.Mode=Internal +VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT +VP_TIM4_VS_no_output1.Mode=PWM Generation1 No Output +VP_TIM4_VS_no_output1.Signal=TIM4_VS_no_output1 +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS +board=custom +rtos.0.ip=FREERTOS diff --git a/cmake/gcc-arm-none-eabi.cmake b/cmake/gcc-arm-none-eabi.cmake new file mode 100644 index 0000000..481dbd1 --- /dev/null +++ b/cmake/gcc-arm-none-eabi.cmake @@ -0,0 +1,43 @@ +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER_ID GNU) +set(CMAKE_CXX_COMPILER_ID GNU) + +# Some default GCC settings +# arm-none-eabi- must be part of path environment +set(TOOLCHAIN_PREFIX arm-none-eabi-) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) +set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) + +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# MCU specific flags +set(TARGET_FLAGS "-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard ") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}") +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MMD -MP") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fdata-sections -ffunction-sections") + +set(CMAKE_C_FLAGS_DEBUG "-O0 -g3") +set(CMAKE_C_FLAGS_RELEASE "-Os -g0") +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") +set(CMAKE_CXX_FLAGS_RELEASE "-Os -g0") + +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") + +set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32H750XX_FLASH.ld\"") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--gc-sections") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--print-memory-usage") +set(TOOLCHAIN_LINK_LIBRARIES "m") diff --git a/cmake/starm-clang.cmake b/cmake/starm-clang.cmake new file mode 100644 index 0000000..a7698da --- /dev/null +++ b/cmake/starm-clang.cmake @@ -0,0 +1,65 @@ +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER_ID Clang) +set(CMAKE_CXX_COMPILER_ID Clang) + +# Some default llvm settings +set(TOOLCHAIN_PREFIX starm-) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}clang) +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}clang++) +set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}clang) +set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) +set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) + +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# STARM_TOOLCHAIN_CONFIG allows you to choose the toolchain configuration. +# Possible values are: +# "STARM_HYBRID" : Hybrid configuration using starm-clang Assemler and Compiler and GNU Linker +# "STARM_NEWLIB" : starm-clang toolchain with NEWLIB C library +# "STARM_PICOLIBC" : starm-clang toolchain with PICOLIBC C library +set(STARM_TOOLCHAIN_CONFIG "STARM_HYBRID") + +if(STARM_TOOLCHAIN_CONFIG STREQUAL "STARM_HYBRID") + set(TOOLCHAIN_MULTILIBS "--multi-lib-config=\"$ENV{CLANG_GCC_CMSIS_COMPILER}/multilib.gnu_tools_for_stm32.yaml\" --gcc-toolchain=\"$ENV{GCC_TOOLCHAIN_ROOT}/..\"") +elseif (STARM_TOOLCHAIN_CONFIG STREQUAL "STARM_NEWLIB") + set(TOOLCHAIN_MULTILIBS "--config=newlib.cfg") +endif() + +# MCU specific flags +set(TARGET_FLAGS "-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard ${TOOLCHAIN_MULTILIBS}") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}") +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MP") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fdata-sections -ffunction-sections") + +set(CMAKE_C_FLAGS_DEBUG "-O0 -g3") +set(CMAKE_C_FLAGS_RELEASE "-Os -g0") +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") +set(CMAKE_CXX_FLAGS_RELEASE "-Os -g0") + +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") + +set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}") + +if (STARM_TOOLCHAIN_CONFIG STREQUAL "STARM_HYBRID") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --gcc-specs=nano.specs") + set(TOOLCHAIN_LINK_LIBRARIES "m") +elseif(STARM_TOOLCHAIN_CONFIG STREQUAL "STARM_NEWLIB") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lcrt0-nosys") +elseif(STARM_TOOLCHAIN_CONFIG STREQUAL "STARM_PICOLIBC") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lcrt0-hosted") + +endif() + +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32H750XX_FLASH.ld\"") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--gc-sections") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--print-memory-usage ") diff --git a/cmake/stm32cubemx/CMakeLists.txt b/cmake/stm32cubemx/CMakeLists.txt new file mode 100644 index 0000000..8c654cb --- /dev/null +++ b/cmake/stm32cubemx/CMakeLists.txt @@ -0,0 +1,140 @@ +cmake_minimum_required(VERSION 3.22) +# Enable CMake support for ASM and C languages +enable_language(C ASM) +# STM32CubeMX generated symbols (macros) +set(MX_Defines_Syms + USE_PWR_LDO_SUPPLY + USE_HAL_DRIVER + STM32H750xx + $<$:DEBUG> +) + +# STM32CubeMX generated include paths +set(MX_Include_Dirs + ${CMAKE_CURRENT_SOURCE_DIR}/../../Inc + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Inc + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Inc/Legacy + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/include + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Inc + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/CMSIS/Device/ST/STM32H7xx/Include + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/CMSIS/Include +) + +# STM32CubeMX generated application sources +set(MX_Application_Src + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/main.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/freertos.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/usb_device.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/usbd_conf.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/usbd_desc.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/usbd_cdc_if.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/stm32h7xx_it.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/stm32h7xx_hal_msp.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/stm32h7xx_hal_timebase_tim.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/sysmem.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/syscalls.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../startup_stm32h750xx.s +) + +# STM32 HAL/LL Drivers +set(STM32_Drivers_Src + ${CMAKE_CURRENT_SOURCE_DIR}/../../Src/system_stm32h7xx.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc_ex.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c +) + +# Drivers Midllewares + + +set(USB_Device_Library_Src + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c +) +set(FreeRTOS_Src + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/croutine.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/list.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/queue.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/tasks.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/timers.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c + C:/Users/70659/STM32Cube/Repository/STM32Cube_FW_H7_V1.12.1/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c +) + +# Link directories setup +set(MX_LINK_DIRS + +) +# Project static libraries +set(MX_LINK_LIBS + STM32_Drivers + ${TOOLCHAIN_LINK_LIBRARIES} + USB_Device_Library FreeRTOS +) +# Interface library for includes and symbols +add_library(stm32cubemx INTERFACE) +target_include_directories(stm32cubemx INTERFACE ${MX_Include_Dirs}) +target_compile_definitions(stm32cubemx INTERFACE ${MX_Defines_Syms}) + +# Create STM32_Drivers static library +add_library(STM32_Drivers OBJECT) +target_sources(STM32_Drivers PRIVATE ${STM32_Drivers_Src}) +target_link_libraries(STM32_Drivers PUBLIC stm32cubemx) + + +# Create USB_Device_Library static library +add_library(USB_Device_Library OBJECT) +target_sources(USB_Device_Library PRIVATE ${USB_Device_Library_Src}) +target_link_libraries(USB_Device_Library PUBLIC stm32cubemx) + +# Create FreeRTOS static library +add_library(FreeRTOS OBJECT) +target_sources(FreeRTOS PRIVATE ${FreeRTOS_Src}) +target_link_libraries(FreeRTOS PUBLIC stm32cubemx) + +# Add STM32CubeMX generated application sources to the project +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${MX_Application_Src}) + +# Link directories setup +target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${MX_LINK_DIRS}) + +# Add libraries to the project +target_link_libraries(${CMAKE_PROJECT_NAME} ${MX_LINK_LIBS}) + +# Add the map file to the list of files to be removed with 'clean' target +set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES ADDITIONAL_CLEAN_FILES ${CMAKE_PROJECT_NAME}.map) + +# Validate that STM32CubeMX code is compatible with C standard +if((CMAKE_C_STANDARD EQUAL 90) OR (CMAKE_C_STANDARD EQUAL 99)) + message(ERROR "Generated code requires C11 or higher") +endif() diff --git a/startup_stm32h750xx.s b/startup_stm32h750xx.s new file mode 100644 index 0000000..0290118 --- /dev/null +++ b/startup_stm32h750xx.s @@ -0,0 +1,755 @@ +/** + ****************************************************************************** + * @file startup_stm32h750xx.s + * @author MCD Application Team + * @brief STM32H750xx Devices vector table for GCC based toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 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. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m7 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + +/* Call the ExitRun0Mode function to configure the power supply */ + bl ExitRun0Mode +/* Call the clock system initialization function.*/ + bl SystemInit + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + ldr r1, =_edata + ldr r2, =_sidata + movs r3, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r4, [r2, r3] + str r4, [r0, r3] + adds r3, r3, #4 + +LoopCopyDataInit: + adds r4, r0, r3 + cmp r4, r1 + bcc CopyDataInit +/* Zero fill the bss segment. */ + ldr r2, =_sbss + ldr r4, =_ebss + movs r3, #0 + b LoopFillZerobss + +FillZerobss: + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + cmp r2, r4 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + + +g_pfnVectors: + .word _estack + .word Reset_Handler + + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_AVD_IRQHandler /* PVD/AVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word FDCAN1_IT0_IRQHandler /* FDCAN1 interrupt line 0 */ + .word FDCAN2_IT0_IRQHandler /* FDCAN2 interrupt line 0 */ + .word FDCAN1_IT1_IRQHandler /* FDCAN1 interrupt line 1 */ + .word FDCAN2_IT1_IRQHandler /* FDCAN2 interrupt line 1 */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_IRQHandler /* TIM1 Break interrupt */ + .word TIM1_UP_IRQHandler /* TIM1 Update interrupt */ + .word TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation interrupt */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word 0 /* Reserved */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FMC_IRQHandler /* FMC */ + .word SDMMC1_IRQHandler /* SDMMC1 */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word FDCAN_CAL_IRQHandler /* FDCAN calibration unit interrupt*/ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* Crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + .word FPU_IRQHandler /* FPU */ + .word UART7_IRQHandler /* UART7 */ + .word UART8_IRQHandler /* UART8 */ + .word SPI4_IRQHandler /* SPI4 */ + .word SPI5_IRQHandler /* SPI5 */ + .word SPI6_IRQHandler /* SPI6 */ + .word SAI1_IRQHandler /* SAI1 */ + .word LTDC_IRQHandler /* LTDC */ + .word LTDC_ER_IRQHandler /* LTDC error */ + .word DMA2D_IRQHandler /* DMA2D */ + .word SAI2_IRQHandler /* SAI2 */ + .word QUADSPI_IRQHandler /* QUADSPI */ + .word LPTIM1_IRQHandler /* LPTIM1 */ + .word CEC_IRQHandler /* HDMI_CEC */ + .word I2C4_EV_IRQHandler /* I2C4 Event */ + .word I2C4_ER_IRQHandler /* I2C4 Error */ + .word SPDIF_RX_IRQHandler /* SPDIF_RX */ + .word OTG_FS_EP1_OUT_IRQHandler /* USB OTG FS End Point 1 Out */ + .word OTG_FS_EP1_IN_IRQHandler /* USB OTG FS End Point 1 In */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMAMUX1_OVR_IRQHandler /* DMAMUX1 Overrun interrupt */ + .word HRTIM1_Master_IRQHandler /* HRTIM Master Timer global Interrupt */ + .word HRTIM1_TIMA_IRQHandler /* HRTIM Timer A global Interrupt */ + .word HRTIM1_TIMB_IRQHandler /* HRTIM Timer B global Interrupt */ + .word HRTIM1_TIMC_IRQHandler /* HRTIM Timer C global Interrupt */ + .word HRTIM1_TIMD_IRQHandler /* HRTIM Timer D global Interrupt */ + .word HRTIM1_TIME_IRQHandler /* HRTIM Timer E global Interrupt */ + .word HRTIM1_FLT_IRQHandler /* HRTIM Fault global Interrupt */ + .word DFSDM1_FLT0_IRQHandler /* DFSDM Filter0 Interrupt */ + .word DFSDM1_FLT1_IRQHandler /* DFSDM Filter1 Interrupt */ + .word DFSDM1_FLT2_IRQHandler /* DFSDM Filter2 Interrupt */ + .word DFSDM1_FLT3_IRQHandler /* DFSDM Filter3 Interrupt */ + .word SAI3_IRQHandler /* SAI3 global Interrupt */ + .word SWPMI1_IRQHandler /* Serial Wire Interface 1 global interrupt */ + .word TIM15_IRQHandler /* TIM15 global Interrupt */ + .word TIM16_IRQHandler /* TIM16 global Interrupt */ + .word TIM17_IRQHandler /* TIM17 global Interrupt */ + .word MDIOS_WKUP_IRQHandler /* MDIOS Wakeup Interrupt */ + .word MDIOS_IRQHandler /* MDIOS global Interrupt */ + .word JPEG_IRQHandler /* JPEG global Interrupt */ + .word MDMA_IRQHandler /* MDMA global Interrupt */ + .word 0 /* Reserved */ + .word SDMMC2_IRQHandler /* SDMMC2 global Interrupt */ + .word HSEM1_IRQHandler /* HSEM1 global Interrupt */ + .word 0 /* Reserved */ + .word ADC3_IRQHandler /* ADC3 global Interrupt */ + .word DMAMUX2_OVR_IRQHandler /* DMAMUX Overrun interrupt */ + .word BDMA_Channel0_IRQHandler /* BDMA Channel 0 global Interrupt */ + .word BDMA_Channel1_IRQHandler /* BDMA Channel 1 global Interrupt */ + .word BDMA_Channel2_IRQHandler /* BDMA Channel 2 global Interrupt */ + .word BDMA_Channel3_IRQHandler /* BDMA Channel 3 global Interrupt */ + .word BDMA_Channel4_IRQHandler /* BDMA Channel 4 global Interrupt */ + .word BDMA_Channel5_IRQHandler /* BDMA Channel 5 global Interrupt */ + .word BDMA_Channel6_IRQHandler /* BDMA Channel 6 global Interrupt */ + .word BDMA_Channel7_IRQHandler /* BDMA Channel 7 global Interrupt */ + .word COMP1_IRQHandler /* COMP1 global Interrupt */ + .word LPTIM2_IRQHandler /* LP TIM2 global interrupt */ + .word LPTIM3_IRQHandler /* LP TIM3 global interrupt */ + .word LPTIM4_IRQHandler /* LP TIM4 global interrupt */ + .word LPTIM5_IRQHandler /* LP TIM5 global interrupt */ + .word LPUART1_IRQHandler /* LP UART1 interrupt */ + .word 0 /* Reserved */ + .word CRS_IRQHandler /* Clock Recovery Global Interrupt */ + .word ECC_IRQHandler /* ECC diagnostic Global Interrupt */ + .word SAI4_IRQHandler /* SAI4 global interrupt */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word WAKEUP_PIN_IRQHandler /* Interrupt for all 6 wake-up pins */ + + .size g_pfnVectors, .-g_pfnVectors + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_AVD_IRQHandler + .thumb_set PVD_AVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak FDCAN1_IT0_IRQHandler + .thumb_set FDCAN1_IT0_IRQHandler,Default_Handler + + .weak FDCAN2_IT0_IRQHandler + .thumb_set FDCAN2_IT0_IRQHandler,Default_Handler + + .weak FDCAN1_IT1_IRQHandler + .thumb_set FDCAN1_IT1_IRQHandler,Default_Handler + + .weak FDCAN2_IT1_IRQHandler + .thumb_set FDCAN2_IT1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FMC_IRQHandler + .thumb_set FMC_IRQHandler,Default_Handler + + .weak SDMMC1_IRQHandler + .thumb_set SDMMC1_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak FDCAN_CAL_IRQHandler + .thumb_set FDCAN_CAL_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + + .weak UART7_IRQHandler + .thumb_set UART7_IRQHandler,Default_Handler + + .weak UART8_IRQHandler + .thumb_set UART8_IRQHandler,Default_Handler + + .weak SPI4_IRQHandler + .thumb_set SPI4_IRQHandler,Default_Handler + + .weak SPI5_IRQHandler + .thumb_set SPI5_IRQHandler,Default_Handler + + .weak SPI6_IRQHandler + .thumb_set SPI6_IRQHandler,Default_Handler + + .weak SAI1_IRQHandler + .thumb_set SAI1_IRQHandler,Default_Handler + + .weak LTDC_IRQHandler + .thumb_set LTDC_IRQHandler,Default_Handler + + .weak LTDC_ER_IRQHandler + .thumb_set LTDC_ER_IRQHandler,Default_Handler + + .weak DMA2D_IRQHandler + .thumb_set DMA2D_IRQHandler,Default_Handler + + .weak SAI2_IRQHandler + .thumb_set SAI2_IRQHandler,Default_Handler + + .weak QUADSPI_IRQHandler + .thumb_set QUADSPI_IRQHandler,Default_Handler + + .weak LPTIM1_IRQHandler + .thumb_set LPTIM1_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak I2C4_EV_IRQHandler + .thumb_set I2C4_EV_IRQHandler,Default_Handler + + .weak I2C4_ER_IRQHandler + .thumb_set I2C4_ER_IRQHandler,Default_Handler + + .weak SPDIF_RX_IRQHandler + .thumb_set SPDIF_RX_IRQHandler,Default_Handler + + .weak OTG_FS_EP1_OUT_IRQHandler + .thumb_set OTG_FS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_FS_EP1_IN_IRQHandler + .thumb_set OTG_FS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMAMUX1_OVR_IRQHandler + .thumb_set DMAMUX1_OVR_IRQHandler,Default_Handler + + .weak HRTIM1_Master_IRQHandler + .thumb_set HRTIM1_Master_IRQHandler,Default_Handler + + .weak HRTIM1_TIMA_IRQHandler + .thumb_set HRTIM1_TIMA_IRQHandler,Default_Handler + + .weak HRTIM1_TIMB_IRQHandler + .thumb_set HRTIM1_TIMB_IRQHandler,Default_Handler + + .weak HRTIM1_TIMC_IRQHandler + .thumb_set HRTIM1_TIMC_IRQHandler,Default_Handler + + .weak HRTIM1_TIMD_IRQHandler + .thumb_set HRTIM1_TIMD_IRQHandler,Default_Handler + + .weak HRTIM1_TIME_IRQHandler + .thumb_set HRTIM1_TIME_IRQHandler,Default_Handler + + .weak HRTIM1_FLT_IRQHandler + .thumb_set HRTIM1_FLT_IRQHandler,Default_Handler + + .weak DFSDM1_FLT0_IRQHandler + .thumb_set DFSDM1_FLT0_IRQHandler,Default_Handler + + .weak DFSDM1_FLT1_IRQHandler + .thumb_set DFSDM1_FLT1_IRQHandler,Default_Handler + + .weak DFSDM1_FLT2_IRQHandler + .thumb_set DFSDM1_FLT2_IRQHandler,Default_Handler + + .weak DFSDM1_FLT3_IRQHandler + .thumb_set DFSDM1_FLT3_IRQHandler,Default_Handler + + .weak SAI3_IRQHandler + .thumb_set SAI3_IRQHandler,Default_Handler + + .weak SWPMI1_IRQHandler + .thumb_set SWPMI1_IRQHandler,Default_Handler + + .weak TIM15_IRQHandler + .thumb_set TIM15_IRQHandler,Default_Handler + + .weak TIM16_IRQHandler + .thumb_set TIM16_IRQHandler,Default_Handler + + .weak TIM17_IRQHandler + .thumb_set TIM17_IRQHandler,Default_Handler + + .weak MDIOS_WKUP_IRQHandler + .thumb_set MDIOS_WKUP_IRQHandler,Default_Handler + + .weak MDIOS_IRQHandler + .thumb_set MDIOS_IRQHandler,Default_Handler + + .weak JPEG_IRQHandler + .thumb_set JPEG_IRQHandler,Default_Handler + + .weak MDMA_IRQHandler + .thumb_set MDMA_IRQHandler,Default_Handler + + .weak SDMMC2_IRQHandler + .thumb_set SDMMC2_IRQHandler,Default_Handler + + .weak HSEM1_IRQHandler + .thumb_set HSEM1_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak DMAMUX2_OVR_IRQHandler + .thumb_set DMAMUX2_OVR_IRQHandler,Default_Handler + + .weak BDMA_Channel0_IRQHandler + .thumb_set BDMA_Channel0_IRQHandler,Default_Handler + + .weak BDMA_Channel1_IRQHandler + .thumb_set BDMA_Channel1_IRQHandler,Default_Handler + + .weak BDMA_Channel2_IRQHandler + .thumb_set BDMA_Channel2_IRQHandler,Default_Handler + + .weak BDMA_Channel3_IRQHandler + .thumb_set BDMA_Channel3_IRQHandler,Default_Handler + + .weak BDMA_Channel4_IRQHandler + .thumb_set BDMA_Channel4_IRQHandler,Default_Handler + + .weak BDMA_Channel5_IRQHandler + .thumb_set BDMA_Channel5_IRQHandler,Default_Handler + + .weak BDMA_Channel6_IRQHandler + .thumb_set BDMA_Channel6_IRQHandler,Default_Handler + + .weak BDMA_Channel7_IRQHandler + .thumb_set BDMA_Channel7_IRQHandler,Default_Handler + + .weak COMP1_IRQHandler + .thumb_set COMP1_IRQHandler,Default_Handler + + .weak LPTIM2_IRQHandler + .thumb_set LPTIM2_IRQHandler,Default_Handler + + .weak LPTIM3_IRQHandler + .thumb_set LPTIM3_IRQHandler,Default_Handler + + .weak LPTIM4_IRQHandler + .thumb_set LPTIM4_IRQHandler,Default_Handler + + .weak LPTIM5_IRQHandler + .thumb_set LPTIM5_IRQHandler,Default_Handler + + .weak LPUART1_IRQHandler + .thumb_set LPUART1_IRQHandler,Default_Handler + + .weak CRS_IRQHandler + .thumb_set CRS_IRQHandler,Default_Handler + + .weak ECC_IRQHandler + .thumb_set ECC_IRQHandler,Default_Handler + + .weak SAI4_IRQHandler + .thumb_set SAI4_IRQHandler,Default_Handler + + .weak WAKEUP_PIN_IRQHandler + .thumb_set WAKEUP_PIN_IRQHandler,Default_Handler + +