From 9c4fb3c3cb38c02de6d4d18c0a4c0a7968579a82 Mon Sep 17 00:00:00 2001 From: hywing Date: Tue, 26 May 2026 16:19:43 +0800 Subject: [PATCH 1/4] [bsp][stm32] add a new bsp for MCU STM32F407ZET6 --- .github/ALL_BSP_COMPILE.json | 1 + bsp/stm32/stm32f407-industrial-board/.config | 1461 +++++++++ .../stm32f407-industrial-board/.gitignore | 42 + bsp/stm32/stm32f407-industrial-board/Kconfig | 15 + .../stm32f407-industrial-board/README.md | 107 + .../stm32f407-industrial-board/SConscript | 15 + .../stm32f407-industrial-board/SConstruct | 76 + .../applications/SConscript | 15 + .../applications/main.c | 84 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 136 + .../board/CubeMX_Config/Inc/main.h | 69 + .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 495 +++ .../board/CubeMX_Config/Inc/stm32f4xx_it.h | 66 + .../board/CubeMX_Config/Src/main.c | 281 ++ .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 205 ++ .../board/CubeMX_Config/Src/stm32f4xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32f4xx.c | 747 +++++ .../board/CubeMX_Config/generate.script | 3 + .../stm32f407-industrial-board/board/Kconfig | 52 + .../board/SConscript | 25 + .../stm32f407-industrial-board/board/board.c | 54 + .../stm32f407-industrial-board/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 15 + .../figures/board.jpg | Bin 0 -> 270737 bytes .../stm32f407-industrial-board/project.ewd | 2834 +++++++++++++++++ .../stm32f407-industrial-board/project.ewp | 2391 ++++++++++++++ .../stm32f407-industrial-board/project.eww | 10 + .../stm32f407-industrial-board/project.uvoptx | 1205 +++++++ .../stm32f407-industrial-board/project.uvproj | 2218 +++++++++++++ .../project.uvprojx | 2302 +++++++++++++ .../stm32f407-industrial-board/rtconfig.h | 435 +++ .../stm32f407-industrial-board/rtconfig.py | 185 ++ .../stm32f407-industrial-board/template.ewp | 2031 ++++++++++++ .../stm32f407-industrial-board/template.eww | 10 + .../stm32f407-industrial-board/template.uvopt | 162 + .../template.uvoptx | 197 ++ .../template.uvproj | 407 +++ .../template.uvprojx | 396 +++ 41 files changed, 19199 insertions(+) create mode 100644 bsp/stm32/stm32f407-industrial-board/.config create mode 100644 bsp/stm32/stm32f407-industrial-board/.gitignore create mode 100644 bsp/stm32/stm32f407-industrial-board/Kconfig create mode 100644 bsp/stm32/stm32f407-industrial-board/README.md create mode 100644 bsp/stm32/stm32f407-industrial-board/SConscript create mode 100644 bsp/stm32/stm32f407-industrial-board/SConstruct create mode 100644 bsp/stm32/stm32f407-industrial-board/applications/SConscript create mode 100644 bsp/stm32/stm32f407-industrial-board/applications/main.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_it.h create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_it.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/system_stm32f4xx.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/generate.script create mode 100644 bsp/stm32/stm32f407-industrial-board/board/Kconfig create mode 100644 bsp/stm32/stm32f407-industrial-board/board/SConscript create mode 100644 bsp/stm32/stm32f407-industrial-board/board/board.c create mode 100644 bsp/stm32/stm32f407-industrial-board/board/board.h create mode 100644 bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f407-industrial-board/figures/board.jpg create mode 100644 bsp/stm32/stm32f407-industrial-board/project.ewd create mode 100644 bsp/stm32/stm32f407-industrial-board/project.ewp create mode 100644 bsp/stm32/stm32f407-industrial-board/project.eww create mode 100644 bsp/stm32/stm32f407-industrial-board/project.uvoptx create mode 100644 bsp/stm32/stm32f407-industrial-board/project.uvproj create mode 100644 bsp/stm32/stm32f407-industrial-board/project.uvprojx create mode 100644 bsp/stm32/stm32f407-industrial-board/rtconfig.h create mode 100644 bsp/stm32/stm32f407-industrial-board/rtconfig.py create mode 100644 bsp/stm32/stm32f407-industrial-board/template.ewp create mode 100644 bsp/stm32/stm32f407-industrial-board/template.eww create mode 100644 bsp/stm32/stm32f407-industrial-board/template.uvopt create mode 100644 bsp/stm32/stm32f407-industrial-board/template.uvoptx create mode 100644 bsp/stm32/stm32f407-industrial-board/template.uvproj create mode 100644 bsp/stm32/stm32f407-industrial-board/template.uvprojx diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json index 9b19f85effd..e6dbc1085e8 100644 --- a/.github/ALL_BSP_COMPILE.json +++ b/.github/ALL_BSP_COMPILE.json @@ -162,6 +162,7 @@ "stm32/stm32f407-robomaster-c", "stm32/stm32f407-st-discovery", "stm32/stm32f407-micu", + "stm32/stm32f407-industrial-board", "stm32/stm32f410-st-nucleo", "stm32/stm32f411-st-nucleo", "stm32/stm32f411-atk-nano", diff --git a/bsp/stm32/stm32f407-industrial-board/.config b/bsp/stm32/stm32f407-industrial-board/.config new file mode 100644 index 00000000000..ddc7982c536 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/.config @@ -0,0 +1,1461 @@ + +# +# 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=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y +CONFIG_RT_VER_NUM=0x50300 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_RT_USING_HW_ATOMIC=y +CONFIG_ARCH_USING_HW_ATOMIC_8=y +CONFIG_ARCH_USING_HW_ATOMIC_16=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=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=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_SERIAL_BYPASS is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_CLOCK_TIME 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=y +CONFIG_RT_HWCRYPTO_DEFAULT_NAME="hwcryto" +CONFIG_RT_HWCRYPTO_IV_MAX_SIZE=16 +CONFIG_RT_HWCRYPTO_KEYBIT_MAX_SIZE=256 +# CONFIG_RT_HWCRYPTO_USING_GCM is not set +# CONFIG_RT_HWCRYPTO_USING_AES is not set +# CONFIG_RT_HWCRYPTO_USING_DES is not set +# CONFIG_RT_HWCRYPTO_USING_3DES is not set +# CONFIG_RT_HWCRYPTO_USING_RC4 is not set +# CONFIG_RT_HWCRYPTO_USING_MD5 is not set +# CONFIG_RT_HWCRYPTO_USING_SHA1 is not set +# CONFIG_RT_HWCRYPTO_USING_SHA2 is not set +CONFIG_RT_HWCRYPTO_USING_RNG=y +# CONFIG_RT_HWCRYPTO_USING_CRC is not set +# CONFIG_RT_HWCRYPTO_USING_BIGNUM is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_RPMSG is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_REGULATOR is not set +# CONFIG_RT_USING_POWER_SUPPLY is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# 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 + +# +# 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 +# CONFIG_RT_USING_RUST 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 +# CONFIG_PKG_USING_RT_TUNNEL is not set +# CONFIG_PKG_USING_VIRTUAL_TERMINAL 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=y +CONFIG_PKG_STM32F4_HAL_DRIVER_PATH="/packages/peripherals/hal-sdk/stm32/stm32f4_hal_driver" +CONFIG_PKG_USING_STM32F4_HAL_DRIVER_LATEST_VERSION=y +CONFIG_PKG_STM32F4_HAL_DRIVER_VER="latest" +CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER=y +CONFIG_PKG_STM32F4_CMSIS_DRIVER_PATH="/packages/peripherals/hal-sdk/stm32/stm32f4_cmsis_driver" +CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER_LATEST_VERSION=y +CONFIG_PKG_STM32F4_CMSIS_DRIVER_VER="latest" +# 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 is not set +# CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER is not set +# 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 +# CONFIG_PKG_USING_GD32_RISCV_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_MLX90384 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_MLX90396 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_ISOTP_C 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_STM32F4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F407ZE=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_VIRTUAL_USART=y +# end of Onboard Peripheral Drivers + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_STM32_UART_V1_TX_TIMEOUT=2000 +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set +# end of On-chip Peripheral Drivers +# end of Hardware Drivers Config diff --git a/bsp/stm32/stm32f407-industrial-board/.gitignore b/bsp/stm32/stm32f407-industrial-board/.gitignore new file mode 100644 index 00000000000..7221bde019d --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/.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/stm32f407-industrial-board/Kconfig b/bsp/stm32/stm32f407-industrial-board/Kconfig new file mode 100644 index 00000000000..671f7231ee5 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/Kconfig @@ -0,0 +1,15 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +PKGS_DIR := packages + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" + +if !RT_USING_NANO +rsource "board/Kconfig" +endif diff --git a/bsp/stm32/stm32f407-industrial-board/README.md b/bsp/stm32/stm32f407-industrial-board/README.md new file mode 100644 index 00000000000..e16934ff393 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/README.md @@ -0,0 +1,107 @@ +# STM32F407-Industrial-Board 开发板 BSP 说明 + +## 简介 + +本文档为 **工控F407迷你板**(本仓库 `stm32f407-industrial-board` BSP)的使用说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节,可将 RT-Thread 运行在开发板上;进阶章节介绍如何通过 ENV / CubeMX 扩展更多外设。 + +## 开发板介绍 + +本 BSP 面向 **STM32F407ZET6**(LQFP144,512 KB Flash,192 KB SRAM)。支持 SWD 下载与 USB 虚拟串口。板上还预留外部 SPI Flash、TF 卡座及温湿度、姿态等传感器接口)。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F407ZET6,主频 168 MHz,512 KB Flash,192 KB SRAM +- 调试 / 串口:SWD + USB 转串口 +- LED:LED1(PF10)、LED2(PF9) +- 按键:KEY0(PA0)、KEY1(PE4) +- 其它:TF 卡槽、传感器接口等 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------- | :----------: | :------- | +| DAPLink 虚拟串口 | 支持 | USART1:PB6 (TX)、PB7 (RX),115200-8-1-N,控制台设备 `uart1` | +| LED | 支持 | PF10、PF9中交替闪烁 | +| 按键 | 支持 | KEY0 PA0(上升沿)、KEY1 PE4(下降沿),中断打印演示 | + +## 使用说明 + +使用说明分为如下两个章节: + +- **快速上手**:面向初次使用 RT-Thread 的开发者。 +- **进阶使用**:通过 ENV、CubeMX 启用更多外设。 + +### 快速上手 + +本 BSP 提供 MDK5 工程,并支持通过 `scons` 生成 GCC / IAR 工程。以下以 MDK5 为例。 + +**请注意!!!** + +编译前请在 BSP 目录打开 ENV,执行(用于拉取 HAL / CMSIS 等软件包,否则无法编译): + +```bash +pkgs --update +``` + +#### 硬件连接 + +使用 ST-Link 连接开发板与 PC(供电、下载或CH340G)。 + +#### 编译下载 + +双击 `project.uvprojx` 打开 MDK5 工程,编译并下载。 + +#### 运行结果 + +下载成功后程序自动运行:**LED1 / LED2 约 2 Hz 交替闪烁**;按下 KEY0 / KEY1 可在串口看到按键提示。 + +PC 端打开对应 COM 口(**115200-8-1-N**),复位后可见 RT-Thread 启动信息,例如: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.x.x build ... + 2006 - 2024 Copyright by rt-thread team +Hello RT-Thread! +msh > +``` + +### 进阶使用 + +默认仅开启 **GPIO** 与 **UART1**。若需 SD 卡、外部 Flash、更多串口等: + +1. 在 BSP 目录打开 ENV。 +2. 执行 `menuconfig` 配置并保存。 +3. 执行 `pkgs --update` 更新软件包。 +4. 执行 `scons --target=mdk5`(或 `mdk4` / `iar`)重新生成工程。 + +更多说明请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +**调试串口(USART1)引脚** + +| 信号 | 引脚 | +| ---- | ---- | +| TX | PB6 | +| RX | PB7 | + +## 联系人信息 + +维护人: + +- [hywing](https://github.com/hywing) diff --git a/bsp/stm32/stm32f407-industrial-board/SConscript b/bsp/stm32/stm32f407-industrial-board/SConscript new file mode 100644 index 00000000000..20f7689c53c --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f407-industrial-board/SConstruct b/bsp/stm32/stm32f407-industrial-board/SConstruct new file mode 100644 index 00000000000..10a480fba8a --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/SConstruct @@ -0,0 +1,76 @@ +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", "stm32f4_cmsis_driver-latest"), + os.path.join("packages", "stm32f4_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)) + +#objs.extend(SConscript(os.path.join(os.getcwd(), 'board', 'ports', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f407-industrial-board/applications/SConscript b/bsp/stm32/stm32f407-industrial-board/applications/SConscript new file mode 100644 index 00000000000..9bb9abae897 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/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/stm32f407-industrial-board/applications/main.c b/bsp/stm32/stm32f407-industrial-board/applications/main.c new file mode 100644 index 00000000000..ad2b7155886 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/applications/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2006-2026 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-5-26 hywing first version + */ + +#include +#include +#include + +/* defined the LED1 pin: PC1 */ +#define LED1_PIN GET_PIN(F, 10) +/* defined the LED2 pin: PC0 */ +#define LED2_PIN GET_PIN(F, 9) + +#define KEY0_PIN GET_PIN(A, 0) +#define KEY1_PIN GET_PIN(E, 4) +#define KEY_DEBOUNCE_MS 200 + +static rt_tick_t key0_last_tick = 0; +static rt_tick_t key1_last_tick = 0; + +static void key0_irq_callback(void *arg) +{ + RT_UNUSED(arg); + + if (rt_tick_get() - key0_last_tick < rt_tick_from_millisecond(KEY_DEBOUNCE_MS)) + { + return; + } + + if (rt_pin_read(KEY0_PIN) == PIN_HIGH) + { + key0_last_tick = rt_tick_get(); + rt_kprintf("KEY0 pressed!\r\n"); + } +} + +static void key1_irq_callback(void *arg) +{ + RT_UNUSED(arg); + + if (rt_tick_get() - key1_last_tick < rt_tick_from_millisecond(KEY_DEBOUNCE_MS)) + { + return; + } + + if (rt_pin_read(KEY1_PIN) == PIN_LOW) + { + key1_last_tick = rt_tick_get(); + rt_kprintf("KEY1 pressed!\r\n"); + } +} + +int main(void) +{ + /* set LED pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + /* KEY0: pull-down + rising edge; KEY1: pull-up + falling edge (active low) */ + rt_pin_attach_irq(KEY0_PIN, PIN_IRQ_MODE_RISING, key0_irq_callback, RT_NULL); + rt_pin_attach_irq(KEY1_PIN, PIN_IRQ_MODE_FALLING, key1_irq_callback, RT_NULL); + rt_pin_irq_enable(KEY0_PIN, PIN_IRQ_ENABLE); + rt_pin_irq_enable(KEY1_PIN, PIN_IRQ_ENABLE); + + rt_kprintf("Hello RT-Thread!\r\n"); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_LOW); + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(250); + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(250); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/.mxproject new file mode 100644 index 00000000000..72504f9226a --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rtc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rtc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f407xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Drivers\CMSIS\Include\cachel1_armv7.h;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_cm55.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_cm85.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\core_starmc1.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\pac_armv81.h;Drivers\CMSIS\Include\pmu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\\Src\system_stm32f4xx.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\\Src\system_stm32f4xx.c;;; +HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32F407xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +HeaderPath=..\Inc +HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h; +SourcePath=..\Src +SourceFiles=stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c; + diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 00000000000..d7f4bddb083 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,136 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32F407ZET6 +Mcu.Family=STM32F4 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=RTC +Mcu.IP3=SYS +Mcu.IP4=USART1 +Mcu.IPNb=5 +Mcu.Name=STM32F407Z(E-G)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=PH0-OSC_IN +Mcu.Pin3=PH1-OSC_OUT +Mcu.Pin4=PA13 +Mcu.Pin5=PA14 +Mcu.Pin6=PB6 +Mcu.Pin7=PB7 +Mcu.Pin8=VP_RTC_VS_RTC_Activate +Mcu.Pin9=VP_SYS_VS_Systick +Mcu.PinsNb=10 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407ZETx +MxCube.Version=6.12.1 +MxDb.Version=DB.6.0.121 +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 +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PB6.Locked=true +PB6.Mode=Asynchronous +PB6.Signal=USART1_TX +PB7.Locked=true +PB7.Mode=Asynchronous +PB7.Signal=USART1_RX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F407ZETx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.3 +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 +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_USART1_UART_Init-USART1-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true +RCC.48MHZClocksFreq_Value=48000000 +RCC.AHBFreq_Value=168000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=168000000 +RCC.CortexFreq_Value=168000000 +RCC.EthernetFreq_Value=168000000 +RCC.FCLKCortexFreq_Value=168000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=168000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=192000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=168000000 +RCC.PLLCLKFreq_Value=168000000 +RCC.PLLM=4 +RCC.PLLN=168 +RCC.PLLQ=7 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE +RCC.RCC_RTC_Clock_SourceVirtual=RCC_RTCCLKSOURCE_LSE +RCC.RTCFreq_Value=32768 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=168000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VcooutputI2S=192000000 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled +VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/main.h new file mode 100644 index 00000000000..9e6ffde782c --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,69 @@ +/* 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 "stm32f4xx_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 -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 00000000000..4c14483c6cb --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,495 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f4xx_hal_conf.h. + ****************************************************************************** + * @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 __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_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_CRYP_MODULE_ENABLED */ +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CAN_LEGACY_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_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_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_SPI_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_SMBUS_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_FMPSMBUS_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## HSE/HSI 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 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @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 ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 32000U /*!< 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 Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @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 12288000U /*!< Value of the External audio frequency 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 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC 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_ETH_REGISTER_CALLBACKS 0U /* ETH 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_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ +#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS 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_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC 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_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD 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_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM 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_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 */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_ETH_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_eth_legacy.h" +#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_FMPSMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_fmpsmbus.h" +#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_hal_mmc.h" +#endif /* HAL_MMC_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 /* __STM32F4xx_HAL_CONF_H */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_it.h b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_it.h new file mode 100644 index 00000000000..650c3f72ed3 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Inc/stm32f4xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_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 __STM32F4xx_IT_H +#define __STM32F4xx_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 /* __STM32F4xx_IT_H */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/main.c new file mode 100644 index 00000000000..a88c4538835 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/main.c @@ -0,0 +1,281 @@ +/* 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 ---------------------------------------------------------*/ +RTC_HandleTypeDef hrtc; + +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +static void MX_RTC_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_USART1_UART_Init(); + MX_RTC_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}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 4; + RCC_OscInitStruct.PLL.PLLN = 168; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 7; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief RTC Initialization Function + * @param None + * @retval None + */ +static void MX_RTC_Init(void) +{ + + /* USER CODE BEGIN RTC_Init 0 */ + + /* USER CODE END RTC_Init 0 */ + + /* USER CODE BEGIN RTC_Init 1 */ + + /* USER CODE END RTC_Init 1 */ + + /** Initialize RTC Only + */ + hrtc.Instance = RTC; + hrtc.Init.HourFormat = RTC_HOURFORMAT_24; + hrtc.Init.AsynchPrediv = 127; + hrtc.Init.SynchPrediv = 255; + hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; + hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; + hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; + if (HAL_RTC_Init(&hrtc) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN RTC_Init 2 */ + + /* USER CODE END RTC_Init 2 */ + +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ +/* USER CODE BEGIN MX_GPIO_Init_1 */ + +/* USER CODE END MX_GPIO_Init_1 */ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + +/* 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/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c new file mode 100644 index 00000000000..2e3658740d4 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,205 @@ + +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_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(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief RTC MSP Initialization +* This function configures the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_RTC_ENABLE(); + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + + } + +} + +/** +* @brief RTC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) +{ + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ + } + +} + +/** +* @brief 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}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB6 ------> USART1_TX + PB7 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PB6 ------> USART1_TX + PB7 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_it.c b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_it.c new file mode 100644 index 00000000000..bc9c66cd46f --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/stm32f4xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_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 "stm32f4xx_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-M4 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 */ +} + +/******************************************************************************/ +/* STM32F4xx 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_stm32f4xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/system_stm32f4xx.c b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/system_stm32f4xx.c new file mode 100644 index 00000000000..c7071c0642c --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/Src/system_stm32f4xx.c @@ -0,0 +1,747 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), 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 stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/* 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 or 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) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#if !defined(VECT_TAB_OFFSET) +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_OFFSET */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_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 = 16000000; +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* 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 SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) 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 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 HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), 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 tmp, pllvco, pllp, pllsource, pllm; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/generate.script b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/generate.script new file mode 100644 index 00000000000..c167f085bcf --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/CubeMX_Config/generate.script @@ -0,0 +1,3 @@ +config load CubeMX_Config.ioc +project generate +exit diff --git a/bsp/stm32/stm32f407-industrial-board/board/Kconfig b/bsp/stm32/stm32f407-industrial-board/board/Kconfig new file mode 100644 index 00000000000..57a9b806de8 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/Kconfig @@ -0,0 +1,52 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F407ZE + bool + select SOC_SERIES_STM32F4 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_VIRTUAL_USART + bool "Enable DAPLink USB-to-USART1 virtual port" + select BSP_USING_UART + select BSP_USING_UART1 + default y +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 + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_STM32_UART_V1_TX_TIMEOUT + int "UART TX timeout" + default 2000 + depends on RT_USING_SERIAL_V1 + + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + + source "$(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig" + +endmenu + + +endmenu \ No newline at end of file diff --git a/bsp/stm32/stm32f407-industrial-board/board/SConscript b/bsp/stm32/stm32f407-industrial-board/board/SConscript new file mode 100644 index 00000000000..cfb071f000d --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/SConscript @@ -0,0 +1,25 @@ +import os +from building import * + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f4xx_hal_msp.c +''') +path = [cwd] +path += [os.path.join(cwd, 'CubeMX_Config', 'Inc')] + +CPPDEFINES = ['STM32F407xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +# if os.path.isfile(os.path.join(cwd, "ports", 'SConscript')): +# group = group + SConscript(os.path.join("ports", 'SConscript')) + +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/stm32f407-industrial-board/board/board.c b/bsp/stm32/stm32f407-industrial-board/board/board.c new file mode 100644 index 00000000000..553b73f9eff --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/board.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2006-2026 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" +#include "drv_common.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /** 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_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 168; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f407-industrial-board/board/board.h b/bsp/stm32/stm32f407-industrial-board/board/board.h new file mode 100644 index 00000000000..26da84ad5b9 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2026 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-11-08 Dailingxiang 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_ADDRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (512 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADDRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE 128 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__ARMCC_VERSION) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$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/stm32f407-industrial-board/board/linker_scripts/link.icf b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.icf new file mode 100644 index 00000000000..4274ac64e6c --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds new file mode 100644 index 00000000000..0d86da80273 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * 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 = 512k /* 512KB flash */ + RAM1(rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ +} +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) } +} diff --git a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.sct b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.sct new file mode 100644 index 00000000000..5d1e3e6c008 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f407-industrial-board/figures/board.jpg b/bsp/stm32/stm32f407-industrial-board/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3499930e0be42247b107a84444bbde8cc5b2bf1b GIT binary patch literal 270737 zcmbUIcRX8v_&QTi-}6go|Bi9 zR+JVMQ-GdTR5`D9K}|wlLt8^t`<$wp>c4|9adL6-a`T?%bE@yA*Mgese6Vca&Zft78VheS2zoX zC_-Tx7d5rC4Xzp*8Jn1zA?@r@4vtP}FYoIG9jn^Dm*Nq6rhr`%7)<>uuV z6c!bi;H#=@2(@+f4ULc6J4l^f-91kRhh7YijE;>@P-dvJw7K~O`n%QlYwH`EAGWsl zzZ@JMef{?R$MHYAm;fyQV-{oiKZgBZ>=Izu#mvge!piZ_E+*!ijG0A%l}%cW{nQm( z4v$blnF|S=K>eJ`w&z^3>WI%E&#-B3Avx$f`Tc*U{b$+#Gs6=9KUwzwGwlCw7ahRM z!o+xZECPVbfJ2TfnMyw{Sgc6(bryB{e2$H&pJhNGFxvfV1%KSf;>dcp*-`9PI(Mv{ zCH4fCODnn4JqF3kx84RPP!a
    _wHhdw?Exn-;>l1T1{ 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

    q9sPe{vYhbWN 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 Ju; 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 L>vqp + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f407-industrial-board/project.ewp b/bsp/stm32/stm32f407-industrial-board/project.ewp new file mode 100644 index 00000000000..362516a14d9 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/project.ewp @@ -0,0 +1,2391 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + CMSIS-Core + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cunistd.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\core\device.c + + + $PROJ_DIR$\..\..\..\components\drivers\hwcrypto\hw_rng.c + + + $PROJ_DIR$\..\..\..\components\drivers\hwcrypto\hwcrypto.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_comm.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_up.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\condvar.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\pin\dev_pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\dev_serial.c + + + + Drivers + + $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_crypto.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + $PROJ_DIR$\board\board.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu_up.c + + + $PROJ_DIR$\..\..\..\src\defunct.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler_comm.c + + + $PROJ_DIR$\..\..\..\src\scheduler_up.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + klibc + + $PROJ_DIR$\..\..\..\src\klibc\kerrno.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstring.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstdio.c + + + $PROJ_DIR$\..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + $PROJ_DIR$\..\..\..\src\klibc\rt_vsscanf.c + + + + libcpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\atomic_arm.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + POSIX + + + STM32F4-CMSIS + + $PROJ_DIR$\packages\stm32f4_cmsis_driver-latest\Source\Templates\iar\startup_stm32f407xx.s + + + $PROJ_DIR$\packages\stm32f4_cmsis_driver-latest\Source\Templates\system_stm32f4xx.c + + + + STM32F4-HAL + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp_ex.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rng.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_crc.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_gpio.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc_ex.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_usart.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cec.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr_ex.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_uart.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cortex.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma_ex.c + + + $PROJ_DIR$\packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal.c + + + + utc_UTest + + + utestcases + + diff --git a/bsp/stm32/stm32f407-industrial-board/project.eww b/bsp/stm32/stm32f407-industrial-board/project.eww new file mode 100644 index 00000000000..c2cb02eb1e8 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f407-industrial-board/project.uvoptx b/bsp/stm32/stm32f407-industrial-board/project.uvoptx new file mode 100644 index 00000000000..1c4101814d0 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/project.uvoptx @@ -0,0 +1,1205 @@ + + + + 1.0 + +

    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 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 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -UE1007200D0D2139393740544 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_512 -FL080000 -FS08000000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + CMSIS_AGDI + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_512 -FL080000 -FS08000000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 1 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 5 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\core\device.c + device.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\hwcrypto\hw_rng.c + hw_rng.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\hwcrypto\hwcrypto.c + hwcrypto.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_comm.c + completion_comm.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_up.c + completion_up.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\condvar.c + condvar.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\pin\dev_pin.c + dev_pin.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\dev_serial.c + dev_serial.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 4 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_crypto.c + drv_crypto.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_dma.c + drv_dma.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + stm32f4xx_hal_msp.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.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\msh_parse.c + msh_parse.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Libc + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cunistd.c + cunistd.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c + 0 + 0 + + + + + STM32F4-CMSIS + 0 + 0 + 0 + 0 + + 8 + 60 + 1 + 0 + 0 + 0 + packages\stm32f4_cmsis_driver-latest\Source\Templates\system_stm32f4xx.c + system_stm32f4xx.c + 0 + 0 + + + 8 + 61 + 2 + 0 + 0 + 0 + packages\stm32f4_cmsis_driver-latest\Source\Templates\arm\startup_stm32f407xx.s + startup_stm32f407xx.s + 0 + 0 + + + + + STM32F4-HAL + 0 + 0 + 0 + 0 + + 9 + 62 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal.c + stm32f4xx_hal.c + 0 + 0 + + + 9 + 63 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cec.c + stm32f4xx_hal_cec.c + 0 + 0 + + + 9 + 64 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cortex.c + stm32f4xx_hal_cortex.c + 0 + 0 + + + 9 + 65 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_crc.c + stm32f4xx_hal_crc.c + 0 + 0 + + + 9 + 66 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp.c + stm32f4xx_hal_cryp.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp_ex.c + stm32f4xx_hal_cryp_ex.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma.c + stm32f4xx_hal_dma.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma_ex.c + stm32f4xx_hal_dma_ex.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr.c + stm32f4xx_hal_pwr.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr_ex.c + stm32f4xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc.c + stm32f4xx_hal_rcc.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc_ex.c + stm32f4xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rng.c + stm32f4xx_hal_rng.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_gpio.c + stm32f4xx_hal_gpio.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_uart.c + stm32f4xx_hal_uart.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_usart.c + stm32f4xx_hal_usart.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32f407-industrial-board/project.uvproj b/bsp/stm32/stm32f407-industrial-board/project.uvproj new file mode 100644 index 00000000000..82ee40c2540 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/project.uvproj @@ -0,0 +1,2218 @@ + + + + 1.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 0 + + + STM32F407VE + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\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 + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 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 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + __RTTHREAD__, USE_HAL_DRIVER, RT_USING_ARMLIBC, STM32F407xx, __STDC_LIMIT_MACROS, RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND + + ..\..\..\include;..\..\..\components\libc\compilers\common\extension\fcntl\octal;.;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\eventfd;packages\stm32f4_hal_driver-latest\Inc;..\..\..\components\drivers\include;..\libraries\HAL_Drivers;packages\stm32f4_cmsis_driver-latest\Include;..\libraries\HAL_Drivers\drivers;..\..\..\components\drivers\smp_call;..\libraries\HAL_Drivers\drivers\config;..\..\..\libcpu\arm\common;..\..\..\components\libc\posix\io\poll;packages\stm32f4_hal_driver-latest\Inc\Legacy;applications;..\..\..\components\libc\compilers\common\include;..\..\..\components\libc\posix\ipc;..\..\..\components\libc\compilers\common\extension;..\..\..\components\drivers\include;..\..\..\components\finsh;board\CubeMX_Config\Inc;..\..\..\components\drivers\include;..\..\..\components\drivers\include;packages\CMSIS-Core-latest\Include;..\..\..\components\drivers\phy;..\..\..\libcpu\arm\cortex-m4;board;..\..\..\components\libc\posix\io\epoll + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 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 + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + board.c + 1 + board\board.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + components.c + 1 + ..\..\..\src\components.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + cpu_up.c + 1 + ..\..\..\src\cpu_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + defunct.c + 1 + ..\..\..\src\defunct.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + object.c + 1 + ..\..\..\src\object.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_comm.c + 1 + ..\..\..\src\scheduler_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_up.c + 1 + ..\..\..\src\scheduler_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + + + klibc + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.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-m4\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + STM32F4-CMSIS + + + system_stm32f4xx.c + 1 + packages\stm32f4_cmsis_driver-latest\Source\Templates\system_stm32f4xx.c + + + startup_stm32f407xx.s + 2 + packages\stm32f4_cmsis_driver-latest\Source\Templates\arm\startup_stm32f407xx.s + + + + + STM32F4-HAL + + + stm32f4xx_hal_cec.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cec.c + + + stm32f4xx_hal_pwr.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr.c + + + stm32f4xx_hal_pwr_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr_ex.c + + + stm32f4xx_hal_rcc_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc_ex.c + + + stm32f4xx_hal_rng.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rng.c + + + stm32f4xx_hal_rcc.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc.c + + + stm32f4xx_hal_crc.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_crc.c + + + stm32f4xx_hal_cryp_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp_ex.c + + + stm32f4xx_hal_usart.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_usart.c + + + stm32f4xx_hal_dma.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma.c + + + stm32f4xx_hal_cryp.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp.c + + + stm32f4xx_hal_uart.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_uart.c + + + stm32f4xx_hal_cortex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cortex.c + + + stm32f4xx_hal.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal.c + + + stm32f4xx_hal_dma_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma_ex.c + + + stm32f4xx_hal_gpio.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_gpio.c + + + + + + + +
    diff --git a/bsp/stm32/stm32f407-industrial-board/project.uvprojx b/bsp/stm32/stm32f407-industrial-board/project.uvprojx new file mode 100644 index 00000000000..1d46bc2c966 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/project.uvprojx @@ -0,0 +1,2302 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F407ZETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F407ZETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F407ZETx$CMSIS\SVD\STM32F40x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\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 + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 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 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + RT_USING_ARMLIBC, RT_USING_LIBC, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, STM32F407xx, USE_HAL_DRIVER, __RTTHREAD__ + + ..\libraries\HAL_Drivers;..\..\..\components\libc\posix\io\eventfd;..\..\..\components\drivers\smp_call;..\..\..\components\drivers\include;packages\stm32f4_cmsis_driver-latest\Include;..\..\..\components\drivers\phy;..\..\..\components\drivers\include;board\CubeMX_Config\Inc;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\libc\compilers\common\extension;applications;packages\CMSIS-Core-latest\Include;..\..\..\components\libc\compilers\common\include;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers;..\..\..\libcpu\arm\common;..\..\..\include;packages\stm32f4_hal_driver-latest\Inc;board;packages\stm32f4_hal_driver-latest\Inc\Legacy;.;..\..\..\components\drivers\include;..\..\..\components\libc\posix\ipc;..\..\..\components\net\utest;..\..\..\components\finsh;..\..\..\components\drivers\hwcrypto + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + 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-m4\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.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__ + + + + + + + + + hw_rng.c + 1 + ..\..\..\components\drivers\hwcrypto\hw_rng.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__ + + + + + + + + + hwcrypto.c + 1 + ..\..\..\components\drivers\hwcrypto\hwcrypto.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_crypto.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_crypto.c + + + drv_dma.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_dma.c + + + 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 + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + board.c + 1 + board\board.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.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__ + + + + + + + + + + + Libc + + + 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 + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + + + STM32F4-CMSIS + + + system_stm32f4xx.c + 1 + packages\stm32f4_cmsis_driver-latest\Source\Templates\system_stm32f4xx.c + + + startup_stm32f407xx.s + 2 + packages\stm32f4_cmsis_driver-latest\Source\Templates\arm\startup_stm32f407xx.s + + + + + STM32F4-HAL + + + stm32f4xx_hal.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal.c + + + stm32f4xx_hal_cec.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cec.c + + + stm32f4xx_hal_cortex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cortex.c + + + stm32f4xx_hal_crc.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_crc.c + + + stm32f4xx_hal_cryp.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp.c + + + stm32f4xx_hal_cryp_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_cryp_ex.c + + + stm32f4xx_hal_dma.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma.c + + + stm32f4xx_hal_dma_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_dma_ex.c + + + stm32f4xx_hal_pwr.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr.c + + + stm32f4xx_hal_pwr_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_pwr_ex.c + + + stm32f4xx_hal_rcc.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc.c + + + stm32f4xx_hal_rcc_ex.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rcc_ex.c + + + stm32f4xx_hal_rng.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_rng.c + + + stm32f4xx_hal_gpio.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_gpio.c + + + stm32f4xx_hal_uart.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_uart.c + + + stm32f4xx_hal_usart.c + 1 + packages\stm32f4_hal_driver-latest\Src\stm32f4xx_hal_usart.c + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f407-industrial-board/rtconfig.h b/bsp/stm32/stm32f407-industrial-board/rtconfig.h new file mode 100644 index 00000000000..95e3a05630f --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/rtconfig.h @@ -0,0 +1,435 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 8 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_USING_CONSOLE_OUTPUT_CTL +#define RT_VER_NUM 0x50300 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_HW_ATOMIC +#define ARCH_USING_HW_ATOMIC_8 +#define ARCH_USING_HW_ATOMIC_16 +#define RT_USING_CPU_FFS +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_HWCRYPTO +#define RT_HWCRYPTO_DEFAULT_NAME "hwcryto" +#define RT_HWCRYPTO_IV_MAX_SIZE 16 +#define RT_HWCRYPTO_KEYBIT_MAX_SIZE 256 +#define RT_HWCRYPTO_USING_RNG +#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_STM32F4_HAL_DRIVER +#define PKG_USING_STM32F4_HAL_DRIVER_LATEST_VERSION +#define PKG_USING_STM32F4_CMSIS_DRIVER +#define PKG_USING_STM32F4_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_STM32F4 + +/* Hardware Drivers Config */ + +#define SOC_STM32F407ZE + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_VIRTUAL_USART +/* end of Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_STM32_UART_V1_TX_TIMEOUT 2000 +#define BSP_USING_UART1 +/* end of On-chip Peripheral Drivers */ +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/stm32/stm32f407-industrial-board/rtconfig.py b/bsp/stm32/stm32f407-industrial-board/rtconfig.py new file mode 100644 index 00000000000..20d2c181a21 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/rtconfig.py @@ -0,0 +1,185 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = '' + # Example: set EXEC_PATH to your toolchain path, e.g. r'C:\Program Files\GNU Tools Arm Embedded\bin' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-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=rt-thread.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 + + 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-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + r' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.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-M4.fp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' + CFLAGS += ' -mcpu=cortex-m4 -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-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_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-M4' + AFLAGS += ' --fpu VFPv4_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/stm32f407-industrial-board/template.ewp b/bsp/stm32/stm32f407-industrial-board/template.ewp new file mode 100644 index 00000000000..21c66ca0d01 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.ewp @@ -0,0 +1,2031 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f407-industrial-board/template.eww b/bsp/stm32/stm32f407-industrial-board/template.eww new file mode 100644 index 00000000000..bd036bb4c98 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvopt b/bsp/stm32/stm32f407-industrial-board/template.uvopt new file mode 100644 index 00000000000..b53d69d5df5 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 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 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + + + + + 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 + + + + + + +
    diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvoptx b/bsp/stm32/stm32f407-industrial-board/template.uvoptx new file mode 100644 index 00000000000..ff26ab28816 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.uvoptx @@ -0,0 +1,197 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 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 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -UE1007200D0D2139393740544 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_512 -FL080000 -FS08000000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + CMSIS_AGDI + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_512 -FL080000 -FS08000000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.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 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvproj b/bsp/stm32/stm32f407-industrial-board/template.uvproj new file mode 100644 index 00000000000..6ca2a929536 --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + + + STM32F407ZG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 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 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvprojx b/bsp/stm32/stm32f407-industrial-board/template.uvprojx new file mode 100644 index 00000000000..6932090998f --- /dev/null +++ b/bsp/stm32/stm32f407-industrial-board/template.uvprojx @@ -0,0 +1,396 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F407ZETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F407ZETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F407ZETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F407ZETx$CMSIS\SVD\STM32F40x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\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 + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 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 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
    From 501982047990c51c6c593da75590abf4d8cb0eec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8B=E9=87=8C=E5=B7=B4=E4=BA=BA?= Date: Wed, 27 May 2026 15:56:50 +0800 Subject: [PATCH 2/4] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../stm32f407-industrial-board/board/linker_scripts/link.lds | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds index 0d86da80273..18df06bd748 100644 --- a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds @@ -7,7 +7,7 @@ MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ - RAM1(rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ + RAM(rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x400; From 32b9243af68e27227ff19ad2d086df2a0678b9ed Mon Sep 17 00:00:00 2001 From: hywing Date: Wed, 27 May 2026 16:17:28 +0800 Subject: [PATCH 3/4] [bsp][stm32] fix problems of BSP MCU STM32F407ZET6 --- .../stm32f407-industrial-board/applications/main.c | 6 ++++-- .../board/linker_scripts/link.lds | 2 +- bsp/stm32/stm32f407-industrial-board/project.uvoptx | 6 +++--- bsp/stm32/stm32f407-industrial-board/project.uvprojx | 4 ++-- bsp/stm32/stm32f407-industrial-board/template.uvopt | 4 ++-- bsp/stm32/stm32f407-industrial-board/template.uvproj | 12 ++++++------ 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/bsp/stm32/stm32f407-industrial-board/applications/main.c b/bsp/stm32/stm32f407-industrial-board/applications/main.c index ad2b7155886..6fc03eb7332 100644 --- a/bsp/stm32/stm32f407-industrial-board/applications/main.c +++ b/bsp/stm32/stm32f407-industrial-board/applications/main.c @@ -12,9 +12,9 @@ #include #include -/* defined the LED1 pin: PC1 */ +/* defined the LED1 pin: PF10 */ #define LED1_PIN GET_PIN(F, 10) -/* defined the LED2 pin: PC0 */ +/* defined the LED2 pin: PF9 */ #define LED2_PIN GET_PIN(F, 9) #define KEY0_PIN GET_PIN(A, 0) @@ -63,6 +63,8 @@ int main(void) rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); /* KEY0: pull-down + rising edge; KEY1: pull-up + falling edge (active low) */ + rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLDOWN); + rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY0_PIN, PIN_IRQ_MODE_RISING, key0_irq_callback, RT_NULL); rt_pin_attach_irq(KEY1_PIN, PIN_IRQ_MODE_FALLING, key1_irq_callback, RT_NULL); rt_pin_irq_enable(KEY0_PIN, PIN_IRQ_ENABLE); diff --git a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds index 18df06bd748..0d86da80273 100644 --- a/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32f407-industrial-board/board/linker_scripts/link.lds @@ -7,7 +7,7 @@ MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ - RAM(rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ + RAM1(rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x400; diff --git a/bsp/stm32/stm32f407-industrial-board/project.uvoptx b/bsp/stm32/stm32f407-industrial-board/project.uvoptx index 1c4101814d0..b5f7efc17d6 100644 --- a/bsp/stm32/stm32f407-industrial-board/project.uvoptx +++ b/bsp/stm32/stm32f407-industrial-board/project.uvoptx @@ -208,7 +208,7 @@ Applications - 0 + 1 0 0 0 @@ -228,7 +228,7 @@ CPU - 1 + 0 0 0 0 @@ -472,7 +472,7 @@ Drivers - 1 + 0 0 0 0 diff --git a/bsp/stm32/stm32f407-industrial-board/project.uvprojx b/bsp/stm32/stm32f407-industrial-board/project.uvprojx index 1d46bc2c966..c1182fab272 100644 --- a/bsp/stm32/stm32f407-industrial-board/project.uvprojx +++ b/bsp/stm32/stm32f407-industrial-board/project.uvprojx @@ -337,9 +337,9 @@ 0 - RT_USING_ARMLIBC, RT_USING_LIBC, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, STM32F407xx, USE_HAL_DRIVER, __RTTHREAD__ + RT_USING_ARMLIBC, RT_USING_LIBC, STM32F407xx, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND, USE_HAL_DRIVER, __STDC_LIMIT_MACROS - ..\libraries\HAL_Drivers;..\..\..\components\libc\posix\io\eventfd;..\..\..\components\drivers\smp_call;..\..\..\components\drivers\include;packages\stm32f4_cmsis_driver-latest\Include;..\..\..\components\drivers\phy;..\..\..\components\drivers\include;board\CubeMX_Config\Inc;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\libc\compilers\common\extension;applications;packages\CMSIS-Core-latest\Include;..\..\..\components\libc\compilers\common\include;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers;..\..\..\libcpu\arm\common;..\..\..\include;packages\stm32f4_hal_driver-latest\Inc;board;packages\stm32f4_hal_driver-latest\Inc\Legacy;.;..\..\..\components\drivers\include;..\..\..\components\libc\posix\ipc;..\..\..\components\net\utest;..\..\..\components\finsh;..\..\..\components\drivers\hwcrypto + .;..\..\..\components\libc\posix\io\eventfd;..\..\..\components\libc\posix\ipc;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\smp_call;..\..\..\components\finsh;packages\stm32f4_hal_driver-latest\Inc;packages\stm32f4_hal_driver-latest\Inc\Legacy;board\CubeMX_Config\Inc;..\..\..\components\libc\compilers\common\include;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\phy;packages\stm32f4_cmsis_driver-latest\Include;..\..\..\components\drivers\include;packages\CMSIS-Core-latest\Include;..\..\..\components\net\utest;..\..\..\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers\config;..\..\..\libcpu\arm\common;..\..\..\components\libc\compilers\common\extension;board;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\poll;applications;..\..\..\components\libc\posix\io\epoll;..\libraries\HAL_Drivers\drivers;..\..\..\libcpu\arm\cortex-m4;..\libraries\HAL_Drivers;..\..\..\components\drivers\include;..\..\..\components\drivers\hwcrypto diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvopt b/bsp/stm32/stm32f407-industrial-board/template.uvopt index b53d69d5df5..4a0fe4010d1 100644 --- a/bsp/stm32/stm32f407-industrial-board/template.uvopt +++ b/bsp/stm32/stm32f407-industrial-board/template.uvopt @@ -116,12 +116,12 @@ 0 JL2CM3 - -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 0 UL2CM3 - UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000) diff --git a/bsp/stm32/stm32f407-industrial-board/template.uvproj b/bsp/stm32/stm32f407-industrial-board/template.uvproj index 6ca2a929536..6e783795cfc 100644 --- a/bsp/stm32/stm32f407-industrial-board/template.uvproj +++ b/bsp/stm32/stm32f407-industrial-board/template.uvproj @@ -12,13 +12,13 @@ ARM-ADS - STM32F407ZG + STM32F407ZE STMicroelectronics - IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") - UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) - 6105 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000) + 6107 stm32f4xx.h @@ -282,7 +282,7 @@ 1 0x8000000 - 0x100000 + 0x80000 0 @@ -307,7 +307,7 @@ 1 0x8000000 - 0x100000 + 0x80000 1 From 95c84fbd84dd0477924bf1826d5f63f28d222a97 Mon Sep 17 00:00:00 2001 From: hywing Date: Wed, 27 May 2026 16:28:05 +0800 Subject: [PATCH 4/4] [bsp][stm32] fix problems of BSP MCU STM32F407ZET6 --- .github/ALL_BSP_COMPILE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json index e6dbc1085e8..edbe54602f0 100644 --- a/.github/ALL_BSP_COMPILE.json +++ b/.github/ALL_BSP_COMPILE.json @@ -162,7 +162,7 @@ "stm32/stm32f407-robomaster-c", "stm32/stm32f407-st-discovery", "stm32/stm32f407-micu", - "stm32/stm32f407-industrial-board", + "stm32/stm32f407-industrial-board", "stm32/stm32f410-st-nucleo", "stm32/stm32f411-st-nucleo", "stm32/stm32f411-atk-nano",