From b77a1fdea1167a9a751e9a5b39e5186ca1a65313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=99=BA=E8=B6=85?= Date: Sun, 1 Sep 2019 15:59:10 +0800 Subject: [PATCH] =?UTF-8?q?stm32f427-RoboMaster-a=E6=9D=BF=20BSP=E5=8C=85?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=EF=BC=8C=E5=AE=8C=E6=88=90=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E8=A6=81=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f427-robomaster-a/.config | 421 +++ bsp/stm32/stm32f427-robomaster-a/.gitignore | 42 + .../EventRecorderStub.scvd | 9 + bsp/stm32/stm32f427-robomaster-a/Kconfig | 21 + bsp/stm32/stm32f427-robomaster-a/README.md | 114 + bsp/stm32/stm32f427-robomaster-a/SConscript | 15 + bsp/stm32/stm32f427-robomaster-a/SConstruct | 59 + .../applications/SConscript | 12 + .../applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 177 + .../board/CubeMX_Config/Inc/main.h | 95 + .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 439 +++ .../board/CubeMX_Config/Inc/stm32f4xx_it.h | 85 + .../board/CubeMX_Config/Src/main.c | 400 +++ .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 364 ++ .../board/CubeMX_Config/Src/stm32f4xx_it.c | 232 ++ .../CubeMX_Config/Src/system_stm32f4xx.c | 761 +++++ .../stm32f427-robomaster-a/board/Kconfig | 63 + .../stm32f427-robomaster-a/board/SConscript | 38 + .../stm32f427-robomaster-a/board/board.c | 49 + .../stm32f427-robomaster-a/board/board.h | 52 + .../board/linker_scripts/link.icf | 29 + .../board/linker_scripts/link.lds | 156 + .../board/linker_scripts/link.sct | 15 + .../stm32f427-robomaster-a/figures/board.png | Bin 0 -> 294134 bytes bsp/stm32/stm32f427-robomaster-a/project.ewd | 2834 ++++++++++++++++ bsp/stm32/stm32f427-robomaster-a/project.ewp | 2292 +++++++++++++ bsp/stm32/stm32f427-robomaster-a/project.eww | 10 + .../stm32f427-robomaster-a/project.uvopt | 162 + .../stm32f427-robomaster-a/project.uvoptx | 185 + .../stm32f427-robomaster-a/project.uvproj | 1189 +++++++ .../stm32f427-robomaster-a/project.uvprojx | 862 +++++ bsp/stm32/stm32f427-robomaster-a/rtconfig.h | 179 + bsp/stm32/stm32f427-robomaster-a/rtconfig.py | 143 + bsp/stm32/stm32f427-robomaster-a/template.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f427-robomaster-a/template.ewp | 2031 +++++++++++ bsp/stm32/stm32f427-robomaster-a/template.eww | 10 + .../stm32f427-robomaster-a/template.uvopt | 162 + .../stm32f427-robomaster-a/template.uvoptx | 185 + .../stm32f427-robomaster-a/template.uvproj | 407 +++ .../stm32f427-robomaster-a/template.uvprojx | 392 +++ 42 files changed, 17704 insertions(+) create mode 100644 bsp/stm32/stm32f427-robomaster-a/.config create mode 100644 bsp/stm32/stm32f427-robomaster-a/.gitignore create mode 100644 bsp/stm32/stm32f427-robomaster-a/EventRecorderStub.scvd create mode 100644 bsp/stm32/stm32f427-robomaster-a/Kconfig create mode 100644 bsp/stm32/stm32f427-robomaster-a/README.md create mode 100644 bsp/stm32/stm32f427-robomaster-a/SConscript create mode 100644 bsp/stm32/stm32f427-robomaster-a/SConstruct create mode 100644 bsp/stm32/stm32f427-robomaster-a/applications/SConscript create mode 100644 bsp/stm32/stm32f427-robomaster-a/applications/main.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_it.h create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_it.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/system_stm32f4xx.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/Kconfig create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/SConscript create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/board.c create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/board.h create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f427-robomaster-a/figures/board.png create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.ewd create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.ewp create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.eww create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.uvopt create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.uvoptx create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.uvproj create mode 100644 bsp/stm32/stm32f427-robomaster-a/project.uvprojx create mode 100644 bsp/stm32/stm32f427-robomaster-a/rtconfig.h create mode 100644 bsp/stm32/stm32f427-robomaster-a/rtconfig.py create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.ewd create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.ewp create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.eww create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.uvopt create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.uvoptx create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.uvproj create mode 100644 bsp/stm32/stm32f427-robomaster-a/template.uvprojx diff --git a/bsp/stm32/stm32f427-robomaster-a/.config b/bsp/stm32/stm32f427-robomaster-a/.config new file mode 100644 index 000000000..d0a340e90 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/.config @@ -0,0 +1,421 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT 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_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart6" +CONFIG_RT_VER_NUM=0x40002 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC 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=y +CONFIG_RT_USING_SENSOR_CMD=y +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set +CONFIG_RT_LIBC_USING_TIME=y + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT 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_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_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTHUB 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_ONNX_PARSER is not set +# CONFIG_PKG_USING_ONNX_BACKEND 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 + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ADBD is not set + +# +# system packages +# +# 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_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set + +# +# peripheral libraries and drivers +# +CONFIG_PKG_USING_SENSORS_DRIVERS=y +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +CONFIG_PKG_USING_MPU6XXX=y +CONFIG_PKG_MPU6XXX_PATH="/packages/peripherals/sensors/mpu6xxx" +# CONFIG_PKG_USING_MPU6XXX_V001 is not set +# CONFIG_PKG_USING_MPU6XXX_V100 is not set +CONFIG_PKG_USING_MPU6XXX_LATEST_VERSION=y +CONFIG_PKG_MPU6XXX_VER="latest" +CONFIG_PKG_USING_MPU6XXX_ACCE=y +CONFIG_PKG_USING_MPU6XXX_GYRO=y +CONFIG_PKG_USING_MPU6XXX_MAG=y +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_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_LCD_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F427II=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART6=y +# CONFIG_BSP_UART6_RX_USING_DMA is not set +CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_UART3_RX_USING_DMA is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f427-robomaster-a/.gitignore b/bsp/stm32/stm32f427-robomaster-a/.gitignore new file mode 100644 index 000000000..7221bde01 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/.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/stm32f427-robomaster-a/EventRecorderStub.scvd b/bsp/stm32/stm32f427-robomaster-a/EventRecorderStub.scvd new file mode 100644 index 000000000..2956b2968 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/Kconfig b/bsp/stm32/stm32f427-robomaster-a/Kconfig new file mode 100644 index 000000000..8cbc7b71a --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/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/stm32f427-robomaster-a/README.md b/bsp/stm32/stm32f427-robomaster-a/README.md new file mode 100644 index 000000000..c9e0e6271 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/README.md @@ -0,0 +1,114 @@ +# STM32F427 RoboMaster A板 BSP 说明 + +## 简介 + +本文档为 RoboMaster A板 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +RoboMaster开发板套件是一款面向机器人DIY的开源主控套件。开发板主控芯片为STM32F427IIH6,拥有丰富的扩展接口和通信接口,板载IMU传感器,可配合RoboMaster出品的M3508、 M2006直流无刷减速电机、UWB模块以及妙算等产品使用,亦可配合DJI飞控SDK使用,配件丰富。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f427IIH6,主频 180MHz,128KB FLASH ,2048KB RAM +- 常用外设 + - LED:2个,D10(红色,PE11),D9(绿色,PE14) + - 按键:1个,KEY(PB2) +- 常用接口:SD 卡接口 OLED接口 +- 调试接口,标准 JTAG/SWD + +开发板更多详细信息请参考 RoboMaster官网 [RoboMaster A板开发板介绍](https://www.robomaster.com/zh-CN/products/components/general/development-board)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| SD卡 | 暂不支持 | | +| CAN | 支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 | +| UART | 支持 | UART3/6 | +| SPI | 暂不支持 | SPI5/ | +| I2C | 暂不支持 | | +| SDIO | 暂不支持 | 即将支持 | +| RTC | 暂不支持 | 即将支持 | +| PWM | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | +| 无 |... | ... + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 xxx 仿真器下载程序,在通过 xxx 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,绿色LED灯闪烁 。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 3.1.1 build Nov 19 2018 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口6 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 无 + +## 联系人信息 + +维护人: + 无 diff --git a/bsp/stm32/stm32f427-robomaster-a/SConscript b/bsp/stm32/stm32f427-robomaster-a/SConscript new file mode 100644 index 000000000..20f7689c5 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/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/stm32f427-robomaster-a/SConstruct b/bsp/stm32/stm32f427-robomaster-a/SConstruct new file mode 100644 index 000000000..629f25c6e --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/SConstruct @@ -0,0 +1,59 @@ +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 + +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 = 'STM32F4xx_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/stm32f427-robomaster-a/applications/SConscript b/bsp/stm32/stm32f427-robomaster-a/applications/SConscript new file mode 100644 index 000000000..6f66f7ab7 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/applications/SConscript @@ -0,0 +1,12 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() +CPPPATH = [cwd, str(Dir('#'))] +src = Split(""" +main.c +""") + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f427-robomaster-a/applications/main.c b/bsp/stm32/stm32f427-robomaster-a/applications/main.c new file mode 100644 index 000000000..7c2182383 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include +#include +#include + +/* defined the LED_G pin: PF14 */ +#define LED0_PIN GET_PIN(F, 14) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/.mxproject new file mode 100644 index 000000000..94d5639be --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousGenFiles] +HeaderPath=F:/rt_threadStudy/rt-thread/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc +HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h;gpio.h;spi.h;usart.h; +SourcePath=F:/rt_threadStudy/rt-thread/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src +SourceFiles=stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c;gpio.c;spi.c;usart.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f427xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; +HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32F427xx;USE_HAL_DRIVER;STM32F427xx; + diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 000000000..91f42a655 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,177 @@ +#MicroXplorer Configuration settings - do not modify +CAN1.CalculateTimeQuantum=380.95238095238096 +CAN1.IPParameters=CalculateTimeQuantum +CAN2.CalculateTimeQuantum=380.95238095238096 +CAN2.IPParameters=CalculateTimeQuantum +File.Version=6 +KeepUserPlacement=true +Mcu.Family=STM32F4 +Mcu.IP0=CAN1 +Mcu.IP1=CAN2 +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SPI5 +Mcu.IP5=SYS +Mcu.IP6=USART6 +Mcu.IPNb=7 +Mcu.Name=STM32F427I(G-I)Hx +Mcu.Package=UFBGA176 +Mcu.Pin0=PG14 +Mcu.Pin1=PA14 +Mcu.Pin10=PF9 +Mcu.Pin11=PF8 +Mcu.Pin12=PE11 +Mcu.Pin13=PB12 +Mcu.Pin14=PB13 +Mcu.Pin15=PF14 +Mcu.Pin16=VP_SYS_VS_Systick +Mcu.Pin2=PA13 +Mcu.Pin3=PD0 +Mcu.Pin4=PG9 +Mcu.Pin5=PD1 +Mcu.Pin6=PH0/OSC_IN +Mcu.Pin7=PH1/OSC_OUT +Mcu.Pin8=PF7 +Mcu.Pin9=PF6 +Mcu.PinsNb=17 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F427IIHx +MxCube.Version=5.2.1 +MxDb.Version=DB.5.0.21 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.USART6_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PB12.Locked=true +PB12.Mode=Slave +PB12.Signal=CAN2_RX +PB13.Locked=true +PB13.Mode=Slave +PB13.Signal=CAN2_TX +PCC.Checker=false +PCC.Line=STM32F427/437 +PCC.MCU=STM32F427I(G-I)Hx +PCC.PartNumber=STM32F427IIHx +PCC.Seq0=0 +PCC.Series=STM32F4 +PCC.Temperature=25 +PCC.Vdd=3.3 +PD0.Locked=true +PD0.Mode=Master +PD0.Signal=CAN1_RX +PD1.Mode=Master +PD1.Signal=CAN1_TX +PE11.GPIOParameters=GPIO_Label +PE11.GPIO_Label=LED_RED +PE11.Locked=true +PE11.Signal=GPIO_Output +PF14.GPIOParameters=GPIO_Label +PF14.GPIO_Label=LED_GREEN +PF14.Locked=true +PF14.Signal=GPIO_Output +PF6.Locked=true +PF6.Signal=GPIO_Output +PF7.Mode=Full_Duplex_Master +PF7.Signal=SPI5_SCK +PF8.Mode=Full_Duplex_Master +PF8.Signal=SPI5_MISO +PF9.Mode=Full_Duplex_Master +PF9.Signal=SPI5_MOSI +PG14.Mode=Asynchronous +PG14.Signal=USART6_TX +PG9.Mode=Asynchronous +PG9.Signal=USART6_RX +PH0/OSC_IN.Mode=HSE-External-Oscillator +PH0/OSC_IN.Signal=RCC_OSC_IN +PH1/OSC_OUT.Mode=HSE-External-Oscillator +PH1/OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.CurrentBGAView=Top +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=3 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F427IIHx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.24.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-true,3-MX_SPI5_Init-SPI5-false-HAL-true,4-MX_USART6_UART_Init-USART6-false-HAL-true +RCC.48MHZClocksFreq_Value=84000000 +RCC.AHBFreq_Value=168000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=168000000 +RCC.CortexFreq_Value=168000000 +RCC.EthernetFreq_Value=168000000 +RCC.FCLKCortexFreq_Value=168000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=168000000 +RCC.HSE_VALUE=12000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=192000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VcooutputI2S,VcooutputI2SQ +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=168000000 +RCC.PLLCLKFreq_Value=168000000 +RCC.PLLM=6 +RCC.PLLN=168 +RCC.PLLQCLKFreq_Value=84000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=6000000 +RCC.SAI_AClocksFreq_Value=24500000 +RCC.SAI_BClocksFreq_Value=24500000 +RCC.SYSCLKFreq_VALUE=168000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VCOSAIOutputFreq_Value=98000000 +RCC.VCOSAIOutputFreq_ValueQ=24500000 +RCC.VcooutputI2S=192000000 +RCC.VcooutputI2SQ=192000000 +SPI5.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_128 +SPI5.CalculateBaudRate=656.25 KBits/s +SPI5.Direction=SPI_DIRECTION_2LINES +SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler +SPI5.Mode=SPI_MODE_MASTER +SPI5.VirtualType=VM_MASTER +USART6.IPParameters=VirtualMode +USART6.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=Imu diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h new file mode 100644 index 000000000..3270857a0 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,95 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define LED_RED_Pin GPIO_PIN_11 +#define LED_RED_GPIO_Port GPIOE +#define LED_GREEN_Pin GPIO_PIN_14 +#define LED_GREEN_GPIO_Port GPIOF +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 000000000..13fc970d8 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,439 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f4xx_hal_conf.h. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +#define HAL_CAN_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_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)12000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)32000U) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE ((uint32_t)12288000U) /*!< Value of the External audio frequency in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE ((uint32_t)3300U) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FFU) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU) + +#define PHY_READ_TO ((uint32_t)0x0000FFFFU) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_it.h b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_it.h new file mode 100644 index 000000000..1b3a0ad43 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_it.h @@ -0,0 +1,85 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_IT_H +#define __STM32F4xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void USART6_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c new file mode 100644 index 000000000..2d54ce416 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c @@ -0,0 +1,400 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* 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 ---------------------------------------------------------*/ +CAN_HandleTypeDef hcan1; +CAN_HandleTypeDef hcan2; + +SPI_HandleTypeDef hspi5; + +UART_HandleTypeDef huart6; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_SPI5_Init(void); +static void MX_USART6_UART_Init(void); +static void MX_CAN1_Init(void); +static void MX_CAN2_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_SPI5_Init(); + MX_USART6_UART_Init(); + MX_CAN1_Init(); + MX_CAN2_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + 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 = 6; + RCC_OscInitStruct.PLL.PLLN = 168; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief CAN1 Initialization Function + * @param None + * @retval None + */ +static void MX_CAN1_Init(void) +{ + + /* USER CODE BEGIN CAN1_Init 0 */ + + /* USER CODE END CAN1_Init 0 */ + + /* USER CODE BEGIN CAN1_Init 1 */ + + /* USER CODE END CAN1_Init 1 */ + hcan1.Instance = CAN1; + hcan1.Init.Prescaler = 16; + hcan1.Init.Mode = CAN_MODE_NORMAL; + hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; + hcan1.Init.TimeSeg1 = CAN_BS1_1TQ; + hcan1.Init.TimeSeg2 = CAN_BS2_1TQ; + hcan1.Init.TimeTriggeredMode = DISABLE; + hcan1.Init.AutoBusOff = DISABLE; + hcan1.Init.AutoWakeUp = DISABLE; + hcan1.Init.AutoRetransmission = DISABLE; + hcan1.Init.ReceiveFifoLocked = DISABLE; + hcan1.Init.TransmitFifoPriority = DISABLE; + if (HAL_CAN_Init(&hcan1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN CAN1_Init 2 */ + + /* USER CODE END CAN1_Init 2 */ + +} + +/** + * @brief CAN2 Initialization Function + * @param None + * @retval None + */ +static void MX_CAN2_Init(void) +{ + + /* USER CODE BEGIN CAN2_Init 0 */ + + /* USER CODE END CAN2_Init 0 */ + + /* USER CODE BEGIN CAN2_Init 1 */ + + /* USER CODE END CAN2_Init 1 */ + hcan2.Instance = CAN2; + hcan2.Init.Prescaler = 16; + hcan2.Init.Mode = CAN_MODE_NORMAL; + hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ; + hcan2.Init.TimeSeg1 = CAN_BS1_1TQ; + hcan2.Init.TimeSeg2 = CAN_BS2_1TQ; + hcan2.Init.TimeTriggeredMode = DISABLE; + hcan2.Init.AutoBusOff = DISABLE; + hcan2.Init.AutoWakeUp = DISABLE; + hcan2.Init.AutoRetransmission = DISABLE; + hcan2.Init.ReceiveFifoLocked = DISABLE; + hcan2.Init.TransmitFifoPriority = DISABLE; + if (HAL_CAN_Init(&hcan2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN CAN2_Init 2 */ + + /* USER CODE END CAN2_Init 2 */ + +} + +/** + * @brief SPI5 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI5_Init(void) +{ + + /* USER CODE BEGIN SPI5_Init 0 */ + + /* USER CODE END SPI5_Init 0 */ + + /* USER CODE BEGIN SPI5_Init 1 */ + + /* USER CODE END SPI5_Init 1 */ + /* SPI5 parameter configuration*/ + hspi5.Instance = SPI5; + hspi5.Init.Mode = SPI_MODE_MASTER; + hspi5.Init.Direction = SPI_DIRECTION_2LINES; + hspi5.Init.DataSize = SPI_DATASIZE_8BIT; + hspi5.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi5.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi5.Init.NSS = SPI_NSS_SOFT; + hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; + hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi5.Init.TIMode = SPI_TIMODE_DISABLE; + hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi5.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI5_Init 2 */ + + /* USER CODE END SPI5_Init 2 */ + +} + +/** + * @brief USART6 Initialization Function + * @param None + * @retval None + */ +static void MX_USART6_UART_Init(void) +{ + + /* USER CODE BEGIN USART6_Init 0 */ + + /* USER CODE END USART6_Init 0 */ + + /* USER CODE BEGIN USART6_Init 1 */ + + /* USER CODE END USART6_Init 1 */ + huart6.Instance = USART6; + huart6.Init.BaudRate = 115200; + huart6.Init.WordLength = UART_WORDLENGTH_8B; + huart6.Init.StopBits = UART_STOPBITS_1; + huart6.Init.Parity = UART_PARITY_NONE; + huart6.Init.Mode = UART_MODE_TX_RX; + huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart6.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart6) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART6_Init 2 */ + + /* USER CODE END USART6_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6|LED_GREEN_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pins : PF6 LED_GREEN_Pin */ + GPIO_InitStruct.Pin = GPIO_PIN_6|LED_GREEN_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /*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 */ + + /* 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, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c new file mode 100644 index 000000000..5d80144ae --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,364 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f4xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +static uint32_t HAL_RCC_CAN1_CLK_ENABLED=0; + +/** +* @brief CAN MSP Initialization +* This function configures the hardware resources used in this example +* @param hcan: CAN handle pointer +* @retval None +*/ +void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hcan->Instance==CAN1) + { + /* USER CODE BEGIN CAN1_MspInit 0 */ + + /* USER CODE END CAN1_MspInit 0 */ + /* Peripheral clock enable */ + HAL_RCC_CAN1_CLK_ENABLED++; + if(HAL_RCC_CAN1_CLK_ENABLED==1){ + __HAL_RCC_CAN1_CLK_ENABLE(); + } + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**CAN1 GPIO Configuration + PD0 ------> CAN1_RX + PD1 ------> CAN1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_CAN1; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN CAN1_MspInit 1 */ + + /* USER CODE END CAN1_MspInit 1 */ + } + else if(hcan->Instance==CAN2) + { + /* USER CODE BEGIN CAN2_MspInit 0 */ + + /* USER CODE END CAN2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_CAN2_CLK_ENABLE(); + HAL_RCC_CAN1_CLK_ENABLED++; + if(HAL_RCC_CAN1_CLK_ENABLED==1){ + __HAL_RCC_CAN1_CLK_ENABLE(); + } + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**CAN2 GPIO Configuration + PB12 ------> CAN2_RX + PB13 ------> CAN2_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_CAN2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN CAN2_MspInit 1 */ + + /* USER CODE END CAN2_MspInit 1 */ + } + +} + +/** +* @brief CAN MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hcan: CAN handle pointer +* @retval None +*/ +void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +{ + if(hcan->Instance==CAN1) + { + /* USER CODE BEGIN CAN1_MspDeInit 0 */ + + /* USER CODE END CAN1_MspDeInit 0 */ + /* Peripheral clock disable */ + HAL_RCC_CAN1_CLK_ENABLED--; + if(HAL_RCC_CAN1_CLK_ENABLED==0){ + __HAL_RCC_CAN1_CLK_DISABLE(); + } + + /**CAN1 GPIO Configuration + PD0 ------> CAN1_RX + PD1 ------> CAN1_TX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1); + + /* USER CODE BEGIN CAN1_MspDeInit 1 */ + + /* USER CODE END CAN1_MspDeInit 1 */ + } + else if(hcan->Instance==CAN2) + { + /* USER CODE BEGIN CAN2_MspDeInit 0 */ + + /* USER CODE END CAN2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_CAN2_CLK_DISABLE(); + HAL_RCC_CAN1_CLK_ENABLED--; + if(HAL_RCC_CAN1_CLK_ENABLED==0){ + __HAL_RCC_CAN1_CLK_DISABLE(); + } + + /**CAN2 GPIO Configuration + PB12 ------> CAN2_RX + PB13 ------> CAN2_TX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13); + + /* USER CODE BEGIN CAN2_MspDeInit 1 */ + + /* USER CODE END CAN2_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI5) + { + /* USER CODE BEGIN SPI5_MspInit 0 */ + + /* USER CODE END SPI5_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI5_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**SPI5 GPIO Configuration + PF7 ------> SPI5_SCK + PF9 ------> SPI5_MOSI + PF8 ------> SPI5_MISO + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI5; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI5_MspInit 1 */ + + /* USER CODE END SPI5_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI5) + { + /* USER CODE BEGIN SPI5_MspDeInit 0 */ + + /* USER CODE END SPI5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI5_CLK_DISABLE(); + + /**SPI5 GPIO Configuration + PF7 ------> SPI5_SCK + PF9 ------> SPI5_MOSI + PF8 ------> SPI5_MISO + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_8); + + /* USER CODE BEGIN SPI5_MspDeInit 1 */ + + /* USER CODE END SPI5_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART6) + { + /* USER CODE BEGIN USART6_MspInit 0 */ + + /* USER CODE END USART6_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART6_CLK_ENABLE(); + + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**USART6 GPIO Configuration + PG14 ------> USART6_TX + PG9 ------> USART6_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_USART6; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /* USART6 interrupt Init */ + HAL_NVIC_SetPriority(USART6_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART6_IRQn); + /* USER CODE BEGIN USART6_MspInit 1 */ + + /* USER CODE END USART6_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART6) + { + /* USER CODE BEGIN USART6_MspDeInit 0 */ + + /* USER CODE END USART6_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART6_CLK_DISABLE(); + + /**USART6 GPIO Configuration + PG14 ------> USART6_TX + PG9 ------> USART6_RX + */ + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_14|GPIO_PIN_9); + + /* USART6 interrupt DeInit */ + HAL_NVIC_DisableIRQ(USART6_IRQn); + /* USER CODE BEGIN USART6_MspDeInit 1 */ + + /* USER CODE END USART6_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_it.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_it.c new file mode 100644 index 000000000..d619ace84 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_it.c @@ -0,0 +1,232 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f4xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern UART_HandleTypeDef huart6; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f4xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles USART6 global interrupt. + */ +void USART6_IRQHandler(void) +{ + /* USER CODE BEGIN USART6_IRQn 0 */ + + /* USER CODE END USART6_IRQn 0 */ + HAL_UART_IRQHandler(&huart6); + /* USER CODE BEGIN USART6_IRQn 1 */ + + /* USER CODE END USART6_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/system_stm32f4xx.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/system_stm32f4xx.c new file mode 100644 index 000000000..3303f969d --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/system_stm32f4xx.c @@ -0,0 +1,761 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +uint32_t SystemCoreClock = 16000000; +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), user has to ensure that HSE_VALUE + * is same as the real frequency of the crystal used. Otherwise, this function + * may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/Kconfig b/bsp/stm32/stm32f427-robomaster-a/board/Kconfig new file mode 100644 index 000000000..cb4352bf8 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/Kconfig @@ -0,0 +1,63 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F427II + bool + select SOC_SERIES_STM32F4 + default y + +menu "Onboard Peripheral Drivers" +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART6 + bool "Enable UART6 (debug usart)" + default y + + config BSP_UART6_RX_USING_DMA + bool "Enable UART6 RX DMA" + depends on BSP_USING_UART6 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART3 + bool "Enable UART3" + default y + + config BSP_UART3_RX_USING_DMA + bool "Enable UART3 RX DMA" + depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_CAN + bool "Enable CAN" + default n + select RT_USING_CAN + if BSP_USING_CAN + config BSP_USING_CAN1 + bool "using CAN1" + default n + config BSP_USING_CAN2 + bool "using CAN2" + default n + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f427-robomaster-a/board/SConscript b/bsp/stm32/stm32f427-robomaster-a/board/SConscript new file mode 100644 index 000000000..2a6e17831 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/SConscript @@ -0,0 +1,38 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f4xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] +path += [cwd + '/ports'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f427xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f427xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f427xx.s'] + +# STM32F405xx) || STM32F415xx) || STM32F407xx) || STM32F417xx) +# STM32F427xx) || STM32F437xx) || STM32F429xx) || STM32F439xx) +# STM32F401xC) || STM32F401xE) || STM32F410Tx) || STM32F410Cx) +# STM32F410Rx) || STM32F411xE) || STM32F446xx) || STM32F469xx) +# STM32F479xx) || STM32F412Cx) || STM32F412Rx) || STM32F412Vx) +# STM32F412Zx) || STM32F413xx) || STM32F423xx) +# You can select chips from the list above +CPPDEFINES = ['STM32F427xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32f427-robomaster-a/board/board.c b/bsp/stm32/stm32f427-robomaster-a/board/board.c new file mode 100644 index 000000000..5d91cf733 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/board.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + 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 = 6; + RCC_OscInitStruct.PLL.PLLN = 168; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f427-robomaster-a/board/board.h b/bsp/stm32/stm32f427-robomaster-a/board/board.h new file mode 100644 index 000000000..57c8e4a95 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/board.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + * 2019-04-24 yangjie Use the end of ZI as HEAP_BEGIN + */ + +#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/stm32f427-robomaster-a/board/linker_scripts/link.icf b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.icf new file mode 100644 index 000000000..a481a85ff --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.icf @@ -0,0 +1,29 @@ +/*###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_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.lds b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.lds new file mode 100644 index 000000000..9d870aef5 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.lds @@ -0,0 +1,156 @@ +/* + * linker script for STM32L4XX with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 2048k /* 2048KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } > RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } > RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.sct b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.sct new file mode 100644 index 000000000..b4e850d63 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** 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) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f427-robomaster-a/figures/board.png b/bsp/stm32/stm32f427-robomaster-a/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..55bf853bb27e5e6ed8843abeebd3b6372a66ec3b GIT binary patch literal 294134 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 M;Q<{ zs!5%yYx&@9EMMG!4K|?D-0Dt}O|zE=WI5PEuGaCv;Bn@WItR7wdSbjk1D7((*uWPd z&`(MwT%$*8wAW9F?hMh6`+FYuvB-x?E{h>m8UDqobuRKM4Dv6{QEeJC3om$yBHfyg>0oVZY4B8dyi4@Y-6TociMJg%~ zTTJMBn(U&GP&80Rnx@EoXKE_^4<88)nt%+2$qQTQEJj(Q@#!X-J!cjXGtOKzES%au zNx5a&2#h~Dw1S~th_w|pYyiLD7D#ivhdwFz}v&`rJeN2Jv{ zYZSPyHI)ICok0}?#ETFNZ{cOPUBF>5g@berPQ?gY7k!`vV2b-@m^VA?U7=&%^WpQg+-tVQ2# z&C`Jko8+C(>3&~i4{^OQ_nM57A|+t}tD)g>W=hFY76rTC=~z=*)q$|q8Lrmd9xu=a zS%^b_@A}VN$4NbGymVd} zS?TS=b$;0DKjGjq1@VOrS)9m1)AsrPR7bZ-H$258)PKEkk3N&cHdqJ!a8O;>g< z)4!+0v}f3mwk|AW8O4_Xeh?q4WGU<3p+ZF~0ybe`PV`iMAsz`lseA z+G8>>bf!96#*EkEF2MrQ==CW(eS?%3lMwL*NcS@2Ei1CZB}-684QDI7ENBDvCExk^e!FB4$5+Dh05ij1iy-f z=jGaR0rT|uh}q*d)IucfM<-TZ8BAs+wPuGfu2x;rlsS=g%L!70Dlfh@iy$cNNedQ( z3_Xgnp+)PCs#$|DKgvLwxu-3bz$`a6bj72RBg*~=djAmNAx~6K(x5ZXgdJBc+a^K9 zmS~|(B6}-QiyQnUH<&Mπ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

1lN9<*KhQs3D&$RU)SypsW?eC`1NYl@8$VH$ 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

SGYaZ4 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 N4z{i~jaI?g{{+3mk)i+q literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f427-robomaster-a/project.ewd b/bsp/stm32/stm32f427-robomaster-a/project.ewd new file mode 100644 index 000000000..e94c83ed0 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/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/stm32f427-robomaster-a/project.ewp b/bsp/stm32/stm32f427-robomaster-a/project.ewp new file mode 100644 index 000000000..e15eb5ae9 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.ewp @@ -0,0 +1,2292 @@ + + 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 + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\startup_stm32f427xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + mpu6xxx + + $PROJ_DIR$\packages\mpu6xxx-latest\src\mpu6xxx.c + + + $PROJ_DIR$\packages\mpu6xxx-latest\src\sensor_inven_mpu6xxx.c + + + + cpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + Sensors + + $PROJ_DIR$\..\..\..\components\drivers\sensors\sensor.c + + + $PROJ_DIR$\..\..\..\components\drivers\sensors\sensor_cmd.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/project.eww b/bsp/stm32/stm32f427-robomaster-a/project.eww new file mode 100644 index 000000000..c2cb02eb1 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/project.uvopt b/bsp/stm32/stm32f427-robomaster-a/project.uvopt new file mode 100644 index 000000000..b53d69d5d --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/project.uvoptx b/bsp/stm32/stm32f427-robomaster-a/project.uvoptx new file mode 100644 index 000000000..ba78957ed --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.uvoptx @@ -0,0 +1,185 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + 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 + 3 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM) + + + 0 + JL2CM3 + -U30000299 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_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 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/project.uvproj b/bsp/stm32/stm32f427-robomaster-a/project.uvproj new file mode 100644 index 000000000..a2c80e059 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.uvproj @@ -0,0 +1,1189 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F407ZG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + USE_HAL_DRIVER, STM32F407xx + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m4;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;..\libraries\STM32F4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + + + startup_stm32f407xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f407xx.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M4 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f4xx.c + 1 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + + + stm32f4xx_hal.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + + + stm32f4xx_hal_adc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc.c + + + + + stm32f4xx_hal_adc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc_ex.c + + + + + stm32f4xx_hal_can.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c + + + + + stm32f4xx_hal_cec.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + + + stm32f4xx_hal_cortex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + + + stm32f4xx_hal_crc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + + + stm32f4xx_hal_cryp.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + + + stm32f4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + + + stm32f4xx_hal_dac.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac.c + + + + + stm32f4xx_hal_dac_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac_ex.c + + + + + stm32f4xx_hal_dcmi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi.c + + + + + stm32f4xx_hal_dcmi_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi_ex.c + + + + + stm32f4xx_hal_dfsdm.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dfsdm.c + + + + + stm32f4xx_hal_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + + + stm32f4xx_hal_dma2d.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma2d.c + + + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + + + stm32f4xx_hal_dsi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dsi.c + + + + + stm32f4xx_hal_eth.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c + + + + + stm32f4xx_hal_flash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c + + + + + stm32f4xx_hal_flash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c + + + + + stm32f4xx_hal_flash_ramfunc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c + + + + + stm32f4xx_hal_fmpi2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c.c + + + + + stm32f4xx_hal_fmpi2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c_ex.c + + + + + stm32f4xx_hal_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + + + stm32f4xx_hal_hash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash.c + + + + + stm32f4xx_hal_hash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash_ex.c + + + + + stm32f4xx_hal_hcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hcd.c + + + + + stm32f4xx_hal_i2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c.c + + + + + stm32f4xx_hal_i2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c_ex.c + + + + + stm32f4xx_hal_i2s.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s.c + + + + + stm32f4xx_hal_i2s_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s_ex.c + + + + + stm32f4xx_hal_irda.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_irda.c + + + + + stm32f4xx_hal_iwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c + + + + + stm32f4xx_hal_lptim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_lptim.c + + + + + stm32f4xx_hal_ltdc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc.c + + + + + stm32f4xx_hal_ltdc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc_ex.c + + + + + stm32f4xx_hal_nand.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nand.c + + + + + stm32f4xx_hal_nor.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nor.c + + + + + stm32f4xx_hal_pccard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pccard.c + + + + + stm32f4xx_hal_pcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd.c + + + + + stm32f4xx_hal_pcd_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd_ex.c + + + + + stm32f4xx_hal_pwr.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + + + stm32f4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + + + stm32f4xx_hal_qspi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_qspi.c + + + + + stm32f4xx_hal_rcc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + + + stm32f4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + + + stm32f4xx_hal_rng.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + + + stm32f4xx_hal_rtc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c + + + + + stm32f4xx_hal_rtc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c + + + + + stm32f4xx_hal_sai.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai.c + + + + + stm32f4xx_hal_sai_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai_ex.c + + + + + stm32f4xx_hal_sd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sd.c + + + + + stm32f4xx_hal_sdram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sdram.c + + + + + stm32f4xx_hal_smartcard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_smartcard.c + + + + + stm32f4xx_hal_spdifrx.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spdifrx.c + + + + + stm32f4xx_hal_spi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c + + + + + stm32f4xx_hal_sram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sram.c + + + + + stm32f4xx_hal_tim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c + + + + + stm32f4xx_hal_tim_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c + + + + + stm32f4xx_hal_uart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + + + stm32f4xx_hal_usart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + + + stm32f4xx_hal_wwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c + + + + + stm32f4xx_ll_fmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fmc.c + + + + + stm32f4xx_ll_fsmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fsmc.c + + + + + stm32f4xx_ll_sdmmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_sdmmc.c + + + + + stm32f4xx_ll_usb.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_usb.c + + + + + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/project.uvprojx b/bsp/stm32/stm32f427-robomaster-a/project.uvprojx new file mode 100644 index 000000000..3d6a45967 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/project.uvprojx @@ -0,0 +1,862 @@ + + + 2.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + + + STM32F427IIHx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00030000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM)) + 0 + $$Device:STM32F427IIHx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F427IIHx$CMSIS\SVD\STM32F427x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + STM32F427xx, USE_HAL_DRIVER + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;packages\mpu6xxx-latest\inc;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\sensors;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\common;..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;..\libraries\STM32F4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + + + startup_stm32f427xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f427xx.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + mpu6xxx + + + mpu6xxx.c + 1 + packages\mpu6xxx-latest\src\mpu6xxx.c + + + + + sensor_inven_mpu6xxx.c + 1 + packages\mpu6xxx-latest\src\sensor_inven_mpu6xxx.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + 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 + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + Sensors + + + sensor.c + 1 + ..\..\..\components\drivers\sensors\sensor.c + + + + + sensor_cmd.c + 1 + ..\..\..\components\drivers\sensors\sensor_cmd.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + STM32_HAL + + + system_stm32f4xx.c + 1 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + + + stm32f4xx_hal.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + + + stm32f4xx_hal_cec.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + + + stm32f4xx_hal_cortex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + + + stm32f4xx_hal_crc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + + + stm32f4xx_hal_cryp.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + + + stm32f4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + + + stm32f4xx_hal_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + + + stm32f4xx_hal_pwr.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + + + stm32f4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + + + stm32f4xx_hal_rcc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + + + stm32f4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + + + stm32f4xx_hal_rng.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + + + stm32f4xx_hal_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + + + stm32f4xx_hal_uart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + + + stm32f4xx_hal_usart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/rtconfig.h b/bsp/stm32/stm32f427-robomaster-a/rtconfig.h new file mode 100644 index 000000000..bfe9b2dcb --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/rtconfig.h @@ -0,0 +1,179 @@ +#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_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#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 128 +#define RT_CONSOLE_DEVICE_NAME "uart6" +#define RT_VER_NUM 0x40002 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +#define RT_USING_SENSOR +#define RT_USING_SENSOR_CMD + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + +#define PKG_USING_SENSORS_DRIVERS +#define PKG_USING_MPU6XXX +#define PKG_USING_MPU6XXX_LATEST_VERSION +#define PKG_USING_MPU6XXX_ACCE +#define PKG_USING_MPU6XXX_GYRO +#define PKG_USING_MPU6XXX_MAG + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F4 + +/* Hardware Drivers Config */ + +#define SOC_STM32F427II + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART6 +#define BSP_USING_UART3 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f427-robomaster-a/rtconfig.py b/bsp/stm32/stm32f427-robomaster-a/rtconfig.py new file mode 100644 index 000000000..638f59502 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/rtconfig.py @@ -0,0 +1,143 @@ +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 + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-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' diff --git a/bsp/stm32/stm32f427-robomaster-a/template.ewd b/bsp/stm32/stm32f427-robomaster-a/template.ewd new file mode 100644 index 000000000..6c1af4943 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/template.ewp b/bsp/stm32/stm32f427-robomaster-a/template.ewp new file mode 100644 index 000000000..21c66ca0d --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/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/stm32f427-robomaster-a/template.eww b/bsp/stm32/stm32f427-robomaster-a/template.eww new file mode 100644 index 000000000..bd036bb4c --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f427-robomaster-a/template.uvopt b/bsp/stm32/stm32f427-robomaster-a/template.uvopt new file mode 100644 index 000000000..b53d69d5d --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/template.uvoptx b/bsp/stm32/stm32f427-robomaster-a/template.uvoptx new file mode 100644 index 000000000..ba78957ed --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.uvoptx @@ -0,0 +1,185 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + 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 + 3 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_2048 -FL0200000 -FS08000000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM) + + + 0 + JL2CM3 + -U30000299 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_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 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/template.uvproj b/bsp/stm32/stm32f427-robomaster-a/template.uvproj new file mode 100644 index 000000000..6ca2a9295 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F407ZG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f427-robomaster-a/template.uvprojx b/bsp/stm32/stm32f427-robomaster-a/template.uvprojx new file mode 100644 index 000000000..30284c4e7 --- /dev/null +++ b/bsp/stm32/stm32f427-robomaster-a/template.uvprojx @@ -0,0 +1,392 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + + + STM32F427IIHx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00030000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM)) + 0 + $$Device:STM32F427IIHx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F427IIHx$CMSIS\SVD\STM32F427x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
-- GitLab