From 58f43e47a409a3aa42cc34b7e9b881ba91050772 Mon Sep 17 00:00:00 2001 From: sf sgwsres <2909609346@qq.com> Date: Thu, 23 Oct 2025 23:01:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[bsp]=20[stm32]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=B9=BF=E5=B0=8F=E7=8F=ADSTM32H723=E5=BC=80=E5=8F=91=E6=9D=BF?= =?UTF-8?q?=E7=9A=84BSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ALL_BSP_COMPILE.json | 1 + .../drivers/config/h7/uart_config.h | 11 + bsp/stm32/stm32h723-lxb-disco/.config | 1442 +++++++++++ bsp/stm32/stm32h723-lxb-disco/.gitignore | 42 + bsp/stm32/stm32h723-lxb-disco/Kconfig | 22 + bsp/stm32/stm32h723-lxb-disco/README.md | 127 + bsp/stm32/stm32h723-lxb-disco/README_zh.md | 126 + bsp/stm32/stm32h723-lxb-disco/SConscript | 20 + bsp/stm32/stm32h723-lxb-disco/SConstruct | 74 + .../applications/SConscript | 15 + .../stm32h723-lxb-disco/applications/main.c | 31 + .../board/.ignore_format.yml | 6 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 219 ++ .../board/CubeMX_Config/Inc/main.h | 71 + .../CubeMX_Config/Inc/stm32h7xx_hal_conf.h | 514 ++++ .../board/CubeMX_Config/Inc/stm32h7xx_it.h | 66 + .../board/CubeMX_Config/Src/main.c | 271 ++ .../CubeMX_Config/Src/stm32h7xx_hal_msp.c | 158 ++ .../board/CubeMX_Config/Src/stm32h7xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32h7xx.c | 556 +++++ bsp/stm32/stm32h723-lxb-disco/board/Kconfig | 40 + .../stm32h723-lxb-disco/board/SConscript | 21 + bsp/stm32/stm32h723-lxb-disco/board/board.c | 65 + bsp/stm32/stm32h723-lxb-disco/board/board.h | 49 + .../board/linker_scripts/link.sct | 35 + .../stm32h723-lxb-disco/figures/board.png | Bin 0 -> 247449 bytes bsp/stm32/stm32h723-lxb-disco/project.uvoptx | 1207 +++++++++ bsp/stm32/stm32h723-lxb-disco/project.uvprojx | 2216 +++++++++++++++++ bsp/stm32/stm32h723-lxb-disco/rtconfig.h | 429 ++++ bsp/stm32/stm32h723-lxb-disco/rtconfig.py | 185 ++ bsp/stm32/stm32h723-lxb-disco/template.uvoptx | 187 ++ .../stm32h723-lxb-disco/template.uvprojx | 397 +++ 33 files changed, 8820 insertions(+) create mode 100644 bsp/stm32/stm32h723-lxb-disco/.config create mode 100644 bsp/stm32/stm32h723-lxb-disco/.gitignore create mode 100644 bsp/stm32/stm32h723-lxb-disco/Kconfig create mode 100644 bsp/stm32/stm32h723-lxb-disco/README.md create mode 100644 bsp/stm32/stm32h723-lxb-disco/README_zh.md create mode 100644 bsp/stm32/stm32h723-lxb-disco/SConscript create mode 100644 bsp/stm32/stm32h723-lxb-disco/SConstruct create mode 100644 bsp/stm32/stm32h723-lxb-disco/applications/SConscript create mode 100644 bsp/stm32/stm32h723-lxb-disco/applications/main.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/.ignore_format.yml create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_hal_conf.h create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_it.h create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_hal_msp.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_it.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/system_stm32h7xx.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/Kconfig create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/SConscript create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/board.c create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/board.h create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32h723-lxb-disco/figures/board.png create mode 100644 bsp/stm32/stm32h723-lxb-disco/project.uvoptx create mode 100644 bsp/stm32/stm32h723-lxb-disco/project.uvprojx create mode 100644 bsp/stm32/stm32h723-lxb-disco/rtconfig.h create mode 100644 bsp/stm32/stm32h723-lxb-disco/rtconfig.py create mode 100644 bsp/stm32/stm32h723-lxb-disco/template.uvoptx create mode 100644 bsp/stm32/stm32h723-lxb-disco/template.uvprojx diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json index 353540710be..71866aaac13 100644 --- a/.github/ALL_BSP_COMPILE.json +++ b/.github/ALL_BSP_COMPILE.json @@ -195,6 +195,7 @@ "stm32/stm32h563-st-nucleo", "stm32/stm32h503-st-nucleo", "stm32/stm32h723-st-nucleo", + "stm32/stm32h723-lxb-disco", "stm32/stm32h730-esphosted-evb", "stm32/stm32h743-armfly-v7", "stm32/stm32h743-atk-apollo", diff --git a/bsp/stm32/libraries/HAL_Drivers/drivers/config/h7/uart_config.h b/bsp/stm32/libraries/HAL_Drivers/drivers/config/h7/uart_config.h index ca929bd6001..fbf9715dfdb 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drivers/config/h7/uart_config.h +++ b/bsp/stm32/libraries/HAL_Drivers/drivers/config/h7/uart_config.h @@ -145,6 +145,17 @@ extern "C" { #endif /* UART5_DMA_RX_CONFIG */ #endif /* BSP_UART5_RX_USING_DMA */ +#if defined(BSP_USING_LPUART1) +#ifndef LPUART1_CONFIG +#define LPUART1_CONFIG \ + { \ + .name = "hlpuart1", \ + .Instance = LPUART1, \ + .irq_type = LPUART1_IRQn, \ + } +#endif /* LPUART1_CONFIG */ +#endif /* BSP_USING_LPUART1 */ + #ifdef __cplusplus } #endif diff --git a/bsp/stm32/stm32h723-lxb-disco/.config b/bsp/stm32/stm32h723-lxb-disco/.config new file mode 100644 index 00000000000..cc7f7361fb3 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/.config @@ -0,0 +1,1442 @@ +CONFIG_SOC_STM32H723ZG=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 +# end of klibc options + +CONFIG_RT_NAME_MAX=9 +# 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="hlpuart1" +CONFIG_RT_VER_NUM=0x50201 +# 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_WORD_OPERATION is not set +# CONFIG_FINSH_USING_FUNC_EXT is not set +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 is not set +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 +# CONFIG_PKG_USING_ESP_HOSTED 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 +# CONFIG_PKG_USING_PNET is not set +# CONFIG_PKG_USING_OPENER is not set +# CONFIG_PKG_USING_FREEMQTT 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 +# CONFIG_PKG_USING_RYAN_JSON 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_MCOREDUMP 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 +# CONFIG_PKG_USING_RVBACKTRACE is not set +# CONFIG_PKG_USING_HPATCHLITE is not set +# CONFIG_PKG_USING_THREAD_METRIC is not set +# CONFIG_PKG_USING_UORB 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 +# 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=y +CONFIG_PKG_CMSIS_CORE_PATH="/packages/system/CMSIS/CMSIS-Core" +CONFIG_PKG_USING_CMSIS_CORE_LATEST_VERSION=y +CONFIG_PKG_CMSIS_CORE_VER="latest" +# 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_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_UART_FRAMEWORK 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_RMP is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# CONFIG_PKG_USING_HEARTBEAT is not set +# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set +# CONFIG_PKG_USING_CHERRYECAT is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32F0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_CMSIS_DRIVER is not set +CONFIG_PKG_USING_STM32H7_HAL_DRIVER=y +CONFIG_PKG_STM32H7_HAL_DRIVER_PATH="/packages/peripherals/hal-sdk/stm32/stm32h7_hal_driver" +CONFIG_PKG_USING_STM32H7_HAL_DRIVER_LATEST_VERSION=y +CONFIG_PKG_STM32H7_HAL_DRIVER_VER="latest" +CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER=y +CONFIG_PKG_STM32H7_CMSIS_DRIVER_PATH="/packages/peripherals/hal-sdk/stm32/stm32h7_cmsis_driver" +CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER_LATEST_VERSION=y +CONFIG_PKG_STM32H7_CMSIS_DRIVER_VER="latest" +# CONFIG_PKG_USING_STM32H7RS_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_STM32WL_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WL_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER 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_RP2350_SDK is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_MM32 is not set + +# +# WCH HAL & SDK Drivers +# +# CONFIG_PKG_USING_CH32V20x_SDK is not set +# CONFIG_PKG_USING_CH32V307_SDK is not set +# end of WCH HAL & SDK Drivers + +# +# AT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_AT32A403A_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A403A_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_CMSIS_DRIVER is not set +# end of AT32 HAL & SDK Drivers + +# +# HC32 DDL Drivers +# +# CONFIG_PKG_USING_HC32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F3_SERIES_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set +# end of HC32 DDL Drivers + +# +# NXP HAL & SDK Drivers +# +# CONFIG_PKG_USING_NXP_MCX_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NXP_MCX_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC55S_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6SX_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set +# end of NXP HAL & SDK Drivers + +# +# NUVOTON Drivers +# +# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set +# end of NUVOTON Drivers + +# +# GD32 Drivers +# +# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set +# end of GD32 Drivers + +# +# HPMicro SDK +# +# CONFIG_PKG_USING_HPM_SDK is not set +# end of HPMicro SDK +# 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_MAX31855 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_MLX90382 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90394 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 +# CONFIG_PKG_USING_P3T1755 is not set +# CONFIG_PKG_USING_QMI8658 is not set +# CONFIG_PKG_USING_ICM20948 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_BT_MX02 is not set +# CONFIG_PKG_USING_GC9A01 is not set +# CONFIG_PKG_USING_IK485 is not set +# CONFIG_PKG_USING_SERVO is not set +# CONFIG_PKG_USING_SEAN_WS2812B is not set +# CONFIG_PKG_USING_IC74HC165 is not set +# CONFIG_PKG_USING_IST8310 is not set +# CONFIG_PKG_USING_ST7789_SPI 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 +# CONFIG_PKG_USING_LLMCHAT 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 +# CONFIG_PKG_USING_CMSIS_DSP 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_LIBCRC 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 +# CONFIG_PKG_USING_DRMP 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_RTDUINO_SENSORFUSION_SHIELD 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 +# +CONFIG_SCO_STM32H723ZGT6=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_STM32_UART_V1_TX_TIMEOUT=1000 +CONFIG_BSP_USING_LPUART1=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/stm32h723-lxb-disco/.gitignore b/bsp/stm32/stm32h723-lxb-disco/.gitignore new file mode 100644 index 00000000000..7221bde019d --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/.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/stm32h723-lxb-disco/Kconfig b/bsp/stm32/stm32h723-lxb-disco/Kconfig new file mode 100644 index 00000000000..5ae9e4fb003 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +PKGS_DIR := packages + +config SOC_STM32H723ZG + 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/stm32h723-lxb-disco/README.md b/bsp/stm32/stm32h723-lxb-disco/README.md new file mode 100644 index 00000000000..2338e00133d --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/README.md @@ -0,0 +1,127 @@ +# LXB723ZG-P1 Development Board BSP Instructions + +[中文页](README_zh.md) | + +## Introduction + +This document provides the BSP (Board Support Package) instructions for the LXB723ZG-P1 development board developed by Pcb-yun based on STM32H723. + +The main content includes: + +- Development board resources introduction +- BSP quick start guide +- Advanced usage methods + +By reading the quick start section, developers can quickly get started with this BSP and run RT-Thread on the development board. In the advanced usage guide section, more advanced features will be introduced to help developers use RT-Thread to drive more on-board resources. + +## Development Board Introduction + +LXB723ZG-P1 is a development board launched by LXB (鹿小班) based on the ARM Cortex-M7 core, with a maximum frequency of 550MHz. +The development board integrates resources including: W25Q64 8MB OSPI Flash (available for user's own use), SPI screen and 8-bit DCMI camera FPC socket (corresponding accessories need to be purchased separately), self-ejecting TF card socket, Type-C interface, 108 extended IO interfaces, reset button and BOOT button (no custom buttons). + +The appearance of the development board is shown in the figure below: + +![board](figures/board.png) + +The commonly used **on-board resources** of this development board are as follows: + +- MCU: STM32H723ZGT6, frequency 550MHz, 1MB FLASH, 564K RAM +- External FLASH: W25Q64, 8MB +- Common peripherals + - LED: 1, DS0 (blue, PG7) +- Common interfaces: Type-C interface, TF card interface, 8-bit DCMI camera interface (FPC), SPI screen interface (FPC) +- Debugging interface: Standard SWD interface + +For more detailed information about the development board, please refer to [LXB723ZG-P1 Core Board](https://item.taobao.com/item.htm?abbucket=17&id=831139393305&mi_id=0000Hr_7YuvNzXkf9ukTHb3zeHF5wgFLDumgDHyYZNYGbIs&ns=1&priceTId=2150419217612182188817937e1045&skuId=5739335367823&spm=a21n57.sem.item.1.47ef3a43Uq2LAX&utparam=%7B%22aplus_abtest%22%3A%229add53b62022488d347cf05287760183%22%7D&xxc=taobaoSearch). + +## Peripheral Support + +The current support status of peripherals for this BSP is as follows: + +| **On-board Peripherals** | **Support Status** | **Notes** | +| :---------------------- | :---------------- | :----------------------------------- | +| OSPI Flash | Not supported | OSPI1 | +| TF card | Not supported | SDMMC1 | +| SPI screen | Not supported | SPI6 | +| DCMI camera | Not supported | | + +| **On-chip Peripherals** | **Support Status** | **Notes** | +| :---------------------- | :---------------- | :----------------------------------- | +| GPIO | Supported | | +| UART | Supported | | + +## Usage Instructions + +Usage instructions are divided into the following two chapters: + +- Quick Start + + This chapter is a usage guide prepared for beginners who are new to RT-Thread. Following simple steps, you can run the RT-Thread operating system on this development board and see the experimental results. + +- Advanced Usage + + This chapter is prepared for developers who need to use more development board resources on the RT-Thread operating system. By configuring the BSP using the ENV tool, you can enable more on-board resources and implement more advanced functions. + +### Quick Start + +This BSP provides an MDK5 project for developers and supports the GCC development environment. The following takes the MDK5 development environment as an example to introduce how to run the system. + +**Please note!!!** + +Before performing the compilation work, please open the ENV tool in the BSP directory and execute the following command (this command is used to pull the necessary HAL library and CMSIS library, otherwise compilation cannot pass): + +```bash +pkgs --update +``` + +#### Hardware Connection + +The development board has separate debugging interfaces (SWD, LPUART1). Connect to the debugger as needed. + +#### Compilation and Download + +Double-click the project.uvprojx file to open the MDK5 project, compile and download the program to the development board. + +> The project is configured to use CMSIS_DAP emulator to download the program by default. On the basis of connecting the development board through CMSIS_DAP, click the download button to download the program to the development board. + +#### Running Results + +After successfully downloading the program, the system will run automatically, and the LED will blink. + +Connect the corresponding serial port of the development board to the PC, open the corresponding serial port (115200-8-1-N) in the terminal tool, and after resetting the device, you can see the output information of RT-Thread: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.2.2 build Oct 23 2025 18:41:53 + 2006 - 2024 Copyright by RT-Thread team +msh > +``` + +### Advanced Usage + +This BSP only enables the functions of GPIO and UART1 by default. If you need to use more advanced functions, you need to use the ENV tool to configure the BSP. The steps are as follows: + +1. Open the env tool under the bsp directory. + +2. Enter the `menuconfig` command to configure the project, save and exit after configuration. + +3. Enter the `pkgs --update` command to update the software package. + +4. Enter the `scons --target=mdk5` command to regenerate the project. + +For more detailed introduction in this chapter, please refer to [STM32 Series BSP Peripheral Driver Usage Tutorial](../docs/STM32系列BSP外设驱动使用教程.md). + +## Notes + +- Debugging serial port is low-power UART1 mapping description + + PA9 ------> LPUART1_TX + + PA10 ------> LPUART1_RX + +## Contact Information + +Maintainer: + +- [Pcb-yun](https://github.com/Pcb-yun) \ No newline at end of file diff --git a/bsp/stm32/stm32h723-lxb-disco/README_zh.md b/bsp/stm32/stm32h723-lxb-disco/README_zh.md new file mode 100644 index 00000000000..6d12bfe57f1 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/README_zh.md @@ -0,0 +1,126 @@ +# 鹿小班STM32H723 开发板 BSP 说明 + +## 简介 + +本文档为 Pcb-yun为 鹿小班STM32H723(LXB723ZG-P1) 开发板提供的的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +LXB723ZG-P1 是 鹿小班 推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为550MHz。 +开发板集成资源包括:W25Q64 8MB OSPI Flash(可供用户自行使用)、SPI屏幕与8位DCMI摄像头FPC底座(需自行购买相应配件)、自弹式TF卡座、Type-C接口、108个引出IO接口、复位按键和BOOT按键(无自定义按键)。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32H723ZGT6,主频 550MHz,1MB FLASH ,564K RAM +- 外部 FLASH:W25Q64,8MB +- 常用外设 + - LED:1个,DS0(蓝色,PG7) +- 常用接口:Type-C接口、TF卡接口、8位DCMI摄像头接口(FPC)、SPI屏幕接口(FPC) +- 调试接口:标准SWD接口 + +开发板更多详细信息请参考 [鹿小班STM32H723ZGT6核心板](https://item.taobao.com/item.htm?abbucket=17&id=831139393305&mi_id=0000Hr_7YuvNzXkf9ukTHb3zeHF5wgFLDumgDHyYZNYGbIs&ns=1&priceTId=2150419217612182188817937e1045&skuId=5739335367823&spm=a21n57.sem.item.1.47ef3a43Uq2LAX&utparam=%7B%22aplus_abtest%22%3A%229add53b62022488d347cf05287760183%22%7D&xxc=taobaoSearch)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| OSPI Flash | 暂不支持 | OSPI1 | +| TF卡 | 暂不支持 | SDMMC1 | +| SPI屏幕 | 暂不支持 | SPI6 | +| DCMI摄像头 | 暂不支持 | | + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| GPIO | 支持 | | +| UART | 支持 | | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +**请注意!!!** + +在执行编译工作前请先在BSP目录下打开ENV工具,执行以下指令(该指令用于拉取必要的HAL库及CMSIS库,否则无法通过编译): + +```bash +pkgs --update +``` + +#### 硬件连接 + +开发板将调试接口单独引出(SWD、LPUART1),根据需要连接到调试器即可。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 CMSIS_DAP 仿真器下载程序,在通过 CMSIS_DAP 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.2.2 build Oct 23 2025 18:41:53 + 2006 - 2024 Copyright by RT-Thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk5` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 调试串口为 低功耗串口1 映射说明 + + PA9 ------> LPUART1_TX + + PA10 ------> LPUART1_RX + +## 联系人信息 + +维护人: + +- [Pcb-yun](https://github.com/Pcb-yun) \ No newline at end of file diff --git a/bsp/stm32/stm32h723-lxb-disco/SConscript b/bsp/stm32/stm32h723-lxb-disco/SConscript new file mode 100644 index 00000000000..8fe7d714187 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/SConscript @@ -0,0 +1,20 @@ +# for module compiling +import os +Import('RTT_ROOT') +Import('env') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +# STM32H743xx || STM32H750xx || STM32F753xx || STM32H723xx +# You can select chips from the list above +env.Append(CPPDEFINES = ['STM32H723xx']) + +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/stm32h723-lxb-disco/SConstruct b/bsp/stm32/stm32h723-lxb-disco/SConstruct new file mode 100644 index 00000000000..35ec081257c --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/SConstruct @@ -0,0 +1,74 @@ +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) + +def bsp_pkg_check(): + import subprocess + + check_paths = [ + os.path.join("packages", "CMSIS-Core-latest"), + os.path.join("packages", "stm32h7_cmsis_driver-latest"), + os.path.join("packages", "stm32h7_hal_driver-latest") + ] + + need_update = not all(os.path.exists(p) for p in check_paths) + + if need_update: + print("\n===============================================================================") + print("Dependency packages missing, please running 'pkgs --update'...") + print("If no packages are fetched, run 'pkgs --upgrade' first, then 'pkgs --update'...") + print("===============================================================================") + exit(1) + +RegisterPreBuildingAction(bsp_pkg_check) + +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('env') +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' + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +rtconfig.BSP_LIBRARY_TYPE = None + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'),variant_dir='build/libraries/HAL_Drivers', duplicate=0)) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32h723-lxb-disco/applications/SConscript b/bsp/stm32/stm32h723-lxb-disco/applications/SConscript new file mode 100644 index 00000000000..9bb9abae897 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/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/stm32h723-lxb-disco/applications/main.c b/bsp/stm32/stm32h723-lxb-disco/applications/main.c new file mode 100644 index 00000000000..5b2d98641f3 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/applications/main.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-05 whj4674672 first version + */ + +#include +#include +#include +/* defined the LED0 pin: PG7 */ +#define LED0_PIN GET_PIN(G, 7) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + return RT_EOK; +} diff --git a/bsp/stm32/stm32h723-lxb-disco/board/.ignore_format.yml b/bsp/stm32/stm32h723-lxb-disco/board/.ignore_format.yml new file mode 100644 index 00000000000..0d7f3e360c6 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/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/stm32h723-lxb-disco/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/.mxproject new file mode 100644 index 00000000000..940f66764c0 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousGenFiles] +HeaderPath=..\Inc +HeaderFiles=stm32h7xx_it.h;stm32h7xx_hal_conf.h;main.h; +SourcePath=..\Src +SourceFiles=stm32h7xx_it.c;stm32h7xx_hal_msp.c;main.c; + +[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_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\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_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_uart.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_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_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\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h723xx.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; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32h7xx_it.c;..\Src\stm32h7xx_hal_msp.c;..\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_uart.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;..\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;..\\Src\system_stm32h7xx.c;..\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_uart.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;..\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;..\\Src\system_stm32h7xx.c;;; +HeaderPath=..\Drivers\STM32H7xx_HAL_Driver\Inc;..\Drivers\STM32H7xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32H7xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_PWR_LDO_SUPPLY;USE_PWR_LDO_SUPPLY;USE_HAL_DRIVER;STM32H723xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 00000000000..79471c5714a --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,219 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +LPUART1.BaudRate=115200 +LPUART1.IPParameters=BaudRate +MMTAppReg1.MEMORYMAP.AppRegionName=DTCMRAM +MMTAppReg1.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg1.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg1.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg1.MEMORYMAP.Name=DTCMRAM +MMTAppReg1.MEMORYMAP.Size=131072 +MMTAppReg1.MEMORYMAP.StartAddress=0x20000000 +MMTAppReg2.MEMORYMAP.AppRegionName=RAM +MMTAppReg2.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg2.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg2.MEMORYMAP.DefaultDataRegion=true +MMTAppReg2.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,DefaultDataRegion +MMTAppReg2.MEMORYMAP.Name=RAM +MMTAppReg2.MEMORYMAP.Size=327680 +MMTAppReg2.MEMORYMAP.StartAddress=0x24000000 +MMTAppReg3.MEMORYMAP.AppRegionName=RAM_D2 +MMTAppReg3.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg3.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg3.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg3.MEMORYMAP.Name=RAM_D2 +MMTAppReg3.MEMORYMAP.Size=32768 +MMTAppReg3.MEMORYMAP.StartAddress=0x30000000 +MMTAppReg4.MEMORYMAP.AppRegionName=RAM_D3 +MMTAppReg4.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg4.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg4.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name +MMTAppReg4.MEMORYMAP.Name=RAM_D3 +MMTAppReg4.MEMORYMAP.Size=16384 +MMTAppReg4.MEMORYMAP.StartAddress=0x38000000 +MMTAppReg5.MEMORYMAP.AppRegionName=ITCMRAM +MMTAppReg5.MEMORYMAP.Cacheability=WTRA +MMTAppReg5.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg5.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg5.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability +MMTAppReg5.MEMORYMAP.Name=ITCMRAM +MMTAppReg5.MEMORYMAP.Size=65536 +MMTAppReg5.MEMORYMAP.StartAddress=0x00000000 +MMTAppReg6.MEMORYMAP.AP=RO_priv_only +MMTAppReg6.MEMORYMAP.AppRegionName=FLASH +MMTAppReg6.MEMORYMAP.Cacheability=WTRA +MMTAppReg6.MEMORYMAP.ContextName=Cortex-M7NS +MMTAppReg6.MEMORYMAP.CoreName=Arm Cortex-M7 +MMTAppReg6.MEMORYMAP.DefaultCodeRegion=true +MMTAppReg6.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,MemType,ContextName,Name,AP,Cacheability,DefaultCodeRegion,ISRRegion,RootBootRegion +MMTAppReg6.MEMORYMAP.ISRRegion=true +MMTAppReg6.MEMORYMAP.MemType=ROM +MMTAppReg6.MEMORYMAP.Name=FLASH +MMTAppReg6.MEMORYMAP.RootBootRegion=true +MMTAppReg6.MEMORYMAP.Size=1048576 +MMTAppReg6.MEMORYMAP.StartAddress=0x08000000 +MMTAppRegionsCount=6 +MMTConfigApplied=false +Mcu.CPN=STM32H723ZGT6 +Mcu.Family=STM32H7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=DEBUG +Mcu.IP2=LPUART1 +Mcu.IP3=MEMORYMAP +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=SYS +Mcu.IPNb=7 +Mcu.Name=STM32H723ZGTx +Mcu.Package=LQFP144 +Mcu.Pin0=PH0-OSC_IN +Mcu.Pin1=PH1-OSC_OUT +Mcu.Pin2=PG7 +Mcu.Pin3=PA9 +Mcu.Pin4=PA10 +Mcu.Pin5=PA13(JTMS/SWDIO) +Mcu.Pin6=PA14(JTCK/SWCLK) +Mcu.Pin7=VP_SYS_VS_Systick +Mcu.Pin8=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H723ZGTx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +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 +PA10.Mode=Asynchronous +PA10.Signal=LPUART1_RX +PA13(JTMS/SWDIO).Mode=Serial_Wire +PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO +PA14(JTCK/SWCLK).Mode=Serial_Wire +PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=LPUART1_TX +PG7.GPIOParameters=PinState,GPIO_Label +PG7.GPIO_Label=LED +PG7.Locked=true +PG7.PinState=GPIO_PIN_SET +PG7.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.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H723ZGTx +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=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5.32 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=129000000 +RCC.AHB12Freq_Value=64000000 +RCC.AHB4Freq_Value=64000000 +RCC.APB1Freq_Value=64000000 +RCC.APB2Freq_Value=64000000 +RCC.APB3Freq_Value=32000000 +RCC.APB4Freq_Value=64000000 +RCC.AXIClockFreq_Value=64000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=64000000 +RCC.CortexFreq_Value=64000000 +RCC.CpuClockFreq_Value=64000000 +RCC.D1CPREFreq_Value=64000000 +RCC.D1PPRE=RCC_APB3_DIV2 +RCC.DFSDMACLkFreq_Value=129000000 +RCC.DFSDMFreq_Value=64000000 +RCC.DIVP1Freq_Value=129000000 +RCC.DIVP2Freq_Value=129000000 +RCC.DIVP3Freq_Value=129000000 +RCC.DIVQ1Freq_Value=129000000 +RCC.DIVQ2Freq_Value=129000000 +RCC.DIVQ3Freq_Value=129000000 +RCC.DIVR1Freq_Value=129000000 +RCC.DIVR2Freq_Value=129000000 +RCC.DIVR3Freq_Value=129000000 +RCC.FDCANFreq_Value=129000000 +RCC.FMCFreq_Value=64000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=64000000 +RCC.HCLKFreq_Value=64000000 +RCC.I2C123Freq_Value=64000000 +RCC.I2C4Freq_Value=64000000 +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,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,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,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=64000000 +RCC.LPTIM2Freq_Value=64000000 +RCC.LPTIM345Freq_Value=64000000 +RCC.LPUART1Freq_Value=32000000 +RCC.LTDCFreq_Value=129000000 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=64000000 +RCC.QSPIFreq_Value=64000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=129000000 +RCC.SAI4AFreq_Value=129000000 +RCC.SAI4BFreq_Value=129000000 +RCC.SDMMCFreq_Value=129000000 +RCC.SPDIFRXFreq_Value=129000000 +RCC.SPI123Freq_Value=129000000 +RCC.SPI45Freq_Value=64000000 +RCC.SPI6Freq_Value=64000000 +RCC.SWPMI1Freq_Value=64000000 +RCC.SYSCLKFreq_VALUE=64000000 +RCC.Tim1OutputFreq_Value=64000000 +RCC.Tim2OutputFreq_Value=64000000 +RCC.TraceFreq_Value=64000000 +RCC.USART16Freq_Value=64000000 +RCC.USART234578Freq_Value=64000000 +RCC.USBFreq_Value=129000000 +RCC.VCO1OutputFreq_Value=258000000 +RCC.VCO2OutputFreq_Value=258000000 +RCC.VCO3OutputFreq_Value=258000000 +RCC.VCOInput1Freq_Value=2000000 +RCC.VCOInput2Freq_Value=2000000 +RCC.VCOInput3Freq_Value=2000000 +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/main.h new file mode 100644 index 00000000000..d9c0abcd3b4 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/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_7 +#define LED_GPIO_Port GPIOG + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_hal_conf.h b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_hal_conf.h new file mode 100644 index 00000000000..39e0d3e3815 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/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/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_it.h b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Inc/stm32h7xx_it.h new file mode 100644 index 00000000000..e073db9f216 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/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/stm32h723-lxb-disco/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/main.c new file mode 100644 index 00000000000..00e0ef1a69c --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/main.c @@ -0,0 +1,271 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @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" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +UART_HandleTypeDef hlpuart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_LPUART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_LPUART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + + 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_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = 64; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 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_HSI; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief LPUART1 Initialization Function + * @param None + * @retval None + */ +static void MX_LPUART1_UART_Init(void) +{ + + /* USER CODE BEGIN LPUART1_Init 0 */ + + /* USER CODE END LPUART1_Init 0 */ + + /* USER CODE BEGIN LPUART1_Init 1 */ + + /* USER CODE END LPUART1_Init 1 */ + hlpuart1.Instance = LPUART1; + hlpuart1.Init.BaudRate = 115200; + hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; + hlpuart1.Init.StopBits = UART_STOPBITS_1; + hlpuart1.Init.Parity = UART_PARITY_NONE; + hlpuart1.Init.Mode = UART_MODE_TX_RX; + hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + hlpuart1.FifoMode = UART_FIFOMODE_DISABLE; + if (HAL_UART_Init(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPUART1_Init 2 */ + + /* USER CODE END LPUART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + /* USER CODE BEGIN MX_GPIO_Init_1 */ + + /* USER CODE END MX_GPIO_Init_1 */ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + + /*Configure GPIO pin : LED_Pin */ + GPIO_InitStruct.Pin = LED_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN MX_GPIO_Init_2 */ + + /* USER CODE END MX_GPIO_Init_2 */ +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_hal_msp.c b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_hal_msp.c new file mode 100644 index 00000000000..460e0ed4ddc --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_hal_msp.c @@ -0,0 +1,158 @@ +/* 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 +/* 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 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==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspInit 0 */ + + /* USER CODE END LPUART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; + PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_D3PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPUART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**LPUART1 GPIO Configuration + PA9 ------> LPUART1_TX + PA10 ------> LPUART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF3_LPUART; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN LPUART1_MspInit 1 */ + + /* USER CODE END LPUART1_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==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspDeInit 0 */ + + /* USER CODE END LPUART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPUART1_CLK_DISABLE(); + + /**LPUART1 GPIO Configuration + PA9 ------> LPUART1_TX + PA10 ------> LPUART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN LPUART1_MspDeInit 1 */ + + /* USER CODE END LPUART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_it.c b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/stm32h7xx_it.c new file mode 100644 index 00000000000..3601d799965 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/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/stm32h723-lxb-disco/board/CubeMX_Config/Src/system_stm32h7xx.c b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/system_stm32h7xx.c new file mode 100644 index 00000000000..197d15ceacd --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/CubeMX_Config/Src/system_stm32h7xx.c @@ -0,0 +1,556 @@ +/** + ****************************************************************************** + * @file system_stm32h7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-Mx Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - ExitRun0Mode(): Specifies the Power Supply source. This function is + * called at startup just after reset and before the call + * of SystemInit(). This call is made inside + * the "startup_stm32h7xx.s" file. + * + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32h7xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock, it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32h7xx_system + * @{ + */ + +/** @addtogroup STM32H7xx_System_Private_Includes + * @{ + */ + +#include "stm32h7xx.h" +#include + +#if !defined (HSE_VALUE) +#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (CSI_VALUE) + #define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use initialized data in D2 domain SRAM (AHB SRAM) */ +/* #define DATA_IN_D2_SRAM */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in FLASH BANK1 or AXI SRAM, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +#if defined(DUAL_CORE) && defined(CORE_CM4) +/*!< Uncomment the following line if you need to relocate your vector Table + in D2 AXI SRAM else user remap will be done in FLASH BANK2. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D2_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK2_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#endif /* VECT_TAB_SRAM */ +#else +/*!< Uncomment the following line if you need to relocate your vector Table + in D1 AXI SRAM else user remap will be done in FLASH BANK1. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D1_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK1_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#endif /* VECT_TAB_SRAM */ +#endif /* DUAL_CORE && CORE_CM4 */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 64000000; + uint32_t SystemD2Clock = 64000000; + const uint8_t D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting and vector table location + * configuration. + * @param None + * @retval None + */ +void SystemInit (void) +{ +#if defined (DATA_IN_D2_SRAM) + __IO uint32_t tmpreg; +#endif /* DATA_IN_D2_SRAM */ + + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */ + #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + + /* Increasing the CPU frequency */ + if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + + /* Set HSION bit */ + RCC->CR |= RCC_CR_HSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */ + RCC->CR &= 0xEAF6ED7FU; + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + +#if defined(D3_SRAM_BASE) + /* Reset D1CFGR register */ + RCC->D1CFGR = 0x00000000; + + /* Reset D2CFGR register */ + RCC->D2CFGR = 0x00000000; + + /* Reset D3CFGR register */ + RCC->D3CFGR = 0x00000000; +#else + /* Reset CDCFGR1 register */ + RCC->CDCFGR1 = 0x00000000; + + /* Reset CDCFGR2 register */ + RCC->CDCFGR2 = 0x00000000; + + /* Reset SRDCFGR register */ + RCC->SRDCFGR = 0x00000000; +#endif + /* Reset PLLCKSELR register */ + RCC->PLLCKSELR = 0x02020200; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x01FF0000; + /* Reset PLL1DIVR register */ + RCC->PLL1DIVR = 0x01010280; + /* Reset PLL1FRACR register */ + RCC->PLL1FRACR = 0x00000000; + + /* Reset PLL2DIVR register */ + RCC->PLL2DIVR = 0x01010280; + + /* Reset PLL2FRACR register */ + + RCC->PLL2FRACR = 0x00000000; + /* Reset PLL3DIVR register */ + RCC->PLL3DIVR = 0x01010280; + + /* Reset PLL3FRACR register */ + RCC->PLL3FRACR = 0x00000000; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000; + +#if (STM32H7_DEV_ID == 0x450UL) + /* dual core CM7 or single core line */ + if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U) + { + /* if stm32h7 revY*/ + /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */ + *((__IO uint32_t*)0x51008108) = 0x000000001U; + } +#endif /* STM32H7_DEV_ID */ + +#if defined(DATA_IN_D2_SRAM) + /* in case of initialized data in D2 SRAM (AHB SRAM), enable the D2 SRAM clock (AHB SRAM clock) */ +#if defined(RCC_AHB2ENR_D2SRAM3EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); +#elif defined(RCC_AHB2ENR_D2SRAM2EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN); +#else + RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN); +#endif /* RCC_AHB2ENR_D2SRAM3EN */ + + tmpreg = RCC->AHB2ENR; + (void) tmpreg; +#endif /* DATA_IN_D2_SRAM */ + +#if defined(DUAL_CORE) && defined(CORE_CM4) + /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#else + if(READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN) == 0U) + { + /* Enable the FMC interface clock */ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* + * Disable the FMC bank1 (enabled after reset). + * This, prevents CPU speculation access on this bank which blocks the use of FMC during + * 24us. During this time the others FMC master (such as LTDC) cannot use it! + */ + FMC_Bank1_R->BTCR[0] = 0x000030D2; + + /* Disable the FMC interface clock */ + CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + } + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#endif /*DUAL_CORE && CORE_CM4*/ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock , it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is CSI, SystemCoreClock will contain the CSI_VALUE(*) + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * - If SYSCLK source is PLL, SystemCoreClock will contain the CSI_VALUE(*), + * HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors. + * + * (*) CSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * (**) HSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 64 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***)HSE_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t pllp, pllsource, pllm, pllfracen, hsivalue, tmp; + uint32_t common_system_clock; + float_t fracn1, pllvco; + + + /* Get SYSCLK source -------------------------------------------------------*/ + + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + + case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */ + common_system_clock = CSI_VALUE; + break; + + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + common_system_clock = HSE_VALUE; + break; + + case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC); + pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ; + pllfracen = ((RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos); + fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3)); + + if (pllm != 0U) + { + switch (pllsource) + { + case RCC_PLLCKSELR_PLLSRC_HSI: /* HSI used as PLL clock source */ + + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + + break; + + case RCC_PLLCKSELR_PLLSRC_CSI: /* CSI used as PLL clock source */ + pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + case RCC_PLLCKSELR_PLLSRC_HSE: /* HSE used as PLL clock source */ + pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + default: + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + } + pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ; + common_system_clock = (uint32_t)(float_t)(pllvco/(float_t)pllp); + } + else + { + common_system_clock = 0U; + } + break; + + default: + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + } + + /* Compute SystemClock frequency --------------------------------------------------*/ +#if defined (RCC_D1CFGR_D1CPRE) + tmp = D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : CM4 CPU, AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU)); + +#else + tmp = D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_HPRE)>> RCC_CDCFGR1_HPRE_Pos]) & 0x1FU)); + +#endif + +#if defined(DUAL_CORE) && defined(CORE_CM4) + SystemCoreClock = SystemD2Clock; +#else + SystemCoreClock = common_system_clock; +#endif /* DUAL_CORE && CORE_CM4 */ +} + +/** + * @brief Exit Run* mode and Configure the system Power Supply + * + * @note This function exits the Run* mode and configures the system power supply + * according to the definition to be used at compilation preprocessing level. + * The application shall set one of the following configuration option: + * - PWR_LDO_SUPPLY + * - PWR_DIRECT_SMPS_SUPPLY + * - PWR_EXTERNAL_SOURCE_SUPPLY + * - PWR_SMPS_1V8_SUPPLIES_LDO + * - PWR_SMPS_2V5_SUPPLIES_LDO + * - PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO + * - PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO + * - PWR_SMPS_1V8_SUPPLIES_EXT + * - PWR_SMPS_2V5_SUPPLIES_EXT + * + * @note The function modifies the PWR->CR3 register to enable or disable specific + * power supply modes and waits until the voltage level flag is set, indicating + * that the power supply configuration is stable. + * + * @param None + * @retval None + */ +void ExitRun0Mode(void) +{ +#if defined(USE_PWR_LDO_SUPPLY) + #if defined(SMPS) + /* Exit Run* mode by disabling SMPS and enabling LDO */ + PWR->CR3 = (PWR->CR3 & ~PWR_CR3_SMPSEN) | PWR_CR3_LDOEN; + #else + /* Enable LDO mode */ + PWR->CR3 |= PWR_CR3_LDOEN; + #endif /* SMPS */ + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_EXTERNAL_SOURCE_SUPPLY) + #if defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_SMPSEN | PWR_CR3_LDOEN)) | PWR_CR3_BYPASS; + #else + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_BYPASS; + #endif /* SMPS */ + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_DIRECT_SMPS_SUPPLY) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 &= ~(PWR_CR3_LDOEN); + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_EXT) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_EXT) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#else + /* No system power supply configuration is selected at exit Run* mode */ +#endif /* USE_PWR_LDO_SUPPLY */ +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/bsp/stm32/stm32h723-lxb-disco/board/Kconfig b/bsp/stm32/stm32h723-lxb-disco/board/Kconfig new file mode 100644 index 00000000000..7960d97866e --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/Kconfig @@ -0,0 +1,40 @@ +menu "Hardware Drivers Config" + config SCO_STM32H723ZGT6 + bool + select SOC_SERIES_STM32H7 + default y + + menu "Onboard Peripheral Drivers" + + endmenu + + menu "On-chip Peripheral Drivers" + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + + if BSP_USING_UART + config BSP_STM32_UART_V1_TX_TIMEOUT + int "UART TX timeout" + default 1000 + depends on RT_USING_SERIAL_V1 + + config BSP_USING_LPUART1 + bool "Enable LPUART1" + default y + + endif + source "$(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig" + + endmenu + + menu "Board extended module Drivers" + + endmenu + +endmenu diff --git a/bsp/stm32/stm32h723-lxb-disco/board/SConscript b/bsp/stm32/stm32h723-lxb-disco/board/SConscript new file mode 100644 index 00000000000..0624dbbfd32 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/SConscript @@ -0,0 +1,21 @@ +import os +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32h7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +CPPDEFINES = ['STM32H723xx'] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path) +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/stm32h723-lxb-disco/board/board.c b/bsp/stm32/stm32h723-lxb-disco/board/board.c new file mode 100644 index 00000000000..969590abc51 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/board.c @@ -0,0 +1,65 @@ +/* + * 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 + */ +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + + 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_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = 64; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 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_HSI; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32h723-lxb-disco/board/board.h b/bsp/stm32/stm32h723-lxb-disco/board/board.h new file mode 100644 index 00000000000..eeec1a59b50 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/board.h @@ -0,0 +1,49 @@ +/* + * 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 + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (1024 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (320) +#define STM32_SRAM_END (0x24000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__ARMCC_VERSION) +extern int Image$$AXI_SRAM$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$AXI_SRAM$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct new file mode 100644 index 00000000000..7fdbc58b5a7 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct @@ -0,0 +1,35 @@ +; ********************************************************************************* +; *** Scatter-Loading Description File generated by STM32CubeMX/LinkerGenerator *** +; *********************************************************************************; + +ON_CHIP 0x08000000 0x00100000 { ; load_region size_region + FLASH 0x08000000 0x00100000 { ; load address = excetion address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + AXI_SRAM 0x24000000 0x00050000 { ; load address = excetion address + .ANY (+RW +ZI) + ; *(.sram1) + } +;***region***; + ; ITCM 0x00000000 0x00010000 { ; load address = excetion address + ; *(.itcm) + ; } + ; DTCM 0x20000000 0x00020000 { ; load address = excetion address + ; *(.dtcm) + ; } + ; AHB_SRAM_D2 0x30000000 0x00008000 { ; load address = excetion address + ; *(.sram2) + ; } + ; AHB_SRAM_D3 0x38000000 0x00004000 { ; load address = excetion address + ; *(.sram3) + ; } + ; BACKUP_SRAM_D3 0x38800000 0x00001000 { ; load address = excetion address + ; *(.bsram) + ; } +;***endregion***; +} + +/*-Start of regions- Auto-generated By STM32CubeMX-*/ diff --git a/bsp/stm32/stm32h723-lxb-disco/figures/board.png b/bsp/stm32/stm32h723-lxb-disco/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6aae4bd7f96fb703ac2b58a84bb16214df91f7 GIT binary patch literal 247449 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%0D+pIL)VfGra!MBG>Mgwru|4c^-+F%*#)w`19|N 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
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 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 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723ZGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) + + + + + 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 + 1 + 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.c + dev_serial.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32h7xx_hal_msp.c + stm32h7xx_hal_msp.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + klibc + 0 + 0 + 0 + 0 + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + + + libcpu + 0 + 0 + 0 + 0 + + 8 + 51 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 8 + 54 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + cpu_cache.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + + + STM32H7-CMSIS + 0 + 0 + 0 + 0 + + 9 + 57 + 1 + 0 + 0 + 0 + packages\stm32h7_cmsis_driver-latest\Source\Templates\system_stm32h7xx.c + system_stm32h7xx.c + 0 + 0 + + + 9 + 58 + 2 + 0 + 0 + 0 + packages\stm32h7_cmsis_driver-latest\Source\Templates\arm\startup_stm32h723xx.s + startup_stm32h723xx.s + 0 + 0 + + + + + STM32H7-HAL + 0 + 0 + 0 + 0 + + 10 + 59 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_dma_ex.c + stm32h7xx_hal_dma_ex.c + 0 + 0 + + + 10 + 60 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_pwr.c + stm32h7xx_hal_pwr.c + 0 + 0 + + + 10 + 61 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_mdma.c + stm32h7xx_hal_mdma.c + 0 + 0 + + + 10 + 62 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_dma.c + stm32h7xx_hal_dma.c + 0 + 0 + + + 10 + 63 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cortex.c + stm32h7xx_hal_cortex.c + 0 + 0 + + + 10 + 64 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cryp_ex.c + stm32h7xx_hal_cryp_ex.c + 0 + 0 + + + 10 + 65 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cryp.c + stm32h7xx_hal_cryp.c + 0 + 0 + + + 10 + 66 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_sram.c + stm32h7xx_hal_sram.c + 0 + 0 + + + 10 + 67 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rcc_ex.c + stm32h7xx_hal_rcc_ex.c + 0 + 0 + + + 10 + 68 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_crc_ex.c + stm32h7xx_hal_crc_ex.c + 0 + 0 + + + 10 + 69 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_uart.c + stm32h7xx_hal_uart.c + 0 + 0 + + + 10 + 70 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_comp.c + stm32h7xx_hal_comp.c + 0 + 0 + + + 10 + 71 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cec.c + stm32h7xx_hal_cec.c + 0 + 0 + + + 10 + 72 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_uart_ex.c + stm32h7xx_hal_uart_ex.c + 0 + 0 + + + 10 + 73 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal.c + stm32h7xx_hal.c + 0 + 0 + + + 10 + 74 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_pwr_ex.c + stm32h7xx_hal_pwr_ex.c + 0 + 0 + + + 10 + 75 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_usart.c + stm32h7xx_hal_usart.c + 0 + 0 + + + 10 + 76 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rng.c + stm32h7xx_hal_rng.c + 0 + 0 + + + 10 + 77 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rcc.c + stm32h7xx_hal_rcc.c + 0 + 0 + + + 10 + 78 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_gpio.c + stm32h7xx_hal_gpio.c + 0 + 0 + + + 10 + 79 + 1 + 0 + 0 + 0 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_crc.c + stm32h7xx_hal_crc.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32h723-lxb-disco/project.uvprojx b/bsp/stm32/stm32h723-lxb-disco/project.uvprojx new file mode 100644 index 00000000000..39931eab50c --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/project.uvprojx @@ -0,0 +1,2216 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rtthread + 0x4 + ARM-ADS + 6230000::V6.23::ARMCLANG + 1 + + + STM32H723ZGTx + STMicroelectronics + Keil.STM32H7xx_DFP.4.1.2 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00050000) IROM(0x08000000,0x00100000) XRAM(0x30000000,0x00008000) XRAM2(0x38000000,0x00004000) CPUTYPE("Cortex-M7") FPU3(DFPU) DSP CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723ZGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) + 0 + + + + + + + + + + + $$Device:STM32H723ZGTx$CMSIS\SVD\STM32H723.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 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 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x30000000 + 0x8000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x30000000 + 0x8000 + + + 0 + 0x38000000 + 0x4000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x50000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, __RTTHREAD__, RT_USING_ARMLIBC, STM32H723xx, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_LIBC + + packages\stm32h7_cmsis_driver-latest\Include;..\libraries\HAL_Drivers;packages\CMSIS-Core-latest\Include;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\common;..\..\..\components\libc\posix\io\eventfd;..\..\..\components\libc\compilers\common\include;..\libraries\HAL_Drivers\drivers;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\smp_call;..\..\..\components\net\utest;applications;..\..\..\components\drivers\phy;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\include;board;..\..\..\components\libc\posix\io\epoll;packages\stm32h7_hal_driver-latest\Inc\Legacy;..\..\..\components\drivers\include;packages\stm32h7_hal_driver-latest\Inc;..\..\..\components\drivers\include;.;..\..\..\components\drivers\include;..\..\..\libcpu\arm\cortex-m7;..\..\..\components\finsh;..\..\..\components\libc\posix\ipc;..\..\..\include;board\CubeMX_Config\Inc + + + + 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.c + 1 + ..\..\..\components\drivers\serial\dev_serial.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 + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + stm32h7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32h7xx_hal_msp.c + + + board.c + 1 + board\board.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.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 + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.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 + + + + + STM32H7-CMSIS + + + system_stm32h7xx.c + 1 + packages\stm32h7_cmsis_driver-latest\Source\Templates\system_stm32h7xx.c + + + startup_stm32h723xx.s + 2 + packages\stm32h7_cmsis_driver-latest\Source\Templates\arm\startup_stm32h723xx.s + + + + + STM32H7-HAL + + + stm32h7xx_hal_dma_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_dma_ex.c + + + stm32h7xx_hal_pwr.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_pwr.c + + + stm32h7xx_hal_mdma.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_mdma.c + + + stm32h7xx_hal_dma.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_dma.c + + + stm32h7xx_hal_cortex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cortex.c + + + stm32h7xx_hal_cryp_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cryp_ex.c + + + stm32h7xx_hal_cryp.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cryp.c + + + stm32h7xx_hal_sram.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_sram.c + + + stm32h7xx_hal_rcc_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rcc_ex.c + + + stm32h7xx_hal_crc_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_crc_ex.c + + + stm32h7xx_hal_uart.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_uart.c + + + stm32h7xx_hal_comp.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_comp.c + + + stm32h7xx_hal_cec.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_cec.c + + + stm32h7xx_hal_uart_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_uart_ex.c + + + stm32h7xx_hal.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal.c + + + stm32h7xx_hal_pwr_ex.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_pwr_ex.c + + + stm32h7xx_hal_usart.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_usart.c + + + stm32h7xx_hal_rng.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rng.c + + + stm32h7xx_hal_rcc.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_rcc.c + + + stm32h7xx_hal_gpio.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_gpio.c + + + stm32h7xx_hal_crc.c + 1 + packages\stm32h7_hal_driver-latest\Src\stm32h7xx_hal_crc.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32h723-lxb-disco/rtconfig.h b/bsp/stm32/stm32h723-lxb-disco/rtconfig.h new file mode 100644 index 00000000000..d48ea7b400b --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/rtconfig.h @@ -0,0 +1,429 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +#define SOC_STM32H723ZG + +/* 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 9 +#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 "hlpuart1" +#define RT_VER_NUM 0x50201 +#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_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 */ + +#define PKG_USING_CMSIS_CORE +#define PKG_USING_CMSIS_CORE_LATEST_VERSION +/* 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 */ + +#define PKG_USING_STM32H7_HAL_DRIVER +#define PKG_USING_STM32H7_HAL_DRIVER_LATEST_VERSION +#define PKG_USING_STM32H7_CMSIS_DRIVER +#define PKG_USING_STM32H7_CMSIS_DRIVER_LATEST_VERSION +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ + +/* WCH HAL & SDK Drivers */ + +/* end of WCH HAL & SDK Drivers */ + +/* AT32 HAL & SDK Drivers */ + +/* end of AT32 HAL & SDK Drivers */ + +/* HC32 DDL Drivers */ + +/* end of HC32 DDL Drivers */ + +/* NXP HAL & SDK Drivers */ + +/* end of NXP HAL & SDK Drivers */ + +/* NUVOTON Drivers */ + +/* end of NUVOTON Drivers */ + +/* GD32 Drivers */ + +/* end of GD32 Drivers */ + +/* HPMicro SDK */ + +/* end of HPMicro 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 */ + +#define SCO_STM32H723ZGT6 + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_STM32_UART_V1_TX_TIMEOUT 1000 +#define BSP_USING_LPUART1 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/stm32/stm32h723-lxb-disco/rtconfig.py b/bsp/stm32/stm32h723-lxb-disco/rtconfig.py new file mode 100644 index 00000000000..796e515643c --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/rtconfig.py @@ -0,0 +1,185 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='keil' + +# 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\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armclang' + EXEC_PATH = r'E:\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/stm32h723-lxb-disco/template.uvoptx b/bsp/stm32/stm32h723-lxb-disco/template.uvoptx new file mode 100644 index 00000000000..930b6123176 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/template.uvoptx @@ -0,0 +1,187 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723ZGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) + + + + + 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 + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32h723-lxb-disco/template.uvprojx b/bsp/stm32/stm32h723-lxb-disco/template.uvprojx new file mode 100644 index 00000000000..8c432c508db --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/template.uvprojx @@ -0,0 +1,397 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rtthread + 0x4 + ARM-ADS + 6230000::V6.23::ARMCLANG + 1 + + + STM32H723ZGTx + STMicroelectronics + Keil.STM32H7xx_DFP.4.1.2 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00050000) IROM(0x08000000,0x00100000) XRAM(0x30000000,0x00008000) XRAM2(0x38000000,0x00004000) CPUTYPE("Cortex-M7") FPU3(DFPU) DSP CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723ZGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) + 0 + + + + + + + + + + + $$Device:STM32H723ZGTx$CMSIS\SVD\STM32H723.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 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 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x30000000 + 0x8000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x30000000 + 0x8000 + + + 0 + 0x38000000 + 0x4000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x50000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 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 + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
From 25426dcc192343dcae8da11d024885f2b564db01 Mon Sep 17 00:00:00 2001 From: sf sgwsres <2909609346@qq.com> Date: Fri, 24 Oct 2025 20:55:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(bsp):=20=E4=BF=AE=E6=AD=A3=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E8=84=9A=E6=9C=AC=E4=B8=AD=E7=9A=84=E6=8B=BC=E5=86=99?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=B9=B6=E5=90=AF=E7=94=A8=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复链接脚本中'excetion'拼写错误为'execution' 启用rtconfig.py中的环境变量配置选项 --- bsp/stm32/stm32h723-lxb-disco/board/board.c | 4 ---- .../board/linker_scripts/link.sct | 14 +++++++------- bsp/stm32/stm32h723-lxb-disco/rtconfig.py | 8 ++++---- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/bsp/stm32/stm32h723-lxb-disco/board/board.c b/bsp/stm32/stm32h723-lxb-disco/board/board.c index 969590abc51..1799cf29f40 100644 --- a/bsp/stm32/stm32h723-lxb-disco/board/board.c +++ b/bsp/stm32/stm32h723-lxb-disco/board/board.c @@ -10,10 +10,6 @@ #include "board.h" -/** - * @brief System Clock Configuration - * @retval None - */ /** * @brief System Clock Configuration * @retval None diff --git a/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct index 7fdbc58b5a7..b1a68a11ee5 100644 --- a/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct +++ b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.sct @@ -3,30 +3,30 @@ ; *********************************************************************************; ON_CHIP 0x08000000 0x00100000 { ; load_region size_region - FLASH 0x08000000 0x00100000 { ; load address = excetion address + FLASH 0x08000000 0x00100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } - AXI_SRAM 0x24000000 0x00050000 { ; load address = excetion address + AXI_SRAM 0x24000000 0x00050000 { ; load address = execution address .ANY (+RW +ZI) ; *(.sram1) } ;***region***; - ; ITCM 0x00000000 0x00010000 { ; load address = excetion address + ; ITCM 0x00000000 0x00010000 { ; load address = execution address ; *(.itcm) ; } - ; DTCM 0x20000000 0x00020000 { ; load address = excetion address + ; DTCM 0x20000000 0x00020000 { ; load address = execution address ; *(.dtcm) ; } - ; AHB_SRAM_D2 0x30000000 0x00008000 { ; load address = excetion address + ; AHB_SRAM_D2 0x30000000 0x00008000 { ; load address = execution address ; *(.sram2) ; } - ; AHB_SRAM_D3 0x38000000 0x00004000 { ; load address = excetion address + ; AHB_SRAM_D3 0x38000000 0x00004000 { ; load address = execution address ; *(.sram3) ; } - ; BACKUP_SRAM_D3 0x38800000 0x00001000 { ; load address = excetion address + ; BACKUP_SRAM_D3 0x38800000 0x00001000 { ; load address = execution address ; *(.bsram) ; } ;***endregion***; diff --git a/bsp/stm32/stm32h723-lxb-disco/rtconfig.py b/bsp/stm32/stm32h723-lxb-disco/rtconfig.py index 796e515643c..4df33fb29fc 100644 --- a/bsp/stm32/stm32h723-lxb-disco/rtconfig.py +++ b/bsp/stm32/stm32h723-lxb-disco/rtconfig.py @@ -8,8 +8,8 @@ # bsp lib config BSP_LIBRARY_TYPE = None -# if os.getenv('RTT_CC'): -# CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') if os.getenv('RTT_ROOT'): RTT_ROOT = os.getenv('RTT_ROOT') @@ -25,8 +25,8 @@ 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') +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') BUILD = 'debug' From f429708bc49418897fb304e3b3ab0113a8391ab4 Mon Sep 17 00:00:00 2001 From: sf sgwsres <2909609346@qq.com> Date: Sun, 26 Oct 2025 15:03:31 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix(bsp):=20=E9=87=8D=E6=96=B0=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=BC=80=E5=8F=91=E6=9D=BFIAR=E3=80=81GCC=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 链接脚本中包含了所有寄存器,除flash与主sarm外其余寄存器已注释 --- .../board/linker_scripts/link.icf | 40 +++++ .../board/linker_scripts/link.lds | 162 ++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.lds diff --git a/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.icf b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.icf new file mode 100644 index 00000000000..41794c51e67 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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__ = 0x080FFFFF; /* 1MB FLASH */ +define symbol __ICFEDIT_region_RAM_start__ = 0x24000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2404FFFF; /* 320KB AXI SRAM */ +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** End of ICF editor section. ###ICF###*/ + +/* Commented memory regions for reference */ +/* define symbol __ICFEDIT_region_ITCM_start__ = 0x00000000; */ +/* define symbol __ICFEDIT_region_ITCM_end__ = 0x0000FFFF; /\* 64KB ITCM *\/ */ +/* define symbol __ICFEDIT_region_DTCM_start__ = 0x20000000; */ +/* define symbol __ICFEDIT_region_DTCM_end__ = 0x2001FFFF; /\* 128KB DTCM *\/ */ +/* define symbol __ICFEDIT_region_SRAM2_start__ = 0x30000000; */ +/* define symbol __ICFEDIT_region_SRAM2_end__ = 0x30007FFF; /\* 32KB AHB SRAM D2 *\/ */ +/* define symbol __ICFEDIT_region_SRAM3_start__ = 0x38000000; */ +/* define symbol __ICFEDIT_region_SRAM3_end__ = 0x38003FFF; /\* 16KB AHB SRAM D3 *\/ */ +/* define symbol __ICFEDIT_region_BSRAM_start__ = 0x38800000; */ +/* define symbol __ICFEDIT_region_BSRAM_end__ = 0x38800FFF; /\* 4KB BACKUP SRAM D3 *\/ */ + +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/stm32h723-lxb-disco/board/linker_scripts/link.lds b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.lds new file mode 100644 index 00000000000..8447cb54994 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/board/linker_scripts/link.lds @@ -0,0 +1,162 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ + RAM (rw) : ORIGIN = 0x24000000, LENGTH = 320k /* 320K AXI SRAM */ + /* ITCM (rx) : ORIGIN = 0x00000000, LENGTH = 64k /\* 64KB ITCM SRAM *\/ */ + /* DTCM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /\* 128KB DTCM SRAM *\/ */ + /* SRAM2 (rw): ORIGIN = 0x30000000, LENGTH = 32k /\* 32KB AHB SRAM D2 *\/ */ + /* SRAM3 (rw): ORIGIN = 0x38000000, LENGTH = 16k /\* 16KB AHB SRAM D3 *\/ */ + /* BSRAM (rw): ORIGIN = 0x38800000, LENGTH = 4k /\* 4KB BACKUP SRAM D3 *\/ */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x400; + +SECTIONS +{ + .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 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__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = 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) + } > RAM + __bss_end = .; + + _end = .; + + /* 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) } +} From 813c5ce281893a0b7f7150b5a382ed56567f0910 Mon Sep 17 00:00:00 2001 From: sf sgwsres <2909609346@qq.com> Date: Mon, 3 Nov 2025 19:18:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?refactor(bsp):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=86=97=E4=BD=99=E7=9A=84SOC=5FSTM32H723ZGT6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32h723-lxb-disco/board/Kconfig | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bsp/stm32/stm32h723-lxb-disco/board/Kconfig b/bsp/stm32/stm32h723-lxb-disco/board/Kconfig index 7960d97866e..737e3010b7c 100644 --- a/bsp/stm32/stm32h723-lxb-disco/board/Kconfig +++ b/bsp/stm32/stm32h723-lxb-disco/board/Kconfig @@ -1,8 +1,4 @@ menu "Hardware Drivers Config" - config SCO_STM32H723ZGT6 - bool - select SOC_SERIES_STM32H7 - default y menu "Onboard Peripheral Drivers"

Sj6l_}(Y-LD}P6d}3=IWcYY^Zb#*f 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%0Au$oIbHd1D+5+evDAFHuL)D)G9LWsci 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%0D&rJ`}wq^9c83G!}M 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 literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32h723-lxb-disco/project.uvoptx b/bsp/stm32/stm32h723-lxb-disco/project.uvoptx new file mode 100644 index 00000000000..dd173e641b8 --- /dev/null +++ b/bsp/stm32/stm32h723-lxb-disco/project.uvoptx @@ -0,0 +1,1207 @@ + + + + 1.0 + +