From 6c95714f73cedfea43e5c7a9228ad39a0990a7a2 Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Mon, 13 Dec 2021 21:23:52 +0800 Subject: [PATCH] [bsp/stm32] add bsp of openmv --- bsp/stm32/stm32h743-openmv-h7plus/.config | 622 ++++ bsp/stm32/stm32h743-openmv-h7plus/.gitignore | 42 + bsp/stm32/stm32h743-openmv-h7plus/Kconfig | 21 + bsp/stm32/stm32h743-openmv-h7plus/README.md | 109 + bsp/stm32/stm32h743-openmv-h7plus/SConscript | 15 + bsp/stm32/stm32h743-openmv-h7plus/SConstruct | 60 + .../applications/SConscript | 13 + .../applications/main.c | 30 + .../board/CubeMX_Config/.mxproject | 25 + .../board/CubeMX_Config/Core/Inc/main.h | 70 + .../Core/Inc/stm32h7xx_hal_conf.h | 510 +++ .../CubeMX_Config/Core/Inc/stm32h7xx_it.h | 66 + .../board/CubeMX_Config/Core/Src/main.c | 270 ++ .../Core/Src/stm32h7xx_hal_msp.c | 156 + .../board/CubeMX_Config/CubeMX_Config.ioc | 164 + .../stm32h743-openmv-h7plus/board/Kconfig | 53 + .../stm32h743-openmv-h7plus/board/SConscript | 30 + .../stm32h743-openmv-h7plus/board/board.c | 65 + .../stm32h743-openmv-h7plus/board/board.h | 52 + .../board/linker_scripts/link.icf | 32 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 19 + .../stm32h743-openmv-h7plus/figures/board.png | Bin 0 -> 237534 bytes bsp/stm32/stm32h743-openmv-h7plus/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32h743-openmv-h7plus/project.ewp | 2276 +++++++++++++ bsp/stm32/stm32h743-openmv-h7plus/project.eww | 10 + .../stm32h743-openmv-h7plus/project.uvoptx | 973 ++++++ .../stm32h743-openmv-h7plus/project.uvprojx | 723 +++++ bsp/stm32/stm32h743-openmv-h7plus/rtconfig.h | 189 ++ bsp/stm32/stm32h743-openmv-h7plus/rtconfig.py | 185 ++ .../stm32h743-openmv-h7plus/template.ewp | 2031 ++++++++++++ .../stm32h743-openmv-h7plus/template.eww | 10 + .../stm32h743-openmv-h7plus/template.uvoptx | 197 ++ .../stm32h743-openmv-h7plus/template.uvprojx | 396 +++ 34 files changed, 12405 insertions(+) create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/.config create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/.gitignore create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/Kconfig create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/README.md create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/SConscript create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/SConstruct create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/applications/SConscript create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/applications/main.c create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/main.h create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/main.c create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/Kconfig create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/SConscript create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/board.c create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/board.h create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/figures/board.png create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/project.ewd create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/project.ewp create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/project.eww create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/project.uvoptx create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/project.uvprojx create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/rtconfig.h create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/rtconfig.py create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/template.ewp create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/template.eww create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/template.uvoptx create mode 100644 bsp/stm32/stm32h743-openmv-h7plus/template.uvprojx diff --git a/bsp/stm32/stm32h743-openmv-h7plus/.config b/bsp/stm32/stm32h743-openmv-h7plus/.config new file mode 100644 index 0000000000..fc2de13ee9 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/.config @@ -0,0 +1,622 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# 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_USING_ASM_MEMCPY is not set +# CONFIG_RT_USING_ASM_MEMSET is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_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=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40100 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M7=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 +# CONFIG_RT_USING_LEGACY is not set + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# 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_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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 is not set +# 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_LIBC_USING_TIME is not set + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_GETLINE is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# 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_VAR_EXPORT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES 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 +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_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 +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set + +# +# 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 +# CONFIG_PKG_USING_PIKASCRIPT is not set + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_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 +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set + +# +# system packages +# + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# 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 + +# +# 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_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON 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_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 +# 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_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB 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_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_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 +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL 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 +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32H7=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32H743II=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_UART2 is not set +# CONFIG_BSP_USING_LPUART1 is not set +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set diff --git a/bsp/stm32/stm32h743-openmv-h7plus/.gitignore b/bsp/stm32/stm32h743-openmv-h7plus/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/.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/stm32h743-openmv-h7plus/Kconfig b/bsp/stm32/stm32h743-openmv-h7plus/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/stm32/stm32h743-openmv-h7plus/README.md b/bsp/stm32/stm32h743-openmv-h7plus/README.md new file mode 100644 index 0000000000..f1955aaa7f --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/README.md @@ -0,0 +1,109 @@ +# OPENMV4-H7-PLUS 开发板的 BSP 说明 + +## 简介 + +本文档为 OPENMV官方H7-PLUS开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +OPENMV4-H7-PLUS 是 OPENMV公司推出的一款针对 STM32H7系列设计的 Cortex-M7 开发板。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32H743IIK6,主频 480MHz,2MB FLASH ,1M RAM , Core Mark Score: 2400 +- 常用外设 + - RGB:3个,LED_R (红色,PC0), LED_G(绿色,PC1), LED_B(蓝色,PC2), + - SRAM: 32MB + - QSPI FLASH: 32MB +- 调试接口,标准 SWD + +开发板更多详细信息请参考 [OpenMV4 H7 Plus开发板介绍](https://singtown.com/product/50812/openmv4-h7-plus/)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| GPIO | 支持 | | +| UART | 支持 | UART1 (console) | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 ST-LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,蓝色的 LED_R 以 500MS 周期闪烁。 + +连接开发板ST-LINK到 PC , 会发现有串口, 在终端工具里打开相应的串口(115200-8-1-N), 复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.2 build Oct 2 2019 + 2006 - 2019 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 LPUART1 的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + + + +5. USBD CDC使用,参考文章[STM32L496 USB CDC适配](https://club.rt-thread.org/ask/article/2959.html) + +## 注意事项 + +- 开机时如果不能打印 RT-Thread 版本信息,请重新选择 PC 端串口调试软件的串口号或将 BSP 中串口的 GPIO 速率调低 + +## 联系人信息 + +维护人: + +- [super_mcu] 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32h743-openmv-h7plus/SConscript b/bsp/stm32/stm32h743-openmv-h7plus/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/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/stm32h743-openmv-h7plus/SConstruct b/bsp/stm32/stm32h743-openmv-h7plus/SConstruct new file mode 100644 index 0000000000..a7cc0cb251 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, 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 = 'STM32H7xx_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/stm32h743-openmv-h7plus/applications/SConscript b/bsp/stm32/stm32h743-openmv-h7plus/applications/SConscript new file mode 100644 index 0000000000..a868c92232 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/applications/SConscript @@ -0,0 +1,13 @@ +from building import * + +cwd = GetCurrentDir() + +src = Split(''' +main.c +''') + +CPPPATH = [str(Dir('#')), cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32h743-openmv-h7plus/applications/main.c b/bsp/stm32/stm32h743-openmv-h7plus/applications/main.c new file mode 100644 index 0000000000..d670d073c2 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/applications/main.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-14 supperthomas first version + */ + +#include +#include +#include + +/* defined the LED2 pin: PB7 */ +#define LED1_PIN GET_PIN(C, 0) + +int main(void) +{ + /* set LED2 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(2000); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(2000); + } +} diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..8d1960d201 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/.mxproject @@ -0,0 +1,25 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h743xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_armclang_ltm.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv81mml.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm35p.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\stm32h7xx_it.c;..\Core\Src\stm32h7xx_hal_msp.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;..\Core\Src\system_stm32h7xx.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;..\Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;..\Core\Src\system_stm32h7xx.c;;; +HeaderPath=..\Drivers\STM32H7xx_HAL_Driver\Inc;..\Drivers\STM32H7xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32H7xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32H743xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h +HeaderFiles#1=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h +HeaderFiles#2=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_it.c +SourceFiles#1=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c +SourceFiles#2=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=F:/04_git_repo/GITEE/rt-thread_github/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src +SourceFiles=; + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/main.h b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/main.h new file mode 100644 index 0000000000..30358f7b34 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/main.h @@ -0,0 +1,70 @@ +/* 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 is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32h7xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define LED_RED_Pin GPIO_PIN_0 +#define LED_RED_GPIO_Port GPIOC +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h new file mode 100644 index 0000000000..2df387d30c --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_hal_conf.h @@ -0,0 +1,510 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32H7xx_HAL_CONF_H +#define STM32H7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_FDCAN_MODULE_ENABLED */ +/* #define HAL_FMAC_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +/* #define HAL_CORDIC_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_OTFDEC_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_HRTIM_MODULE_ENABLED */ +/* #define HAL_HSEM_MODULE_ENABLED */ +/* #define HAL_GFXMMU_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_OPAMP_MODULE_ENABLED */ +/* #define HAL_OSPI_MODULE_ENABLED */ +/* #define HAL_OSPI_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_RAMECC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +/* #define HAL_SWPMI_MODULE_ENABLED */ +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_PSSI_MODULE_ENABLED */ +/* #define HAL_DTS_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_MDMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_HSEM_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE (12000000UL) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal oscillator (CSI) default value. + * This value is the default CSI value after Reset. + */ +#if !defined (CSI_VALUE) + #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +#if !defined (LSI_VALUE) + #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY (15UL) /*!< tick interrupt priority */ +#define USE_RTOS 0 +#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ +#define USE_SPI_CRC 0U /*!< use CRC in SPI */ + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ +#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ +#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ +#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ +#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ +#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################### Ethernet Configuration ######################### */ +#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ +#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ + +#define ETH_MAC_ADDR0 (0x02UL) +#define ETH_MAC_ADDR1 (0x00UL) +#define ETH_MAC_ADDR2 (0x00UL) +#define ETH_MAC_ADDR3 (0x00UL) +#define ETH_MAC_ADDR4 (0x00UL) +#define ETH_MAC_ADDR5 (0x00UL) + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32h7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32h7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32h7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_MDMA_MODULE_ENABLED + #include "stm32h7xx_hal_mdma.h" +#endif /* HAL_MDMA_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32h7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32h7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32h7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32h7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32h7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DTS_MODULE_ENABLED + #include "stm32h7xx_hal_dts.h" +#endif /* HAL_DTS_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32h7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32h7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32h7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32h7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED + #include "stm32h7xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32h7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32h7xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CORDIC_MODULE_ENABLED + #include "stm32h7xx_hal_cordic.h" +#endif /* HAL_CORDIC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32h7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32h7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32h7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32h7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_GFXMMU_MODULE_ENABLED + #include "stm32h7xx_hal_gfxmmu.h" +#endif /* HAL_GFXMMU_MODULE_ENABLED */ + +#ifdef HAL_FMAC_MODULE_ENABLED + #include "stm32h7xx_hal_fmac.h" +#endif /* HAL_FMAC_MODULE_ENABLED */ + +#ifdef HAL_HRTIM_MODULE_ENABLED + #include "stm32h7xx_hal_hrtim.h" +#endif /* HAL_HRTIM_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED + #include "stm32h7xx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32h7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32h7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32h7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32h7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32h7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32h7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32h7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32h7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32h7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32h7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED +#include "stm32h7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED +#include "stm32h7xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_OSPI_MODULE_ENABLED + #include "stm32h7xx_hal_ospi.h" +#endif /* HAL_OSPI_MODULE_ENABLED */ + +#ifdef HAL_OTFDEC_MODULE_ENABLED +#include "stm32h7xx_hal_otfdec.h" +#endif /* HAL_OTFDEC_MODULE_ENABLED */ + +#ifdef HAL_PSSI_MODULE_ENABLED + #include "stm32h7xx_hal_pssi.h" +#endif /* HAL_PSSI_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32h7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32h7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RAMECC_MODULE_ENABLED + #include "stm32h7xx_hal_ramecc.h" +#endif /* HAL_RAMECC_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32h7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32h7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32h7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32h7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32h7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32h7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32h7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SWPMI_MODULE_ENABLED + #include "stm32h7xx_hal_swpmi.h" +#endif /* HAL_SWPMI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32h7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32h7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32h7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32h7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32h7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32h7xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32h7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32h7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32h7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t *file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32H7xx_HAL_CONF_H */ diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h new file mode 100644 index 0000000000..edc9db7de6 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Inc/stm32h7xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32H7xx_IT_H +#define __STM32H7xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32H7xx_IT_H */ diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/main.c b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/main.c new file mode 100644 index 0000000000..6e63fd24d7 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/main.c @@ -0,0 +1,270 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 80; + RCC_OscInitStruct.PLL.PLLP = 2; + RCC_OscInitStruct.PLL.PLLQ = 2; + RCC_OscInitStruct.PLL.PLLR = 2; + RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3; + RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; + RCC_OscInitStruct.PLL.PLLFRACN = 0; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 + |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : LED_RED_Pin */ + GPIO_InitStruct.Pin = LED_RED_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LED_RED_GPIO_Port, &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 */ + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c new file mode 100644 index 0000000000..f068ea8fd8 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/Core/Src/stm32h7xx_hal_msp.c @@ -0,0 +1,156 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32h7xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ +#include "drv_common.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB14 ------> USART1_TX + PB15 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PB14 ------> USART1_TX + PB15 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..95357d9b7a --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,164 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +Mcu.Family=STM32H7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SYS +Mcu.IP4=USART1 +Mcu.IPNb=5 +Mcu.Name=STM32H743IIKx +Mcu.Package=UFBGA176 +Mcu.Pin0=PH0-OSC_IN (PH0) +Mcu.Pin1=PH1-OSC_OUT (PH1) +Mcu.Pin2=PC0 +Mcu.Pin3=PB14 +Mcu.Pin4=PB15 +Mcu.Pin5=VP_SYS_VS_Systick +Mcu.PinsNb=6 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H743IIKx +MxCube.Version=6.4.0 +MxDb.Version=DB.6.0.40 +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\:15\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PB14.Locked=true +PB14.Mode=Asynchronous +PB14.Signal=USART1_TX +PB15.Locked=true +PB15.Mode=Asynchronous +PB15.Signal=USART1_RX +PC0.GPIOParameters=GPIO_Label +PC0.GPIO_Label=LED_RED +PC0.Locked=true +PC0.Signal=GPIO_Output +PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator +PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN +PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator +PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT +PinOutPanel.CurrentBGAView=Top +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H743IIKx +ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.9.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +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.32 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=24187500 +RCC.AHB12Freq_Value=240000000 +RCC.AHB4Freq_Value=240000000 +RCC.APB1Freq_Value=120000000 +RCC.APB2Freq_Value=120000000 +RCC.APB3Freq_Value=120000000 +RCC.APB4Freq_Value=120000000 +RCC.AXIClockFreq_Value=240000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=64000000 +RCC.CortexFreq_Value=480000000 +RCC.CpuClockFreq_Value=480000000 +RCC.D1CPREFreq_Value=480000000 +RCC.D1PPRE=RCC_APB3_DIV2 +RCC.D2PPRE1=RCC_APB1_DIV2 +RCC.D2PPRE2=RCC_APB2_DIV2 +RCC.D3PPRE=RCC_APB4_DIV2 +RCC.DFSDMACLkFreq_Value=480000000 +RCC.DFSDMFreq_Value=120000000 +RCC.DIVM1=1 +RCC.DIVN1=80 +RCC.DIVP1Freq_Value=480000000 +RCC.DIVP2Freq_Value=24187500 +RCC.DIVP3Freq_Value=24187500 +RCC.DIVQ1Freq_Value=480000000 +RCC.DIVQ2Freq_Value=24187500 +RCC.DIVQ3Freq_Value=24187500 +RCC.DIVR1Freq_Value=480000000 +RCC.DIVR2Freq_Value=24187500 +RCC.DIVR3Freq_Value=24187500 +RCC.FDCANFreq_Value=480000000 +RCC.FMCFreq_Value=240000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=240000000 +RCC.HCLKFreq_Value=240000000 +RCC.HPRE=RCC_HCLK_DIV2 +RCC.HRTIMFreq_Value=240000000 +RCC.HSE_VALUE=12000000 +RCC.I2C123Freq_Value=120000000 +RCC.I2C4Freq_Value=120000000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.LPTIM1Freq_Value=120000000 +RCC.LPTIM2Freq_Value=120000000 +RCC.LPTIM345Freq_Value=120000000 +RCC.LPUART1Freq_Value=120000000 +RCC.LTDCFreq_Value=24187500 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=480000000 +RCC.PLL2FRACN=0 +RCC.PLL3FRACN=0 +RCC.PLLFRACN=0 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.QSPIFreq_Value=240000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=480000000 +RCC.SAI23Freq_Value=480000000 +RCC.SAI4AFreq_Value=480000000 +RCC.SAI4BFreq_Value=480000000 +RCC.SDMMCFreq_Value=480000000 +RCC.SPDIFRXFreq_Value=480000000 +RCC.SPI123Freq_Value=480000000 +RCC.SPI45Freq_Value=120000000 +RCC.SPI6Freq_Value=120000000 +RCC.SWPMI1Freq_Value=120000000 +RCC.SYSCLKFreq_VALUE=480000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.Tim1OutputFreq_Value=240000000 +RCC.Tim2OutputFreq_Value=240000000 +RCC.TraceFreq_Value=64000000 +RCC.USART16Freq_Value=120000000 +RCC.USART234578Freq_Value=120000000 +RCC.USBFreq_Value=480000000 +RCC.VCO1OutputFreq_Value=960000000 +RCC.VCO2OutputFreq_Value=48375000 +RCC.VCO3OutputFreq_Value=48375000 +RCC.VCOInput1Freq_Value=12000000 +RCC.VCOInput2Freq_Value=375000 +RCC.VCOInput3Freq_Value=375000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/Kconfig b/bsp/stm32/stm32h743-openmv-h7plus/board/Kconfig new file mode 100644 index 0000000000..8b58cf83c6 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/Kconfig @@ -0,0 +1,53 @@ +menu "Hardware Drivers Config" + +config SOC_STM32H743II + bool + select SOC_SERIES_STM32H7 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +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_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART2 + bool "Enable UART2" + default n + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_LPUART1 + bool "Enable LPUART1" + default n + + config BSP_LPUART1_RX_USING_DMA + bool "Enable LPUART1 RX DMA" + depends on BSP_USING_LPUART1 && RT_SERIAL_USING_DMA + default n + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/SConscript b/bsp/stm32/stm32h743-openmv-h7plus/board/SConscript new file mode 100644 index 0000000000..72895390e2 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/SConscript @@ -0,0 +1,30 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Core/Src/stm32h7xx_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 + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h743xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h743xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h743xx.s'] + +CPPDEFINES = ['STM32H743xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/board.c b/bsp/stm32/stm32h743-openmv-h7plus/board/board.c new file mode 100644 index 0000000000..3d87624070 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/board.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-14 supperthomas first version + */ + + +#include +#include + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Supply configuration update enable + */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 80; + RCC_OscInitStruct.PLL.PLLP = 2; + RCC_OscInitStruct.PLL.PLLQ = 2; + RCC_OscInitStruct.PLL.PLLR = 2; + RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3; + RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; + RCC_OscInitStruct.PLL.PLLFRACN = 0; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 + |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } +} + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/board.h b/bsp/stm32/stm32h743-openmv-h7plus/board/board.h new file mode 100644 index 0000000000..c2bf0c0323 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/board.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-14 supperthomas 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 (2048 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM1_SIZE (128) +#define STM32_SRAM1_START (0x20000000) +#define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_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_SRAM1_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.icf b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.icf new file mode 100644 index 0000000000..92c9f07b9b --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.icf @@ -0,0 +1,32 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; +define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM1_end__ = 0x2001FFFF; +define symbol __ICFEDIT_region_RAM2_start__ = 0x24000000; +define symbol __ICFEDIT_region_RAM2_end__ = 0x2407FFFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__]; +define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_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 RAM1_region { section .sram , readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.lds b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.lds new file mode 100644 index 0000000000..0f05c3684c --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32H7XX with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 2048k /* 2048KB flash */ + RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ + RAM2 (rw) : ORIGIN = 0x24000000, LENGTH = 512k /* 512K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x400; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM1 + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM1 + + __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) + } > RAM1 + __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/stm32h743-openmv-h7plus/board/linker_scripts/link.sct b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.sct new file mode 100644 index 0000000000..6ac1f57e6c --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/board/linker_scripts/link.sct @@ -0,0 +1,19 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } + RW_IRAM2 0x24000000 0x0080000 { + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/figures/board.png b/bsp/stm32/stm32h743-openmv-h7plus/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..bdcdb066f9dd5a23dc67bcd060680a4bbe0c8996 GIT binary patch literal 237534 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κYQE2`Pd<)4uj4(X)5%9fi|ykG%N*ynU;gs{ju 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 ul`~0i)T8ydk>Fed4w|~RuwVasPyk*9z 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 z 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 rAQOvRez=9za!B^9UuL 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 Ui{XEwcl!If{Z}kril1Zu0+!BbHUIzs literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32h743-openmv-h7plus/project.ewd b/bsp/stm32/stm32h743-openmv-h7plus/project.ewd new file mode 100644 index 0000000000..4b27053590 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/project.ewp b/bsp/stm32/stm32h743-openmv-h7plus/project.ewp new file mode 100644 index 0000000000..7411ec8993 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/project.ewp @@ -0,0 +1,2276 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + 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-m4\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + + Drivers + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\iar\startup_stm32l496xx.s + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + + + $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\mempool.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\clock.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + + Libraries + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + + + + utestcases + + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/project.eww b/bsp/stm32/stm32h743-openmv-h7plus/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/project.uvoptx b/bsp/stm32/stm32h743-openmv-h7plus/project.uvoptx new file mode 100644 index 0000000000..1c2094b9a6 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/project.uvoptx @@ -0,0 +1,973 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + JL2CM3 + -U601003695 -O78 -S8 -ZTIFSpeedSel50000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H7x_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H7x_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 1 + 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\showmem.c + showmem.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\div0.c + div0.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 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\waitqueue.c + waitqueue.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\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.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\pipe.c + pipe.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 4 + 16 + 2 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h743xx.s + startup_stm32h743xx.s + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Core\Src\stm32h7xx_hal_msp.c + stm32h7xx_hal_msp.c + 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\clock.c + clock.c + 0 + 0 + + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 7 + 38 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c + stm32h7xx_hal_rcc.c + 0 + 0 + + + 7 + 39 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c + stm32h7xx_hal_pwr.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c + stm32h7xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sram.c + stm32h7xx_hal_sram.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c + stm32h7xx_hal_cortex.c + 0 + 0 + + + 7 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp_ex.c + stm32h7xx_hal_cryp_ex.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c + stm32h7xx_hal_dma_ex.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp.c + stm32h7xx_hal_cryp.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_usart.c + stm32h7xx_hal_usart.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc_ex.c + stm32h7xx_hal_crc_ex.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c + stm32h7xx_hal_gpio.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c + stm32h7xx_hal_uart_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c + stm32h7xx_hal_mdma.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c + stm32h7xx_hal.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c + stm32h7xx_hal_dma.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c + stm32h7xx_hal_uart.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_comp.c + stm32h7xx_hal_comp.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rng.c + stm32h7xx_hal_rng.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc.c + stm32h7xx_hal_crc.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cec.c + stm32h7xx_hal_cec.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c + stm32h7xx_hal_pwr_ex.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c + system_stm32h7xx.c + 0 + 0 + + + +
diff --git a/bsp/stm32/stm32h743-openmv-h7plus/project.uvprojx b/bsp/stm32/stm32h743-openmv-h7plus/project.uvprojx new file mode 100644 index 0000000000..28bfba8e9e --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/project.uvprojx @@ -0,0 +1,723 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::ARMCC + 0 + + + STM32H743IIKx + STMicroelectronics + Keil.STM32H7xx_DFP.2.5.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00100000) IROM2(0x08100000,0x00100000) XRAM(0x30000000,0x00048000) XRAM2(0x38000000,0x00010000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM)) + 0 + $$Device:STM32H743IIKx$Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h + + + + + + + + + + $$Device:STM32H743IIKx$CMSIS\SVD\STM32H743.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 3 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x30000000 + 0x48000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x8100000 + 0x100000 + + + 0 + 0x30000000 + 0x48000 + + + 0 + 0x38000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x80000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, __RTTHREAD__, STM32H743xx, __CLK_TCK=RT_TICK_PER_SECOND + + .;applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\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;..\..\..\components\libc\compilers\common\nogcc;..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Inc;..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Include;..\libraries\STM32H7xx_HAL\CMSIS\Include;..\..\..\examples\utest\testcases\kernel + + + + 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 + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + Drivers + + + startup_stm32h743xx.s + 2 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h743xx.s + + + stm32h7xx_hal_msp.c + 1 + board\CubeMX_Config\Core\Src\stm32h7xx_hal_msp.c + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\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 + + + clock.c + 1 + ..\..\..\src\clock.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + device.c + 1 + ..\..\..\src\device.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + components.c + 1 + ..\..\..\src\components.c + + + + + Libraries + + + stm32h7xx_hal_rcc.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c + + + stm32h7xx_hal_pwr.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c + + + stm32h7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c + + + stm32h7xx_hal_sram.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sram.c + + + stm32h7xx_hal_cortex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c + + + stm32h7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp_ex.c + + + stm32h7xx_hal_dma_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c + + + stm32h7xx_hal_cryp.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cryp.c + + + stm32h7xx_hal_usart.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_usart.c + + + stm32h7xx_hal_crc_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc_ex.c + + + stm32h7xx_hal_gpio.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c + + + stm32h7xx_hal_uart_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c + + + stm32h7xx_hal_mdma.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c + + + stm32h7xx_hal.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c + + + stm32h7xx_hal_dma.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c + + + stm32h7xx_hal_uart.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c + + + stm32h7xx_hal_comp.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_comp.c + + + stm32h7xx_hal_rng.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rng.c + + + stm32h7xx_hal_crc.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_crc.c + + + stm32h7xx_hal_cec.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cec.c + + + stm32h7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32H7xx_HAL\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c + + + system_stm32h7xx.c + 1 + ..\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.h b/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.h new file mode 100644 index 0000000000..241011a420 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.h @@ -0,0 +1,189 @@ +#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 +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_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 256 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40100 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* tools packages */ + + +/* system packages */ + +/* acceleration: Assembly language or algorithmic acceleration 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_STM32H7 + +/* Hardware Drivers Config */ + +#define SOC_STM32H743II + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +#endif diff --git a/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.py b/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.py new file mode 100644 index 0000000000..9193d4a1d5 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/rtconfig.py @@ -0,0 +1,185 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = 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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict --scatter "board\linker_scripts\link.sct"' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' + CFLAGS += ' -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 ' + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == '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-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M4' + AFLAGS += ' --fpu VFPv4_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32h743-openmv-h7plus/template.ewp b/bsp/stm32/stm32h743-openmv-h7plus/template.ewp new file mode 100644 index 0000000000..f390ad7bc1 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/template.ewp @@ -0,0 +1,2031 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/template.eww b/bsp/stm32/stm32h743-openmv-h7plus/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32h743-openmv-h7plus/template.uvoptx b/bsp/stm32/stm32h743-openmv-h7plus/template.uvoptx new file mode 100644 index 0000000000..e22fbca06e --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/template.uvoptx @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 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 + JL2CM3 + -U601003695 -O78 -S8 -ZTIFSpeedSel50000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H7x_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC8000 -FD20000000 -FF0STM32H7x_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32h743-openmv-h7plus/template.uvprojx b/bsp/stm32/stm32h743-openmv-h7plus/template.uvprojx new file mode 100644 index 0000000000..5325c7e9ac --- /dev/null +++ b/bsp/stm32/stm32h743-openmv-h7plus/template.uvprojx @@ -0,0 +1,396 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32H743IIKx + STMicroelectronics + Keil.STM32H7xx_DFP.2.5.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00100000) IROM2(0x08100000,0x00100000) XRAM(0x30000000,0x00048000) XRAM2(0x38000000,0x00010000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32H743IIKx$CMSIS\Flash\STM32H7x_2048.FLM)) + 0 + $$Device:STM32H743IIKx$Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h + + + + + + + + + + $$Device:STM32H743IIKx$CMSIS\SVD\STM32H743.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 3 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x30000000 + 0x48000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x8100000 + 0x100000 + + + 0 + 0x30000000 + 0x48000 + + + 0 + 0x38000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x24000000 + 0x80000 + + + + + + 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 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
-- GitLab