From 00ad3921e419e36070d2d3e41e491cdb80156d28 Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Wed, 1 Mar 2023 16:58:18 +0800 Subject: [PATCH] [STM32]Add STM32F723E-DISCO bsp support --- .github/workflows/action.yml | 1 + bsp/stm32/stm32f723-st-disco/.config | 732 ++++ bsp/stm32/stm32f723-st-disco/.gitignore | 42 + .../stm32f723-st-disco/EventRecorderStub.scvd | 9 + bsp/stm32/stm32f723-st-disco/Kconfig | 21 + bsp/stm32/stm32f723-st-disco/README.md | 105 + bsp/stm32/stm32f723-st-disco/SConscript | 15 + bsp/stm32/stm32f723-st-disco/SConstruct | 60 + .../applications/SConscript | 15 + .../stm32f723-st-disco/applications/main.c | 30 + .../board/.ignore_format.yml | 6 + .../board/CubeMX_Config/.mxproject | 23 + .../board/CubeMX_Config/CubeMX_Config.ioc | 136 + .../board/CubeMX_Config/Inc/main.h | 68 + .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 480 +++ .../board/CubeMX_Config/Inc/stm32f7xx_it.h | 66 + .../board/CubeMX_Config/Src/main.c | 275 ++ .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 157 + .../board/CubeMX_Config/Src/stm32f7xx_it.c | 203 ++ bsp/stm32/stm32f723-st-disco/board/Kconfig | 44 + bsp/stm32/stm32f723-st-disco/board/SConscript | 32 + bsp/stm32/stm32f723-st-disco/board/board.c | 64 + bsp/stm32/stm32f723-st-disco/board/board.h | 42 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 14 + .../stm32f723-st-disco/figures/board.png | Bin 0 -> 75383 bytes bsp/stm32/stm32f723-st-disco/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f723-st-disco/project.ewp | 2353 +++++++++++++ bsp/stm32/stm32f723-st-disco/project.eww | 10 + bsp/stm32/stm32f723-st-disco/project.uvoptx | 1132 +++++++ bsp/stm32/stm32f723-st-disco/project.uvprojx | 793 +++++ bsp/stm32/stm32f723-st-disco/rtconfig.h | 219 ++ bsp/stm32/stm32f723-st-disco/rtconfig.py | 188 ++ bsp/stm32/stm32f723-st-disco/template.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f723-st-disco/template.ewp | 2031 +++++++++++ bsp/stm32/stm32f723-st-disco/template.eww | 10 + bsp/stm32/stm32f723-st-disco/template.uvoptx | 192 ++ bsp/stm32/stm32f723-st-disco/template.uvprojx | 396 +++ 39 files changed, 16081 insertions(+) create mode 100644 bsp/stm32/stm32f723-st-disco/.config create mode 100644 bsp/stm32/stm32f723-st-disco/.gitignore create mode 100644 bsp/stm32/stm32f723-st-disco/EventRecorderStub.scvd create mode 100644 bsp/stm32/stm32f723-st-disco/Kconfig create mode 100644 bsp/stm32/stm32f723-st-disco/README.md create mode 100644 bsp/stm32/stm32f723-st-disco/SConscript create mode 100644 bsp/stm32/stm32f723-st-disco/SConstruct create mode 100644 bsp/stm32/stm32f723-st-disco/applications/SConscript create mode 100644 bsp/stm32/stm32f723-st-disco/applications/main.c create mode 100644 bsp/stm32/stm32f723-st-disco/board/.ignore_format.yml create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c create mode 100644 bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c create mode 100644 bsp/stm32/stm32f723-st-disco/board/Kconfig create mode 100644 bsp/stm32/stm32f723-st-disco/board/SConscript create mode 100644 bsp/stm32/stm32f723-st-disco/board/board.c create mode 100644 bsp/stm32/stm32f723-st-disco/board/board.h create mode 100644 bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f723-st-disco/figures/board.png create mode 100644 bsp/stm32/stm32f723-st-disco/project.ewd create mode 100644 bsp/stm32/stm32f723-st-disco/project.ewp create mode 100644 bsp/stm32/stm32f723-st-disco/project.eww create mode 100644 bsp/stm32/stm32f723-st-disco/project.uvoptx create mode 100644 bsp/stm32/stm32f723-st-disco/project.uvprojx create mode 100644 bsp/stm32/stm32f723-st-disco/rtconfig.h create mode 100644 bsp/stm32/stm32f723-st-disco/rtconfig.py create mode 100644 bsp/stm32/stm32f723-st-disco/template.ewd create mode 100644 bsp/stm32/stm32f723-st-disco/template.ewp create mode 100644 bsp/stm32/stm32f723-st-disco/template.eww create mode 100644 bsp/stm32/stm32f723-st-disco/template.uvoptx create mode 100644 bsp/stm32/stm32f723-st-disco/template.uvprojx diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index a15feed198..2b714458a3 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -168,6 +168,7 @@ jobs: - {RTT_BSP: "stm32/stm32f767-fire-challenger-v1", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f767-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f769-st-disco", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "stm32/stm32f723-st-disco", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32g070-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32g071-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32g431-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} diff --git a/bsp/stm32/stm32f723-st-disco/.config b/bsp/stm32/stm32f723-st-disco/.config new file mode 100644 index 0000000000..97fd2dcba9 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/.config @@ -0,0 +1,732 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_SMP is not set +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_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_KPRINTF_USING_LONGLONG is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_PAGE_MAX_ORDER=11 +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 + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart6" +CONFIG_RT_VER_NUM=0x50000 +CONFIG_RT_USING_CACHE=y +# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M7=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +# CONFIG_RT_USING_DFS is not set +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +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_CAN is not set +CONFIG_RT_USING_HWTIMER=y +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# 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_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_FDT is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_DEV_BUS is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_VIRTIO is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# C/C++ and POSIX layer +# +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# 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 +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# 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 + +# +# 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_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_VBUS is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LWIP is not set +# 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_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_EZ_IOT_OS is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# 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_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_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 + +# +# 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 + +# +# 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 + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX 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 + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set + +# +# 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_PKG_USING_FREERTOS_WRAPPER 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_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_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ESP_IDF is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK 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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_STM32WB55_SDK 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_BLUETRUM_SDK 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_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DIGITALCTRL 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_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Sensor libraries +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set + +# +# Display libraries +# +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set + +# +# Timing libraries +# +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set + +# +# Project libraries +# +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F7=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F723E=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_USART=y +# CONFIG_BSP_USING_SDRAM is not set + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART6=y +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f723-st-disco/.gitignore b/bsp/stm32/stm32f723-st-disco/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32f723-st-disco/EventRecorderStub.scvd b/bsp/stm32/stm32f723-st-disco/EventRecorderStub.scvd new file mode 100644 index 0000000000..2956b29683 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bsp/stm32/stm32f723-st-disco/Kconfig b/bsp/stm32/stm32f723-st-disco/Kconfig new file mode 100644 index 0000000000..79b160b856 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/stm32/stm32f723-st-disco/README.md b/bsp/stm32/stm32f723-st-disco/README.md new file mode 100644 index 0000000000..d064180137 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/README.md @@ -0,0 +1,105 @@ +# STM32F723E-disco 开发板 BSP 说明 + +## 简介 + +本文档是 STM32F723E-disco 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32F723E-disco 是 ST 推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为 216Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F723 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f723,主频 216MHz,512MB FLASH ,256KB RAM +- 常用外设 + - 按键:2个,Reset 和 User。 +- 调试接口,ST-LINK/V2-1 + +开发板更多详细信息请参考官网 [STM32F723E-disco 开发板介绍](https://www.st.com/en/evaluation-tools/32f723ediscovery.html)。 + +主芯片更多详细信息请参考官网 [STM32f723 芯片资料](https://www.st.com/zh/microcontrollers-microprocessors/stm32f723ie.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | UART6 | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 st-link 仿真器下载程序,在通过 st-link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,LED 闪烁。 + +连接开发板对应串口到 PC ,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.0.0 build Mar 1 2023 16:20:11 + 2006 - 2022 Copyright by RT-Thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口6 的功能,更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入 `menuconfig` 命令配置工程,配置好之后保存退出。 + +3. 输入 `pkgs --update` 命令更新软件包。 + +4. 输入 `scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: +- [Rbb666](https://github.com/Rbb666) diff --git a/bsp/stm32/stm32f723-st-disco/SConscript b/bsp/stm32/stm32f723-st-disco/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/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/stm32f723-st-disco/SConstruct b/bsp/stm32/stm32f723-st-disco/SConstruct new file mode 100644 index 0000000000..ada3672e5f --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32F7xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f723-st-disco/applications/SConscript b/bsp/stm32/stm32f723-st-disco/applications/SConscript new file mode 100644 index 0000000000..9bb9abae89 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/applications/SConscript @@ -0,0 +1,15 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git a/bsp/stm32/stm32f723-st-disco/applications/main.c b/bsp/stm32/stm32f723-st-disco/applications/main.c new file mode 100644 index 0000000000..c9e42eb048 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/applications/main.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-03-01 Rbb666 first version + */ + +#include +#include +#include + +/* defined the LED1 pin: PA7 */ +#define LED1_PIN GET_PIN(A, 7) + +int main(void) +{ + /* set LED1 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} diff --git a/bsp/stm32/stm32f723-st-disco/board/.ignore_format.yml b/bsp/stm32/stm32f723-st-disco/board/.ignore_format.yml new file mode 100644 index 0000000000..0d7f3e360c --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/.ignore_format.yml @@ -0,0 +1,6 @@ +# files format check exclude path, please follow the instructions below to modify; +# If you need to exclude an entire folder, add the folder path in dir_path; +# If you need to exclude a file, add the path to the file in file_path. + +dir_path: +- CubeMX_Config diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..c0822581fa --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/.mxproject @@ -0,0 +1,23 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Inc/stm32f7xx_it.h +HeaderFiles#1=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Inc/stm32f7xx_hal_conf.h +HeaderFiles#2=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Src/stm32f7xx_it.c +SourceFiles#1=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Src/stm32f7xx_hal_msp.c +SourceFiles#2=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=E:/workspace_work/rt-thread-5.0/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Core/Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f723xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c; + +[] +SourceFiles=;; + diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..4633a5423a --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,136 @@ +#MicroXplorer Configuration settings - do not modify +CORTEX_M7.IPParameters=default_mode_Activation +CORTEX_M7.default_mode_Activation=1 +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +Mcu.CPN=STM32F723IEK6 +Mcu.Family=STM32F7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SYS +Mcu.IP4=USART6 +Mcu.IPNb=5 +Mcu.Name=STM32F723I(C-E)Kx +Mcu.Package=UFBGA176 +Mcu.Pin0=PA14 +Mcu.Pin1=PA13 +Mcu.Pin2=PC7 +Mcu.Pin3=PC6 +Mcu.Pin4=VP_SYS_VS_Systick +Mcu.PinsNb=5 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F723IEKx +MxCube.Version=6.5.0 +MxDb.Version=DB.6.0.50 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PC6.Locked=true +PC6.Mode=Asynchronous +PC6.Signal=USART6_TX +PC7.Locked=true +PC7.Mode=Asynchronous +PC7.Signal=USART6_RX +PinOutPanel.CurrentBGAView=Top +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=STM32F723IEKx +ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.16.2 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V8.50 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort= +RCC.AHBFreq_Value=216000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=54000000 +RCC.APB1TimFreq_Value=108000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=108000000 +RCC.APB2TimFreq_Value=216000000 +RCC.CortexFreq_Value=216000000 +RCC.FCLKCortexFreq_Value=216000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=216000000 +RCC.HSE_VALUE=25000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=54000000 +RCC.I2C2Freq_Value=54000000 +RCC.I2C3Freq_Value=54000000 +RCC.I2SFreq_Value=192000000 +RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIoutputFreq_Value,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value +RCC.LPTIM1Freq_Value=54000000 +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=216000000 +RCC.PLLCLKFreq_Value=216000000 +RCC.PLLI2SQCLKFreq_Value=192000000 +RCC.PLLI2SRCLKFreq_Value=192000000 +RCC.PLLI2SRoutputFreq_Value=192000000 +RCC.PLLM=8 +RCC.PLLN=216 +RCC.PLLQCLKFreq_Value=216000000 +RCC.PLLQoutputFreq_Value=216000000 +RCC.PLLSAIPCLKFreq_Value=192000000 +RCC.PLLSAIQCLKFreq_Value=192000000 +RCC.PLLSAIoutputFreq_Value=192000000 +RCC.RNGFreq_Value=216000000 +RCC.SAI1Freq_Value=192000000 +RCC.SAI2Freq_Value=192000000 +RCC.SDMMC2Freq_Value=216000000 +RCC.SDMMCFreq_Value=216000000 +RCC.SYSCLKFreq_VALUE=216000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.UART4Freq_Value=54000000 +RCC.UART5Freq_Value=54000000 +RCC.UART7Freq_Value=54000000 +RCC.UART8Freq_Value=54000000 +RCC.USART1Freq_Value=108000000 +RCC.USART2Freq_Value=54000000 +RCC.USART3Freq_Value=54000000 +RCC.USART6Freq_Value=108000000 +RCC.USBFreq_Value=216000000 +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=432000000 +RCC.VCOSAIOutputFreq_Value=384000000 +USART6.IPParameters=VirtualMode-Asynchronous +USART6.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..6a3757ff96 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,68 @@ +/* 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) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_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/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h new file mode 100644 index 0000000000..e40ace2dc9 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -0,0 +1,480 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_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 stm32f7xx_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 __STM32F7xx_HAL_CONF_H +#define __STM32F7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_EXTI_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_I2C_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 ((uint32_t)25000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)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 ((uint32_t)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 ((uint32_t)32768U) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)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 ((uint32_t)12288000U) /*!< Value of the Internal oscillator 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 ((uint32_t)15U) /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 0U +#define ART_ACCLERATOR_ENABLE 0U /* To enable instruction cache and prefetch */ + +#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_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIOS 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_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 ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FFU) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU) + +#define PHY_READ_TO ((uint32_t)0x0000FFFFU) +#define PHY_WRITE_TO ((uint32_t)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)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< 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 "stm32f7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f7xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32f7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32f7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f7xx_hal_smbus.h" +#endif /* HAL_SMBUS_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 /* __STM32F7xx_HAL_CONF_H */ + diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h new file mode 100644 index 0000000000..b9d4f59f63 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F7xx_IT_H +#define __STM32F7xx_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 /* __STM32F7xx_IT_H */ diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..136aee8630 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/main.c @@ -0,0 +1,275 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +UART_HandleTypeDef huart6; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MPU_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART6_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MPU Configuration--------------------------------------------------------*/ + MPU_Config(); + + /* 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_USART6_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** 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 = 216; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != 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_7) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART6 Initialization Function + * @param None + * @retval None + */ +static void MX_USART6_UART_Init(void) +{ + + /* USER CODE BEGIN USART6_Init 0 */ + + /* USER CODE END USART6_Init 0 */ + + /* USER CODE BEGIN USART6_Init 1 */ + + /* USER CODE END USART6_Init 1 */ + huart6.Instance = USART6; + huart6.Init.BaudRate = 115200; + huart6.Init.WordLength = UART_WORDLENGTH_8B; + huart6.Init.StopBits = UART_STOPBITS_1; + huart6.Init.Parity = UART_PARITY_NONE; + huart6.Init.Mode = UART_MODE_TX_RX; + huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart6.Init.OverSampling = UART_OVERSAMPLING_16; + huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart6) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART6_Init 2 */ + + /* USER CODE END USART6_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/* MPU Configuration */ + +void MPU_Config(void) +{ + MPU_Region_InitTypeDef MPU_InitStruct = {0}; + + /* Disables the MPU */ + HAL_MPU_Disable(); + + /** Initializes and configures the Region and the memory to be protected + */ + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + MPU_InitStruct.Number = MPU_REGION_NUMBER0; + MPU_InitStruct.BaseAddress = 0x0; + MPU_InitStruct.Size = MPU_REGION_SIZE_4GB; + MPU_InitStruct.SubRegionDisable = 0x87; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; + MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + + HAL_MPU_ConfigRegion(&MPU_InitStruct); + /* Enables the MPU */ + HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); + +} + +/** + * @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/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c new file mode 100644 index 0000000000..e86367ae6b --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -0,0 +1,157 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#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_PWR_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(huart->Instance==USART6) + { + /* USER CODE BEGIN USART6_MspInit 0 */ + + /* USER CODE END USART6_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART6; + PeriphClkInitStruct.Usart6ClockSelection = RCC_USART6CLKSOURCE_PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART6_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**USART6 GPIO Configuration + PC7 ------> USART6_RX + PC6 ------> USART6_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_USART6; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* USER CODE BEGIN USART6_MspInit 1 */ + + /* USER CODE END USART6_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==USART6) + { + /* USER CODE BEGIN USART6_MspDeInit 0 */ + + /* USER CODE END USART6_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART6_CLK_DISABLE(); + + /**USART6 GPIO Configuration + PC7 ------> USART6_RX + PC6 ------> USART6_TX + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_7|GPIO_PIN_6); + + /* USER CODE BEGIN USART6_MspDeInit 1 */ + + /* USER CODE END USART6_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c new file mode 100644 index 0000000000..7048b35a7e --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f7xx_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-M7 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 */ +} + +/******************************************************************************/ +/* STM32F7xx 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_stm32f7xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f723-st-disco/board/Kconfig b/bsp/stm32/stm32f723-st-disco/board/Kconfig new file mode 100644 index 0000000000..be3f9ab747 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/Kconfig @@ -0,0 +1,44 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F723E + bool + select SOC_SERIES_STM32F7 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + config BSP_USING_USB_TO_USART + bool "Enable USB TO USART (uart6)" + select BSP_USING_UART + select BSP_USING_UART6 + 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_USING_UART6 + bool "Enable UART6" + default y + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f723-st-disco/board/SConscript b/bsp/stm32/stm32f723-st-disco/board/SConscript new file mode 100644 index 0000000000..b050910c60 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/SConscript @@ -0,0 +1,32 @@ +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32f7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] +path += [cwd + '/ports'] + +startup_path_prefix = SDK_LIB + +if rtconfig.PLATFORM in ['gcc']: + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/gcc/startup_stm32f723xx.s'] +elif rtconfig.PLATFORM in ['armcc', 'armclang']: + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/arm/startup_stm32f723xx.s'] +elif rtconfig.PLATFORM in ['iccarm']: + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/iar/startup_stm32f723xx.s'] + +# STM32F756xx || STM32F746xx || STM32F745xx || STM32F767xx || +# STM32F769xx || STM32F777xx || STM32F779xx || STM32F722xx || +# STM32F723xx || STM32F732xx || STM32F733xx || STM32F730xx || STM32F750xx +# You can select chips from the list above +CPPDEFINES = ['STM32F723xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32f723-st-disco/board/board.c b/bsp/stm32/stm32f723-st-disco/board/board.c new file mode 100644 index 0000000000..0d6ad0122b --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/board.c @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-03-01 Rbb666 first version + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** 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 = 216; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != 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_7) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f723-st-disco/board/board.h b/bsp/stm32/stm32f723-st-disco/board/board.h new file mode 100644 index 0000000000..555dff9435 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/board.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-03-01 Rbb666 first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (512 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (256) +#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); + +#endif + diff --git a/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.icf b/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.icf new file mode 100644 index 0000000000..f7b60c0847 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/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__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2004FFFF; +/*-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/stm32f723-st-disco/board/linker_scripts/link.lds b/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.lds new file mode 100644 index 0000000000..d84891816c --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F7xx with GNU ld + * Rbb666 2023-03-01 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 256k /* 256 K 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/stm32f723-st-disco/board/linker_scripts/link.sct b/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.sct new file mode 100644 index 0000000000..ef4461c174 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/board/linker_scripts/link.sct @@ -0,0 +1,14 @@ +; ************************************************************* +; *** 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 0x00040000 { ; RW data + .ANY (+RW +ZI) + } +} diff --git a/bsp/stm32/stm32f723-st-disco/figures/board.png b/bsp/stm32/stm32f723-st-disco/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ee8d1a03881582edd2cb302c2217ca8e4c43c9 GIT binary patch literal 75383 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 z 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 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f723-st-disco/project.ewp b/bsp/stm32/stm32f723-st-disco/project.ewp new file mode 100644 index 0000000000..a7f78ac84f --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/project.ewp @@ -0,0 +1,2353 @@ + + 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 + + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdio.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\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 + + + + CPU + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\hwtimer\hwtimer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion.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\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + + Drivers + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\iar\startup_stm32f746xx.s + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_hwtimer.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.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.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Libraries + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + + + + POSIX + + diff --git a/bsp/stm32/stm32f723-st-disco/project.eww b/bsp/stm32/stm32f723-st-disco/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f723-st-disco/project.uvoptx b/bsp/stm32/stm32f723-st-disco/project.uvoptx new file mode 100644 index 0000000000..27db630519 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/project.uvoptx @@ -0,0 +1,1132 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\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)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x2_512 -FF1STM32F7x2TCM_512 -FL080000 -FL180000 -FS08000000 -FS1200000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_512.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U0666FF575157896687164622 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20010000 -FC1000 -FN2 -FF0STM32F7x2_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FF1STM32F7x2TCM_512.FLM -FS1200000 -FL180000 -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_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 + + + + + Compiler + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdio.c + cstdio.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 3 + 13 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + cpu_cache.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 4 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\hwtimer\hwtimer.c + hwtimer.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion.c + completion.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 5 + 26 + 2 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f723xx.s + startup_stm32f723xx.s + 0 + 0 + + + 5 + 27 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 7 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 7 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 7 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 7 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + stm32f7xx_hal.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + stm32f7xx_hal_uart_ex.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + stm32f7xx_hal_exti.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c + stm32f7xx_hal_tim.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 8 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c + stm32f7xx_hal_tim_ex.c + 0 + 0 + + + 8 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 0 + 0 + + + 8 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 8 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 8 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 8 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c + stm32f7xx_hal_lptim.c + 0 + 0 + + + 8 + 72 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + stm32f7xx_hal_crc_ex.c + 0 + 0 + + + +
diff --git a/bsp/stm32/stm32f723-st-disco/project.uvprojx b/bsp/stm32/stm32f723-st-disco/project.uvprojx new file mode 100644 index 0000000000..8b9438c545 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/project.uvprojx @@ -0,0 +1,793 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 + + + STM32F723IEKx + STMicroelectronics + Keil.STM32F7xx_DFP.2.15.1 + https://www.keil.com/pack/ + IRAM(0x20010000,0x30000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x80000) IROM2(0x00200000,0x80000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN2 -FF0STM32F7x2_512 -FS08000000 -FL080000 -FF1STM32F7x2TCM_512 -FS1200000 -FL180000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_512.FLM)) + 0 + $$Device:STM32F723IEKx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F723IEKx$CMSIS\SVD\STM32F723.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 + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x30000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x200000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x30000 + + + 0 + 0x20000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + STM32F723xx, __STDC_LIMIT_MACROS, RT_USING_ARMLIBC, USE_HAL_DRIVER, RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__ + + ..\..\..\components\finsh;..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Include;..\libraries\HAL_Drivers\CMSIS\Include;..\libraries\HAL_Drivers;..\..\..\libcpu\arm\cortex-m7;applications;..\..\..\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\include;..\..\..\components\libc\posix\ipc;..\..\..\libcpu\arm\common;board\ports;..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Inc;.;..\..\..\components\libc\posix\io\stdio;..\..\..\components\drivers\include;board;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\include;board\CubeMX_Config\Inc;..\..\..\components\libc\compilers\common\extension;..\libraries\HAL_Drivers\config;..\..\..\components\libc\compilers\common\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Compiler + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + cstdio.c + 1 + ..\..\..\components\libc\compilers\common\cstdio.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 + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + cpu_cache.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + + + DeviceDrivers + + + hwtimer.c + 1 + ..\..\..\components\drivers\hwtimer\hwtimer.c + + + completion.c + 1 + ..\..\..\components\drivers\ipc\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + Drivers + + + startup_stm32f723xx.s + 2 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f723xx.s + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + board.c + 1 + board\board.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.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 + + + components.c + 1 + ..\..\..\src\components.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Libraries + + + stm32f7xx_hal.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_uart_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + + + stm32f7xx_hal_pwr.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_sram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_crc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_usart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + stm32f7xx_hal_rcc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_cec.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cryp.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_gpio.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_exti.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + + + stm32f7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_tim.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c + + + stm32f7xx_hal_dma_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_cortex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_tim_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c + + + system_stm32f7xx.c + 1 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal_uart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rng.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_lptim.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c + + + stm32f7xx_hal_crc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f723-st-disco/rtconfig.h b/bsp/stm32/stm32f723-st-disco/rtconfig.h new file mode 100644 index 0000000000..4d62c37a28 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/rtconfig.h @@ -0,0 +1,219 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#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 optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_PAGE_MAX_ORDER 11 +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart6" +#define RT_VER_NUM 0x50000 +#define RT_USING_CACHE +#define RT_USING_CPU_FFS +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* 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_HWTIMER +#define RT_USING_PIN + +/* Using USB */ + + +/* C/C++ and POSIX layer */ + +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + + +/* Network */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + + +/* XML: Extensible Markup Language */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* Kendryte SDK */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* project laboratory */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Arduino libraries */ + + +/* Sensor libraries */ + + +/* Display libraries */ + + +/* Timing libraries */ + + +/* Project libraries */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F7 + +/* Hardware Drivers Config */ + +#define SOC_STM32F723E + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART6 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f723-st-disco/rtconfig.py b/bsp/stm32/stm32f723-st-disco/rtconfig.py new file mode 100644 index 0000000000..d4e7017d0c --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/rtconfig.py @@ -0,0 +1,188 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'/usr/local/Cellar/arm-none-eabi-gcc/7-2017-q4-major/gcc/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' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + STRIP = PREFIX + 'strip' + + DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -g -Wall' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2 -Os' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + + # module setting + CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti ' + M_CFLAGS = CFLAGS + ' -mlong-calls -fPIC ' + M_CXXFLAGS = CXXFLAGS + ' -mlong-calls -fPIC' + M_LFLAGS = DEVICE + CXXFLAGS + ' -Wl,--gc-sections,-z,max-page-size=0x4' +\ + ' -shared -fPIC -nostartfiles -static-libgcc' + M_POST_ACTION = STRIP + ' -R .hash $TARGET\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp --fpu=FPv4-SP' + CFLAGS = DEVICE + ' --apcs=interwork ' + AFLAGS = DEVICE + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread.map --scatter rtthread.sct' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/INC' + LFLAGS += ' --libpath "' + EXEC_PATH + '/ARM/ARMCC/lib"' + + EXEC_PATH += '/arm/bin40/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2 -Otime' + + CXXFLAGS = CFLAGS + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m7 ' + CFLAGS += ' -mcpu=cortex-m7 -mfpu=fpv5-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 = '' + + 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 += ' --debug' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' -Ol' + CFLAGS += ' --use_c++_inline' + CFLAGS += ' --silent' + + AFLAGS = '' + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + LFLAGS = ' --config rtthread.icf' + LFLAGS += ' --redirect _Printf=_PrintfTiny' + LFLAGS += ' --redirect _Scanf=_ScanfSmall' + LFLAGS += ' --entry __iar_program_start' + LFLAGS += ' --silent' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = '' + +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/stm32f723-st-disco/template.ewd b/bsp/stm32/stm32f723-st-disco/template.ewd new file mode 100644 index 0000000000..191c0b5817 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/template.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f723-st-disco/template.ewp b/bsp/stm32/stm32f723-st-disco/template.ewp new file mode 100644 index 0000000000..9fada43dfd --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/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/stm32f723-st-disco/template.eww b/bsp/stm32/stm32f723-st-disco/template.eww new file mode 100644 index 0000000000..59608f6e4a --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/template.eww @@ -0,0 +1,10 @@ + + + + $WS_DIR$\project.ewp + + + $WS_DIR$\template.ewp + + + diff --git a/bsp/stm32/stm32f723-st-disco/template.uvoptx b/bsp/stm32/stm32f723-st-disco/template.uvoptx new file mode 100644 index 0000000000..ff3bd28c46 --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/template.uvoptx @@ -0,0 +1,192 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\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 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x2_512 -FF1STM32F7x2TCM_512 -FL080000 -FL180000 -FS08000000 -FS1200000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_512.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U0666FF575157896687164622 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20010000 -FC1000 -FN2 -FF0STM32F7x2_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FF1STM32F7x2TCM_512.FLM -FS1200000 -FL180000 -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_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/stm32f723-st-disco/template.uvprojx b/bsp/stm32/stm32f723-st-disco/template.uvprojx new file mode 100644 index 0000000000..d1e5c8433b --- /dev/null +++ b/bsp/stm32/stm32f723-st-disco/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 + 0 + + + STM32F723IEKx + STMicroelectronics + Keil.STM32F7xx_DFP.2.15.1 + https://www.keil.com/pack/ + IRAM(0x20010000,0x30000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x80000) IROM2(0x00200000,0x80000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN2 -FF0STM32F7x2_512 -FS08000000 -FL080000 -FF1STM32F7x2TCM_512 -FS1200000 -FL180000 -FP0($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2_512.FLM) -FP1($$Device:STM32F723IEKx$CMSIS\Flash\STM32F7x2TCM_512.FLM)) + 0 + $$Device:STM32F723IEKx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F723IEKx$CMSIS\SVD\STM32F723.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 + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x30000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x200000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x30000 + + + 0 + 0x20000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
-- GitLab