From 55f4d28ec52e9354c60a8ef88fe68a2513a70504 Mon Sep 17 00:00:00 2001 From: obito <496420502@qq.com> Date: Sun, 10 Mar 2019 19:09:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E4=BB=AC=E5=AD=A6=E7=94=9F=E4=B8=80?= =?UTF-8?q?=E8=88=AC=E9=83=BD=E4=BC=9A=E7=94=A8=E4=BD=93=E7=A7=AF=E6=AF=94?= =?UTF-8?q?=E8=BE=83=E5=B0=8F=E7=9A=84=E6=9C=80=E5=B0=8F=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=EF=BC=8C=E4=B9=9F=E5=B0=B1=E6=98=AF=E7=BD=91=E4=B8=8A=E7=83=AD?= =?UTF-8?q?=E5=8D=96=E7=9A=84STM32F103C8T6=E6=9C=80=E5=B0=8F=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=EF=BC=8C=E6=89=80=E4=BB=A5=E5=85=88=E5=81=9A=E5=87=BA?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E6=9C=80=E5=B0=8F=E7=B3=BB=E7=BB=9F=E7=9A=84?= =?UTF-8?q?BSP=EF=BC=8C=E6=96=B9=E4=BE=BF=E5=A4=A7=E5=AE=B6=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E4=BD=BF=E7=94=A8=E5=88=B0=E8=87=AA=E5=B7=B1=E7=9A=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=BD=93=E4=B8=AD=EF=BC=8C=E4=B9=9F=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E9=82=A3=E4=BA=9B=E6=B2=A1=E6=9C=89=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E4=BA=BA=E7=94=A8=E8=BF=99=E4=B8=AA=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E7=B3=BB=E7=BB=9F=E5=AD=A6=E4=B9=A0RTT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f103-mini-system/.config | 349 ++ bsp/stm32/stm32f103-mini-system/.gitignore | 42 + bsp/stm32/stm32f103-mini-system/Kconfig | 22 + bsp/stm32/stm32f103-mini-system/README.md | 110 + bsp/stm32/stm32f103-mini-system/SConscript | 15 + bsp/stm32/stm32f103-mini-system/SConstruct | 58 + .../applications/SConscript | 11 + .../stm32f103-mini-system/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 138 + .../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 | 324 ++ .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 286 ++ .../board/CubeMX_Config/Src/stm32f1xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32f1xx.c | 448 +++ bsp/stm32/stm32f103-mini-system/board/Kconfig | 70 + .../stm32f103-mini-system/board/SConscript | 35 + bsp/stm32/stm32f103-mini-system/board/board.c | 44 + bsp/stm32/stm32f103-mini-system/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 143 + .../board/linker_scripts/link.sct | 15 + .../stm32f103-mini-system/figures/board1.jpg | Bin 0 -> 188487 bytes .../stm32f103-mini-system/figures/board2.jpg | Bin 0 -> 22228 bytes .../stm32f103-mini-system/figures/board3.jpg | Bin 0 -> 23256 bytes bsp/stm32/stm32f103-mini-system/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32f103-mini-system/project.ewp | 2252 +++++++++++++ bsp/stm32/stm32f103-mini-system/project.eww | 10 + bsp/stm32/stm32f103-mini-system/project.uvopt | 162 + .../stm32f103-mini-system/project.uvoptx | 980 ++++++ .../stm32f103-mini-system/project.uvproj | 818 +++++ .../stm32f103-mini-system/project.uvprojx | 727 +++++ bsp/stm32/stm32f103-mini-system/rtconfig.h | 174 + bsp/stm32/stm32f103-mini-system/rtconfig.py | 134 + bsp/stm32/stm32f103-mini-system/template.ewp | 2032 ++++++++++++ bsp/stm32/stm32f103-mini-system/template.eww | 10 + .../stm32f103-mini-system/template.uvopt | 162 + .../stm32f103-mini-system/template.uvoptx | 199 ++ .../stm32f103-mini-system/template.uvproj | 407 +++ .../stm32f103-mini-system/template.uvprojx | 415 +++ 42 files changed, 14263 insertions(+) create mode 100644 bsp/stm32/stm32f103-mini-system/.config create mode 100644 bsp/stm32/stm32f103-mini-system/.gitignore create mode 100644 bsp/stm32/stm32f103-mini-system/Kconfig create mode 100644 bsp/stm32/stm32f103-mini-system/README.md create mode 100644 bsp/stm32/stm32f103-mini-system/SConscript create mode 100644 bsp/stm32/stm32f103-mini-system/SConstruct create mode 100644 bsp/stm32/stm32f103-mini-system/applications/SConscript create mode 100644 bsp/stm32/stm32f103-mini-system/applications/main.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/Kconfig create mode 100644 bsp/stm32/stm32f103-mini-system/board/SConscript create mode 100644 bsp/stm32/stm32f103-mini-system/board/board.c create mode 100644 bsp/stm32/stm32f103-mini-system/board/board.h create mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f103-mini-system/figures/board1.jpg create mode 100644 bsp/stm32/stm32f103-mini-system/figures/board2.jpg create mode 100644 bsp/stm32/stm32f103-mini-system/figures/board3.jpg create mode 100644 bsp/stm32/stm32f103-mini-system/project.ewd create mode 100644 bsp/stm32/stm32f103-mini-system/project.ewp create mode 100644 bsp/stm32/stm32f103-mini-system/project.eww create mode 100644 bsp/stm32/stm32f103-mini-system/project.uvopt create mode 100644 bsp/stm32/stm32f103-mini-system/project.uvoptx create mode 100644 bsp/stm32/stm32f103-mini-system/project.uvproj create mode 100644 bsp/stm32/stm32f103-mini-system/project.uvprojx create mode 100644 bsp/stm32/stm32f103-mini-system/rtconfig.h create mode 100644 bsp/stm32/stm32f103-mini-system/rtconfig.py create mode 100644 bsp/stm32/stm32f103-mini-system/template.ewp create mode 100644 bsp/stm32/stm32f103-mini-system/template.eww create mode 100644 bsp/stm32/stm32f103-mini-system/template.uvopt create mode 100644 bsp/stm32/stm32f103-mini-system/template.uvoptx create mode 100644 bsp/stm32/stm32f103-mini-system/template.uvproj create mode 100644 bsp/stm32/stm32f103-mini-system/template.uvprojx diff --git a/bsp/stm32/stm32f103-mini-system/.config b/bsp/stm32/stm32f103-mini-system/.config new file mode 100644 index 0000000000..3a7b03410b --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/.config @@ -0,0 +1,349 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# 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_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_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 + +# +# ARM CMSIS +# +# CONFIG_RT_USING_CMSIS_OS is not set +# CONFIG_RT_USING_RTT_CMSIS 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_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_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 + +# +# 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 + +# +# 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 +# +# 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_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 +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F103C8=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=y + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f103-mini-system/.gitignore b/bsp/stm32/stm32f103-mini-system/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/.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-mini-system/Kconfig b/bsp/stm32/stm32f103-mini-system/Kconfig new file mode 100644 index 0000000000..7a400db91f --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/README.md b/bsp/stm32/stm32f103-mini-system/README.md new file mode 100644 index 0000000000..ee163c4beb --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/README.md @@ -0,0 +1,110 @@ +# STM32F103C8T6最小系统板 BSP 说明 + +## 简介 + +本文档为 STM32F103C8T6最小系统板 的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32F103C8T6最小系统,采用SWD调试接口,可以用3个接口就能完成调试下载的任务,采用了官方建议的负载RTC晶振方案,小体积高频率的STM32实验板 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F103C8T6,主频 72MHz,64KB FLASH ,20KB RAM +- 外部 RAM:无 +- 外部 FLASH:无 +- 常用外设 + - LED:1个,DS0(黄色,PC13) +- 常用接口:无 +- 调试接口,SWD调试接口 + +开发板更多详细信息请参考[STM32F103C8T6最小系统板介绍] + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 黄色LED | 支持 | PC13 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PC15 ---> PIN: 0, 1...47 | +| UART | 支持 | UART1 | +| **扩展模块** | **支持情况** | **备注** | +| | | | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 J-Link 仿真器下载程序,在通过 J-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.1 build Mar 10 2019 + 2006 - 2019 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 ADC、PWM等更多高级功能,再用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 只能用USB转TTL连接PC机 ; + +## 联系人信息 + +维护人: + +- [obito0](https://github.com/obito0), 邮箱:<496420502@qq.com> \ No newline at end of file diff --git a/bsp/stm32/stm32f103-mini-system/SConscript b/bsp/stm32/stm32f103-mini-system/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/SConstruct b/bsp/stm32/stm32f103-mini-system/SConstruct new file mode 100644 index 0000000000..05326b2b75 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/SConstruct @@ -0,0 +1,58 @@ +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', + 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-mini-system/applications/SConscript b/bsp/stm32/stm32f103-mini-system/applications/SConscript new file mode 100644 index 0000000000..ef1c39fd83 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, ] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f103-mini-system/applications/main.c b/bsp/stm32/stm32f103-mini-system/applications/main.c new file mode 100644 index 0000000000..c5fa5a5958 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-08 obito0 first version + */ + +#include +#include +#include + +/* defined the LED0 pin: PC13 */ +#define LED0_PIN GET_PIN(C, 13) + +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-mini-system/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..1611c38e50 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=G:/Wondfo/RT-Thread/rt-thread-master1/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=G:/Wondfo/RT-Thread/rt-thread-master1/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;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_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_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/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;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/stm32f103xb.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_adc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_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_adc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_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-mini-system/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..288a72c7d2 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,138 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_1 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.master=1 +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F1 +Mcu.IP0=ADC1 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SPI1 +Mcu.IP4=SYS +Mcu.IP5=USART1 +Mcu.IPNb=6 +Mcu.Name=STM32F103C(8-B)Tx +Mcu.Package=LQFP48 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin10=VP_SYS_VS_ND +Mcu.Pin11=VP_SYS_VS_Systick +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA1 +Mcu.Pin5=PA5 +Mcu.Pin6=PA6 +Mcu.Pin7=PA7 +Mcu.Pin8=PA9 +Mcu.Pin9=PA10 +Mcu.PinsNb=12 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103C8Tx +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 +PA1.Signal=ADCx_IN1 +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA5.Mode=Full_Duplex_Master +PA5.Signal=SPI1_SCK +PA6.Mode=Full_Duplex_Master +PA6.Signal=SPI1_MISO +PA7.Mode=Full_Duplex_Master +PA7.Signal=SPI1_MOSI +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=STM32F103C(8-B)Tx +PCC.PartNumber=STM32F103C8Tx +PCC.Seq0=0 +PCC.Series=STM32F1 +PCC.Temperature=25 +PCC.Vdd=3.3 +PD0-OSC_IN.Mode=HSE-External-Oscillator +PD0-OSC_IN.Signal=RCC_OSC_IN +PD1-OSC_OUT.Mode=HSE-External-Oscillator +PD1-OSC_OUT.Signal=RCC_OSC_OUT +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=STM32F103C8Tx +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,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_SPI1_Init-SPI1-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.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,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.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +SH.ADCx_IN1.0=ADC1_IN1,IN1 +SH.ADCx_IN1.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8 +SPI1.CalculateBaudRate=9.0 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_SYS_VS_ND.Mode=No_Debug +VP_SYS_VS_ND.Signal=SYS_VS_ND +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..75cb6f9a15 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 0000000000..467a07d1ca --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h new file mode 100644 index 0000000000..101d8aa728 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..c63ff28eda --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c @@ -0,0 +1,324 @@ +/* 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 ---------------------------------------------------------*/ +ADC_HandleTypeDef hadc1; + +SPI_HandleTypeDef hspi1; + +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); +static void MX_ADC1_Init(void); +static void MX_SPI1_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(); + MX_ADC1_Init(); + MX_SPI1_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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {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(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ADC1 Initialization Function + * @param None + * @retval None + */ +static void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + /** Common config + */ + hadc1.Instance = ADC1; + hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.NbrOfConversion = 1; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_1; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} + +/** + * @brief SPI1 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + /* SPI1 parameter configuration*/ + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI1_Init 2 */ + + /* USER CODE END SPI1_Init 2 */ + +} + +/** + * @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_GPIOD_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-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c new file mode 100644 index 0000000000..f059b654f9 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -0,0 +1,286 @@ +/* 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*/ + + /** DISABLE: JTAG-DP Disabled and SW-DP Disabled + */ + __HAL_AFIO_REMAP_SWJ_DISABLE(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief ADC MSP Initialization +* This function configures the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ADC1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PA1 ------> ADC1_IN1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } + +} + +/** +* @brief ADC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) +{ + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC1_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PA1 ------> ADC1_IN1 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1); + + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspInit 0 */ + + /* USER CODE END SPI1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**SPI1 GPIO Configuration + PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO + PA7 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7; + 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_6; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI1_MspInit 1 */ + + /* USER CODE END SPI1_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspDeInit 0 */ + + /* USER CODE END SPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI1_CLK_DISABLE(); + + /**SPI1 GPIO Configuration + PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO + PA7 ------> SPI1_MOSI + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN SPI1_MspDeInit 1 */ + + /* USER CODE END SPI1_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==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-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c new file mode 100644 index 0000000000..6a95ce4bae --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c new file mode 100644 index 0000000000..af3759a3b6 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/board/Kconfig b/bsp/stm32/stm32f103-mini-system/board/Kconfig new file mode 100644 index 0000000000..320ab50b8a --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/Kconfig @@ -0,0 +1,70 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F103C8 + 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 + + 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 + + menuconfig BSP_USING_ADC + bool "Enable ADC" + default n + select RT_USING_ADC + if BSP_USING_ADC + config BSP_USING_ADC1 + bool "Enable ADC1" + default n + + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f103-mini-system/board/SConscript b/bsp/stm32/stm32f103-mini-system/board/SConscript new file mode 100644 index 0000000000..52d6f012bb --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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_stm32f103xB.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/arm/startup_stm32f103xB.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xB.s'] + +# STM32F100xB || STM32F100xE || STM32F101x6 +# STM32F101xB || STM32F101xE || STM32F101xG +# STM32F102x6 || STM32F102xB || STM32F103x6 +# STM32F103xB || STM32F103xE || STM32F103xG +# STM32F105xC || STM32F107xC) +# You can select chips from the list above +CPPDEFINES = ['STM32F103xB'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f103-mini-system/board/board.c b/bsp/stm32/stm32f103-mini-system/board/board.c new file mode 100644 index 0000000000..b7ca2b8461 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/board.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-08 obito0 first version + */ + +#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-mini-system/board/board.h b/bsp/stm32/stm32f103-mini-system/board/board.h new file mode 100644 index 0000000000..a8ee7bfa02 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (64 * 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 20 +#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-mini-system/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf new file mode 100644 index 0000000000..72eeb0ba65 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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__ = 0x0800FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF; +/*-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-mini-system/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds new file mode 100644 index 0000000000..f9fdaf17c5 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds @@ -0,0 +1,143 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* 64KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 20k /* 20K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct new file mode 100644 index 0000000000..6930ff4b50 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00010000 { ; load region size_region + ER_IROM1 0x08000000 0x00010000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00005000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f103-mini-system/figures/board1.jpg b/bsp/stm32/stm32f103-mini-system/figures/board1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47c7221cf739834204556ab85a602b55035b97ea GIT binary patch literal 188487 zcmeF4WmFtZ+vkU%K|_LjaQDFiOcFc<*Py|j!5t=n1Pc-%K+p+p0fG!J3GVLh?lL&+ z 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%0D+^&l%evEWW_3=UW(v(Pfn;& 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�#iyua+n@16=F4^3Nz4~Qpyvy%CYC| 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 W|F^N?*O~k}lV2M6|I>iz*~~vh5Rl3M literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f103-mini-system/figures/board3.jpg b/bsp/stm32/stm32f103-mini-system/figures/board3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac5bb43f7443f470a3808df9bc8a94a921b76d6b GIT binary patch literal 23256 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ʼ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 F{{|XSaJ>Kk literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f103-mini-system/project.ewd b/bsp/stm32/stm32f103-mini-system/project.ewd new file mode 100644 index 0000000000..5c652a809d --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f103-mini-system/project.ewp b/bsp/stm32/stm32f103-mini-system/project.ewp new file mode 100644 index 0000000000..dc1ff42415 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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_stm32f103xB.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-mini-system/project.eww b/bsp/stm32/stm32f103-mini-system/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f103-mini-system/project.uvopt b/bsp/stm32/stm32f103-mini-system/project.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/project.uvoptx b/bsp/stm32/stm32f103-mini-system/project.uvoptx new file mode 100644 index 0000000000..2bcb9b426e --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/project.uvoptx @@ -0,0 +1,980 @@ + + + + 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 + Base Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf + + + 1 + Display Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf + + + 2 + User Manual (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm + + + 3 + MCBSTM32E Evaluation Board Web Page (MCBSTM32E) + http://www.keil.com/mcbstm32e/ + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U -I0 -O206 -S1 -C0 -A0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + + + 0 + JL2CM3 + -U20160818 -O78 -S2 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + 1 + 0 + 2 + 10000000 + + + + + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 1 + 0 + 0 + 0 + + 2 + 16 + 1 + 0 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + stm32f1xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xB.s + startup_stm32f103xB.s + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 27 + 2 + 0 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 7 + 43 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + system_stm32f1xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + stm32f1xx_hal_dma.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + stm32f1xx_hal_cortex.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + stm32f1xx_hal_crc.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + stm32f1xx_hal_pwr.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + stm32f1xx_hal_rcc.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + stm32f1xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + stm32f1xx_hal.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + stm32f1xx_hal_cec.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + stm32f1xx_hal_sram.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + stm32f1xx_hal_gpio.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + stm32f1xx_hal_gpio_ex.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + stm32f1xx_hal_uart.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + stm32f1xx_hal_usart.c + 0 + 0 + + + +
diff --git a/bsp/stm32/stm32f103-mini-system/project.uvproj b/bsp/stm32/stm32f103-mini-system/project.uvproj new file mode 100644 index 0000000000..8b05c9d088 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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 + + + STM32F103xB, USE_HAL_DRIVER + + .;..\..\..\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 + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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_stm32f103xB.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xB.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + 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-mini-system/project.uvprojx b/bsp/stm32/stm32f103-mini-system/project.uvprojx new file mode 100644 index 0000000000..74e7f46170 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/project.uvprojx @@ -0,0 +1,727 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103C8 + STMicroelectronics + Keil.STM32F1xx_DFP.1.0.5 + http://www.keil.com/pack/ + IROM(0x08000000,0x10000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)) + 0 + $$Device:STM32F103C8$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103C8$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 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 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x10000 + + + 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 + 2 + 0 + 0 + 1 + 0 + + + STM32F103xB, USE_HAL_DRIVER + + .;..\..\..\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 + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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_stm32f103xB.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xB.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + 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-mini-system/rtconfig.h b/bsp/stm32/stm32f103-mini-system/rtconfig.h new file mode 100644 index 0000000000..e587794e89 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/rtconfig.h @@ -0,0 +1,174 @@ +#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 + +/* 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 */ + + +/* ARM CMSIS */ + + +/* 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 */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F1 + +/* Hardware Drivers Config */ + +#define SOC_STM32F103C8 + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 +#define BSP_UART1_RX_USING_DMA + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f103-mini-system/rtconfig.py b/bsp/stm32/stm32f103-mini-system/rtconfig.py new file mode 100644 index 0000000000..40826ac99e --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/rtconfig.py @@ -0,0 +1,134 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = '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' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = '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' + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f103-mini-system/template.ewp b/bsp/stm32/stm32f103-mini-system/template.ewp new file mode 100644 index 0000000000..3280a547c0 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/template.eww b/bsp/stm32/stm32f103-mini-system/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f103-mini-system/template.uvopt b/bsp/stm32/stm32f103-mini-system/template.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/template.uvoptx b/bsp/stm32/stm32f103-mini-system/template.uvoptx new file mode 100644 index 0000000000..2a5ee7712d --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/template.uvoptx @@ -0,0 +1,199 @@ + + + + 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 + Base Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf + + + 1 + Display Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf + + + 2 + User Manual (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm + + + 3 + MCBSTM32E Evaluation Board Web Page (MCBSTM32E) + http://www.keil.com/mcbstm32e/ + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-mini-system/template.uvproj b/bsp/stm32/stm32f103-mini-system/template.uvproj new file mode 100644 index 0000000000..99e58d3b30 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/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-mini-system/template.uvprojx b/bsp/stm32/stm32f103-mini-system/template.uvprojx new file mode 100644 index 0000000000..3f668488e9 --- /dev/null +++ b/bsp/stm32/stm32f103-mini-system/template.uvprojx @@ -0,0 +1,415 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103C8 + STMicroelectronics + Keil.STM32F1xx_DFP.1.0.5 + http://www.keil.com/pack/ + IROM(0x08000000,0x10000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)) + 0 + $$Device:STM32F103C8$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103C8$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 1 + + + + + + + + + + + + + + BIN\UL2CM3.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 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x10000 + + + 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 + 2 + 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 + + + + + + + + + + + Source Group 1 + + + + + +