From 7e27ff470f722cd66da3f36c5600b1e58172bafd Mon Sep 17 00:00:00 2001 From: Kai <2857693944@qq.com> Date: Sun, 2 Feb 2025 15:22:30 +0800 Subject: [PATCH 1/3] Add an STM32H730 bsp bsp: add project build doc bsp: add to ci list bsp: clean up doc: add STM32H730-EspHostedEVB readme bsp: esphosted evb --- .github/workflows/bsp_buildings.yml | 1 + bsp/stm32/stm32h730-esphosted-evb/.config | 1289 +++++++++++++++++ bsp/stm32/stm32h730-esphosted-evb/.gitignore | 42 + bsp/stm32/stm32h730-esphosted-evb/Kconfig | 22 + bsp/stm32/stm32h730-esphosted-evb/README.md | 126 ++ bsp/stm32/stm32h730-esphosted-evb/SConscript | 14 + bsp/stm32/stm32h730-esphosted-evb/SConstruct | 60 + .../applications/SConscript | 15 + .../applications/main.c | 38 + .../board/.ignore_format.yml | 6 + .../board/CubeMX_Config/.mxproject | 25 + .../board/CubeMX_Config/Core/Inc/main.h | 71 + .../Core/Inc/stm32h7xx_hal_conf.h | 514 +++++++ .../CubeMX_Config/Core/Inc/stm32h7xx_it.h | 66 + .../Core/Src/stm32h7xx_hal_msp.c | 358 +++++ .../CubeMX_Config/Core/Src/stm32h7xx_it.c | 203 +++ .../Core/Startup/reset_handler.c | 60 + .../Core/Startup/startup_stm32h730vbtx.s | 768 ++++++++++ .../board/CubeMX_Config/CubeMX_Config.ioc | 231 +++ .../stm32h730-esphosted-evb/board/Kconfig | 44 + .../stm32h730-esphosted-evb/board/SConscript | 30 + .../stm32h730-esphosted-evb/board/board.c | 160 ++ .../stm32h730-esphosted-evb/board/board.h | 34 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 213 +++ .../board/linker_scripts/link.sct | 19 + .../stm32h730-esphosted-evb/custom.cmake | 19 + .../stm32h730-esphosted-evb/figures/board.png | Bin 0 -> 435239 bytes .../gpio_conf_stm32.pl | 681 +++++++++ bsp/stm32/stm32h730-esphosted-evb/rtconfig.h | 396 +++++ bsp/stm32/stm32h730-esphosted-evb/rtconfig.py | 185 +++ .../stm32h730-ospi1.cfg | 85 ++ 32 files changed, 5803 insertions(+) create mode 100644 bsp/stm32/stm32h730-esphosted-evb/.config create mode 100644 bsp/stm32/stm32h730-esphosted-evb/.gitignore create mode 100644 bsp/stm32/stm32h730-esphosted-evb/Kconfig create mode 100644 bsp/stm32/stm32h730-esphosted-evb/README.md create mode 100644 bsp/stm32/stm32h730-esphosted-evb/SConscript create mode 100644 bsp/stm32/stm32h730-esphosted-evb/SConstruct create mode 100644 bsp/stm32/stm32h730-esphosted-evb/applications/SConscript create mode 100644 bsp/stm32/stm32h730-esphosted-evb/applications/main.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/.ignore_format.yml create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/main.h create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/Kconfig create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/SConscript create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/board.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/board.h create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32h730-esphosted-evb/custom.cmake create mode 100644 bsp/stm32/stm32h730-esphosted-evb/figures/board.png create mode 100644 bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl create mode 100644 bsp/stm32/stm32h730-esphosted-evb/rtconfig.h create mode 100644 bsp/stm32/stm32h730-esphosted-evb/rtconfig.py create mode 100644 bsp/stm32/stm32h730-esphosted-evb/stm32h730-ospi1.cfg diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 9bcb070fb30..7e4c4790750 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -190,6 +190,7 @@ jobs: - "stm32/stm32h563-st-nucleo" - "stm32/stm32h503-st-nucleo" - "stm32/stm32h723-st-nucleo" + - "stm32/stm32h730-esphosted-evb" - "stm32/stm32h743-armfly-v7" - "stm32/stm32h743-atk-apollo" - "stm32/stm32h743-openmv-h7plus" diff --git a/bsp/stm32/stm32h730-esphosted-evb/.config b/bsp/stm32/stm32h730-esphosted-evb/.config new file mode 100644 index 00000000000..f48bc04d524 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/.config @@ -0,0 +1,1289 @@ +CONFIG_SOC_STM32H730VB=y + +# +# RT-Thread Kernel +# + +# +# klibc options +# + +# +# rt_vsnprintf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD is not set +# end of rt_vsnprintf options + +# +# rt_vsscanf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set +# end of rt_vsscanf options + +# +# rt_memset options +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set +# end of rt_memset options + +# +# rt_memcpy options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set +# end of rt_memcpy options + +# +# rt_memmove options +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set +# end of rt_memmove options + +# +# rt_memcmp options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set +# end of rt_memcmp options + +# +# rt_strstr options +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set +# end of rt_strstr options + +# +# rt_strcasecmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set +# end of rt_strcasecmp options + +# +# rt_strncpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set +# end of rt_strncpy options + +# +# rt_strcpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set +# end of rt_strcpy options + +# +# rt_strncmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set +# end of rt_strncmp options + +# +# rt_strcmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set +# end of rt_strcmp options + +# +# rt_strlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set +# end of rt_strlen options + +# +# rt_strnlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set +# end of rt_strnlen options + +# CONFIG_RT_UTEST_TC_USING_KLIBC is not set +# end of klibc options + +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +CONFIG_RT_VER_NUM=0x50200 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_RT_USING_CACHE=y +CONFIG_RT_USING_HW_ATOMIC=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M7=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_SERIAL_BYPASS is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_PHY_V2 is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_KTIME is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_RT_TRACE is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# CONFIG_PKG_USING_TINYSQUARE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_GET_IRQ_PRIORITY is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32H7=y + +# +# Hardware Drivers Config +# + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_SCB_ENABLE_I_CACHE=y +CONFIG_BSP_SCB_ENABLE_D_CACHE=y +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART2=y +CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# end of Hardware Drivers Config diff --git a/bsp/stm32/stm32h730-esphosted-evb/.gitignore b/bsp/stm32/stm32h730-esphosted-evb/.gitignore new file mode 100644 index 00000000000..7221bde019d --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32h730-esphosted-evb/Kconfig b/bsp/stm32/stm32h730-esphosted-evb/Kconfig new file mode 100644 index 00000000000..0776bde42b8 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +PKGS_DIR := packages + +config SOC_STM32H730VB + bool + select SOC_SERIES_STM32H7 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" + +if !RT_USING_NANO +rsource "board/Kconfig" +endif diff --git a/bsp/stm32/stm32h730-esphosted-evb/README.md b/bsp/stm32/stm32h730-esphosted-evb/README.md new file mode 100644 index 00000000000..3331807ede6 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/README.md @@ -0,0 +1,126 @@ +# STM32H730-EspHostedEVB开发板BSP说明 + +## 简介 + +本文档 为**STM32H730-EspHostedEVB**开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +**STM32H730-EspHostedEVB**是本人用于测试及调试`ESP-Hosted`而制作的一块测试板。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32H730VBT6 + - 主频 550MHz + - 432KB RAM, 64KB ITCM, 128KB DTCM, 32KB I-Cache, 32KB D-Cache + - 128KB FLASH, QSPI Flash, SPI Flash, Support XiP & OTFDEC + +- Network Adapter: ESP32-C3-WROOM-02, 使用ESP-Hosted固件 +- Debugger: ST-Link V2-1 + +开发板更多详细信息请参考 + +* [OSHWHUB](https://oshwhub.com/baobaoa/stm32h730_esp-hosted_evb) +* [GITHUB](https://github.com/kaidegit/ESPHostedEVB) + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------- | :----------------: | :--------------- | +| LED | | | +| QSPI FLASH | 不支持也不建议操作 | 用于运行程序 | +| SPI FLASH | 待支持 | | +| ESP32-C3 | 待支持 | WIFI & BLUETOOTH | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | | +| UART | 支持 | UART2 | +| SPI | 支持 | SPI | +| QSPI | 不支持 | 已被占用 | +| USB | 待支持 | | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +MDK project TODO + +可以使用GCC进行编译,OpenOCD进行下载 + +```shell +mkdir build +scons --target=cmake --project-name=EspHostedEVBDemo +cd build +cmake .. -G Ninja +ninja -j8 +ninja flash +``` + +也可生成cmake后使用CLion打开 + +```shell +scons --target=cmake --project-name=EspHostedEVBDemo +clion . +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口2 的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 由于下载算法还未制作完,暂仅支持了GCC。 + +- 调试串口为串口2,默认接到STLink。 + +- Bootloader下载:参考[ESPHostedEVB/Software/Bootloader at main · kaidegit/ESPHostedEVB](https://github.com/kaidegit/ESPHostedEVB/tree/main/Software/Bootloader), 可使用**STM32CubeProgrammer**下载。 + +- STLink固件下载:参考oshwhub各项目教程。 + +- ESP-Hosted固件下载:参考[esp-hosted/esp_hosted_fg/README.md at master · espressif/esp-hosted](https://github.com/espressif/esp-hosted/blob/master/esp_hosted_fg/README.md) + +- 外部 flash 下载算法 + - OpenOCD:所需cfg已提供。 + - MDK: TODO + - CubeProg: TODO + + +## 联系人信息 + +维护人: + +- [kaidegit (Kai)](https://github.com/kaidegit) \ No newline at end of file diff --git a/bsp/stm32/stm32h730-esphosted-evb/SConscript b/bsp/stm32/stm32h730-esphosted-evb/SConscript new file mode 100644 index 00000000000..c7ef7659ece --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32h730-esphosted-evb/SConstruct b/bsp/stm32/stm32h730-esphosted-evb/SConstruct new file mode 100644 index 00000000000..02c0e78cd2d --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32H7xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32h730-esphosted-evb/applications/SConscript b/bsp/stm32/stm32h730-esphosted-evb/applications/SConscript new file mode 100644 index 00000000000..9bb9abae897 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/applications/SConscript @@ -0,0 +1,15 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git a/bsp/stm32/stm32h730-esphosted-evb/applications/main.c b/bsp/stm32/stm32h730-esphosted-evb/applications/main.c new file mode 100644 index 00000000000..82ec0d47057 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/applications/main.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-2-2 yekai first version + */ + +#include +#include +#include + +#define LED_PIN GET_PIN(E, 2) + +int main(void) { + /* set GPIO pin mode to output */ + rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); + + // this would be configured in bootloader + uint32_t pwr_supply_conf = HAL_PWREx_GetSupplyConfig(); + if (pwr_supply_conf & PWR_CR3_LDOEN) { + rt_kprintf("Vcore Power supply is LDO\r\n"); + } + if (pwr_supply_conf & PWR_CR3_BYPASS) { + rt_kprintf("Vcore Power supply is Bypass\r\n"); + } + + uint32_t freq = HAL_RCC_GetSysClockFreq(); + rt_kprintf("System Clock: %luMHz\r\n", freq / (int) 1e6); + + while (1) { + rt_pin_write(LED_PIN, !rt_pin_read(LED_PIN)); + rt_kprintf("Hello RT-Thread\r\n"); + rt_thread_mdelay(1000); + } +} diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/.ignore_format.yml b/bsp/stm32/stm32h730-esphosted-evb/board/.ignore_format.yml new file mode 100644 index 00000000000..0d7f3e360c6 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/.ignore_format.yml @@ -0,0 +1,6 @@ +# files format check exclude path, please follow the instructions below to modify; +# If you need to exclude an entire folder, add the folder path in dir_path; +# If you need to exclude a file, add the path to the file in file_path. + +dir_path: +- CubeMX_Config diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/.mxproject new file mode 100644 index 00000000000..931156500be --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/.mxproject @@ -0,0 +1,25 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_ospi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_spi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_spi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_spi_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_ospi.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_ospi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_spi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_spi.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_spi_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h730xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_armclang_ltm.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv81mml.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm35p.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core\Src\main.c;Core\Src\stm32h7xx_it.c;Core\Src\stm32h7xx_hal_msp.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_ospi.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Core\Src\system_stm32h7xx.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_ospi.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_spi_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Core\Src\system_stm32h7xx.c;;; +HeaderPath=C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Inc;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\STM32H7xx_HAL_Driver\Inc\Legacy;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\CMSIS\Device\ST\STM32H7xx\Include;C:\Users\yekai\STM32Cube\Repository\STM32Cube_FW_H7_V1.12.1\Drivers\CMSIS\Include;Core\Inc; +CDefines=USE_PWR_EXTERNAL_SOURCE_SUPPLY;USE_PWR_EXTERNAL_SOURCE_SUPPLY;USE_HAL_DRIVER;STM32H730xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=..\Core\Inc\stm32h7xx_it.h +HeaderFiles#1=..\Core\Inc\stm32h7xx_hal_conf.h +HeaderFiles#2=..\Core\Inc\main.h +HeaderFolderListSize=1 +HeaderPath#0=..\Core\Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=..\Core\Src\stm32h7xx_it.c +SourceFiles#1=..\Core\Src\stm32h7xx_hal_msp.c +SourceFiles#2=..\Core\Src\main.c +SourceFolderListSize=1 +SourcePath#0=..\Core\Src +SourceFiles=; + diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/main.h b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/main.h new file mode 100644 index 00000000000..be9579fb494 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/main.h @@ -0,0 +1,71 @@ +/* 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) 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. + * + ****************************************************************************** + */ +/* 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 */ + +/* 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 Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define LED_Pin GPIO_PIN_2 +#define LED_GPIO_Port GPIOE + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h new file mode 100644 index 00000000000..f890d493f06 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/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/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h new file mode 100644 index 00000000000..16bd906417e --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ +/* 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 SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32H7xx_IT_H */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c new file mode 100644 index 00000000000..175c7024b03 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c @@ -0,0 +1,358 @@ +/* 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) 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ +#include "drv_common.h" +/* USER CODE END Includes */ + +/* 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 */ +/** + * 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*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief OSPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hospi: OSPI handle pointer +* @retval None +*/ +void HAL_OSPI_MspInit(OSPI_HandleTypeDef* hospi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hospi->Instance==OCTOSPI1) + { + /* USER CODE BEGIN OCTOSPI1_MspInit 0 */ + + /* USER CODE END OCTOSPI1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_OSPI; + PeriphClkInitStruct.OspiClockSelection = RCC_OSPICLKSOURCE_D1HCLK; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_OCTOSPIM_CLK_ENABLE(); + __HAL_RCC_OSPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**OCTOSPI1 GPIO Configuration + PA6 ------> OCTOSPIM_P1_IO3 + PA7 ------> OCTOSPIM_P1_IO2 + PB0 ------> OCTOSPIM_P1_IO1 + PB1 ------> OCTOSPIM_P1_IO0 + PB2 ------> OCTOSPIM_P1_CLK + PE11 ------> OCTOSPIM_P1_NCS + */ + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF6_OCTOSPIM_P1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_OCTOSPIM_P1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF4_OCTOSPIM_P1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_OCTOSPIM_P1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_OCTOSPIM_P1; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN OCTOSPI1_MspInit 1 */ + + /* USER CODE END OCTOSPI1_MspInit 1 */ + + } + +} + +/** +* @brief OSPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hospi: OSPI handle pointer +* @retval None +*/ +void HAL_OSPI_MspDeInit(OSPI_HandleTypeDef* hospi) +{ + if(hospi->Instance==OCTOSPI1) + { + /* USER CODE BEGIN OCTOSPI1_MspDeInit 0 */ + + /* USER CODE END OCTOSPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_OCTOSPIM_CLK_DISABLE(); + __HAL_RCC_OSPI1_CLK_DISABLE(); + + /**OCTOSPI1 GPIO Configuration + PA6 ------> OCTOSPIM_P1_IO3 + PA7 ------> OCTOSPIM_P1_IO2 + PB0 ------> OCTOSPIM_P1_IO1 + PB1 ------> OCTOSPIM_P1_IO0 + PB2 ------> OCTOSPIM_P1_CLK + PE11 ------> OCTOSPIM_P1_NCS + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6|GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); + + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_11); + + /* USER CODE BEGIN OCTOSPI1_MspDeInit 1 */ + + /* USER CODE END OCTOSPI1_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspInit 0 */ + + /* USER CODE END SPI2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI2; + PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_SPI2_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**SPI2 GPIO Configuration + PB13 ------> SPI2_SCK + PB14 ------> SPI2_MISO + PB15 ------> SPI2_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI2_MspInit 1 */ + + /* USER CODE END SPI2_MspInit 1 */ + + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspDeInit 0 */ + + /* USER CODE END SPI2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI2_CLK_DISABLE(); + + /**SPI2 GPIO Configuration + PB13 ------> SPI2_SCK + PB14 ------> SPI2_MISO + PB15 ------> SPI2_MOSI + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15); + + /* USER CODE BEGIN SPI2_MspDeInit 1 */ + + /* USER CODE END SPI2_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==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2; + PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c new file mode 100644 index 00000000000..3601d799965 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ +/* 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 --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* 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 System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @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 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 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). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c new file mode 100644 index 00000000000..8ca3cf3fc6e --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c @@ -0,0 +1,60 @@ +// +// Created by yekai on 2024/7/3. +// + +#include +#include "stdint.h" + +extern void SystemInit(void); + +extern int entry(void); + +#pragma GCC push_options +#pragma GCC optimize ("O0") + +extern volatile uint32_t _ramfunc_start_lma; +extern volatile uint32_t _ramfunc_start_vma; +extern volatile uint32_t _ramfunc_end; + +extern volatile uint32_t _data_start_lma; +extern volatile uint32_t _data_start_vma; +extern volatile uint32_t _data_end; + +extern volatile uint32_t _sbss; +extern volatile uint32_t _ebss; + +__attribute__((used, section(".text.reset_handler"))) +void Reset_Handler(void) { + __asm volatile ("ldr sp, =_estack"); + volatile uint32_t *pui32Src; + volatile uint32_t *pui32Dest; + + // copy itcm + for (pui32Src = &_ramfunc_start_lma, pui32Dest = &_ramfunc_start_vma; + pui32Dest < &_ramfunc_end; + pui32Src++, pui32Dest++) { + *pui32Dest = *pui32Src; + } + + // copy data + for (pui32Src = &_data_start_lma, pui32Dest = &_data_start_vma; + pui32Dest < &_data_end; + pui32Src++, pui32Dest++ + ) { + *pui32Dest = *pui32Src; + } + + // init bss + for (pui32Dest = &_sbss; + pui32Dest < &_ebss; + pui32Dest++ + ) { + *pui32Dest = 0; + } + + SystemInit(); + + entry(); +} + +#pragma GCC pop_options diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s new file mode 100644 index 00000000000..956d4dfd9d5 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s @@ -0,0 +1,768 @@ +/** + ****************************************************************************** + * @file startup_stm32h730xx.s + * @author MCD Application Team + * @brief STM32H730xx 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) 2019 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 */ /* CubeMX 6.13.0 新增的东西,但是在`SystemClock_Config`中也会配置,没必要这边配置 */ +/* 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 entry + 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_PSSI_IRQHandler /* DCMI, PSSI */ + .word CRYP_IRQHandler /* CRYP */ + .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 0 /* Reserved */ + .word OCTOSPI1_IRQHandler /* OCTOSPI1 */ + .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 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word DMAMUX1_OVR_IRQHandler /* DMAMUX1 Overrun interrupt */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .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 0 /* Reserved */ + .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 0 /* Reserved */ + .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 DTS_IRQHandler /* Digital Temperature Sensor interrupt */ + .word 0 /* Reserved */ + .word WAKEUP_PIN_IRQHandler /* Interrupt for all 6 wake-up pins */ + .word OCTOSPI2_IRQHandler /* OCTOSPI2 Interrupt */ + .word OTFDEC1_IRQHandler /* OTFDEC1 Interrupt */ + .word OTFDEC2_IRQHandler /* OTFDEC2 Interrupt */ + .word FMAC_IRQHandler /* FMAC Interrupt */ + .word CORDIC_IRQHandler /* CORDIC Interrupt */ + .word UART9_IRQHandler /* UART9 Interrupt */ + .word USART10_IRQHandler /* UART10 Interrupt */ + .word I2C5_EV_IRQHandler /* I2C5 Event Interrupt */ + .word I2C5_ER_IRQHandler /* I2C5 Error Interrupt */ + .word FDCAN3_IT0_IRQHandler /* FDCAN3 interrupt line 0 */ + .word FDCAN3_IT1_IRQHandler /* FDCAN3 interrupt line 1 */ + .word TIM23_IRQHandler /* TIM23 global interrupt */ + .word TIM24_IRQHandler /* TIM24 global interrupt */ + + .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_PSSI_IRQHandler + .thumb_set DCMI_PSSI_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 OCTOSPI1_IRQHandler + .thumb_set OCTOSPI1_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 DMAMUX1_OVR_IRQHandler + .thumb_set DMAMUX1_OVR_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 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 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 DTS_IRQHandler + .thumb_set DTS_IRQHandler,Default_Handler + + .weak WAKEUP_PIN_IRQHandler + .thumb_set WAKEUP_PIN_IRQHandler,Default_Handler + + .weak OCTOSPI2_IRQHandler + .thumb_set OCTOSPI2_IRQHandler,Default_Handler + + .weak OTFDEC1_IRQHandler + .thumb_set OTFDEC1_IRQHandler,Default_Handler + + .weak OTFDEC2_IRQHandler + .thumb_set OTFDEC2_IRQHandler,Default_Handler + + .weak FMAC_IRQHandler + .thumb_set FMAC_IRQHandler,Default_Handler + + .weak CORDIC_IRQHandler + .thumb_set CORDIC_IRQHandler,Default_Handler + + .weak UART9_IRQHandler + .thumb_set UART9_IRQHandler,Default_Handler + + .weak USART10_IRQHandler + .thumb_set USART10_IRQHandler,Default_Handler + + .weak I2C5_EV_IRQHandler + .thumb_set I2C5_EV_IRQHandler,Default_Handler + + .weak I2C5_ER_IRQHandler + .thumb_set I2C5_ER_IRQHandler,Default_Handler + + .weak FDCAN3_IT0_IRQHandler + .thumb_set FDCAN3_IT0_IRQHandler,Default_Handler + + .weak FDCAN3_IT1_IRQHandler + .thumb_set FDCAN3_IT1_IRQHandler,Default_Handler + + .weak TIM23_IRQHandler + .thumb_set TIM23_IRQHandler,Default_Handler + + .weak TIM24_IRQHandler + .thumb_set TIM24_IRQHandler,Default_Handler + + diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 00000000000..c0f683d7e3c --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,231 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +MMTAppRegionsCount=0 +MMTConfigApplied=false +Mcu.CPN=STM32H730VBT6 +Mcu.Family=STM32H7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=MEMORYMAP +Mcu.IP2=NVIC +Mcu.IP3=OCTOSPI1 +Mcu.IP4=RCC +Mcu.IP5=SPI2 +Mcu.IP6=SYS +Mcu.IP7=USART2 +Mcu.IPNb=8 +Mcu.Name=STM32H730VBTx +Mcu.Package=LQFP100 +Mcu.Pin0=PE2 +Mcu.Pin1=PH0-OSC_IN +Mcu.Pin10=PE11 +Mcu.Pin11=PB12 +Mcu.Pin12=PB13 +Mcu.Pin13=PB14 +Mcu.Pin14=PB15 +Mcu.Pin15=VP_OCTOSPI1_VS_quad +Mcu.Pin16=VP_SYS_VS_Systick +Mcu.Pin17=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin2=PH1-OSC_OUT +Mcu.Pin3=PA2 +Mcu.Pin4=PA3 +Mcu.Pin5=PA6 +Mcu.Pin6=PA7 +Mcu.Pin7=PB0 +Mcu.Pin8=PB1 +Mcu.Pin9=PB2 +Mcu.PinsNb=18 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H730VBTx +MxCube.Version=6.13.0 +MxDb.Version=DB.6.0.130 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA6.Locked=true +PA6.Mode=OCTOSPI1_IOL_Port1L +PA6.Signal=OCTOSPIM_P1_IO3 +PA7.Locked=true +PA7.Mode=OCTOSPI1_IOL_Port1L +PA7.Signal=OCTOSPIM_P1_IO2 +PB0.Locked=true +PB0.Mode=OCTOSPI1_IOL_Port1L +PB0.Signal=OCTOSPIM_P1_IO1 +PB1.Locked=true +PB1.Mode=OCTOSPI1_IOL_Port1L +PB1.Signal=OCTOSPIM_P1_IO0 +PB12.GPIOParameters=GPIO_Speed +PB12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB12.Locked=true +PB12.Signal=GPIO_Output +PB13.GPIOParameters=GPIO_Speed +PB13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB13.Locked=true +PB13.Mode=Full_Duplex_Master +PB13.Signal=SPI2_SCK +PB14.GPIOParameters=GPIO_Speed +PB14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB14.Locked=true +PB14.Mode=Full_Duplex_Master +PB14.Signal=SPI2_MISO +PB15.GPIOParameters=GPIO_Speed +PB15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB15.Locked=true +PB15.Mode=Full_Duplex_Master +PB15.Signal=SPI2_MOSI +PB2.Locked=true +PB2.Mode=O1_P1_CLK +PB2.Signal=OCTOSPIM_P1_CLK +PE11.Locked=true +PE11.Mode=OCTOSPI1_Port1_NCS +PE11.Signal=OCTOSPIM_P1_NCS +PE2.GPIOParameters=GPIO_Label +PE2.GPIO_Label=LED +PE2.Locked=true +PE2.Signal=GPIO_Output +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H730VBTx +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=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain=STM32CubeIDE +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SPI2_Init-SPI2-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_OCTOSPI1_Init-OCTOSPI1-true-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=50390625 +RCC.AHB12Freq_Value=275000000 +RCC.AHB4Freq_Value=275000000 +RCC.APB1Freq_Value=137500000 +RCC.APB2Freq_Value=137500000 +RCC.APB3Freq_Value=137500000 +RCC.APB4Freq_Value=137500000 +RCC.AXIClockFreq_Value=275000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=64000000 +RCC.CortexFreq_Value=550000000 +RCC.CpuClockFreq_Value=550000000 +RCC.D1CPREFreq_Value=550000000 +RCC.D1PPRE=RCC_APB3_DIV2 +RCC.D2PPRE1=RCC_APB1_DIV2 +RCC.D2PPRE2=RCC_APB2_DIV2 +RCC.D3PPRE=RCC_APB4_DIV2 +RCC.DFSDMACLkFreq_Value=110000000 +RCC.DFSDMFreq_Value=137500000 +RCC.DIVM1=5 +RCC.DIVN1=110 +RCC.DIVP1=1 +RCC.DIVP1Freq_Value=550000000 +RCC.DIVP2Freq_Value=50390625 +RCC.DIVP3Freq_Value=50390625 +RCC.DIVQ1=5 +RCC.DIVQ1Freq_Value=110000000 +RCC.DIVQ2Freq_Value=50390625 +RCC.DIVQ3Freq_Value=50390625 +RCC.DIVR1Freq_Value=275000000 +RCC.DIVR2Freq_Value=50390625 +RCC.DIVR3Freq_Value=50390625 +RCC.FDCANFreq_Value=110000000 +RCC.FMCFreq_Value=275000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=275000000 +RCC.HCLKFreq_Value=275000000 +RCC.HPRE=RCC_HCLK_DIV2 +RCC.I2C123Freq_Value=137500000 +RCC.I2C4Freq_Value=137500000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVP1,DIVP1Freq_Value,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,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,SupplySource,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=137500000 +RCC.LPTIM2Freq_Value=137500000 +RCC.LPTIM345Freq_Value=137500000 +RCC.LPUART1Freq_Value=137500000 +RCC.LTDCFreq_Value=50390625 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=550000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE0 +RCC.QSPIFreq_Value=275000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=110000000 +RCC.SAI4AFreq_Value=110000000 +RCC.SAI4BFreq_Value=110000000 +RCC.SDMMCFreq_Value=110000000 +RCC.SPDIFRXFreq_Value=110000000 +RCC.SPI123Freq_Value=110000000 +RCC.SPI45Freq_Value=137500000 +RCC.SPI6Freq_Value=137500000 +RCC.SWPMI1Freq_Value=137500000 +RCC.SYSCLKFreq_VALUE=550000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.SupplySource=PWR_EXTERNAL_SOURCE_SUPPLY +RCC.Tim1OutputFreq_Value=275000000 +RCC.Tim2OutputFreq_Value=275000000 +RCC.TraceFreq_Value=64000000 +RCC.USART16Freq_Value=137500000 +RCC.USART234578Freq_Value=137500000 +RCC.USBFreq_Value=110000000 +RCC.VCO1OutputFreq_Value=550000000 +RCC.VCO2OutputFreq_Value=100781250 +RCC.VCO3OutputFreq_Value=100781250 +RCC.VCOInput1Freq_Value=5000000 +RCC.VCOInput2Freq_Value=781250 +RCC.VCOInput3Freq_Value=781250 +SPI2.CalculateBaudRate=55.0 MBits/s +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +USART2.IPParameters=VirtualMode-Asynchronous +USART2.VirtualMode-Asynchronous=VM_ASYNC +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_OCTOSPI1_VS_quad.Mode=quad_mode +VP_OCTOSPI1_VS_quad.Signal=OCTOSPI1_VS_quad +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig b/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig new file mode 100644 index 00000000000..1ea0149a79b --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig @@ -0,0 +1,44 @@ +menu "Hardware Drivers Config" + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_SCB_ENABLE_I_CACHE + bool "Enable ICACHE" + default y + + config BSP_SCB_ENABLE_D_CACHE + bool "Enable DCACHE" + default y + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART2 + bool "Enable UART2" + default y + config BSP_USING_UART3 + bool "Enable UART3" + default y + + endif + + source "$(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/SConscript b/bsp/stm32/stm32h730-esphosted-evb/board/SConscript new file mode 100644 index 00000000000..8fb8fa324ca --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/SConscript @@ -0,0 +1,30 @@ +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Core/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.PLATFORM in ['gcc']: + src += Glob('CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s') + src += Glob('CubeMX_Config/Core/Startup/reset_handler.c') +elif rtconfig.PLATFORM in ['armcc', 'armclang']: + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h730xx.s'] +elif rtconfig.PLATFORM in ['iccarm']: + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h730xx.s'] + +# STM32H743xx || STM32H750xx || STM32F753xx +# You can select chips from the list above +CPPDEFINES = ['STM32H730xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/board.c b/bsp/stm32/stm32h730-esphosted-evb/board/board.c new file mode 100644 index 00000000000..ec12e7c64cf --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/board.c @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +/** + * @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_EXTERNAL_SOURCE_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 = 110; + RCC_OscInitStruct.PLL.PLLP = 1; + RCC_OscInitStruct.PLL.PLLQ = 5; + 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_3) != HAL_OK) { + Error_Handler(); + } +} + +int MPU_Config(void) { + MPU_Region_InitTypeDef MPU_InitStruct = {0}; + + /* Disables the MPU */ + HAL_MPU_Disable(); + + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + + // ITCM 0x00000000 64K ReadOnly + MPU_InitStruct.Number = MPU_REGION_NUMBER0; + MPU_InitStruct.BaseAddress = 0x00000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_64KB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RO_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + // DTCM 0x20000000 128K ReadWrite + MPU_InitStruct.Number = MPU_REGION_NUMBER1; + MPU_InitStruct.BaseAddress = 0x20000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_128KB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RW_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + // RAMD1 0x24000000 320K ReadWrite + MPU_InitStruct.Number = MPU_REGION_NUMBER2; + MPU_InitStruct.BaseAddress = 0x24000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_512KB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RW_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + // RAMD2 0x30000000 32K ReadWrite DMABuffer + MPU_InitStruct.Number = MPU_REGION_NUMBER3; + MPU_InitStruct.BaseAddress = 0x30000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_32KB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RW_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + // RAMD3 0x38000000 16K ReadWrite DMABuffer + MPU_InitStruct.Number = MPU_REGION_NUMBER4; + MPU_InitStruct.BaseAddress = 0x38000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_16KB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RW_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + // FLASH 0x90000000 128M ReadOnly + MPU_InitStruct.Number = MPU_REGION_NUMBER5; + MPU_InitStruct.BaseAddress = 0x90000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_128MB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.AccessPermission = MPU_REGION_PRIV_RO_URO; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE; + HAL_MPU_ConfigRegion(&MPU_InitStruct); + + /* Enables the MPU */ + HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); + + return 0; +} + +INIT_BOARD_EXPORT(MPU_Config); diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/board.h b/bsp/stm32/stm32h730-esphosted-evb/board/board.h new file mode 100644 index 00000000000..f1e0bff2d87 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/board.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint8_t _heap_start[]; +extern uint8_t _heap_end[]; +#define HEAP_BEGIN _heap_start +#define HEAP_END _heap_end + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.icf b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.icf new file mode 100644 index 00000000000..14ec1960192 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x24000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2407FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x800; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.lds b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.lds new file mode 100644 index 00000000000..23408dd32ca --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.lds @@ -0,0 +1,213 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K + DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x90000000, LENGTH = 1M + RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 320K + RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 32K + RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 16K +} +ENTRY(Reset_Handler) +_system_stack_size = 0x400; + +SECTIONS +{ + .ram_d1(NOLOAD) : { + . = ALIGN(4); + *(.ram_d1) + *(.ram_d1.*) + . = ALIGN(4); + } >RAM_D1 + + .ram_d2(NOLOAD) : { + . = ALIGN(4); + *(.ram_d2) + *(.ram_d2.*) + . = ALIGN(4); + } >RAM_D2 + + .ram_d3(NOLOAD) : { + . = ALIGN(4); + *(.ram_d3) + *(.ram_d3.*) + . = ALIGN(4); + } >RAM_D3 + + _ramfunc_start_lma = LOADADDR(.ramfunc); + .ramfunc : { + . = ALIGN(4); + _ramfunc_start_vma = .; + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + . = ALIGN(4); + _ramfunc_end = .; /* define a global symbol at data end */ + } >ITCMRAM AT>FLASH + + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for utest */ + . = ALIGN(4); + __rt_utest_tc_tab_start = .; + KEEP(*(UtestTcTab)) + __rt_utest_tc_tab_end = .; + + /* section information for at server */ + . = ALIGN(4); + __rtatcmdtab_start = .; + KEEP(*(RtAtCmdTab)) + __rtatcmdtab_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + PROVIDE(__dtors_start__ = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array)) + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } >FLASH + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + .ARM.exidx : + { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + *(.ARM.extab*) + . = ALIGN(4); + __exidx_end = .; + } >FLASH + + /* .data section which is used for initialized data */ + + _sidata = LOADADDR(.data); + _data_start_lma = LOADADDR(.data); + .data : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + _data_start_vma = .; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + _data_end = .; + } >DTCMRAM AT>FLASH + + __bss_start = .; + .bss (NOLOAD): + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DTCMRAM + __bss_end = .; + _heap_start = .; + _end = .; + + _heap_end = ORIGIN(DTCMRAM) + LENGTH(DTCMRAM) - _system_stack_size; + _sstack = _heap_end; + _estack = _heap_end + _system_stack_size; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct new file mode 100644 index 00000000000..a6e04bf6abc --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct @@ -0,0 +1,19 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } + RW_IRAM2 0x24000000 0x00050000 { + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32h730-esphosted-evb/custom.cmake b/bsp/stm32/stm32h730-esphosted-evb/custom.cmake new file mode 100644 index 00000000000..77c41ca4998 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/custom.cmake @@ -0,0 +1,19 @@ +set(OPENOCD_PATH_WIN "C:/Softwares/xpack-openocd-0.12.0-1/bin") +set(OPENOCD_PATH_MACOS "/Users/kai/DevTools/xpack-openocd-0.12.0-4/bin") +if ("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Windows") + set(OPENOCD_PATH ${OPENOCD_PATH_WIN}) +elseif ("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Darwin") + set(OPENOCD_PATH ${OPENOCD_PATH_MACOS}) +else () + message(STATUS "Unknown OS: ${CMAKE_HOST_SYSTEM_NAME}") +endif () + +set(OPENOCD_CFG ${PROJECT_SOURCE_DIR}/stm32h730-ospi1.cfg) +add_custom_target(flash ALL + COMMAND ${OPENOCD_PATH}/openocd + -s ${OPENOCD_PATH}/../scripts + -f ${OPENOCD_CFG} + -c "tcl_port disabled" -c "gdb_port disabled" + -c "program ${CMAKE_PROJECT_NAME}.elf" + -c reset -c shutdown +) \ No newline at end of file diff --git a/bsp/stm32/stm32h730-esphosted-evb/figures/board.png b/bsp/stm32/stm32h730-esphosted-evb/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc0669313ed808058b3effba987f44aa4bf25fb GIT binary patch literal 435239 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

|!AchV3 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Ë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 literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl b/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl new file mode 100644 index 00000000000..5fc7ba50e47 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl @@ -0,0 +1,681 @@ +#!/usr/bin/perl +# SPDX-License-Identifier: GPL-2.0-or-later + +# +# Helper for generating GPIO setup for STM32F0, F4, F7, H7, L0, L1, L4, L4+ +# and F1 (for 'stmqspi' and 'cmspi' drivers). +# +# Each pin is configured by "PortAndBit:Conf:Speed" +# 'PortAndBit' specifies Port and bit number +# 'Conf' is one of 'AFx' (alternate), 'P' (output), 'IN' (input), +# (each optionally by 'P' (push-pull) or 'O' (open-drain)), +# (all optionally followed by 'UP' (pull-up), or 'DO' (pull-down)) +# 'Speed' is one of 'L' (low), 'M' (medium), 'H' (high), 'V' (very high) +# +# Port configuration can be given on command line as a single string (pins separated by commas) +# or via CubeMX generated file. The latter must consist of the quadspi.c / octospi.c and the +# corresponding header. The precise spelling in these files doesn't seem to be consistent, though ... +# +# Pins have to be ordered this way: +# - I2C: SDA, SCL +# - SPI (1 line): NCS, CLK, IO1/MISO, IO0/MOSI +# - DPI (2 lines): NCS, CLK, IO1/MISO, IO0/MOSI +# - QPI (4 lines): NCS, CLK, IO3/NHOLD, IO2/NWP, IO1/MISO, IO0/MOSI +# For dual flash: BK_1 first, then BK_2. If single NCS for both, omit NCS in BK_2 +# For octal flash: NCS, CLK, DQS, IO7 down to IO0 + +use strict; +use Getopt::Std; + +my $GPIO_BASE = 0x58020000; +my $Conf = "PA06:AF06:V, PA07:AF10:V, PB00:AF04:V, PB01:AF04:V, PB02:AF09:V, PE11:AF11:V"; +my $STM32F1 = 0; + +# "Blue-Pill stm32f103cbt6 board w/ cmspi +#$STM32F1 = 1; +#$GPIO_BASE = 0x40010800; +#$Conf = "PB12:PP:M, PB13:PP:V, PB14:INUP:V, PB15:INUP:V"; +#$Conf = "PB12:PP:M, PB13:PP:V, PB14:INUP:V, PB01:INUP:V"; + +#$STM32F1 = 1; +#$GPIO_BASE = 0x40010800; +#$Conf = "PB07:INUP:V, PB06:INUP:V"; + +# mini-stm32f030f4p6 board w/ cmspi +#$GPIO_BASE = 0x48000000; +#$Conf = "PB01:PP:V, PA05:PP:V, PA06:INUP:V, PA07:INUP:V"; + +# stm32f407vet6 board w/ cmspi +#$GPIO_BASE = 0x40020000; +#$Conf = "PB00:PP:M, PB03:PP:V, PB04:INUP:V, PB05:INUP:V"; + +# stm32f412g-disco quad +#$GPIO_BASE = 0x40020000; +#$Conf = "PB02:AF09:V, PF09:AF10:V, PF08:AF10:V, PF07:AF09:V, PF06:AF09:V, PG06:AF10:V"; + +# stm32f413h-disco +#$GPIO_BASE = 0x40020000; +#$Conf = "PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PF09:AF10:V, PF08:AF10:V, PG06:AF10:V"; + +# stm32f469i-disco quad +#$GPIO_BASE = 0x40020000; +#$Conf = "PB06:AF10:V, PF10:AF09:V, PF09:AF10:V, PF08:AF10:V, PF07:AF09:V, PF06:AF09:V"; +# w/ cmspi +#$Conf = "PB06:PP:M, PF10:PP:V, PF06:INUP:V, PF07:INUP:V, PF09:INUP:V, PF08:INUP:V"; + +# stm32f723e-disco quad +#$GPIO_BASE = 0x40020000; +#$Conf = "PB06:AF10:V, PB02:AF09:V, PC10:AF09:V, PC09:AF09:V, PD13:AF09:V, PE02:AF09:V"; + +# stm32f746g-disco quad +#$GPIO_BASE = 0x40020000; +#Conf = "PB06:AF10:V, PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V"; +# w/ cmspi +#$Conf = "PB06:PP:M, PB02:PP:V, PD13:INUP:V, PE02:INUP:V, PD12:INUP:V, PD11:INUP:V"; + +# stm32f769i-disco quad +#$GPIO_BASE = 0x40020000; +#$Conf = "PB06:AF10:V, PB02:AF09:V, PC10:AF09:V, PC09:AF09:V, PD13:AF09:V, PE02:AF09:V"; +# w/ cmspi +#$Conf = "PB06:PP:M, PB02:PP:V, PD13:INUP:V, PE02:INUP:V, PC10:INUP:V, PC09:INUP:V, "; + +# b-l475e-iot01a quad +#$GPIO_BASE = 0x48000000; +#$Conf = "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V"; + +# stm32l476g-disco quad +#$GPIO_BASE = 0x48000000; +#$Conf = "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V"; + +# stm32l496g-disco quad +#$GPIO_BASE = 0x48000000; +#$Conf = "PA07:AF10:V, PA06:AF10:V, PA03:AF10:V, PB11:AF10:V, PB01:AF10:V, PB00:AF10:V"; + +# stm32l4r9i-disco octal +#$GPIO_BASE = 0x48000000; +#$Conf = "PG15:AF05:V, PG12:AF05:V, PG10:AF05:V, PG09:AF05:V, PH10:AF05:V, PH09:AF05:V, " +# . "PH08:AF05:V, PI11:AF05:V, PI10:AF05:V, PI09:AF05:V, PI06:AF05:V"; + +# stm32l4p5g-disco octal/octal +#$GPIO_BASE = 0x48000000; +#$Conf = "PA07:AF10:V, PA06:AF10:V, PC03:AF10:V, PD07:AF10:V, PD05:AF10:V, PD04:AF10:V, " +# . "PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V, PG06:AF03:V"; +#$Conf = "PF12:AF05:V, PF04:AF05:V, PF03:AF05:V, PF02:AF05:V, PF01:AF05:V, PF00:AF05:V, " +# . "PG12:AF05:V, PG10:AF05:V, PG09:AF05:V, PG01:AF05:V, PG00:AF05:V"; + +# nucleo-f767zi dual quad +#$GPIO_BASE = 0x40020000; +#$Conf = "PB06:AF10:V, PB02:AF09:V, PC11:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, " +# . "PD11:AF09:V, PE10:AF10:V, PE09:AF10:V, PE08:AF10:V, PE07:AF10:V"; +# w/ cmspi +#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; +#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PE09:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; + +# nucleo-h743zi dual quad +#$GPIO_BASE = 0x58020000; +#$Conf = "PB10:AF09:V, PB02:AF09:V, PC11:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, " +# . "PD11:AF09:V, PE10:AF10:V, PE09:AF10:V, PE08:AF10:V, PE07:AF10:V"; +# w/ cmspi +#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; +#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PE09:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; + +# nucleo-h7a3zi dual quad +#$GPIO_BASE = 0x58020000; +#$Conf = "PB10:AF09:V, PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V, " +# . "PC11:AF09:V, PE10:AF10:V, PD06:AF10:V, PE08:AF10:V, PE07:AF10:V"; +# w/ cmspi +#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; +#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PD06:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; + +# nucleo-l4r5zi one dual quad single NCS +#$GPIO_BASE = 0x48000000; +#$Conf = "PA02:AF10:V, PE10:AF10:V, PD07:AF10:V, PD06:AF10:V, PD05:AF10:V, PD04:AF10:V, " +# . "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V"; +# w/ cmspi +#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PD07:INPDO:V, PD06:INPDO:V, PD05:INPDO:V, PD04:INPDO:V"; +#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PE15:INPDO:V, PE14:INPDO:V, PE13:INPDO:V, PE12:INPDO:V"; + +# nucleo-l552ze-q dual quad with single NCS +#$GPIO_BASE = 0x42020000; +#$Conf = "PA02:AF10:V, PE10:AF10:V, PD07:AF10:V, PD06:AF10:V, PD05:AF10:V, PD04:AF10:V, " +# . "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V"; +# w/ cmspi +#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PD07:INPDO:V, PD06:INPDO:V, PD05:INPDO:V, PD04:INPDO:V"; +#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PE15:INPDO:V, PE14:INPDO:V, PE13:INPDO:V, PE12:INPDO:V"; + +# nucleo-g071rb dual quad +#$GPIO_BASE = 0x50000000; +#$Conf = "PA00:PPUP:H, PA04:PPUP:V, PB03:INPUP:V, PA10:INPUP:V, PB11:INPUP:H, PB01:INPUP:H"; +#$Conf = "PA01:PPUP:H, PA04:PPUP:V, PA08:INPUP:V, PB14:INPUP:V, PB04:INPUP:V, PB05:INPUP:V"; + +# nucleo-g474re dual quad with single NCS +#$GPIO_BASE = 0x48000000; +#$Conf = "PB11:AF10:H, PB10:AF10:V, PA06:AF10:V, PA07:AF10:V, PB00:AF10:V, PB01:AF10:V, " +# . "PC04:AF10:V, PC03:AF10:V, PC02:AF10:V, PC01:AF10:V"; +# w/ cmspi +#$Conf = "PB11:PPUP:H, PB10:PPUP:V, PA06:INPUP:V, PA07:INPUP:V, PB00:INPUP:V, PB01:INPUP:V"; +#$Conf = "PB11:PPUP:H, PB10:PPUP:V, PC04:INPUP:V, PC03:INPUP:V, PC02:INPUP:V, PC01:INPUP:V"; + +# stm32h745i-disco dual quad with single NCS +#$GPIO_BASE = 0x58020000; +#$Conf = "PG06:AF10:H, PF10:AF09:V, PF06:AF09:V, PF07:AF09:V, PF09:AF10:V, PD11:AF09:V, " +# . "PG14:AF09:H, PG09:AF09:V, PH03:AF09:V, PH02:AF09:V"; + +# stm32h747i-disco dual quad with single NCS +#GPIO_BASE = 0x58020000; +#$Conf = "PG06:AF10:H, PB02:AF09:V, PF06:AF09:V, PF07:AF09:V, PF09:AF10:V, PD11:AF09:V, " +# . "PG14:AF09:H, PG09:AF09:V, PH03:AF09:V, PH02:AF09:V"; + +# stm32h7b3i-disco octal +#$GPIO_BASE = 0x58020000; +#$Conf = "PG06:AF10:V, PB02:AF09:V, PC05:AF10:V, PD07:AF10:V, PG09:AF09:V, PH03:AF09:V, PC01:AF10:V, " +# . "PF06:AF10:V, PF07:AF10:V, PF09:AF10:V, PD11:AF09:V"; + +# stm32h735g-disco octal +#$GPIO_BASE = 0x58020000; +#$Conf = "PG06:AF10:V, PF10:AF09:V, PB02:AF10:V, PD07:AF10:V, PG09:AF09:V, PD05:AF10:V, PD04:AF10:V, " +# . "PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V"; + +# stm32l562e-disco octal +#$GPIO_BASE = 0x42020000; +#$Conf = "PA02:AF10:V, PA03:AF10:V, PB02:AF10:V, PC00:AF03:V, PC03:AF10:V, PC02:AF10:V, PC01:AF10:V, " +# . "PA06:AF10:V, PA07:AF10:V, PB00:AF10:V, PB01:AF10:V"; + +&getopts('b:c:f:t'); +if ($Getopt::Std::opt_b eq '') +{ + if ($GPIO_BASE eq '') + { + die("usage: $0 [ -1 ] -b io_base [ -c port_configuration ] [ -f conf_file ]"); + } +} +else +{ + $GPIO_BASE = eval $Getopt::Std::opt_b; +} + +if ($Getopt::Std::opt_c eq '') +{ + if (($Conf eq '') && ($Getopt::Std::opt_f eq '')) + { + die("usage: $0 [ -b io_base ] ( -c port_configuration | -f conf_file )"); + } +}# +else +{ + $Conf = $Getopt::Std::opt_c . ','; +} + +$STM32F1 = $Getopt::Std::opt_t; + +my $Sep = "\t"; +my $Form = "${Sep}mmw 0x%08X 0x%08X 0x%08X\t;# "; + +my $GPIO_OFFS; +my $GPIO_CRL; +my $GPIO_CRH; +my $GPIO_MODER; +my $GPIO_OTYPER; +my $GPIO_OSPEEDR; +my $GPIO_PUPDR; +my $GPIO_IDR; +my $GPIO_ODR; +my $GPIO_AFRL; +my $GPIO_AFRH; + +if ($STM32F1) +{ + # offsets for F1 devices + $GPIO_OFFS = 0x400; + $GPIO_CRL = 0x00; + $GPIO_CRH = 0x04; + $GPIO_IDR = 0x08; + $GPIO_ODR = 0x0C; +} +else +{ + # these offsets are identical on all F0, F4, F7, H7, L4, L4+ devices up to now + $GPIO_OFFS = 0x400; + $GPIO_MODER = 0x00; + $GPIO_OTYPER = 0x04; + $GPIO_OSPEEDR = 0x08; + $GPIO_PUPDR = 0x0C; + $GPIO_IDR = 0x10; + $GPIO_ODR = 0x14; + $GPIO_AFRL = 0x20; + $GPIO_AFRH = 0x24; +} + +my @Out = ( { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { } ); +my @Port = ( ); +my $Exor; +my %Conf; +my $Pins = "${Sep}#"; + +my $pins; +my $altn; +my %defs; + +if ($Getopt::Std::opt_f ne '') +{ + open(CONF_FILE, '<', $Getopt::Std::opt_f) || die("can't open $Getopt::Std::opt_f"); + while (my $line = ) + { + if ($line =~ /^\s*#define\s+.?(QSPI|QUAD_?SPI|OCTOSPI[^_]*)\w+_(Port|Pin)\s/) + { + if ($line =~ /#define\s+(\w+)\s+(\w+)/) + { + $defs{$1} = $2; + } + else + { + die($line); + } + } + elsif ($line =~ /^\s*(P[A-Z])([0-9]+)\s*-+>\s+.?(QSPI|QUAD_?SPI|OCTO_?SPI[^_]*)_(\w+)/) + { + $Conf{$4} = sprintf("%s%02d", $1, $2); + } + elsif ($line =~ /^\s*GPIO_InitStruct.Pin\s*=\s*([^;]+\w)/) + { + $pins = $1; + while ($line !~ /;/) + { + $line = ; + $line =~ /^\s*([^;]+\w)/; + $pins .= $1; + } + } + elsif ($line =~ /^\s*GPIO_InitStruct.Alternate\s*=\s*GPIO_AF([0-9]+)/) + { + $altn = $1; + } + elsif ($line =~ /^\s*HAL_GPIO_Init\s*\(\s*(\w+)\s*,/) + { + my $port = $1; + if ($port =~ /GPIO([A-Z])/) + { + $port = $1; + } + elsif (exists($defs{$port})) + { + $defs{$port} =~ /GPIO([A-Z])/; + $port = $1; + } + else + { + printf("\n"); + next; + } + my @pin = split(/\s*\|\s*/, $pins); + foreach my $pin (@pin) + { + my $bit; + if (exists($defs{$pin})) + { + $defs{$pin} =~ /GPIO_PIN_([0-9]+)/; + $bit = $1; + } + else + { + $pin =~ /GPIO_PIN_([0-9]+)/; + $bit = $1; + } + $Conf .= sprintf("P%s%02d:AF%02d:V, ", $port, $bit, $altn); + } + $pins = ''; + $altn = 0; + } + } + close(CONF_FILE); +} +else +{ + my @names = ( ); + my @conf = split(/\s*,\s*/, $Conf); + + if (@conf == 2) + { + push(@names, 'SDA', 'SCL'); + } else { + if (@conf == 3) + { + push(@names, 'NCS', 'CLK', 'IO0/DIO'); + } + elsif (@conf == 4) + { + push(@names, 'NCS', 'CLK','IO1/MISO', 'IO0/MOSI'); + } + elsif (@conf == 6) + { + push(@names, 'NCS', 'CLK', 'IO3/NHOLD', 'IO2/NWP', 'IO1/MISO', 'IO0/MOSI'); + } + elsif (@conf == 10) + { + push(@names, 'NCS', 'CLK', 'BK_1_IO3/NHOLD', 'BK1_IO2/NWP', 'BK1_IO1/MISO', 'BK1_IO0/MOSI'); + push(@names, 'BK_2_IO3/NHOLD', 'BK2_IO2/NWP', 'BK2_IO1/MISO', 'BK2_IO0/MOSI'); + } + elsif (@conf == 11) + { + push(@names, 'BK_1_NCS', 'CLK', 'BK_1_IO3/NHOLD', 'BK1_IO2/NWP', 'BK1_IO1/MISO', 'BK1_IO0/MOSI'); + push(@names, 'BK_2_NCS', 'BK_2_IO3/NHOLD', 'BK2_IO2/NWP', 'BK2_IO1/MISO', 'BK2_IO0/MOSI'); + } + else + { + die("invalid config"); + } + } + + for (my $index = 0; $index < @conf; $index++) + { + uc($conf[$index]) =~ /^P([A-K])([0-9]+):\s*([A-Z0-9]+):(L|M|H|V)$/; + $Pins .= sprintf(" %s: P%s%02d,", $names[$index], $1, $2); + } + chop($Pins); +} + +if (exists $Conf{'BK1_IO0'}) +{ + # QuadSPI on F4, F7, H7 + my $line; + for my $i ('NCS', 'BK1_NCS', 'CLK', 'BK1_IO3', 'BK1_IO2', 'BK1_IO1', 'BK1_IO0') + { + (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); + } +} + +if (exists $Conf{'BK2_IO0'}) +{ + # QuadSPI on F4, F7, H7 + my $line; + for my $i ('NCS', 'BK2_NCS', 'CLK', 'BK2_IO3', 'BK2_IO2', 'BK2_IO1', 'BK2_IO0') + { + (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); + } +} + +if (exists $Conf{'P1_IO0'}) +{ + # OctoSPI on L4+, L5, H7 + my $line; + for my $i ('P1_NCS', 'P1_CLK', 'P1_DQS', 'P1_IO7', 'P1_IO6', 'P1_IO5', 'P1_IO4', + 'P1_IO3', 'P1_IO2', 'P1_IO1', 'P1_IO0') + { + (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); + } +} + +if (exists $Conf{'P2_IO0'}) +{ + # OctoSPI on L4+, H7 + my $line; + for my $i ('P2_NCS', 'P2_CLK', 'P2_DQS', 'P2_IO7', 'P2_IO6', 'P2_IO5', 'P2_IO4', + 'P2_IO3', 'P2_IO2', 'P2_IO1', 'P2_IO0') + { + (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); + } +} + +my @Col = ( ); +my @conf = split(/\s*,\s*/, $Conf); + +if (@conf == 3) +{ + splice(@conf, 2, 0, 'NONE', 'NONE', 'NONE'); +} +elsif (@conf == 4) +{ + splice(@conf, 2, 0, 'NONE', 'NONE'); +} + +foreach my $line (@conf) +{ + $line = uc($line); + $line =~ /^P([A-K])([0-9]+):\s*([A-Z0-9]+):(L|M|H|V)$/; + my $port = $1; + my $pin = $2; + my $conf = $3; + my $speed = $4; + + my $MODER = 0x0; + my $OTYPER = 0x0; + my $OSPEEDR = 0x0; + my $PUPDR = 0x0; + my $AFR = 0x0; + my $num = ord(${port}) - ord('A'); + my $out = $Out[$num]; + + (exists $$out{'DEF'}) || ($$out{'DEF'} = 0); + + if ($conf eq '') + { + if ($line ne 'NONE') + { + printf(STDERR "invalid conf %s\n", $line); + } + next; + } + elsif ($conf =~ /^AF([0-9]+)(|P|O)(|UP|DO)$/) + { + if ($STM32F1) + { + printf(STDERR "no alternate %s for F1 family\n", $line); + next; + } + if (($1 < 0) || ($1 > 15)) + { + printf(STDERR "invalid alternate %s\n", $line); + next; + } + $MODER = 0x2; + $AFR = $1; + if ($pin <= 7) + { + $$out{'AFRL_H'} |= ($AFR << (${pin} << 2)); + $$out{'AFRL_L'} |= (($AFR ^ 0xF) << (${pin} << 2)); + } + else + { + $$out{'AFRH_H'} |= ($AFR << ((${pin} - 8) << 2)); + $$out{'AFRH_L'} |= (($AFR ^ 0xF) << ((${pin} - 8) << 2)); + } + if ($2 ne '') { + $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; + $$out{'OTYPER_H'} |= ($OTYPER << $pin); + $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); + } + $PUPDR = ($3 eq 'UP') ? 0x1 : (($3 eq 'DO') ? 0x2 : 0x0); + $$out{'PUPDR_H'} |= ($PUPDR << (${pin} << 1)); + $$out{'PUPDR_L'} |= (($PUPDR ^0x3) << (${pin} << 1)); + $conf = sprintf("AF%02d%s%s", $AFR, $2, $3); + } + elsif ($conf =~ /^IN(|P|O)(|UP|DO)$/) + { + if ($STM32F1) + { + $MODER = ($1 eq '') ? 0x4 : 0x8; + ($2 eq 'UP') && ($$out{'PUPDR_H'} |= (1 << ${pin})); + ($2 eq 'DO') && ($$out{'PUPDR_L'} |= (1 << ${pin})); + } + else + { + $MODER = 0x0; + if ($1 ne '') + { + $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; + $$out{'OTYPER_H'} |= ($OTYPER << $pin); + $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); + } + $PUPDR = ($2 eq 'UP') ? 0x1 : (($2 eq 'DO') ? 0x2 : 0x0); + $$out{'PUPDR_H'} |= ($PUPDR << (${pin} << 1)); + $$out{'PUPDR_L'} |= (($PUPDR ^0x3) << (${pin} << 1)); + } + ($2 eq 'UP') && ($$out{'ODR_H'} |= (1 << ${pin})); + ($2 eq 'DO') && ($$out{'ODR_L'} |= (1 << ${pin})); + } + elsif ($conf =~ /^P(P|O)(|UP|DO)$/) + { + if ($STM32F1) + { + $MODER = ($1 eq 'O') ? 0x4 : 0x0; + $MODER |= (($speed eq 'V') ? 0x03 : (($speed eq 'L') ? 0x2 : 0x1)); + if ($2 ne '') + { + printf(STDERR "WARNING: no output w/ pull-up/pull-down for F1 family %s\n", $line); + } + } + else + { + $MODER = 0x1; + $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; + $$out{'OTYPER_H'} |= ($OTYPER << $pin); + $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); + $PUPDR = ($2 eq 'UP') ? 0x1 : (($2 eq 'DO') ? 0x2 : 0x0); + $$out{'PUPDR_H'} |= ($PUPDR << ($pin << 1)); + $$out{'PUPDR_L'} |= (($PUPDR ^ 0x3) << ($pin << 1)); + } + ($2 eq 'UP') && ($$out{'ODR_H'} |= (1 << ${pin})); + ($2 eq 'DO') && ($$out{'ODR_L'} |= (1 << ${pin})); + } + else + { + printf(STDERR "invalid conf %s\n", $line); + next; + } + + if ($$out{'DEF'} & (1<< ${pin})) + { + printf(STDERR "redefinition: %s\n", $line); + } + + if ($STM32F1) + { + if ($pin >= 8) + { + $$out{'CRH_H'} |= ($MODER << (($pin & 0x7) << 2)); + $$out{'CRH_L'} |= (($MODER ^ 0xF) << (($pin & 0x7) << 2)); + } + else + { + $$out{'CRL_H'} |= ($MODER << (($pin & 0x7) << 2)); + $$out{'CRL_L'} |= (($MODER ^ 0xF) << (($pin & 0x7) << 2)); + } + + $Exor = sprintf("0x%08X %2d", ${GPIO_BASE} + (ord($port) - ord('A')) * ${GPIO_OFFS} + ${GPIO_ODR}, $pin); + my $exor = 0xB << (($pin & 0x7) << 2); + (($MODER & 0x3) == 0x0) && ($Exor .= sprintf(" 0x%03X 0x%03X 0x%08X", + ((($pin >= 8) ? ${GPIO_CRH} : ${GPIO_CRL})-${GPIO_ODR}) & 0x3FF, + ((($pin >= 8) ? ${GPIO_CRH} : ${GPIO_CRL})-${GPIO_ODR}) & 0x3FF, $exor)); + } + else + { + $$out{'DEF'} |= (1 << ${pin}); + $$out{'MODER_H'} |= ($MODER << (${pin} << 1)); + $$out{'MODER_L'} |= (($MODER ^ 0x3) << (${pin} << 1)); + + $OSPEEDR = (($speed eq 'V') ? 0x3 : (($speed eq 'H') ? 0x2 : (($speed eq 'M') ? 0x1 : 0x0))); + $$out{'OSPEEDR_H'} |= ($OSPEEDR << (${pin} << 1)); + $$out{'OSPEEDR_L'} |= (($OSPEEDR ^ 0x3) << (${pin} << 1)); + + $Exor = sprintf("0x%08X %2d", ${GPIO_BASE} + (ord($port) - ord('A')) * ${GPIO_OFFS} + ${GPIO_ODR}, $pin); + my $exor = (0x1 << ($pin << 1)); + ($MODER == 0x0) && ($Exor .= sprintf(" 0x%03X 0x%03X 0x%08X", (${GPIO_MODER}-${GPIO_ODR}) & 0x3FF, + (${GPIO_MODER}-${GPIO_ODR}) & 0x3FF, $exor)); + } + + push(@{$Port[$num]}, sprintf("P%s%02d:%s:%s", $port, $pin, $conf, $speed)); + push(@Col, $Exor); +} + +my $Col = sprintf("${Sep}0x%03X ", (${GPIO_IDR}-${GPIO_ODR}) & 0x3FF); +for (my $i = 0; $i < @Col; $i++) +{ + if (($i != 0) && (($i % 2) == 0)) + { + (($i + 1) < @Col) && ($Col .= "\\\n${Sep}"); + } + $Col .= sprintf("%s ", $Col[$i]); +} +printf("%s\n", $Col); + +my @Col = ( ); +my $Set; +for (my $i = 0; $i < @Out; $i++) +{ + my $out = $Out[$i]; + my $addr = ${GPIO_BASE} + $i * ${GPIO_OFFS}; + my $count = 0; + + if ($STM32F1) + { + if (($$out{'CRH_H'} | $$out{'CRH_L'} | $$out{'CRL_H'} | $$out{'CRL_L'} | + $$out{'PUPDR_H'} | $$out{'PUPDR_L'}) != 0) + { + push(@Col, sort({ $b cmp $a } @{$Port[$i]})); + + $Set .= sprintf("\n%s# Port %s: %s\n", ${Sep}, chr($i + ord('A')), + join(", ", sort({ $b cmp $a } @{$Port[$i]}))); + + (($$out{'CRL_H'} | $$out{'CRL_L'}) != 0) && + ($Set .= sprintf("${Form}CRL\n", $addr + ${GPIO_CRL}, $$out{'CRL_H'}, $$out{'CRL_L'})); + + (($$out{'CRH_H'} | $$out{'CRH_L'}) != 0) && + ($Set .= sprintf("${Form}CRH\n", $addr + ${GPIO_CRH}, $$out{'CRH_H'}, $$out{'CRH_L'})); + + (($$out{'ODR_H'} | $$out{'ODR_L'}) != 0) && + ($Set .= sprintf("${Form}ODR/PUPDR\n", $addr + ${GPIO_ODR}, $$out{'ODR_H'}, $$out{'ODR_L'})); + } + } + else + { + if (($$out{'MODER_H'} | $$out{'MODER_L'} | + $$out{'OTYPER_H'} | $$out{'OTYPER_L'} | + $$out{'OSPEEDR_H'} | $$out{'OSPEEDR_L'} | + $$out{'PUPDR_H'} | $$out{'PUPDR_L'} | + $$out{'ODR_H'} | $$out{'ODR_L'} | + $$out{'AFRL_H'} | $$out{'AFRL_L'} | + $$out{'AFRH_H'} | $$out{'AFRH_L'}) != 0) + { + push(@Col, sort({ $b cmp $a } @{$Port[$i]})); + + $Set .= sprintf("%s# Port %s: %s\n", ${Sep}, chr($i + ord('A')), + join(", ", sort({ $b cmp $a } @{$Port[$i]}))); + + (($$out{'MODER_H'} | $$out{'MODER_L'}) != 0) && + ($Set .= sprintf("${Form}MODER\n", $addr + ${GPIO_MODER}, $$out{'MODER_H'}, $$out{'MODER_L'})); + + (($$out{'OTYPER_H'} | $$out{'OTYPER_L'}) != 0) && + ($Set .= sprintf("${Form}OTYPER\n", $addr + ${GPIO_OTYPER}, $$out{'OTYPER_H'}, $$out{'OTYPER_L'})); + + (($$out{'OSPEEDR_H'} | $$out{'OSPEEDR_L'}) != 0) && + ($Set .= sprintf("${Form}OSPEEDR\n", $addr + ${GPIO_OSPEEDR}, $$out{'OSPEEDR_H'}, $$out{'OSPEEDR_L'})); + + (($$out{'PUPDR_H'} | $$out{'PUPDR_L'}) != 0) && + ($Set .= sprintf("${Form}PUPDR\n", $addr + ${GPIO_PUPDR}, $$out{'PUPDR_H'}, $$out{'PUPDR_L'})); + + (($$out{'ODR_H'} | $$out{'ODR_L'}) != 0) && + ($Set .= sprintf("${Form}ODR\n", $addr + ${GPIO_ODR}, $$out{'ODR_H'}, $$out{'ODR_L'})); + + (($$out{'AFRL_H'} | $$out{'AFRL_L'}) != 0) && + ($Set .= sprintf("${Form}AFRL\n", $addr + ${GPIO_AFRL}, $$out{'AFRL_H'}, $$out{'AFRL_L'})); + + (($$out{'AFRH_H'} | $$out{'AFRH_L'}) != 0) && + ($Set .= sprintf("${Form}AFRH\n", $addr + ${GPIO_AFRH}, $$out{'AFRH_H'}, $$out{'AFRH_L'})); + } + } +} + +my $Col = ''; +for (my $i = 0; $i < @Col; $i++) +{ + if (($i % 6) == 0) + { + chop($Col); + (($i + 1) < @Col) && ($Col .= "\n${Sep}#"); + } + $Col .= sprintf(" %s,", $Col[$i]); +} +chop($Col); +#printf("\n%s\n", $Pins); +printf("%s\n", $Col); +printf("%s\n", $Set); diff --git a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h new file mode 100644 index 00000000000..d477267024d --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h @@ -0,0 +1,396 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +#define SOC_STM32H730VB + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 8 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart2" +#define RT_VER_NUM 0x50200 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_CACHE +#define RT_USING_HW_ATOMIC +#define RT_USING_CPU_FFS +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32H7 + +/* Hardware Drivers Config */ + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_SCB_ENABLE_I_CACHE +#define BSP_SCB_ENABLE_D_CACHE +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART2 +#define BSP_USING_UART3 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py new file mode 100644 index 00000000000..7a6a313eba6 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py @@ -0,0 +1,185 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\yekai\DevTools\arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi\bin' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-M7 ' + CFLAGS += ' -mcpu=cortex-M7 -mfpu=fpv4-sp-d16 ' + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iccarm': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv5_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu VFPv5_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32h730-esphosted-evb/stm32h730-ospi1.cfg b/bsp/stm32/stm32h730-esphosted-evb/stm32h730-ospi1.cfg new file mode 100644 index 00000000000..d20d111a632 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/stm32h730-ospi1.cfg @@ -0,0 +1,85 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +# This is a stm32h735g-dk with a single STM32H735IGK6 chip. +# https://www.st.com/en/evaluation-tools/stm32h735g-dk.html +# + +# This is for using the onboard STLINK +source [find interface/stlink.cfg] + +transport select hla_swd + +set CHIPNAME stm32h730vbt6 + +set OCTOSPI1 1 + +source [find target/stm32h7x.cfg] + +# OCTOSPI initialization +# octo: 4-line mode +proc octospi_init { octo } { + global a b + mmw 0x58024540 0x000006FF 0 ;# RCC_AHB4ENR |= GPIOAEN-GPIOKEN (enable clocks) + mmw 0x58024534 0x00284000 0 ;# RCC_AHB3ENR |= IOMNGREN, OSPI2EN, OSPI1EN (enable clocks) + sleep 1 ;# Wait for clock startup + + mww 0x5200B404 0x03010111 ;# OCTOSPIM_P1CR: enable port 1 + mww 0x5200B408 0x00000000 ;# OCTOSPIM_P2CR: disable Port 2 + + +# PA07:AF10:V, PA06:AF06:V, PB02:AF09:V, PB01:AF04:V, PB00:AF04:V, PE11:AF11:V + # Port A: PA07:AF10:V, PA06:AF06:V + mmw 0x58020000 0x0000A000 0x00005000 ;# MODER + mmw 0x58020008 0x0000F000 0x00000000 ;# OSPEEDR + mmw 0x5802000C 0x00000000 0x0000F000 ;# PUPDR + mmw 0x58020020 0xA6000000 0x59000000 ;# AFRL + # Port B: PB02:AF09:V, PB01:AF04:V, PB00:AF04:V + mmw 0x58020400 0x0000002A 0x00000015 ;# MODER + mmw 0x58020408 0x0000003F 0x00000000 ;# OSPEEDR + mmw 0x5802040C 0x00000000 0x0000003F ;# PUPDR + mmw 0x58020420 0x00000944 0x000006BB ;# AFRL + # Port E: PE11:AF11:V + mmw 0x58021000 0x00800000 0x00400000 ;# MODER + mmw 0x58021008 0x00C00000 0x00000000 ;# OSPEEDR + mmw 0x5802100C 0x00000000 0x00C00000 ;# PUPDR + mmw 0x58021024 0x0000B000 0x00004000 ;# AFRH + + + # OCTOSPI1: memory-mapped 1-line read mode with 4-byte addresses + mww 0x52005130 0x00001000 + mww 0x52005000 0x3040000B + mww 0x52005008 0x01160100 + mww 0x5200500c 0x00000005 + + mww 0x52005108 0x00000000 + mww 0x52005100 0x01012101 + mww 0x52005110 0x00000013 + + sleep 1 + + flash probe $a ;# load configuration from CR, TCR, CCR, IR register values +} + +$_CHIPNAME.cpu0 configure -event reset-init { + global OCTOSPI1 + global OCTOSPI2 + + mmw 0x52002000 0x00000004 0x0000000B ;# FLASH_ACR: 4 WS for 192 MHZ HCLK + + mmw 0x58024400 0x00000001 0x00000018 ;# RCC_CR: HSIDIV=1, HSI on + mmw 0x58024410 0x10000000 0xEE000007 ;# RCC_CFGR: MCO2=system, MCO2PRE=8, HSI as system clock + mww 0x58024418 0x00000040 ;# RCC_D1CFGR: D1CPRE=1, D1PPRE=2, HPRE=1 + mww 0x5802441C 0x00000440 ;# RCC_D2CFGR: D2PPRE2=2, D2PPRE1=2 + mww 0x58024420 0x00000040 ;# RCC_D3CFGR: D3PPRE=2 + mww 0x58024428 0x00000040 ;# RCC_PPLCKSELR: DIVM3=0, DIVM2=0, DIVM1=4, PLLSRC=HSI + mmw 0x5802442C 0x0001000C 0x00000002 ;# RCC_PLLCFGR: PLL1RGE=8MHz to 16MHz, PLL1VCOSEL=wide + mww 0x58024430 0x01070217 ;# RCC_PLL1DIVR: 192 MHz: DIVR1=2, DIVQ=8, DIVP1=2, DIVN1=24 + mmw 0x58024400 0x01000000 0 ;# RCC_CR: PLL1ON=1 + sleep 1 + mmw 0x58024410 0x00000003 0 ;# RCC_CFGR: PLL1 as system clock + sleep 1 + + adapter speed 24000 + + octospi_init 1 +} \ No newline at end of file From 12f68d6b72ddd973c9f40f8b37f3425b10d17757 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Mon, 3 Feb 2025 13:23:02 +0800 Subject: [PATCH 2/3] bsp: support mdk --- bsp/stm32/stm32h730-esphosted-evb/.config | 11 +- .../EventRecorderStub.scvd | 9 + bsp/stm32/stm32h730-esphosted-evb/README.md | 46 +- .../applications/main.c | 13 - .../CubeMX_Config/Core/Src/stm32h7xx_it.c | 203 -- .../stm32h730-esphosted-evb/board/Kconfig | 25 +- .../stm32h730-esphosted-evb/board/board.c | 4 +- .../stm32h730-esphosted-evb/board/board.h | 18 +- .../board/linker_scripts/link.sct | 4 +- .../stm32h730-esphosted-evb/custom.cmake | 1 + .../stm32h730-esphosted-evb/project.uvoptx | 1204 +++++++++ .../stm32h730-esphosted-evb/project.uvprojx | 2221 +++++++++++++++++ bsp/stm32/stm32h730-esphosted-evb/rtconfig.h | 6 +- bsp/stm32/stm32h730-esphosted-evb/rtconfig.py | 42 +- .../stm32h730-esphosted-evb/template.uvoptx | 184 ++ .../stm32h730-esphosted-evb/template.uvprojx | 402 +++ 16 files changed, 4155 insertions(+), 238 deletions(-) create mode 100644 bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c create mode 100644 bsp/stm32/stm32h730-esphosted-evb/project.uvoptx create mode 100644 bsp/stm32/stm32h730-esphosted-evb/project.uvprojx create mode 100644 bsp/stm32/stm32h730-esphosted-evb/template.uvoptx create mode 100644 bsp/stm32/stm32h730-esphosted-evb/template.uvprojx diff --git a/bsp/stm32/stm32h730-esphosted-evb/.config b/bsp/stm32/stm32h730-esphosted-evb/.config index f48bc04d524..980baba4c8f 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/.config +++ b/bsp/stm32/stm32h730-esphosted-evb/.config @@ -235,10 +235,9 @@ CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 # CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_SERIAL_BYPASS is not set # CONFIG_RT_USING_CAN is not set # CONFIG_RT_USING_CPUTIME is not set @@ -1277,7 +1276,11 @@ CONFIG_BSP_SCB_ENABLE_D_CACHE=y CONFIG_BSP_USING_GPIO=y CONFIG_BSP_USING_UART=y CONFIG_BSP_USING_UART2=y -CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_UART2_RX_USING_DMA is not set +# CONFIG_BSP_UART2_TX_USING_DMA is not set +CONFIG_BSP_UART2_RX_BUFSIZE=256 +CONFIG_BSP_UART2_TX_BUFSIZE=0 +# CONFIG_BSP_USING_UART3 is not set # CONFIG_BSP_USING_CRC is not set # CONFIG_BSP_USING_RNG is not set # CONFIG_BSP_USING_UDID is not set diff --git a/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd b/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd new file mode 100644 index 00000000000..2956b296838 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bsp/stm32/stm32h730-esphosted-evb/README.md b/bsp/stm32/stm32h730-esphosted-evb/README.md index 3331807ede6..eada91732f8 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/README.md +++ b/bsp/stm32/stm32h730-esphosted-evb/README.md @@ -64,12 +64,37 @@ 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 - ### 快速上手 -MDK project TODO +#### 硬件连接 + +使用数据线连接靠上的USB-C。 + +MDK: + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 STLink下载程序,在通过 STLink连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LED 常亮、绿色 LED 会周期性闪烁。 -可以使用GCC进行编译,OpenOCD进行下载 +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.2.0 build Feb 3 2025 13:14:21 + 2006 - 2024 Copyright by RT-Thread team +msh > +``` + +GCC: + +可以使用命令行进行编译,下载 ```shell mkdir build @@ -87,6 +112,17 @@ scons --target=cmake --project-name=EspHostedEVBDemo clion . ``` +串口输出信息 + +```shell +... some bootloader log... +\ | / +- RT - Thread Operating System + / | \ 5.2.0 build Feb 3 2025 13:16:15 + 2006 - 2024 Copyright by RT-Thread team +msh > +``` + ### 进阶使用 此 BSP 默认只开启了 GPIO 和 串口2 的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: @@ -97,13 +133,13 @@ clion . 3. 输入`pkgs --update`命令更新软件包。 -4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 +4. 输入`scons --target=mdk5/cmake` 命令重新生成工程。 本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 ## 注意事项 -- 由于下载算法还未制作完,暂仅支持了GCC。 +- 由于下载算法还未制作完,暂GCC为使用外部Flash,MDK为使用内部Flash。 - 调试串口为串口2,默认接到STLink。 diff --git a/bsp/stm32/stm32h730-esphosted-evb/applications/main.c b/bsp/stm32/stm32h730-esphosted-evb/applications/main.c index 82ec0d47057..78193d8f7ef 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/applications/main.c +++ b/bsp/stm32/stm32h730-esphosted-evb/applications/main.c @@ -18,21 +18,8 @@ int main(void) { /* set GPIO pin mode to output */ rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); - // this would be configured in bootloader - uint32_t pwr_supply_conf = HAL_PWREx_GetSupplyConfig(); - if (pwr_supply_conf & PWR_CR3_LDOEN) { - rt_kprintf("Vcore Power supply is LDO\r\n"); - } - if (pwr_supply_conf & PWR_CR3_BYPASS) { - rt_kprintf("Vcore Power supply is Bypass\r\n"); - } - - uint32_t freq = HAL_RCC_GetSysClockFreq(); - rt_kprintf("System Clock: %luMHz\r\n", freq / (int) 1e6); - while (1) { rt_pin_write(LED_PIN, !rt_pin_read(LED_PIN)); - rt_kprintf("Hello RT-Thread\r\n"); rt_thread_mdelay(1000); } } diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c deleted file mode 100644 index 3601d799965..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Src/stm32h7xx_it.c +++ /dev/null @@ -1,203 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32h7xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @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. - * - ****************************************************************************** - */ -/* 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 --------------------------------------------------------*/ - -/* USER CODE BEGIN EV */ - -/* 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 System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVCall_IRQn 0 */ - - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ - - /* USER CODE END SVCall_IRQn 1 */ -} - -/** - * @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 */ -} - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ - - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 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). */ -/******************************************************************************/ - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig b/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig index 1ea0149a79b..0c0b80a2bff 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig +++ b/bsp/stm32/stm32h730-esphosted-evb/board/Kconfig @@ -27,9 +27,32 @@ menu "On-chip Peripheral Drivers" config BSP_USING_UART2 bool "Enable UART2" default y + if BSP_USING_UART2 + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + + config BSP_UART2_TX_USING_DMA + bool "Enable UART2 TX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default t + + config BSP_UART2_RX_BUFSIZE + int "Set UART2 RX buffer size" + range 64 65535 + depends on BSP_USING_UART2 + default 256 + + config BSP_UART2_TX_BUFSIZE + int "Set UART2 TX buffer size" + range 0 65535 + depends on BSP_USING_UART2 + default 0 + endif config BSP_USING_UART3 bool "Enable UART3" - default y + default n endif diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/board.c b/bsp/stm32/stm32h730-esphosted-evb/board/board.c index ec12e7c64cf..cdd1005359a 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/board.c +++ b/bsp/stm32/stm32h730-esphosted-evb/board/board.c @@ -1,11 +1,11 @@ /* - * Copyright (c) 2006-2024 RT-Thread Development Team + * Copyright (c) 2006-2025 RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes - * 2018-11-06 SummerGift first version + * 2025-2-3 yekai first version */ #include "board.h" diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/board.h b/bsp/stm32/stm32h730-esphosted-evb/board/board.h index f1e0bff2d87..76e78b83ddd 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/board.h +++ b/bsp/stm32/stm32h730-esphosted-evb/board/board.h @@ -1,11 +1,11 @@ /* - * Copyright (c) 2006-2024 RT-Thread Development Team + * Copyright (c) 2006-2025 RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes - * 2018-11-5 SummerGift first version + * 2025-2-3 yekai first version */ #ifndef __BOARD_H__ @@ -20,10 +20,24 @@ extern "C" { #endif +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (128 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (64*5) +#define STM32_SRAM_END (0x24000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__ARMCC_VERSION) +// use IRAM2(RAM D1) +extern int Image$$RW_IRAM2$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM2$$ZI$$Limit) +#define HEAP_END STM32_SRAM_END +#elif defined(__GNUC__) extern uint8_t _heap_start[]; extern uint8_t _heap_end[]; #define HEAP_BEGIN _heap_start #define HEAP_END _heap_end +#endif void SystemClock_Config(void); diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct index a6e04bf6abc..0207c4f408d 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct +++ b/bsp/stm32/stm32h730-esphosted-evb/board/linker_scripts/link.sct @@ -2,8 +2,8 @@ ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* -LR_IROM1 0x08000000 0x00100000 { ; load region size_region - ER_IROM1 0x08000000 0x00100000 { ; load address = execution address +LR_IROM1 0x08000000 0x20000 { ; load region size_region + ER_IROM1 0x08000000 0x20000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/bsp/stm32/stm32h730-esphosted-evb/custom.cmake b/bsp/stm32/stm32h730-esphosted-evb/custom.cmake index 77c41ca4998..02b6e114731 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/custom.cmake +++ b/bsp/stm32/stm32h730-esphosted-evb/custom.cmake @@ -16,4 +16,5 @@ add_custom_target(flash ALL -c "tcl_port disabled" -c "gdb_port disabled" -c "program ${CMAKE_PROJECT_NAME}.elf" -c reset -c shutdown + DEPENDS ${CMAKE_PROJECT_NAME}.elf ) \ No newline at end of file diff --git a/bsp/stm32/stm32h730-esphosted-evb/project.uvoptx b/bsp/stm32/stm32h730-esphosted-evb/project.uvoptx new file mode 100644 index 00000000000..c721b9bbbe1 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/project.uvoptx @@ -0,0 +1,1204 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H730xx_128 -FL020000 -FS08000000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC8000 -FN1 -FF0STM32H730xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 + + + + + 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 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Compiler + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cunistd.c + cunistd.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\core\device.c + device.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_comm.c + completion_comm.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_up.c + completion_up.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\condvar.c + condvar.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\pin\dev_pin.c + dev_pin.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\dev_serial_v2.c + dev_serial_v2.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 22 + 2 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h730xx.s + startup_stm32h730xx.s + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Core\Src\stm32h7xx_hal_msp.c + stm32h7xx_hal_msp.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_usart_v2.c + drv_usart_v2.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + klibc + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + + + libcpu + 0 + 0 + 0 + 0 + + 8 + 52 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 8 + 55 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + cpu_cache.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 9 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c + stm32h7xx_hal_pwr.c + 0 + 0 + + + 9 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c + stm32h7xx_hal.c + 0 + 0 + + + 9 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c + stm32h7xx_hal_cortex.c + 0 + 0 + + + 9 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c + stm32h7xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c + system_stm32h7xx.c + 0 + 0 + + + 9 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp_ex.c + stm32h7xx_hal_cryp_ex.c + 0 + 0 + + + 9 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c + stm32h7xx_hal_uart_ex.c + 0 + 0 + + + 9 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp.c + stm32h7xx_hal_cryp.c + 0 + 0 + + + 9 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rng.c + stm32h7xx_hal_rng.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_comp.c + stm32h7xx_hal_comp.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c + stm32h7xx_hal_dma.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sram.c + stm32h7xx_hal_sram.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c + stm32h7xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c + stm32h7xx_hal_rcc.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c + stm32h7xx_hal_gpio.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c + stm32h7xx_hal_uart.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc_ex.c + stm32h7xx_hal_crc_ex.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c + stm32h7xx_hal_mdma.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c + stm32h7xx_hal_dma_ex.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_usart.c + stm32h7xx_hal_usart.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc.c + stm32h7xx_hal_crc.c + 0 + 0 + + + 9 + 79 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cec.c + stm32h7xx_hal_cec.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32h730-esphosted-evb/project.uvprojx b/bsp/stm32/stm32h730-esphosted-evb/project.uvprojx new file mode 100644 index 00000000000..a5f25745345 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/project.uvprojx @@ -0,0 +1,2221 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 6190000::V6.19::ARMCLANG + 1 + + + STM32H730VBTx + STMicroelectronics + Keil.STM32H7xx_DFP.3.1.1 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00050000) IROM(0x08000000,0x00020000) XRAM(0x30000000,0x00008000) XRAM2(0x38000000,0x00004000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H730xx_128 -FS08000000 -FL020000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM)) + 0 + $$Device:STM32H730VBTx$Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h + + + + + + + + + + $$Device:STM32H730VBTx$CMSIS\SVD\STM32H730.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.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 + 1 + 0 + 3 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 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 + + + 1 + 0x30000000 + 0x8000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x30000000 + 0x8000 + + + 0 + 0x38000000 + 0x4000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x50000 + + + + + + 1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + 5 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, __STDC_LIMIT_MACROS, __RTTHREAD__, RT_USING_ARMLIBC, STM32H730xx, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_LIBC + + ..\..\..\components\libc\posix\io\eventfd;..\..\..\components\drivers\include;..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Inc;..\libraries\HAL_Drivers;board\CubeMX_Config\Core\Inc;..\..\..\components\libc\posix\io\epoll;..\..\..\components\finsh;..\..\..\components\libc\posix\ipc;.;..\..\..\components\drivers\phy;..\libraries\HAL_Drivers\drivers\config;..\libraries\HAL_Drivers\drivers;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\cortex-m7;..\..\..\include;..\..\..\components\drivers\include;board;..\..\..\libcpu\arm\common;..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Include;..\..\..\components\libc\compilers\common\include;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\poll;applications;..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\drivers\include;..\..\..\components\drivers\smp_call + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Compiler + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + cstdlib.c + 1 + ..\..\..\components\libc\compilers\common\cstdlib.c + + + cstring.c + 1 + ..\..\..\components\libc\compilers\common\cstring.c + + + ctime.c + 1 + ..\..\..\components\libc\compilers\common\ctime.c + + + cunistd.c + 1 + ..\..\..\components\libc\compilers\common\cunistd.c + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + DeviceDrivers + + + device.c + 1 + ..\..\..\components\drivers\core\device.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_comm.c + 1 + ..\..\..\components\drivers\ipc\completion_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_up.c + 1 + ..\..\..\components\drivers\ipc\completion_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + condvar.c + 1 + ..\..\..\components\drivers\ipc\condvar.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_pin.c + 1 + ..\..\..\components\drivers\pin\dev_pin.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_serial_v2.c + 1 + ..\..\..\components\drivers\serial\dev_serial_v2.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + + + Drivers + + + startup_stm32h730xx.s + 2 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h730xx.s + + + stm32h7xx_hal_msp.c + 1 + board\CubeMX_Config\Core\Src\stm32h7xx_hal_msp.c + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + drv_usart_v2.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_usart_v2.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Finsh + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + components.c + 1 + ..\..\..\src\components.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + cpu_up.c + 1 + ..\..\..\src\cpu_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + defunct.c + 1 + ..\..\..\src\defunct.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + object.c + 1 + ..\..\..\src\object.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_comm.c + 1 + ..\..\..\src\scheduler_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_up.c + 1 + ..\..\..\src\scheduler_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + + + klibc + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + + + libcpu + + + atomic_arm.c + 1 + ..\..\..\libcpu\arm\common\atomic_arm.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + cpu_cache.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + + + Libraries + + + stm32h7xx_hal_pwr.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c + + + stm32h7xx_hal.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c + + + stm32h7xx_hal_cortex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c + + + stm32h7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c + + + system_stm32h7xx.c + 1 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c + + + stm32h7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp_ex.c + + + stm32h7xx_hal_uart_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c + + + stm32h7xx_hal_cryp.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp.c + + + stm32h7xx_hal_rng.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rng.c + + + stm32h7xx_hal_comp.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_comp.c + + + stm32h7xx_hal_dma.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c + + + stm32h7xx_hal_sram.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sram.c + + + stm32h7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c + + + stm32h7xx_hal_rcc.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c + + + stm32h7xx_hal_gpio.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c + + + stm32h7xx_hal_uart.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c + + + stm32h7xx_hal_crc_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc_ex.c + + + stm32h7xx_hal_mdma.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c + + + stm32h7xx_hal_dma_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c + + + stm32h7xx_hal_usart.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_usart.c + + + stm32h7xx_hal_crc.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc.c + + + stm32h7xx_hal_cec.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cec.c + + + + + + + + + + + + + + + + + <Project Info> + 0 + 1 + + + + +
diff --git a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h index d477267024d..870f3c03ca3 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h +++ b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.h @@ -144,9 +144,8 @@ #define RT_USING_DEVICE_IPC #define RT_UNAMED_PIPE_NUMBER 64 #define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 +#define RT_USING_SERIAL_V2 #define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 #define RT_USING_PIN /* end of Device Drivers */ @@ -386,7 +385,8 @@ #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART2 -#define BSP_USING_UART3 +#define BSP_UART2_RX_BUFSIZE 256 +#define BSP_UART2_TX_BUFSIZE 0 /* end of On-chip Peripheral Drivers */ /* Board extended module Drivers */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py index 7a6a313eba6..a2488720bf6 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py +++ b/bsp/stm32/stm32h730-esphosted-evb/rtconfig.py @@ -19,11 +19,17 @@ PLATFORM = 'gcc' EXEC_PATH = r'C:\Users\yekai\DevTools\arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi\bin' elif CROSS_TOOL == 'keil': - PLATFORM = 'armcc' + PLATFORM = 'armclang' #KEIL AC6 + #PLATFORM = 'armcc' #KEIL AC5 EXEC_PATH = r'C:/Keil_v5' elif CROSS_TOOL == 'iar': - PLATFORM = 'iccarm' - EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' + print("Not support IAR yet!") + # PLATFORM = 'iccarm' + # EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' +elif CROSS_TOOL == 'llvm-arm': + print("Have not tested yet!") + PLATFORM = 'llvm-arm' + EXEC_PATH = r'D:\Progrem\LLVMEmbeddedToolchainForArm-17.0.1-Windows-x86_64\bin' if os.getenv('RTT_EXEC_PATH'): EXEC_PATH = os.getenv('RTT_EXEC_PATH') @@ -176,6 +182,36 @@ EXEC_PATH = EXEC_PATH + '/arm/bin/' POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' +elif PLATFORM == 'llvm-arm': + # toolchains + PREFIX = 'llvm-' + CC = 'clang' + AS = 'clang' + AR = PREFIX + 'ar' + CXX = 'clang++' + LINK = 'clang' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + DEVICE = ' --target=arm-none-eabihf -mfloat-abi=hard -march=armv7em -mfpu=fpv4-sp-d16' + DEVICE += ' -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti' + CFLAGS = DEVICE + AFLAGS = ' -c' + DEVICE + ' -Wa,-mimplicit-it=thumb ' ## -x assembler-with-cpp + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-u,Reset_Handler -lcrt0 -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O3' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' def dist_handle(BSP_ROOT, dist_dir): import sys diff --git a/bsp/stm32/stm32h730-esphosted-evb/template.uvoptx b/bsp/stm32/stm32h730-esphosted-evb/template.uvoptx new file mode 100644 index 00000000000..822c1257bf4 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/template.uvoptx @@ -0,0 +1,184 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H730xx_128 -FL020000 -FS08000000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC8000 -FN1 -FF0STM32H730xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 + + + + + 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 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + +
diff --git a/bsp/stm32/stm32h730-esphosted-evb/template.uvprojx b/bsp/stm32/stm32h730-esphosted-evb/template.uvprojx new file mode 100644 index 00000000000..13b873fe537 --- /dev/null +++ b/bsp/stm32/stm32h730-esphosted-evb/template.uvprojx @@ -0,0 +1,402 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 1 + + + STM32H730VBTx + STMicroelectronics + Keil.STM32H7xx_DFP.3.1.1 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00050000) IROM(0x08000000,0x00020000) XRAM(0x30000000,0x00008000) XRAM2(0x38000000,0x00004000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H730xx_128 -FS08000000 -FL020000 -FP0($$Device:STM32H730VBTx$CMSIS\Flash\STM32H730xx_128.FLM)) + 0 + $$Device:STM32H730VBTx$Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h + + + + + + + + + + $$Device:STM32H730VBTx$CMSIS\SVD\STM32H730.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.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 + 1 + 0 + 3 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 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 + + + 1 + 0x30000000 + 0x8000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x30000000 + 0x8000 + + + 0 + 0x38000000 + 0x4000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x50000 + + + + + + 1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + 5 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + + + + + + + + + + + <Project Info> + 0 + 1 + + + + +
From f3759d75901b2279b963f388e062901abf374cd7 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Mon, 3 Feb 2025 17:15:51 +0800 Subject: [PATCH 3/3] bsp: clean up --- .../EventRecorderStub.scvd | 9 - .../CubeMX_Config/Core/Inc/stm32h7xx_it.h | 66 -- .../Core/Startup/reset_handler.c | 60 -- .../Core/Startup/startup_stm32h730vbtx.s | 768 ------------------ .../stm32h730-esphosted-evb/board/SConscript | 3 +- .../stm32h730-esphosted-evb/board/board.c | 56 ++ .../gpio_conf_stm32.pl | 681 ---------------- 7 files changed, 57 insertions(+), 1586 deletions(-) delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s delete mode 100644 bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl diff --git a/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd b/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd deleted file mode 100644 index 2956b296838..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h deleted file mode 100644 index 16bd906417e..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h +++ /dev/null @@ -1,66 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32h7xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @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. - * - ****************************************************************************** - */ -/* 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 SVC_Handler(void); -void DebugMon_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32H7xx_IT_H */ diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c deleted file mode 100644 index 8ca3cf3fc6e..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/reset_handler.c +++ /dev/null @@ -1,60 +0,0 @@ -// -// Created by yekai on 2024/7/3. -// - -#include -#include "stdint.h" - -extern void SystemInit(void); - -extern int entry(void); - -#pragma GCC push_options -#pragma GCC optimize ("O0") - -extern volatile uint32_t _ramfunc_start_lma; -extern volatile uint32_t _ramfunc_start_vma; -extern volatile uint32_t _ramfunc_end; - -extern volatile uint32_t _data_start_lma; -extern volatile uint32_t _data_start_vma; -extern volatile uint32_t _data_end; - -extern volatile uint32_t _sbss; -extern volatile uint32_t _ebss; - -__attribute__((used, section(".text.reset_handler"))) -void Reset_Handler(void) { - __asm volatile ("ldr sp, =_estack"); - volatile uint32_t *pui32Src; - volatile uint32_t *pui32Dest; - - // copy itcm - for (pui32Src = &_ramfunc_start_lma, pui32Dest = &_ramfunc_start_vma; - pui32Dest < &_ramfunc_end; - pui32Src++, pui32Dest++) { - *pui32Dest = *pui32Src; - } - - // copy data - for (pui32Src = &_data_start_lma, pui32Dest = &_data_start_vma; - pui32Dest < &_data_end; - pui32Src++, pui32Dest++ - ) { - *pui32Dest = *pui32Src; - } - - // init bss - for (pui32Dest = &_sbss; - pui32Dest < &_ebss; - pui32Dest++ - ) { - *pui32Dest = 0; - } - - SystemInit(); - - entry(); -} - -#pragma GCC pop_options diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s b/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s deleted file mode 100644 index 956d4dfd9d5..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/board/CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s +++ /dev/null @@ -1,768 +0,0 @@ -/** - ****************************************************************************** - * @file startup_stm32h730xx.s - * @author MCD Application Team - * @brief STM32H730xx 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) 2019 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 */ /* CubeMX 6.13.0 新增的东西,但是在`SystemClock_Config`中也会配置,没必要这边配置 */ -/* 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 entry - 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_PSSI_IRQHandler /* DCMI, PSSI */ - .word CRYP_IRQHandler /* CRYP */ - .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 0 /* Reserved */ - .word OCTOSPI1_IRQHandler /* OCTOSPI1 */ - .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 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word DMAMUX1_OVR_IRQHandler /* DMAMUX1 Overrun interrupt */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .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 0 /* Reserved */ - .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 0 /* Reserved */ - .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 DTS_IRQHandler /* Digital Temperature Sensor interrupt */ - .word 0 /* Reserved */ - .word WAKEUP_PIN_IRQHandler /* Interrupt for all 6 wake-up pins */ - .word OCTOSPI2_IRQHandler /* OCTOSPI2 Interrupt */ - .word OTFDEC1_IRQHandler /* OTFDEC1 Interrupt */ - .word OTFDEC2_IRQHandler /* OTFDEC2 Interrupt */ - .word FMAC_IRQHandler /* FMAC Interrupt */ - .word CORDIC_IRQHandler /* CORDIC Interrupt */ - .word UART9_IRQHandler /* UART9 Interrupt */ - .word USART10_IRQHandler /* UART10 Interrupt */ - .word I2C5_EV_IRQHandler /* I2C5 Event Interrupt */ - .word I2C5_ER_IRQHandler /* I2C5 Error Interrupt */ - .word FDCAN3_IT0_IRQHandler /* FDCAN3 interrupt line 0 */ - .word FDCAN3_IT1_IRQHandler /* FDCAN3 interrupt line 1 */ - .word TIM23_IRQHandler /* TIM23 global interrupt */ - .word TIM24_IRQHandler /* TIM24 global interrupt */ - - .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_PSSI_IRQHandler - .thumb_set DCMI_PSSI_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 OCTOSPI1_IRQHandler - .thumb_set OCTOSPI1_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 DMAMUX1_OVR_IRQHandler - .thumb_set DMAMUX1_OVR_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 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 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 DTS_IRQHandler - .thumb_set DTS_IRQHandler,Default_Handler - - .weak WAKEUP_PIN_IRQHandler - .thumb_set WAKEUP_PIN_IRQHandler,Default_Handler - - .weak OCTOSPI2_IRQHandler - .thumb_set OCTOSPI2_IRQHandler,Default_Handler - - .weak OTFDEC1_IRQHandler - .thumb_set OTFDEC1_IRQHandler,Default_Handler - - .weak OTFDEC2_IRQHandler - .thumb_set OTFDEC2_IRQHandler,Default_Handler - - .weak FMAC_IRQHandler - .thumb_set FMAC_IRQHandler,Default_Handler - - .weak CORDIC_IRQHandler - .thumb_set CORDIC_IRQHandler,Default_Handler - - .weak UART9_IRQHandler - .thumb_set UART9_IRQHandler,Default_Handler - - .weak USART10_IRQHandler - .thumb_set USART10_IRQHandler,Default_Handler - - .weak I2C5_EV_IRQHandler - .thumb_set I2C5_EV_IRQHandler,Default_Handler - - .weak I2C5_ER_IRQHandler - .thumb_set I2C5_ER_IRQHandler,Default_Handler - - .weak FDCAN3_IT0_IRQHandler - .thumb_set FDCAN3_IT0_IRQHandler,Default_Handler - - .weak FDCAN3_IT1_IRQHandler - .thumb_set FDCAN3_IT1_IRQHandler,Default_Handler - - .weak TIM23_IRQHandler - .thumb_set TIM23_IRQHandler,Default_Handler - - .weak TIM24_IRQHandler - .thumb_set TIM24_IRQHandler,Default_Handler - - diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/SConscript b/bsp/stm32/stm32h730-esphosted-evb/board/SConscript index 8fb8fa324ca..32281541cba 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/SConscript +++ b/bsp/stm32/stm32h730-esphosted-evb/board/SConscript @@ -15,8 +15,7 @@ path += [cwd + '/CubeMX_Config/Core/Inc'] startup_path_prefix = SDK_LIB if rtconfig.PLATFORM in ['gcc']: - src += Glob('CubeMX_Config/Core/Startup/startup_stm32h730vbtx.s') - src += Glob('CubeMX_Config/Core/Startup/reset_handler.c') + src += Glob(startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h730xx.s') elif rtconfig.PLATFORM in ['armcc', 'armclang']: src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h730xx.s'] elif rtconfig.PLATFORM in ['iccarm']: diff --git a/bsp/stm32/stm32h730-esphosted-evb/board/board.c b/bsp/stm32/stm32h730-esphosted-evb/board/board.c index cdd1005359a..dc64bf2a1fe 100644 --- a/bsp/stm32/stm32h730-esphosted-evb/board/board.c +++ b/bsp/stm32/stm32h730-esphosted-evb/board/board.c @@ -158,3 +158,59 @@ int MPU_Config(void) { } INIT_BOARD_EXPORT(MPU_Config); + +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) + +extern void SystemInit(void); + +extern int entry(void); + +#pragma GCC push_options +#pragma GCC optimize ("O0") + +extern volatile uint32_t _ramfunc_start_lma; +extern volatile uint32_t _ramfunc_start_vma; +extern volatile uint32_t _ramfunc_end; + +extern volatile uint32_t _data_start_lma; +extern volatile uint32_t _data_start_vma; +extern volatile uint32_t _data_end; + +extern volatile uint32_t _sbss; +extern volatile uint32_t _ebss; + +__attribute__((used, section(".text.reset_handler"))) +void Reset_Handler(void) { + __asm volatile ("ldr sp, =_estack"); + volatile uint32_t *pui32Src; + volatile uint32_t *pui32Dest; + + // copy itcm + for (pui32Src = &_ramfunc_start_lma, pui32Dest = &_ramfunc_start_vma; + pui32Dest < &_ramfunc_end; + pui32Src++, pui32Dest++) { + *pui32Dest = *pui32Src; + } + + // copy data + for (pui32Src = &_data_start_lma, pui32Dest = &_data_start_vma; + pui32Dest < &_data_end; + pui32Src++, pui32Dest++) { + *pui32Dest = *pui32Src; + } + + // init bss + for (pui32Dest = &_sbss; + pui32Dest < &_ebss; + pui32Dest++) { + *pui32Dest = 0; + } + + SystemInit(); + + entry(); +} + +#pragma GCC pop_options + +#endif \ No newline at end of file diff --git a/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl b/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl deleted file mode 100644 index 5fc7ba50e47..00000000000 --- a/bsp/stm32/stm32h730-esphosted-evb/gpio_conf_stm32.pl +++ /dev/null @@ -1,681 +0,0 @@ -#!/usr/bin/perl -# SPDX-License-Identifier: GPL-2.0-or-later - -# -# Helper for generating GPIO setup for STM32F0, F4, F7, H7, L0, L1, L4, L4+ -# and F1 (for 'stmqspi' and 'cmspi' drivers). -# -# Each pin is configured by "PortAndBit:Conf:Speed" -# 'PortAndBit' specifies Port and bit number -# 'Conf' is one of 'AFx' (alternate), 'P' (output), 'IN' (input), -# (each optionally by 'P' (push-pull) or 'O' (open-drain)), -# (all optionally followed by 'UP' (pull-up), or 'DO' (pull-down)) -# 'Speed' is one of 'L' (low), 'M' (medium), 'H' (high), 'V' (very high) -# -# Port configuration can be given on command line as a single string (pins separated by commas) -# or via CubeMX generated file. The latter must consist of the quadspi.c / octospi.c and the -# corresponding header. The precise spelling in these files doesn't seem to be consistent, though ... -# -# Pins have to be ordered this way: -# - I2C: SDA, SCL -# - SPI (1 line): NCS, CLK, IO1/MISO, IO0/MOSI -# - DPI (2 lines): NCS, CLK, IO1/MISO, IO0/MOSI -# - QPI (4 lines): NCS, CLK, IO3/NHOLD, IO2/NWP, IO1/MISO, IO0/MOSI -# For dual flash: BK_1 first, then BK_2. If single NCS for both, omit NCS in BK_2 -# For octal flash: NCS, CLK, DQS, IO7 down to IO0 - -use strict; -use Getopt::Std; - -my $GPIO_BASE = 0x58020000; -my $Conf = "PA06:AF06:V, PA07:AF10:V, PB00:AF04:V, PB01:AF04:V, PB02:AF09:V, PE11:AF11:V"; -my $STM32F1 = 0; - -# "Blue-Pill stm32f103cbt6 board w/ cmspi -#$STM32F1 = 1; -#$GPIO_BASE = 0x40010800; -#$Conf = "PB12:PP:M, PB13:PP:V, PB14:INUP:V, PB15:INUP:V"; -#$Conf = "PB12:PP:M, PB13:PP:V, PB14:INUP:V, PB01:INUP:V"; - -#$STM32F1 = 1; -#$GPIO_BASE = 0x40010800; -#$Conf = "PB07:INUP:V, PB06:INUP:V"; - -# mini-stm32f030f4p6 board w/ cmspi -#$GPIO_BASE = 0x48000000; -#$Conf = "PB01:PP:V, PA05:PP:V, PA06:INUP:V, PA07:INUP:V"; - -# stm32f407vet6 board w/ cmspi -#$GPIO_BASE = 0x40020000; -#$Conf = "PB00:PP:M, PB03:PP:V, PB04:INUP:V, PB05:INUP:V"; - -# stm32f412g-disco quad -#$GPIO_BASE = 0x40020000; -#$Conf = "PB02:AF09:V, PF09:AF10:V, PF08:AF10:V, PF07:AF09:V, PF06:AF09:V, PG06:AF10:V"; - -# stm32f413h-disco -#$GPIO_BASE = 0x40020000; -#$Conf = "PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PF09:AF10:V, PF08:AF10:V, PG06:AF10:V"; - -# stm32f469i-disco quad -#$GPIO_BASE = 0x40020000; -#$Conf = "PB06:AF10:V, PF10:AF09:V, PF09:AF10:V, PF08:AF10:V, PF07:AF09:V, PF06:AF09:V"; -# w/ cmspi -#$Conf = "PB06:PP:M, PF10:PP:V, PF06:INUP:V, PF07:INUP:V, PF09:INUP:V, PF08:INUP:V"; - -# stm32f723e-disco quad -#$GPIO_BASE = 0x40020000; -#$Conf = "PB06:AF10:V, PB02:AF09:V, PC10:AF09:V, PC09:AF09:V, PD13:AF09:V, PE02:AF09:V"; - -# stm32f746g-disco quad -#$GPIO_BASE = 0x40020000; -#Conf = "PB06:AF10:V, PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V"; -# w/ cmspi -#$Conf = "PB06:PP:M, PB02:PP:V, PD13:INUP:V, PE02:INUP:V, PD12:INUP:V, PD11:INUP:V"; - -# stm32f769i-disco quad -#$GPIO_BASE = 0x40020000; -#$Conf = "PB06:AF10:V, PB02:AF09:V, PC10:AF09:V, PC09:AF09:V, PD13:AF09:V, PE02:AF09:V"; -# w/ cmspi -#$Conf = "PB06:PP:M, PB02:PP:V, PD13:INUP:V, PE02:INUP:V, PC10:INUP:V, PC09:INUP:V, "; - -# b-l475e-iot01a quad -#$GPIO_BASE = 0x48000000; -#$Conf = "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V"; - -# stm32l476g-disco quad -#$GPIO_BASE = 0x48000000; -#$Conf = "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V"; - -# stm32l496g-disco quad -#$GPIO_BASE = 0x48000000; -#$Conf = "PA07:AF10:V, PA06:AF10:V, PA03:AF10:V, PB11:AF10:V, PB01:AF10:V, PB00:AF10:V"; - -# stm32l4r9i-disco octal -#$GPIO_BASE = 0x48000000; -#$Conf = "PG15:AF05:V, PG12:AF05:V, PG10:AF05:V, PG09:AF05:V, PH10:AF05:V, PH09:AF05:V, " -# . "PH08:AF05:V, PI11:AF05:V, PI10:AF05:V, PI09:AF05:V, PI06:AF05:V"; - -# stm32l4p5g-disco octal/octal -#$GPIO_BASE = 0x48000000; -#$Conf = "PA07:AF10:V, PA06:AF10:V, PC03:AF10:V, PD07:AF10:V, PD05:AF10:V, PD04:AF10:V, " -# . "PE13:AF10:V, PE12:AF10:V, PE11:AF10:V, PE10:AF10:V, PG06:AF03:V"; -#$Conf = "PF12:AF05:V, PF04:AF05:V, PF03:AF05:V, PF02:AF05:V, PF01:AF05:V, PF00:AF05:V, " -# . "PG12:AF05:V, PG10:AF05:V, PG09:AF05:V, PG01:AF05:V, PG00:AF05:V"; - -# nucleo-f767zi dual quad -#$GPIO_BASE = 0x40020000; -#$Conf = "PB06:AF10:V, PB02:AF09:V, PC11:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, " -# . "PD11:AF09:V, PE10:AF10:V, PE09:AF10:V, PE08:AF10:V, PE07:AF10:V"; -# w/ cmspi -#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; -#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PE09:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; - -# nucleo-h743zi dual quad -#$GPIO_BASE = 0x58020000; -#$Conf = "PB10:AF09:V, PB02:AF09:V, PC11:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, " -# . "PD11:AF09:V, PE10:AF10:V, PE09:AF10:V, PE08:AF10:V, PE07:AF10:V"; -# w/ cmspi -#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; -#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PE09:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; - -# nucleo-h7a3zi dual quad -#$GPIO_BASE = 0x58020000; -#$Conf = "PB10:AF09:V, PB02:AF09:V, PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V, " -# . "PC11:AF09:V, PE10:AF10:V, PD06:AF10:V, PE08:AF10:V, PE07:AF10:V"; -# w/ cmspi -#$Conf = "PB10:PPUP:M, PB02:PPUP:V, PD13:INPUP:V, PE02:INPUP:V, PD12:INPUP:V, PD11:INPUP:V"; -#$Conf = "PC11:PPUP:M, PB02:PPUP:V, PE10:INPUP:V, PD06:INPUP:V, PE08:INPUP:V, PE07:INPUP:V"; - -# nucleo-l4r5zi one dual quad single NCS -#$GPIO_BASE = 0x48000000; -#$Conf = "PA02:AF10:V, PE10:AF10:V, PD07:AF10:V, PD06:AF10:V, PD05:AF10:V, PD04:AF10:V, " -# . "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V"; -# w/ cmspi -#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PD07:INPDO:V, PD06:INPDO:V, PD05:INPDO:V, PD04:INPDO:V"; -#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PE15:INPDO:V, PE14:INPDO:V, PE13:INPDO:V, PE12:INPDO:V"; - -# nucleo-l552ze-q dual quad with single NCS -#$GPIO_BASE = 0x42020000; -#$Conf = "PA02:AF10:V, PE10:AF10:V, PD07:AF10:V, PD06:AF10:V, PD05:AF10:V, PD04:AF10:V, " -# . "PE15:AF10:V, PE14:AF10:V, PE13:AF10:V, PE12:AF10:V"; -# w/ cmspi -#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PD07:INPDO:V, PD06:INPDO:V, PD05:INPDO:V, PD04:INPDO:V"; -#$Conf = "PA02:PPUP:M, PE10:PPUP:V, PE15:INPDO:V, PE14:INPDO:V, PE13:INPDO:V, PE12:INPDO:V"; - -# nucleo-g071rb dual quad -#$GPIO_BASE = 0x50000000; -#$Conf = "PA00:PPUP:H, PA04:PPUP:V, PB03:INPUP:V, PA10:INPUP:V, PB11:INPUP:H, PB01:INPUP:H"; -#$Conf = "PA01:PPUP:H, PA04:PPUP:V, PA08:INPUP:V, PB14:INPUP:V, PB04:INPUP:V, PB05:INPUP:V"; - -# nucleo-g474re dual quad with single NCS -#$GPIO_BASE = 0x48000000; -#$Conf = "PB11:AF10:H, PB10:AF10:V, PA06:AF10:V, PA07:AF10:V, PB00:AF10:V, PB01:AF10:V, " -# . "PC04:AF10:V, PC03:AF10:V, PC02:AF10:V, PC01:AF10:V"; -# w/ cmspi -#$Conf = "PB11:PPUP:H, PB10:PPUP:V, PA06:INPUP:V, PA07:INPUP:V, PB00:INPUP:V, PB01:INPUP:V"; -#$Conf = "PB11:PPUP:H, PB10:PPUP:V, PC04:INPUP:V, PC03:INPUP:V, PC02:INPUP:V, PC01:INPUP:V"; - -# stm32h745i-disco dual quad with single NCS -#$GPIO_BASE = 0x58020000; -#$Conf = "PG06:AF10:H, PF10:AF09:V, PF06:AF09:V, PF07:AF09:V, PF09:AF10:V, PD11:AF09:V, " -# . "PG14:AF09:H, PG09:AF09:V, PH03:AF09:V, PH02:AF09:V"; - -# stm32h747i-disco dual quad with single NCS -#GPIO_BASE = 0x58020000; -#$Conf = "PG06:AF10:H, PB02:AF09:V, PF06:AF09:V, PF07:AF09:V, PF09:AF10:V, PD11:AF09:V, " -# . "PG14:AF09:H, PG09:AF09:V, PH03:AF09:V, PH02:AF09:V"; - -# stm32h7b3i-disco octal -#$GPIO_BASE = 0x58020000; -#$Conf = "PG06:AF10:V, PB02:AF09:V, PC05:AF10:V, PD07:AF10:V, PG09:AF09:V, PH03:AF09:V, PC01:AF10:V, " -# . "PF06:AF10:V, PF07:AF10:V, PF09:AF10:V, PD11:AF09:V"; - -# stm32h735g-disco octal -#$GPIO_BASE = 0x58020000; -#$Conf = "PG06:AF10:V, PF10:AF09:V, PB02:AF10:V, PD07:AF10:V, PG09:AF09:V, PD05:AF10:V, PD04:AF10:V, " -# . "PD13:AF09:V, PE02:AF09:V, PD12:AF09:V, PD11:AF09:V"; - -# stm32l562e-disco octal -#$GPIO_BASE = 0x42020000; -#$Conf = "PA02:AF10:V, PA03:AF10:V, PB02:AF10:V, PC00:AF03:V, PC03:AF10:V, PC02:AF10:V, PC01:AF10:V, " -# . "PA06:AF10:V, PA07:AF10:V, PB00:AF10:V, PB01:AF10:V"; - -&getopts('b:c:f:t'); -if ($Getopt::Std::opt_b eq '') -{ - if ($GPIO_BASE eq '') - { - die("usage: $0 [ -1 ] -b io_base [ -c port_configuration ] [ -f conf_file ]"); - } -} -else -{ - $GPIO_BASE = eval $Getopt::Std::opt_b; -} - -if ($Getopt::Std::opt_c eq '') -{ - if (($Conf eq '') && ($Getopt::Std::opt_f eq '')) - { - die("usage: $0 [ -b io_base ] ( -c port_configuration | -f conf_file )"); - } -}# -else -{ - $Conf = $Getopt::Std::opt_c . ','; -} - -$STM32F1 = $Getopt::Std::opt_t; - -my $Sep = "\t"; -my $Form = "${Sep}mmw 0x%08X 0x%08X 0x%08X\t;# "; - -my $GPIO_OFFS; -my $GPIO_CRL; -my $GPIO_CRH; -my $GPIO_MODER; -my $GPIO_OTYPER; -my $GPIO_OSPEEDR; -my $GPIO_PUPDR; -my $GPIO_IDR; -my $GPIO_ODR; -my $GPIO_AFRL; -my $GPIO_AFRH; - -if ($STM32F1) -{ - # offsets for F1 devices - $GPIO_OFFS = 0x400; - $GPIO_CRL = 0x00; - $GPIO_CRH = 0x04; - $GPIO_IDR = 0x08; - $GPIO_ODR = 0x0C; -} -else -{ - # these offsets are identical on all F0, F4, F7, H7, L4, L4+ devices up to now - $GPIO_OFFS = 0x400; - $GPIO_MODER = 0x00; - $GPIO_OTYPER = 0x04; - $GPIO_OSPEEDR = 0x08; - $GPIO_PUPDR = 0x0C; - $GPIO_IDR = 0x10; - $GPIO_ODR = 0x14; - $GPIO_AFRL = 0x20; - $GPIO_AFRH = 0x24; -} - -my @Out = ( { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { } ); -my @Port = ( ); -my $Exor; -my %Conf; -my $Pins = "${Sep}#"; - -my $pins; -my $altn; -my %defs; - -if ($Getopt::Std::opt_f ne '') -{ - open(CONF_FILE, '<', $Getopt::Std::opt_f) || die("can't open $Getopt::Std::opt_f"); - while (my $line = ) - { - if ($line =~ /^\s*#define\s+.?(QSPI|QUAD_?SPI|OCTOSPI[^_]*)\w+_(Port|Pin)\s/) - { - if ($line =~ /#define\s+(\w+)\s+(\w+)/) - { - $defs{$1} = $2; - } - else - { - die($line); - } - } - elsif ($line =~ /^\s*(P[A-Z])([0-9]+)\s*-+>\s+.?(QSPI|QUAD_?SPI|OCTO_?SPI[^_]*)_(\w+)/) - { - $Conf{$4} = sprintf("%s%02d", $1, $2); - } - elsif ($line =~ /^\s*GPIO_InitStruct.Pin\s*=\s*([^;]+\w)/) - { - $pins = $1; - while ($line !~ /;/) - { - $line = ; - $line =~ /^\s*([^;]+\w)/; - $pins .= $1; - } - } - elsif ($line =~ /^\s*GPIO_InitStruct.Alternate\s*=\s*GPIO_AF([0-9]+)/) - { - $altn = $1; - } - elsif ($line =~ /^\s*HAL_GPIO_Init\s*\(\s*(\w+)\s*,/) - { - my $port = $1; - if ($port =~ /GPIO([A-Z])/) - { - $port = $1; - } - elsif (exists($defs{$port})) - { - $defs{$port} =~ /GPIO([A-Z])/; - $port = $1; - } - else - { - printf("\n"); - next; - } - my @pin = split(/\s*\|\s*/, $pins); - foreach my $pin (@pin) - { - my $bit; - if (exists($defs{$pin})) - { - $defs{$pin} =~ /GPIO_PIN_([0-9]+)/; - $bit = $1; - } - else - { - $pin =~ /GPIO_PIN_([0-9]+)/; - $bit = $1; - } - $Conf .= sprintf("P%s%02d:AF%02d:V, ", $port, $bit, $altn); - } - $pins = ''; - $altn = 0; - } - } - close(CONF_FILE); -} -else -{ - my @names = ( ); - my @conf = split(/\s*,\s*/, $Conf); - - if (@conf == 2) - { - push(@names, 'SDA', 'SCL'); - } else { - if (@conf == 3) - { - push(@names, 'NCS', 'CLK', 'IO0/DIO'); - } - elsif (@conf == 4) - { - push(@names, 'NCS', 'CLK','IO1/MISO', 'IO0/MOSI'); - } - elsif (@conf == 6) - { - push(@names, 'NCS', 'CLK', 'IO3/NHOLD', 'IO2/NWP', 'IO1/MISO', 'IO0/MOSI'); - } - elsif (@conf == 10) - { - push(@names, 'NCS', 'CLK', 'BK_1_IO3/NHOLD', 'BK1_IO2/NWP', 'BK1_IO1/MISO', 'BK1_IO0/MOSI'); - push(@names, 'BK_2_IO3/NHOLD', 'BK2_IO2/NWP', 'BK2_IO1/MISO', 'BK2_IO0/MOSI'); - } - elsif (@conf == 11) - { - push(@names, 'BK_1_NCS', 'CLK', 'BK_1_IO3/NHOLD', 'BK1_IO2/NWP', 'BK1_IO1/MISO', 'BK1_IO0/MOSI'); - push(@names, 'BK_2_NCS', 'BK_2_IO3/NHOLD', 'BK2_IO2/NWP', 'BK2_IO1/MISO', 'BK2_IO0/MOSI'); - } - else - { - die("invalid config"); - } - } - - for (my $index = 0; $index < @conf; $index++) - { - uc($conf[$index]) =~ /^P([A-K])([0-9]+):\s*([A-Z0-9]+):(L|M|H|V)$/; - $Pins .= sprintf(" %s: P%s%02d,", $names[$index], $1, $2); - } - chop($Pins); -} - -if (exists $Conf{'BK1_IO0'}) -{ - # QuadSPI on F4, F7, H7 - my $line; - for my $i ('NCS', 'BK1_NCS', 'CLK', 'BK1_IO3', 'BK1_IO2', 'BK1_IO1', 'BK1_IO0') - { - (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); - } -} - -if (exists $Conf{'BK2_IO0'}) -{ - # QuadSPI on F4, F7, H7 - my $line; - for my $i ('NCS', 'BK2_NCS', 'CLK', 'BK2_IO3', 'BK2_IO2', 'BK2_IO1', 'BK2_IO0') - { - (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); - } -} - -if (exists $Conf{'P1_IO0'}) -{ - # OctoSPI on L4+, L5, H7 - my $line; - for my $i ('P1_NCS', 'P1_CLK', 'P1_DQS', 'P1_IO7', 'P1_IO6', 'P1_IO5', 'P1_IO4', - 'P1_IO3', 'P1_IO2', 'P1_IO1', 'P1_IO0') - { - (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); - } -} - -if (exists $Conf{'P2_IO0'}) -{ - # OctoSPI on L4+, H7 - my $line; - for my $i ('P2_NCS', 'P2_CLK', 'P2_DQS', 'P2_IO7', 'P2_IO6', 'P2_IO5', 'P2_IO4', - 'P2_IO3', 'P2_IO2', 'P2_IO1', 'P2_IO0') - { - (exists $Conf{$i}) && ($Pins .= sprintf(" %s: %s,", $Conf{$i}, $i)); - } -} - -my @Col = ( ); -my @conf = split(/\s*,\s*/, $Conf); - -if (@conf == 3) -{ - splice(@conf, 2, 0, 'NONE', 'NONE', 'NONE'); -} -elsif (@conf == 4) -{ - splice(@conf, 2, 0, 'NONE', 'NONE'); -} - -foreach my $line (@conf) -{ - $line = uc($line); - $line =~ /^P([A-K])([0-9]+):\s*([A-Z0-9]+):(L|M|H|V)$/; - my $port = $1; - my $pin = $2; - my $conf = $3; - my $speed = $4; - - my $MODER = 0x0; - my $OTYPER = 0x0; - my $OSPEEDR = 0x0; - my $PUPDR = 0x0; - my $AFR = 0x0; - my $num = ord(${port}) - ord('A'); - my $out = $Out[$num]; - - (exists $$out{'DEF'}) || ($$out{'DEF'} = 0); - - if ($conf eq '') - { - if ($line ne 'NONE') - { - printf(STDERR "invalid conf %s\n", $line); - } - next; - } - elsif ($conf =~ /^AF([0-9]+)(|P|O)(|UP|DO)$/) - { - if ($STM32F1) - { - printf(STDERR "no alternate %s for F1 family\n", $line); - next; - } - if (($1 < 0) || ($1 > 15)) - { - printf(STDERR "invalid alternate %s\n", $line); - next; - } - $MODER = 0x2; - $AFR = $1; - if ($pin <= 7) - { - $$out{'AFRL_H'} |= ($AFR << (${pin} << 2)); - $$out{'AFRL_L'} |= (($AFR ^ 0xF) << (${pin} << 2)); - } - else - { - $$out{'AFRH_H'} |= ($AFR << ((${pin} - 8) << 2)); - $$out{'AFRH_L'} |= (($AFR ^ 0xF) << ((${pin} - 8) << 2)); - } - if ($2 ne '') { - $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; - $$out{'OTYPER_H'} |= ($OTYPER << $pin); - $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); - } - $PUPDR = ($3 eq 'UP') ? 0x1 : (($3 eq 'DO') ? 0x2 : 0x0); - $$out{'PUPDR_H'} |= ($PUPDR << (${pin} << 1)); - $$out{'PUPDR_L'} |= (($PUPDR ^0x3) << (${pin} << 1)); - $conf = sprintf("AF%02d%s%s", $AFR, $2, $3); - } - elsif ($conf =~ /^IN(|P|O)(|UP|DO)$/) - { - if ($STM32F1) - { - $MODER = ($1 eq '') ? 0x4 : 0x8; - ($2 eq 'UP') && ($$out{'PUPDR_H'} |= (1 << ${pin})); - ($2 eq 'DO') && ($$out{'PUPDR_L'} |= (1 << ${pin})); - } - else - { - $MODER = 0x0; - if ($1 ne '') - { - $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; - $$out{'OTYPER_H'} |= ($OTYPER << $pin); - $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); - } - $PUPDR = ($2 eq 'UP') ? 0x1 : (($2 eq 'DO') ? 0x2 : 0x0); - $$out{'PUPDR_H'} |= ($PUPDR << (${pin} << 1)); - $$out{'PUPDR_L'} |= (($PUPDR ^0x3) << (${pin} << 1)); - } - ($2 eq 'UP') && ($$out{'ODR_H'} |= (1 << ${pin})); - ($2 eq 'DO') && ($$out{'ODR_L'} |= (1 << ${pin})); - } - elsif ($conf =~ /^P(P|O)(|UP|DO)$/) - { - if ($STM32F1) - { - $MODER = ($1 eq 'O') ? 0x4 : 0x0; - $MODER |= (($speed eq 'V') ? 0x03 : (($speed eq 'L') ? 0x2 : 0x1)); - if ($2 ne '') - { - printf(STDERR "WARNING: no output w/ pull-up/pull-down for F1 family %s\n", $line); - } - } - else - { - $MODER = 0x1; - $OTYPER = ($1 eq 'O') ? 0x1 : 0x0; - $$out{'OTYPER_H'} |= ($OTYPER << $pin); - $$out{'OTYPER_L'} |= (($OTYPER ^ 0x1) << $pin); - $PUPDR = ($2 eq 'UP') ? 0x1 : (($2 eq 'DO') ? 0x2 : 0x0); - $$out{'PUPDR_H'} |= ($PUPDR << ($pin << 1)); - $$out{'PUPDR_L'} |= (($PUPDR ^ 0x3) << ($pin << 1)); - } - ($2 eq 'UP') && ($$out{'ODR_H'} |= (1 << ${pin})); - ($2 eq 'DO') && ($$out{'ODR_L'} |= (1 << ${pin})); - } - else - { - printf(STDERR "invalid conf %s\n", $line); - next; - } - - if ($$out{'DEF'} & (1<< ${pin})) - { - printf(STDERR "redefinition: %s\n", $line); - } - - if ($STM32F1) - { - if ($pin >= 8) - { - $$out{'CRH_H'} |= ($MODER << (($pin & 0x7) << 2)); - $$out{'CRH_L'} |= (($MODER ^ 0xF) << (($pin & 0x7) << 2)); - } - else - { - $$out{'CRL_H'} |= ($MODER << (($pin & 0x7) << 2)); - $$out{'CRL_L'} |= (($MODER ^ 0xF) << (($pin & 0x7) << 2)); - } - - $Exor = sprintf("0x%08X %2d", ${GPIO_BASE} + (ord($port) - ord('A')) * ${GPIO_OFFS} + ${GPIO_ODR}, $pin); - my $exor = 0xB << (($pin & 0x7) << 2); - (($MODER & 0x3) == 0x0) && ($Exor .= sprintf(" 0x%03X 0x%03X 0x%08X", - ((($pin >= 8) ? ${GPIO_CRH} : ${GPIO_CRL})-${GPIO_ODR}) & 0x3FF, - ((($pin >= 8) ? ${GPIO_CRH} : ${GPIO_CRL})-${GPIO_ODR}) & 0x3FF, $exor)); - } - else - { - $$out{'DEF'} |= (1 << ${pin}); - $$out{'MODER_H'} |= ($MODER << (${pin} << 1)); - $$out{'MODER_L'} |= (($MODER ^ 0x3) << (${pin} << 1)); - - $OSPEEDR = (($speed eq 'V') ? 0x3 : (($speed eq 'H') ? 0x2 : (($speed eq 'M') ? 0x1 : 0x0))); - $$out{'OSPEEDR_H'} |= ($OSPEEDR << (${pin} << 1)); - $$out{'OSPEEDR_L'} |= (($OSPEEDR ^ 0x3) << (${pin} << 1)); - - $Exor = sprintf("0x%08X %2d", ${GPIO_BASE} + (ord($port) - ord('A')) * ${GPIO_OFFS} + ${GPIO_ODR}, $pin); - my $exor = (0x1 << ($pin << 1)); - ($MODER == 0x0) && ($Exor .= sprintf(" 0x%03X 0x%03X 0x%08X", (${GPIO_MODER}-${GPIO_ODR}) & 0x3FF, - (${GPIO_MODER}-${GPIO_ODR}) & 0x3FF, $exor)); - } - - push(@{$Port[$num]}, sprintf("P%s%02d:%s:%s", $port, $pin, $conf, $speed)); - push(@Col, $Exor); -} - -my $Col = sprintf("${Sep}0x%03X ", (${GPIO_IDR}-${GPIO_ODR}) & 0x3FF); -for (my $i = 0; $i < @Col; $i++) -{ - if (($i != 0) && (($i % 2) == 0)) - { - (($i + 1) < @Col) && ($Col .= "\\\n${Sep}"); - } - $Col .= sprintf("%s ", $Col[$i]); -} -printf("%s\n", $Col); - -my @Col = ( ); -my $Set; -for (my $i = 0; $i < @Out; $i++) -{ - my $out = $Out[$i]; - my $addr = ${GPIO_BASE} + $i * ${GPIO_OFFS}; - my $count = 0; - - if ($STM32F1) - { - if (($$out{'CRH_H'} | $$out{'CRH_L'} | $$out{'CRL_H'} | $$out{'CRL_L'} | - $$out{'PUPDR_H'} | $$out{'PUPDR_L'}) != 0) - { - push(@Col, sort({ $b cmp $a } @{$Port[$i]})); - - $Set .= sprintf("\n%s# Port %s: %s\n", ${Sep}, chr($i + ord('A')), - join(", ", sort({ $b cmp $a } @{$Port[$i]}))); - - (($$out{'CRL_H'} | $$out{'CRL_L'}) != 0) && - ($Set .= sprintf("${Form}CRL\n", $addr + ${GPIO_CRL}, $$out{'CRL_H'}, $$out{'CRL_L'})); - - (($$out{'CRH_H'} | $$out{'CRH_L'}) != 0) && - ($Set .= sprintf("${Form}CRH\n", $addr + ${GPIO_CRH}, $$out{'CRH_H'}, $$out{'CRH_L'})); - - (($$out{'ODR_H'} | $$out{'ODR_L'}) != 0) && - ($Set .= sprintf("${Form}ODR/PUPDR\n", $addr + ${GPIO_ODR}, $$out{'ODR_H'}, $$out{'ODR_L'})); - } - } - else - { - if (($$out{'MODER_H'} | $$out{'MODER_L'} | - $$out{'OTYPER_H'} | $$out{'OTYPER_L'} | - $$out{'OSPEEDR_H'} | $$out{'OSPEEDR_L'} | - $$out{'PUPDR_H'} | $$out{'PUPDR_L'} | - $$out{'ODR_H'} | $$out{'ODR_L'} | - $$out{'AFRL_H'} | $$out{'AFRL_L'} | - $$out{'AFRH_H'} | $$out{'AFRH_L'}) != 0) - { - push(@Col, sort({ $b cmp $a } @{$Port[$i]})); - - $Set .= sprintf("%s# Port %s: %s\n", ${Sep}, chr($i + ord('A')), - join(", ", sort({ $b cmp $a } @{$Port[$i]}))); - - (($$out{'MODER_H'} | $$out{'MODER_L'}) != 0) && - ($Set .= sprintf("${Form}MODER\n", $addr + ${GPIO_MODER}, $$out{'MODER_H'}, $$out{'MODER_L'})); - - (($$out{'OTYPER_H'} | $$out{'OTYPER_L'}) != 0) && - ($Set .= sprintf("${Form}OTYPER\n", $addr + ${GPIO_OTYPER}, $$out{'OTYPER_H'}, $$out{'OTYPER_L'})); - - (($$out{'OSPEEDR_H'} | $$out{'OSPEEDR_L'}) != 0) && - ($Set .= sprintf("${Form}OSPEEDR\n", $addr + ${GPIO_OSPEEDR}, $$out{'OSPEEDR_H'}, $$out{'OSPEEDR_L'})); - - (($$out{'PUPDR_H'} | $$out{'PUPDR_L'}) != 0) && - ($Set .= sprintf("${Form}PUPDR\n", $addr + ${GPIO_PUPDR}, $$out{'PUPDR_H'}, $$out{'PUPDR_L'})); - - (($$out{'ODR_H'} | $$out{'ODR_L'}) != 0) && - ($Set .= sprintf("${Form}ODR\n", $addr + ${GPIO_ODR}, $$out{'ODR_H'}, $$out{'ODR_L'})); - - (($$out{'AFRL_H'} | $$out{'AFRL_L'}) != 0) && - ($Set .= sprintf("${Form}AFRL\n", $addr + ${GPIO_AFRL}, $$out{'AFRL_H'}, $$out{'AFRL_L'})); - - (($$out{'AFRH_H'} | $$out{'AFRH_L'}) != 0) && - ($Set .= sprintf("${Form}AFRH\n", $addr + ${GPIO_AFRH}, $$out{'AFRH_H'}, $$out{'AFRH_L'})); - } - } -} - -my $Col = ''; -for (my $i = 0; $i < @Col; $i++) -{ - if (($i % 6) == 0) - { - chop($Col); - (($i + 1) < @Col) && ($Col .= "\n${Sep}#"); - } - $Col .= sprintf(" %s,", $Col[$i]); -} -chop($Col); -#printf("\n%s\n", $Pins); -printf("%s\n", $Col); -printf("%s\n", $Set);