From ead1b81831d14edf03cad29519fc61e67643e776 Mon Sep 17 00:00:00 2001 From: wanghaijing Date: Tue, 13 Apr 2021 10:33:48 +0800 Subject: [PATCH 1/4] [add] bsp-stm32-stm32f207zg --- bsp/stm32/stm32f207-st-nucleo/.config | 552 +++ bsp/stm32/stm32f207-st-nucleo/.cproject | 200 ++ bsp/stm32/stm32f207-st-nucleo/.gitignore | 42 + bsp/stm32/stm32f207-st-nucleo/.project | 28 + .../.settings/org.eclipse.core.runtime.prefs | 3 + .../stm32f207-st-nucleo/.settings/projcfg.ini | 22 + bsp/stm32/stm32f207-st-nucleo/Kconfig | 22 + bsp/stm32/stm32f207-st-nucleo/README.md | 130 + bsp/stm32/stm32f207-st-nucleo/SConscript | 15 + bsp/stm32/stm32f207-st-nucleo/SConstruct | 64 + .../applications/SConscript | 12 + .../stm32f207-st-nucleo/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 25 + .../board/CubeMX_Config/Core/Inc/main.h | 71 + .../Core/Inc/stm32f2xx_hal_conf.h | 410 +++ .../CubeMX_Config/Core/Inc/stm32f2xx_it.h | 69 + .../board/CubeMX_Config/Core/Src/main.c | 240 ++ .../Core/Src/stm32f2xx_hal_msp.c | 149 + .../CubeMX_Config/Core/Src/stm32f2xx_it.c | 205 ++ .../CubeMX_Config/Core/Src/system_stm32f2xx.c | 344 ++ .../board/CubeMX_Config/CubeMX_Config.ioc | 106 + bsp/stm32/stm32f207-st-nucleo/board/Kconfig | 39 + .../stm32f207-st-nucleo/board/SConscript | 32 + bsp/stm32/stm32f207-st-nucleo/board/board.c | 49 + bsp/stm32/stm32f207-st-nucleo/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 143 + .../board/linker_scripts/link.sct | 15 + .../stm32f207-st-nucleo/figures/board.jpg | Bin 0 -> 190148 bytes .../stm32f207-st-nucleo/makefile.targets | 6 + bsp/stm32/stm32f207-st-nucleo/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f207-st-nucleo/project.ewp | 2315 +++++++++++++ bsp/stm32/stm32f207-st-nucleo/project.eww | 10 + bsp/stm32/stm32f207-st-nucleo/project.uvopt | 162 + bsp/stm32/stm32f207-st-nucleo/project.uvoptx | 853 +++++ bsp/stm32/stm32f207-st-nucleo/project.uvproj | 1126 +++++++ bsp/stm32/stm32f207-st-nucleo/project.uvprojx | 698 ++++ bsp/stm32/stm32f207-st-nucleo/rtconfig.h | 181 + bsp/stm32/stm32f207-st-nucleo/rtconfig.py | 150 + bsp/stm32/stm32f207-st-nucleo/template.ewp | 2106 ++++++++++++ bsp/stm32/stm32f207-st-nucleo/template.eww | 10 + bsp/stm32/stm32f207-st-nucleo/template.uvopt | 177 + bsp/stm32/stm32f207-st-nucleo/template.uvoptx | 185 + bsp/stm32/stm32f207-st-nucleo/template.uvproj | 438 +++ .../stm32f207-st-nucleo/template.uvprojx | 410 +++ 45 files changed, 14891 insertions(+) create mode 100644 bsp/stm32/stm32f207-st-nucleo/.config create mode 100644 bsp/stm32/stm32f207-st-nucleo/.cproject create mode 100644 bsp/stm32/stm32f207-st-nucleo/.gitignore create mode 100644 bsp/stm32/stm32f207-st-nucleo/.project create mode 100644 bsp/stm32/stm32f207-st-nucleo/.settings/org.eclipse.core.runtime.prefs create mode 100644 bsp/stm32/stm32f207-st-nucleo/.settings/projcfg.ini create mode 100644 bsp/stm32/stm32f207-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32f207-st-nucleo/README.md create mode 100644 bsp/stm32/stm32f207-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32f207-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32f207-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32f207-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/main.h create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_hal_conf.h create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_it.h create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/main.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_it.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/system_stm32f2xx.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f207-st-nucleo/figures/board.jpg create mode 100644 bsp/stm32/stm32f207-st-nucleo/makefile.targets create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.uvopt create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.uvproj create mode 100644 bsp/stm32/stm32f207-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32f207-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32f207-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.uvopt create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.uvproj create mode 100644 bsp/stm32/stm32f207-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32f207-st-nucleo/.config b/bsp/stm32/stm32f207-st-nucleo/.config new file mode 100644 index 0000000000..2a50010a81 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.config @@ -0,0 +1,552 @@ +# +# 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_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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_DEBUG=y +# CONFIG_RT_DEBUG_COLOR is not set +# 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_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE 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_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +CONFIG_RT_VER_NUM=0x40003 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M3=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# 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 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC 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_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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set +CONFIG_RT_LIBC_USING_TIME=y + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS 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_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML 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 + +# +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN 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_RAPIDJSON 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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium 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 +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# 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_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT 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_RDB is not set +# CONFIG_PKG_USING_QRCODE 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 + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS 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 + +# +# 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_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# 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 +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER 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_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 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 +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL 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_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 + +# +# 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 +# +# 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_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 + +# +# 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 +# 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_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set + +# +# entertainment: terminal games and other interesting software packages +# +# 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_ACLOCK is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F2=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F207ZG=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f207-st-nucleo/.cproject b/bsp/stm32/stm32f207-st-nucleo/.cproject new file mode 100644 index 0000000000..878ff7efa9 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.cproject @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/.gitignore b/bsp/stm32/stm32f207-st-nucleo/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.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/stm32f207-st-nucleo/.project b/bsp/stm32/stm32f207-st-nucleo/.project new file mode 100644 index 0000000000..0d0159024c --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.project @@ -0,0 +1,28 @@ + + + stm32f207-st-nucleo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.rt-thread.studio.rttnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/.settings/org.eclipse.core.runtime.prefs b/bsp/stm32/stm32f207-st-nucleo/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 0000000000..9f1acfcfba --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,3 @@ +content-types/enabled=true +content-types/org.eclipse.cdt.core.asmSource/file-extensions=s +eclipse.preferences.version=1 \ No newline at end of file diff --git a/bsp/stm32/stm32f207-st-nucleo/.settings/projcfg.ini b/bsp/stm32/stm32f207-st-nucleo/.settings/projcfg.ini new file mode 100644 index 0000000000..37010cb7bb --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/.settings/projcfg.ini @@ -0,0 +1,22 @@ +#RT-Thread Studio Project Configuration +#Sat Jan 16 15:18:32 CST 2021 +project_type=rtt +chip_name=STM32F103RB +cpu_name=None +target_freq= +clock_source= +dvendor_name= +rx_pin_name= +rtt_path= +source_freq= +csp_path= +sub_series_name= +selected_rtt_version=latest +cfg_version=v3.0 +tool_chain=gcc +uart_name= +tx_pin_name= +rtt_nano_path= +output_project_path= +hardware_adapter=J-Link +project_name=stm32f207-st-nucleo \ No newline at end of file diff --git a/bsp/stm32/stm32f207-st-nucleo/Kconfig b/bsp/stm32/stm32f207-st-nucleo/Kconfig new file mode 100644 index 0000000000..924a7509e0 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "rt-thread" + +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/stm32f207-st-nucleo/README.md b/bsp/stm32/stm32f207-st-nucleo/README.md new file mode 100644 index 0000000000..e35cf14b44 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/README.md @@ -0,0 +1,130 @@ +# BSP README 模板 + +## 简介 + +本文档为 STM32F207 Nucleo-144 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32 Nucleo-144 是 ST 官方推出的开发板,搭载 STM32F207ZG 芯片,基于 ARM Cortex-M3 内核,最高主频 120 MHz,具有丰富的板载资源,可以充分发挥 STM32F207ZG 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM3207ZG,主频 120MHz,1MB FLASH ,128KB RAM +- 常用外设 + - LED:3个,LD1(绿色,PB0),LD2(蓝色,PB7),LD3(红色,PB14) + - 按键:2 个,USER and RESET 。 +- 常用接口:USB 转串口、以太网接口、Arduino Uno 和 ST morpho 两类扩展接口 +- 调试接口,标准 JTAG/SWD + +快速入门:[Getting started with STM32 Nucleo board software development tools](https://www.st.com/resource/en/user_manual/dm00105928-getting-started-with-stm32-nucleo-board-software-development-tools-stmicroelectronics.pdf) + +原理图下载:[STM32 Nucleo (144 pins) schematics](https://www.st.com/resource/en/schematic_pack/nucleo_144pins_sch.zip) + +*更多相关信息资料见 ST 官网详情页:[STM32 Nucleo-144 development board with STM32F207ZG MCU](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-f207zg.html)* + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | | +| 以太网 | 暂不支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PH1 ---> PIN: 0, 1...144 | +| UART | 支持 | UART3 | +| SPI | 暂不支持 | | +| I2C | 暂不支持 | | +| RTC | 暂不支持 | | +| PWM | 暂不支持 | | +| USB Device | 暂不支持 | | +| USB Host | 暂不支持 | | +| IWG | 暂不支持 | | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 xxx 仿真器下载程序,在通过 xxx 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,红色 LD3 会周期性闪烁。。 + +USB 虚拟 COM 端口默认连接串口 3,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.3 build Apr 12 2021 + 2006 - 2021 Copyright by rt-thread team +msh > + +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口3 的功能,更多高级功能需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 关于 pin 序号规则,与旧 bsp 使用封装管脚序号不同,在新的 stm32 bsp 框架中,统一采用顺序编号的方式,对 GPIO 驱动进行管理,在移植旧 bsp 时特别要注意这点。 + + pin 序号与引脚名对应关系如下表: + + | STM32 引脚名 | 管脚序号 pin | + | ------------ | ------------ | + | PA0 - PA15 | 0 - 15 | + | PB0 - PB15 | 16 - 31 | + | PC0 - PC15 | 32 - 47 | + | PD0 - ... | 48 - ... | + + +## 联系人信息 + +维护人: + +- [wanghaijing](https://github.com/whj4674672) ,邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f207-st-nucleo/SConscript b/bsp/stm32/stm32f207-st-nucleo/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/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/stm32f207-st-nucleo/SConstruct b/bsp/stm32/stm32f207-st-nucleo/SConstruct new file mode 100644 index 0000000000..c0afbd9669 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/SConstruct @@ -0,0 +1,64 @@ +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() + '/../../..') + +# set RTT_ROOT +if not os.getenv("RTT_ROOT"): + RTT_ROOT="rt-thread" + +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, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $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 = 'STM32F2xx_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/stm32f207-st-nucleo/applications/SConscript b/bsp/stm32/stm32f207-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..c25223940b --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/applications/SConscript @@ -0,0 +1,12 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() +CPPPATH = [cwd] +src = Split(""" +main.c +""") + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f207-st-nucleo/applications/main.c b/bsp/stm32/stm32f207-st-nucleo/applications/main.c new file mode 100644 index 0000000000..b88176a8ac --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include +#include +#include + +/* defined the LED0 pin: PB14 */ +#define LED0_PIN GET_PIN(B, 14) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..67b3ed7df2 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/.mxproject @@ -0,0 +1,25 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_it.h +HeaderFiles#1=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_hal_conf.h +HeaderFiles#2=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_it.c +SourceFiles#1=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c +SourceFiles#2=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=D:/rt-thread/rt_thread_master/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_tim.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_tim_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_uart.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_def.h;Drivers/STM32F2xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_rcc.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_rcc_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_cortex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_flash.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_flash_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_pwr.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_pwr_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_gpio.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_gpio_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_dma.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_dma_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_exti.h;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim_ex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_uart.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc_ex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_cortex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash_ex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr_ex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_gpio.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma_ex.c;Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_exti.c;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_tim.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_tim_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_uart.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_def.h;Drivers/STM32F2xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_rcc.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_rcc_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_cortex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_flash.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_flash_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_pwr.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_pwr_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_gpio.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_gpio_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_dma.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_dma_ex.h;Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_exti.h;Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f207xx.h;Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h;Drivers/CMSIS/Device/ST/STM32F2xx/Include/system_stm32f2xx.h;Drivers/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\stm32f2xx_it.c;..\Core\Src\stm32f2xx_hal_msp.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_uart.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_cortex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_gpio.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_exti.c;..\Core\Src/system_stm32f2xx.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_tim_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_uart.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_rcc_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_cortex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_flash_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_pwr_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_gpio.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_dma_ex.c;..\Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_exti.c;..\Core\Src/system_stm32f2xx.c;..\Drivers/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c;; +HeaderPath=..\Drivers\STM32F2xx_HAL_Driver\Inc;..\Drivers\STM32F2xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F2xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F207xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/main.h b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/main.h new file mode 100644 index 0000000000..cc46ee20d9 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/main.h @@ -0,0 +1,71 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_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 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_hal_conf.h b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_hal_conf.h new file mode 100644 index 0000000000..057a2a974e --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_hal_conf.h @@ -0,0 +1,410 @@ +/** + ****************************************************************************** + * @file stm32f2xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_HAL_CONF_H +#define __STM32F2xx_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_CAN_LEGACY_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DCMI_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_HASH_MODULE_ENABLED */ +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External audio frequency in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_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_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_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG 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_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< 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 "stm32f2xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f2xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f2xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f2xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f2xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f2xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f2xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f2xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f2xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f2xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f2xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f2xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f2xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f2xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f2xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f2xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f2xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f2xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f2xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f2xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f2xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f2xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f2xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f2xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f2xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f2xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f2xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f2xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f2xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f2xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f2xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f2xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f2xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f2xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f2xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f2xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_it.h b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_it.h new file mode 100644 index 0000000000..843a15b2f0 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Inc/stm32f2xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f2xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_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 /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/main.c b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/main.c new file mode 100644 index 0000000000..1d74773d48 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/main.c @@ -0,0 +1,240 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* 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 huart3; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART3_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART3_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}; + + /** 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 = 13; + RCC_OscInitStruct.PLL.PLLN = 195; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 115200; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); + + /*Configure GPIO pin : PB14 */ + GPIO_InitStruct.Pin = GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c new file mode 100644 index 0000000000..24b027c37b --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c @@ -0,0 +1,149 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f2xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_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==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_it.c b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_it.c new file mode 100644 index 0000000000..26930848b2 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/stm32f2xx_it.c @@ -0,0 +1,205 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f2xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f2xx_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-M3 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 */ +} + +/******************************************************************************/ +/* STM32F2xx 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_stm32f2xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/system_stm32f2xx.c b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/system_stm32f2xx.c new file mode 100644 index 0000000000..2139bbf913 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/Core/Src/system_stm32f2xx.c @@ -0,0 +1,344 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ + +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + /* This variable can be updated in Three ways : + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 16000000; + const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx_hal_conf.h file (its value + * depends on the application requirements), user has to ensure that HSE_VALUE + * is same as the real frequency of the crystal used. Otherwise, this function + * may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + (void)(tmp); + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*--FSMC Configuration -------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..6833480982 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,106 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.Family=STM32F2 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART3 +Mcu.IPNb=4 +Mcu.Name=STM32F207Z(C-E-F-G)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PB14 +Mcu.Pin1=PD8 +Mcu.Pin2=PD9 +Mcu.Pin3=VP_SYS_VS_Systick +Mcu.PinsNb=4 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F207ZGTx +MxCube.Version=6.2.0 +MxDb.Version=DB.6.0.20 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PB14.Locked=true +PB14.Signal=GPIO_Output +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +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=STM32F207ZGTx +ProjectManager.FirmwarePackage=STM32Cube FW_F2 V1.9.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=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART3_UART_Init-USART3-false-HAL-true +RCC.48MHZClocksFreq_Value=60000000 +RCC.AHBFreq_Value=120000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=30000000 +RCC.APB1TimFreq_Value=60000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=60000000 +RCC.APB2TimFreq_Value=120000000 +RCC.CortexFreq_Value=120000000 +RCC.EthernetFreq_Value=120000000 +RCC.FCLKCortexFreq_Value=120000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=120000000 +RCC.HSE_VALUE=25000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=118153846.15384614 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=120000000 +RCC.PLLCLKFreq_Value=120000000 +RCC.PLLM=13 +RCC.PLLN=195 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=12500000 +RCC.SYSCLKFreq_VALUE=120000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=236307692.3076923 +RCC.VCOInputFreq_Value=1230769.2307692308 +RCC.VCOOutputFreq_Value=240000000 +RCC.VcooutputI2S=118153846.15384614 +USART3.IPParameters=VirtualMode +USART3.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f207-st-nucleo/board/Kconfig b/bsp/stm32/stm32f207-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..5aa107d6ac --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/Kconfig @@ -0,0 +1,39 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F207ZG + bool + select SOC_SERIES_STM32F2 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART3 + bool "Enable UART3" + default y + endif + + source "libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f207-st-nucleo/board/SConscript b/bsp/stm32/stm32f207-st-nucleo/board/SConscript new file mode 100644 index 0000000000..fba49958f9 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/SConscript @@ -0,0 +1,32 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Core/Src/stm32f2xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Core/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F2xx_HAL/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc/startup_stm32f207xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F2xx_HAL/CMSIS/Device/ST/STM32F2xx/Source/Templates/arm/startup_stm32f207xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F2xx_HAL/CMSIS/Device/ST/STM32F2xx/Source/Templates/iar/startup_stm32f207xx.s'] + +# STM32F205xx || STM32F207xx || STM32F215xx +# STM32F217xx +# You can select chips from the list above +CPPDEFINES = ['STM32F207xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f207-st-nucleo/board/board.c b/bsp/stm32/stm32f207-st-nucleo/board/board.c new file mode 100644 index 0000000000..efc28d32e8 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/board.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** 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 = 13; + RCC_OscInitStruct.PLL.PLLN = 195; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + + diff --git a/bsp/stm32/stm32f207-st-nucleo/board/board.h b/bsp/stm32/stm32f207-st-nucleo/board/board.h new file mode 100644 index 0000000000..77143ecb0e --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (1024 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 128 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..067691151f --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/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__ = 0x2001FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** 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/stm32f207-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..97ee6bf152 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,143 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 128KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 20K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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); + _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*) + + . = 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/stm32f207-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0d7c47992d --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f207-st-nucleo/figures/board.jpg b/bsp/stm32/stm32f207-st-nucleo/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49a29915b23ebab9a675c2dcf4fa979a101d1c2e GIT binary patch literal 190148 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%0D=ZjGYixTi@C(&qK_=dS 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

@pIY1oO(@^oRlzQ2Xhnip!*tm}b9?teI0 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

&FVKFBG|e}JL$-Mht}+fmU%Ji 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 EU(_%OC;$Ke literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f207-st-nucleo/makefile.targets b/bsp/stm32/stm32f207-st-nucleo/makefile.targets new file mode 100644 index 0000000000..e71da5a6e1 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/makefile.targets @@ -0,0 +1,6 @@ +clean2: + -$(RM) $(CC_DEPS)$(C++_DEPS)$(C_UPPER_DEPS)$(CXX_DEPS)$(SECONDARY_FLASH)$(SECONDARY_SIZE)$(ASM_DEPS)$(S_UPPER_DEPS)$(C_DEPS)$(CPP_DEPS) + -$(RM) $(OBJS) *.elf + -@echo ' ' + +*.elf: $(wildcard ../linkscripts/*/*.lds) $(wildcard ../linkscripts/*/*/*.lds) \ No newline at end of file diff --git a/bsp/stm32/stm32f207-st-nucleo/project.ewd b/bsp/stm32/stm32f207-st-nucleo/project.ewd new file mode 100644 index 0000000000..211a095910 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rtthread + + ARM + + 1 + + C-SPY + 2 + + 31 + 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\RemedyRtosViewer\RemedyRtosViewer.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\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 + + 31 + 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\RemedyRtosViewer\RemedyRtosViewer.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\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/stm32f207-st-nucleo/project.ewp b/bsp/stm32/stm32f207-st-nucleo/project.ewp new file mode 100644 index 0000000000..7f6bc20f73 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.ewp @@ -0,0 +1,2315 @@ + + 3 + + rtthread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + CPU + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + + Drivers + + $PROJ_DIR$\board\CubeMX_Config\Core\Src\stm32f2xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\iar\startup_stm32f207xx.s + + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + + Libraries + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\system_stm32f2xx.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_uart.c + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/project.eww b/bsp/stm32/stm32f207-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/project.uvopt b/bsp/stm32/stm32f207-st-nucleo/project.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/project.uvoptx b/bsp/stm32/stm32f207-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..8441e1cc37 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.uvoptx @@ -0,0 +1,853 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 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 + ST-LINKIII-KEIL_SWO + -U066DFF484951717867122741 -O206 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F207VETx$CMSIS\Flash\STM32F2xx_1024.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F2xx_1024 -FL080000 -FS08000000 -FP0($$Device:STM32F207VETx$CMSIS\Flash\STM32F2xx_1024.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 5 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 16 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Core\Src\stm32f2xx_hal_msp.c + stm32f2xx_hal_msp.c + 0 + 0 + + + 4 + 17 + 2 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\arm\startup_stm32f207xx.s + startup_stm32f207xx.s + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 5 + 22 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 23 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 25 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 8 + 39 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_usart.c + stm32f2xx_hal_usart.c + 0 + 0 + + + 8 + 40 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_cortex.c + stm32f2xx_hal_cortex.c + 0 + 0 + + + 8 + 41 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\system_stm32f2xx.c + system_stm32f2xx.c + 0 + 0 + + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_gpio.c + stm32f2xx_hal_gpio.c + 0 + 0 + + + 8 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc.c + stm32f2xx_hal_rcc.c + 0 + 0 + + + 8 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_crc.c + stm32f2xx_hal_crc.c + 0 + 0 + + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_sram.c + stm32f2xx_hal_sram.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_pwr.c + stm32f2xx_hal_pwr.c + 0 + 0 + + + 8 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_dma.c + stm32f2xx_hal_dma.c + 0 + 0 + + + 8 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal.c + stm32f2xx_hal.c + 0 + 0 + + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc_ex.c + stm32f2xx_hal_rcc_ex.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_uart.c + stm32f2xx_hal_uart.c + 0 + 0 + + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/project.uvproj b/bsp/stm32/stm32f207-st-nucleo/project.uvproj new file mode 100644 index 0000000000..f7cd8f7822 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.uvproj @@ -0,0 +1,1126 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + STM32F103xB, USE_HAL_DRIVER + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m3;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + startup_stm32f103xb.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.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 + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M3 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_adc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc.c + + + + + stm32f1xx_hal_adc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_ex.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_flash.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c + + + + + stm32f1xx_hal_flash_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + stm32f1xx_hal_i2c.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2c.c + + + + + stm32f1xx_hal_irda.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_irda.c + + + + + stm32f1xx_hal_iwdg.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_iwdg.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal_rtc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rtc.c + + + + + stm32f1xx_hal_rtc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rtc_ex.c + + + + + stm32f1xx_hal_smartcard.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_smartcard.c + + + + + stm32f1xx_hal_spi.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi.c + + + + + stm32f1xx_hal_spi_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi_ex.c + + + + + stm32f1xx_hal_tim.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c + + + + + stm32f1xx_hal_tim_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + stm32f1xx_hal_wwdg.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_wwdg.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_ll_adc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_adc.c + + + + + stm32f1xx_ll_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_crc.c + + + + + stm32f1xx_ll_dac.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dac.c + + + + + stm32f1xx_ll_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c + + + + + stm32f1xx_ll_exti.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c + + + + + stm32f1xx_ll_fsmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_fsmc.c + + + + + stm32f1xx_ll_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c + + + + + stm32f1xx_ll_i2c.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_i2c.c + + + + + stm32f1xx_ll_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c + + + + + stm32f1xx_ll_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c + + + + + stm32f1xx_ll_rtc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rtc.c + + + + + stm32f1xx_ll_sdmmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_sdmmc.c + + + + + stm32f1xx_ll_spi.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c + + + + + stm32f1xx_ll_tim.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c + + + + + stm32f1xx_ll_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c + + + + + stm32f1xx_ll_usb.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usb.c + + + + + stm32f1xx_ll_utils.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_can.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_can.c + + + + + stm32f1xx_hal_dac.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac.c + + + + + stm32f1xx_hal_dac_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac_ex.c + + + + + stm32f1xx_hal_eth.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_eth.c + + + + + stm32f1xx_hal_hcd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_hcd.c + + + + + stm32f1xx_hal_i2s.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2s.c + + + + + stm32f1xx_hal_mmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_mmc.c + + + + + stm32f1xx_hal_sd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sd.c + + + + + stm32f1xx_hal_nand.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nand.c + + + + + stm32f1xx_hal_pccard.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pccard.c + + + + + stm32f1xx_hal_nor.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nor.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_pcd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pcd.c + + + + + stm32f1xx_hal_pcd_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pcd_ex.c + + + + + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/project.uvprojx b/bsp/stm32/stm32f207-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..208f7bd20d --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/project.uvprojx @@ -0,0 +1,698 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rtthread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F207VETx + STMicroelectronics + Keil.STM32F2xx_DFP.2.7.0 + http://www.keil.com/pack + IROM(0x08000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024 -FS08000000 -FL080000 -FP0($$Device:STM32F207VETx$CMSIS/Flash/STM32F2xx_1024.FLM)) + 0 + $$Device:STM32F207VETx$Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h + + + + + + + + + + $$Device:STM32F207VETx$CMSIS\SVD\STM32F20x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 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-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F207xx, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Core\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Include;..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Inc;..\libraries\STM32F2xx_HAL\CMSIS\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 + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + Drivers + + + stm32f2xx_hal_msp.c + 1 + board\CubeMX_Config\Core\Src\stm32f2xx_hal_msp.c + + + startup_stm32f207xx.s + 2 + ..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\arm\startup_stm32f207xx.s + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + thread.c + 1 + ..\..\..\src\thread.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + clock.c + 1 + ..\..\..\src\clock.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + device.c + 1 + ..\..\..\src\device.c + + + components.c + 1 + ..\..\..\src\components.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + object.c + 1 + ..\..\..\src\object.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + stm32f2xx_hal_usart.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_usart.c + + + stm32f2xx_hal_cortex.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_cortex.c + + + system_stm32f2xx.c + 1 + ..\libraries\STM32F2xx_HAL\CMSIS\Device\ST\STM32F2xx\Source\Templates\system_stm32f2xx.c + + + stm32f2xx_hal_gpio.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_gpio.c + + + stm32f2xx_hal_rcc.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc.c + + + stm32f2xx_hal_crc.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_crc.c + + + stm32f2xx_hal_sram.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_sram.c + + + stm32f2xx_hal_pwr.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_pwr.c + + + stm32f2xx_hal_dma.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_dma.c + + + stm32f2xx_hal.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal.c + + + stm32f2xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_rcc_ex.c + + + stm32f2xx_hal_uart.c + 1 + ..\libraries\STM32F2xx_HAL\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_uart.c + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/rtconfig.h b/bsp/stm32/stm32f207-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..93941825e7 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/rtconfig.h @@ -0,0 +1,181 @@ +#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 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG + +/* 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_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#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 "uart3" +#define RT_VER_NUM 0x40003 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M3 + +/* 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 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F2 + +/* Hardware Drivers Config */ + +#define SOC_STM32F207ZG + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART3 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f207-st-nucleo/rtconfig.py b/bsp/stm32/stm32f207-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..c3838da594 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M3 ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M3' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32f207-st-nucleo/template.ewp b/bsp/stm32/stm32f207-st-nucleo/template.ewp new file mode 100644 index 0000000000..5e7b630ab0 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.ewp @@ -0,0 +1,2106 @@ + + + 3 + + rtthread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/template.eww b/bsp/stm32/stm32f207-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f207-st-nucleo/template.uvopt b/bsp/stm32/stm32f207-st-nucleo/template.uvopt new file mode 100644 index 0000000000..d2d5c54202 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.uvopt @@ -0,0 +1,177 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 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 + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/template.uvoptx b/bsp/stm32/stm32f207-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..d42e3138b2 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.uvoptx @@ -0,0 +1,185 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 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 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F2xx_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F2xx_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/template.uvproj b/bsp/stm32/stm32f207-st-nucleo/template.uvproj new file mode 100644 index 0000000000..7029f88ee5 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.uvproj @@ -0,0 +1,438 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rtthread + 0x4 + ARM-ADS + 0 + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 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 + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/stm32/stm32f207-st-nucleo/template.uvprojx b/bsp/stm32/stm32f207-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..9008edfdf7 --- /dev/null +++ b/bsp/stm32/stm32f207-st-nucleo/template.uvprojx @@ -0,0 +1,410 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rtthread + 0x4 + ARM-ADS + 0 + + + STM32F207ZGTx + STMicroelectronics + Keil.STM32F2xx_DFP.2.7.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x100000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM)) + 0 + $$Device:STM32F207ZGTx$Drivers\CMSIS\Device\ST\STM32F2xx\Include\stm32f2xx.h + + + + + + + + + + $$Device:STM32F207ZGTx$CMSIS\SVD\STM32F20x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 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-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 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 + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
From 23356e78a0b500464fd7d05b090d6c64643bfa77 Mon Sep 17 00:00:00 2001 From: wanghaijing Date: Tue, 13 Apr 2021 10:38:45 +0800 Subject: [PATCH 2/4] update bsp/stm32/readme --- bsp/stm32/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bsp/stm32/README.md b/bsp/stm32/README.md index ffdf1668f2..1a36605aa1 100644 --- a/bsp/stm32/README.md +++ b/bsp/stm32/README.md @@ -20,6 +20,8 @@ STM32 系列 BSP 目前支持情况如下表所示: | [stm32f103-onenet-nbiot](stm32f103-onenet-nbiot) | STM32F103 OneNET NB-IoT 开发板 | | [stm32f103-yf-ufun](stm32f103-yf-ufun) | STM32F103 yf-ufun 开发板 | | [stm32f107-uc-eval](stm32f107-uc-eval) | uC/Eval STM32F107 评估板(中国版) | +| **F2 系列** | | +| [stm32f207-st-nucleo](stm32f207-st-nucleo) | ST 官方 STM32F207-nucleo 开发板 | | **F4 系列** | | | [stm32f401-st-nucleo](stm32f401-st-nucleo) | ST 官方 STM32F401 Nucleo-64 开发板 | | [stm32f405-smdz-breadfruit](stm32f405-smdz-breadfruit) | 三木电子 SM1432F405 开发板 | From 56dc30917f5ec70e9548d631edec1ca48e49aeec Mon Sep 17 00:00:00 2001 From: wanghaijing Date: Tue, 13 Apr 2021 10:40:51 +0800 Subject: [PATCH 3/4] update action.yml --- .github/workflows/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 2a5697964a..e60f45de56 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -78,6 +78,7 @@ jobs: - {RTT_BSP: "stm32/stm32f103-onenet-nbiot", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f103-yf-ufun", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f107-uc-eval", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "stm32/stm32f207-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f401-st-nucleo", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f405-smdz-breadfruit", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f407-atk-explorer", RTT_TOOL_CHAIN: "sourcery-arm"} From fcbec9700cd7af068698bf9abc7d7c021819cabc Mon Sep 17 00:00:00 2001 From: wanghaijing Date: Tue, 13 Apr 2021 11:15:32 +0800 Subject: [PATCH 4/4] fix link.lds annotation --- bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds index 97ee6bf152..8f785689ac 100644 --- a/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32f207-st-nucleo/board/linker_scripts/link.lds @@ -5,8 +5,8 @@ /* Program Entry, set to mark it as "used" and avoid gc */ MEMORY { - ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 128KB flash */ - RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 20K sram */ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x200;