From 7af98b5f178c8c21b6a1a673dc3b929df7bd60e1 Mon Sep 17 00:00:00 2001 From: Willian Chan Date: Tue, 9 Apr 2019 18:20:40 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=A2=9E=E5=8A=A0=E3=80=91stm32f103-d?= =?UTF-8?q?ofly-M3S=E5=BC=80=E5=8F=91=E6=9D=BF=E7=9A=84BSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Willian Chan --- bsp/stm32/stm32f103-dofly-M3S/.config | 395 +++ bsp/stm32/stm32f103-dofly-M3S/.gitignore | 42 + bsp/stm32/stm32f103-dofly-M3S/Kconfig | 22 + bsp/stm32/stm32f103-dofly-M3S/README.md | 107 + bsp/stm32/stm32f103-dofly-M3S/SConscript | 15 + bsp/stm32/stm32f103-dofly-M3S/SConstruct | 59 + .../applications/SConscript | 11 + .../stm32f103-dofly-M3S/applications/main.c | 34 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 119 + .../board/CubeMX_Config/Inc/main.h | 71 + .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 370 +++ .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 69 + .../board/CubeMX_Config/Src/main.c | 225 ++ .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 156 + .../board/CubeMX_Config/Src/stm32f1xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32f1xx.c | 448 +++ bsp/stm32/stm32f103-dofly-M3S/board/Kconfig | 78 + .../stm32f103-dofly-M3S/board/SConscript | 35 + bsp/stm32/stm32f103-dofly-M3S/board/board.c | 45 + bsp/stm32/stm32f103-dofly-M3S/board/board.h | 51 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 156 + .../board/linker_scripts/link.sct | 15 + .../stm32f103-dofly-M3S/figures/board.png | Bin 0 -> 223603 bytes bsp/stm32/stm32f103-dofly-M3S/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32f103-dofly-M3S/project.ewp | 2252 +++++++++++++ bsp/stm32/stm32f103-dofly-M3S/project.eww | 10 + bsp/stm32/stm32f103-dofly-M3S/project.uvopt | 162 + bsp/stm32/stm32f103-dofly-M3S/project.uvoptx | 197 ++ bsp/stm32/stm32f103-dofly-M3S/project.uvproj | 818 +++++ bsp/stm32/stm32f103-dofly-M3S/project.uvprojx | 800 +++++ bsp/stm32/stm32f103-dofly-M3S/rtconfig.h | 179 ++ bsp/stm32/stm32f103-dofly-M3S/rtconfig.py | 143 + bsp/stm32/stm32f103-dofly-M3S/template.ewp | 2032 ++++++++++++ bsp/stm32/stm32f103-dofly-M3S/template.eww | 10 + bsp/stm32/stm32f103-dofly-M3S/template.uvopt | 162 + bsp/stm32/stm32f103-dofly-M3S/template.uvoptx | 197 ++ bsp/stm32/stm32f103-dofly-M3S/template.uvproj | 407 +++ .../stm32f103-dofly-M3S/template.uvprojx | 395 +++ 40 files changed, 13365 insertions(+) create mode 100644 bsp/stm32/stm32f103-dofly-M3S/.config create mode 100644 bsp/stm32/stm32f103-dofly-M3S/.gitignore create mode 100644 bsp/stm32/stm32f103-dofly-M3S/Kconfig create mode 100644 bsp/stm32/stm32f103-dofly-M3S/README.md create mode 100644 bsp/stm32/stm32f103-dofly-M3S/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-M3S/SConstruct create mode 100644 bsp/stm32/stm32f103-dofly-M3S/applications/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-M3S/applications/main.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_it.h create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_it.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/system_stm32f1xx.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/Kconfig create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/board.c create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/board.h create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f103-dofly-M3S/figures/board.png create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.ewd create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.ewp create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.eww create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.uvopt create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.uvoptx create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.uvproj create mode 100644 bsp/stm32/stm32f103-dofly-M3S/project.uvprojx create mode 100644 bsp/stm32/stm32f103-dofly-M3S/rtconfig.h create mode 100644 bsp/stm32/stm32f103-dofly-M3S/rtconfig.py create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.ewp create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.eww create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.uvopt create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.uvoptx create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.uvproj create mode 100644 bsp/stm32/stm32f103-dofly-M3S/template.uvprojx diff --git a/bsp/stm32/stm32f103-dofly-M3S/.config b/bsp/stm32/stm32f103-dofly-M3S/.config new file mode 100644 index 0000000000..e55d09d831 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/.config @@ -0,0 +1,395 @@ +# +# 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="uart1" +CONFIG_RT_VER_NUM=0x40001 +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M3=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_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_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set + +# +# Using WiFi +# +# 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 + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS 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_LOGTRACE is not set +# 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_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_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_IOTKIT is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER 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 + +# +# 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_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 + +# +# peripheral libraries and drivers +# + +# +# sensors drivers +# +# 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_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C 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_MPU6XXX 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_KENDRYTE_SDK 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_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 + +# +# 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 + +# +# Privated Packages of RealThread +# +# CONFIG_PKG_USING_CODEC is not set +# CONFIG_PKG_USING_PLAYER is not set +# CONFIG_PKG_USING_MPLAYER is not set +# CONFIG_PKG_USING_PERSIMMON_SRC is not set +# CONFIG_PKG_USING_JS_PERSIMMON is not set +# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set + +# +# Network Utilities +# +# CONFIG_PKG_USING_WICED is not set +# CONFIG_PKG_USING_CLOUDSDK is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_POWER_MANAGER is not set +# CONFIG_PKG_USING_RT_OTA is not set +# CONFIG_PKG_USING_RDBD_SRC is not set +# CONFIG_PKG_USING_RTINSIGHT is not set +# CONFIG_PKG_USING_SMARTCONFIG is not set +# CONFIG_PKG_USING_RTX is not set +# CONFIG_RT_USING_TESTCASE is not set +# CONFIG_PKG_USING_NGHTTP2 is not set +# CONFIG_PKG_USING_AVS is not set +# CONFIG_PKG_USING_STS is not set +# CONFIG_PKG_USING_DLMS is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F103RB=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f103-dofly-M3S/.gitignore b/bsp/stm32/stm32f103-dofly-M3S/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/.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/stm32f103-dofly-M3S/Kconfig b/bsp/stm32/stm32f103-dofly-M3S/Kconfig new file mode 100644 index 0000000000..7a400db91f --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +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/stm32f103-dofly-M3S/README.md b/bsp/stm32/stm32f103-dofly-M3S/README.md new file mode 100644 index 0000000000..57142321ad --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/README.md @@ -0,0 +1,107 @@ +# STM32F103 德飞莱-尼莫 M3S 开发板 BSP 说明 + +## 简介 + +本文档是石河子大学陈庭伟同学为 STM32F103 德飞莱-尼莫 M3S 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32F103 德飞莱-尼莫 M3S 是徳飞莱推出的一款基于 ARM Cortex-M3 内核的开发板,最高主频为 72Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F103 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F103ZET6,主频 72MHz,512KB FLASH ,64KB RAM +- 外部 RAM:型号24c02,2KB +- 外部 FLASH:型号W25Q64,8MB +- 常用外设 + - LED:2个,LED2(红色,PE5),LED3(红色,PB5) + - 按键:4个,S1(PE4),S2(PE3),S3(PE2),S4(兼具唤醒功能,PA0) +- 常用接口:USB 转串口、SD 卡接口、RS232 接口、LCD 接口、nRF24L01接口等 +- 调试接口,标准 JTAG/SWD + +开发板更多详细信息请参考徳飞莱的 [STM32F103-尼莫M3S 开发板介绍](https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-1022655459.10.44ae4d22Wa8UIo&id=44835368405)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :-----: | :-----: | :-----: | +| GPIO | 支持 | | +| USART | 支持 | USART3 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 st-link 仿真器下载程序,在通过 st-link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.1 build Apr 9 2019 + 2006 - 2019 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 这款开发板使用终端工具 SecureCRT 来打开串口会出现系统不能启动的问题,推荐使用 XCOM V2.0。 + +## 联系人信息 + +维护人: + +- [WillianChan](https://github.com/willianchanlovegithub), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f103-dofly-M3S/SConscript b/bsp/stm32/stm32f103-dofly-M3S/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/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/stm32f103-dofly-M3S/SConstruct b/bsp/stm32/stm32f103-dofly-M3S/SConstruct new file mode 100644 index 0000000000..27b5e7fccc --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/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 = 'STM32F1xx_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/stm32f103-dofly-M3S/applications/SConscript b/bsp/stm32/stm32f103-dofly-M3S/applications/SConscript new file mode 100644 index 0000000000..04f04dd543 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f103-dofly-M3S/applications/main.c b/bsp/stm32/stm32f103-dofly-M3S/applications/main.c new file mode 100644 index 0000000000..7b7f00c8ee --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/applications/main.c @@ -0,0 +1,34 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f103-dofly-M3S BSP + */ + +#include +#include +#include + +/* defined the LED0 pin: PE5 */ +#define LED0_PIN GET_PIN(E, 5) + +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/stm32f103-dofly-M3S/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..65f211c5a3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=D:/Work_RT-Thread/GitHub/rt-thread/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=D:/Work_RT-Thread/GitHub/rt-thread/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f1xx_it.c;..\Src\stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;null; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; + diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..adef36f763 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,119 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F1 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32F103Z(C-D-E)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=OSC_IN +Mcu.Pin3=OSC_OUT +Mcu.Pin4=PA9 +Mcu.Pin5=PA10 +Mcu.Pin6=PA13 +Mcu.Pin7=PA14 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103ZETx +MxCube.Version=5.1.0 +MxDb.Version=DB.5.0.10 +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.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +OSC_IN.Mode=HSE-External-Oscillator +OSC_IN.Signal=RCC_OSC_IN +OSC_OUT.Mode=HSE-External-Oscillator +OSC_OUT.Signal=RCC_OSC_OUT +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F103 +PCC.MCU=STM32F103Z(C-D-E)Tx +PCC.PartNumber=STM32F103ZETx +PCC.Seq0=0 +PCC.Series=STM32F1 +PCC.Temperature=25 +PCC.Vdd=3.3 +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F103ZETx +ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.7.0 +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-false,3-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.ADCFreqValue=36000000 +RCC.AHBFreq_Value=72000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 +RCC.FSMCFreq_Value=72000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.I2S2Freq_Value=72000000 +RCC.I2S3Freq_Value=72000000 +RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLMCOFreq_Value=36000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SDIOFreq_Value=72000000 +RCC.SDIOHCLKDiv2FreqValue=36000000 +RCC.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..75cb6f9a15 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,71 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 0000000000..9ab2b09148 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h @@ -0,0 +1,370 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2019 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DMA_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< 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)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 40000U /*!< 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. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* 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)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 + +/* ########################## 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 2 +#define MAC_ADDR1 0 +#define MAC_ADDR2 0 +#define MAC_ADDR3 0 +#define MAC_ADDR4 0 +#define MAC_ADDR5 0 + +/* 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)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4) /* 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)0x000000FF) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) + +#define PHY_READ_TO ((uint32_t)0x0000FFFF) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)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 */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f1xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_it.h new file mode 100644 index 0000000000..101d8aa728 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Inc/stm32f1xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..c183908d36 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/main.c @@ -0,0 +1,225 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + 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_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + +} + +/* 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/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c new file mode 100644 index 0000000000..90e7d9544b --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -0,0 +1,156 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled + */ + __HAL_AFIO_REMAP_SWJ_NOJTAG(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_it.c new file mode 100644 index 0000000000..6a95ce4bae --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/stm32f1xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f1xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* 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 Prefetch 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 */ +} + +/******************************************************************************/ +/* STM32F1xx 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_stm32f1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/system_stm32f1xx.c b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/system_stm32f1xx.c new file mode 100644 index 0000000000..af3759a3b6 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/CubeMX_Config/Src/system_stm32f1xx.c @@ -0,0 +1,448 @@ +/** + ****************************************************************************** + * @file system_stm32f1xx.c + * @author MCD Application Team + * @version V4.2.0 + * @date 31-March-2017 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f1xx_xx.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. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on + * the product used), refer to "HSE_VALUE". + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 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 stm32f1xx_system + * @{ + */ + +/** @addtogroup STM32F1xx_System_Private_Includes + * @{ + */ + +#include "stm32f1xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Defines + * @{ + */ + +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +/*!< Uncomment the following line if you need to use external SRAM */ +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#if defined(STM32F100xB) ||defined(STM32F100xE) + uint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = 72000000U; /*!< System Clock Frequency (Core Clock) */ +#endif + +const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= 0x00000001U; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#if !defined(STM32F105xC) && !defined(STM32F107xC) + RCC->CFGR &= 0xF8FF0000U; +#else + RCC->CFGR &= 0xF0FF0000U; +#endif /* STM32F105xC */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= 0xFEF6FFFFU; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= 0xFF80FFFFU; + +#if defined(STM32F105xC) || defined(STM32F107xC) + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= 0xEBFFFFFFU; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000U; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000U; +#elif defined(STM32F100xB) || defined(STM32F100xE) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000U; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000U; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000U; +#endif /* STM32F105xC */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + +#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 by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depending on the product used), 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 = 0U, pllmull = 0U, pllsource = 0U; + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; +#endif /* STM32F105xC */ + +#if defined(STM32F100xB) || defined(STM32F100xE) + uint32_t prediv1factor = 0U; +#endif /* STM32F100xB or STM32F100xE */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00U: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04U: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08U: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#if !defined(STM32F105xC) && !defined(STM32F107xC) + pllmull = ( pllmull >> 18U) + 2U; + + if (pllsource == 0x00U) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; + } + else + { + #if defined(STM32F100xB) || defined(STM32F100xE) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18U; + + if (pllmull != 0x0DU) + { + pllmull += 2U; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13U / 2U; + } + + if (pllsource == 0x00U) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; + + if (prediv1source == 0U) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F105xC */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/** + * @brief Setup the external memory controller. Called in startup_stm32f1xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f1xx_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmpreg; + /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114U; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0U; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); + + (void)(tmpreg); + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BBU; + GPIOD->CRH = 0xBBBBBBBBU; + + GPIOE->CRL = 0xB44444BBU; + GPIOE->CRH = 0xBBBBBBBBU; + + GPIOF->CRL = 0x44BBBBBBU; + GPIOF->CRH = 0xBBBB4444U; + + GPIOG->CRL = 0x44BBBBBBU; + GPIOG->CRH = 0x444B4B44U; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4U] = 0x00001091U; + FSMC_Bank1->BTCR[5U] = 0x00110212U; +} +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/Kconfig b/bsp/stm32/stm32f103-dofly-M3S/board/Kconfig new file mode 100644 index 0000000000..a8a2e516f2 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/Kconfig @@ -0,0 +1,78 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F103RB + bool + select SOC_SERIES_STM32F1 + 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_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + depends on BSP_USING_SPI1 + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + depends on BSP_USING_SPI1 + select BSP_SPI1_TX_USING_DMA + default n + endif + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + int "i2c1 scl pin number" + range 1 216 + default 15 + config BSP_I2C1_SDA_PIN + int "I2C1 sda pin number" + range 1 216 + default 16 + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/SConscript b/bsp/stm32/stm32f103-dofly-M3S/board/SConscript new file mode 100644 index 0000000000..0f7ccb024c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/SConscript @@ -0,0 +1,35 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f1xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xe.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/arm/startup_stm32f103xe.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xe.s'] + +# STM32F100xB || STM32F100xE || STM32F101x6 +# STM32F101xB || STM32F101xE || STM32F101xG +# STM32F102x6 || STM32F102xB || STM32F103x6 +# STM32F103xB || STM32F103xE || STM32F103xG +# STM32F105xC || STM32F107xC) +# You can select chips from the list above +CPPDEFINES = ['STM32F103xE'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/board.c b/bsp/stm32/stm32f103-dofly-M3S/board/board.c new file mode 100644 index 0000000000..7b6a3ea947 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/board.c @@ -0,0 +1,45 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f103-dofly-M3S BSP + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + 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_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/board.h b/bsp/stm32/stm32f103-dofly-M3S/board/board.h new file mode 100644 index 0000000000..537e22e953 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/board.h @@ -0,0 +1,51 @@ +/* + * 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-09 WillianChan add stm32f103-dofly-M3S BSP + */ + +#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 (512 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 64 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.icf new file mode 100644 index 0000000000..c61b82bd39 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-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/stm32f103-dofly-M3S/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.lds new file mode 100644 index 0000000000..f1bc84f8f1 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.lds @@ -0,0 +1,156 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64K 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/stm32f103-dofly-M3S/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0835abf43e --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00010000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f103-dofly-M3S/figures/board.png b/bsp/stm32/stm32f103-dofly-M3S/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..d782c5df39fe309f84fe6f836c936b048b3ecf26 GIT binary patch literal 223603 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⁣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 + + 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/stm32f103-dofly-M3S/project.ewp b/bsp/stm32/stm32f103-dofly-M3S/project.ewp new file mode 100644 index 0000000000..c60653bb3d --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.ewp @@ -0,0 +1,2252 @@ + + 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\stm32f1xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar\startup_stm32f103xe.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 + + + + 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-m3\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\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 + + + + 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 + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f103-dofly-M3S/project.eww b/bsp/stm32/stm32f103-dofly-M3S/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f103-dofly-M3S/project.uvopt b/bsp/stm32/stm32f103-dofly-M3S/project.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/project.uvoptx b/bsp/stm32/stm32f103-dofly-M3S/project.uvoptx new file mode 100644 index 0000000000..c6d74a9049 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.uvoptx @@ -0,0 +1,197 @@ + + + + 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 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U37FF73064D53373459321543 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/project.uvproj b/bsp/stm32/stm32f103-dofly-M3S/project.uvproj new file mode 100644 index 0000000000..b8d425d72b --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.uvproj @@ -0,0 +1,818 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + USE_HAL_DRIVER, STM32F103xE + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + 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 + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.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 + + + + + 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-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\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 + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/project.uvprojx b/bsp/stm32/stm32f103-dofly-M3S/project.uvprojx new file mode 100644 index 0000000000..1c481aaeda --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/project.uvprojx @@ -0,0 +1,800 @@ + + + 2.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00010000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 0 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 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 + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F103xE + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 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 + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.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 + + + + + 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-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\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 + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/rtconfig.h b/bsp/stm32/stm32f103-dofly-M3S/rtconfig.h new file mode 100644 index 0000000000..b96cebff5f --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/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 "uart1" +#define RT_VER_NUM 0x40001 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M3 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave 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 */ + +/* sensors drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* Privated Packages of RealThread */ + + +/* Network Utilities */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F1 + +/* Hardware Drivers Config */ + +#define SOC_STM32F103RB + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f103-dofly-M3S/rtconfig.py b/bsp/stm32/stm32f103-dofly-M3S/rtconfig.py new file mode 100644 index 0000000000..fa46b74340 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/rtconfig.py @@ -0,0 +1,143 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M3 ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M3' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f103-dofly-M3S/template.ewp b/bsp/stm32/stm32f103-dofly-M3S/template.ewp new file mode 100644 index 0000000000..3280a547c0 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/template.ewp @@ -0,0 +1,2032 @@ + + + 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/stm32f103-dofly-M3S/template.eww b/bsp/stm32/stm32f103-dofly-M3S/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f103-dofly-M3S/template.uvopt b/bsp/stm32/stm32f103-dofly-M3S/template.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/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 + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/template.uvoptx b/bsp/stm32/stm32f103-dofly-M3S/template.uvoptx new file mode 100644 index 0000000000..c6d74a9049 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/template.uvoptx @@ -0,0 +1,197 @@ + + + + 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 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U37FF73064D53373459321543 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-dofly-M3S/template.uvproj b/bsp/stm32/stm32f103-dofly-M3S/template.uvproj new file mode 100644 index 0000000000..99e58d3b30 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 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/stm32f103-dofly-M3S/template.uvprojx b/bsp/stm32/stm32f103-dofly-M3S/template.uvprojx new file mode 100644 index 0000000000..b23a8b7f08 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-M3S/template.uvprojx @@ -0,0 +1,395 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00010000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 0 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 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 + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +