From f1a13e1fc4eea04d7576c50ae2f52f8091297874 Mon Sep 17 00:00:00 2001 From: FindYGL <1072348750@qq.com> Date: Sun, 13 Jan 2019 17:21:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BART-Thread=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BE=B7=E9=A3=9E=E8=8E=B1STM32F103C8=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=20=E7=9A=84BSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f103-dofly-lyc8/.config | 337 ++ bsp/stm32/stm32f103-dofly-lyc8/.gitignore | 42 + bsp/stm32/stm32f103-dofly-lyc8/Kconfig | 22 + bsp/stm32/stm32f103-dofly-lyc8/README.md | 111 + bsp/stm32/stm32f103-dofly-lyc8/SConscript | 14 + bsp/stm32/stm32f103-dofly-lyc8/SConstruct | 58 + .../applications/SConscript | 11 + .../stm32f103-dofly-lyc8/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 114 + .../board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 370 +++ .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 246 ++ .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 179 + .../board/CubeMX_Config/Src/stm32f1xx_it.c | 217 ++ .../CubeMX_Config/Src/system_stm32f1xx.c | 448 +++ bsp/stm32/stm32f103-dofly-lyc8/board/Kconfig | 30 + .../stm32f103-dofly-lyc8/board/SConscript | 35 + bsp/stm32/stm32f103-dofly-lyc8/board/board.c | 44 + bsp/stm32/stm32f103-dofly-lyc8/board/board.h | 41 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 143 + .../board/linker_scripts/link.sct | 15 + .../stm32f103-dofly-lyc8/figures/board.jpg | Bin 0 -> 66738 bytes bsp/stm32/stm32f103-dofly-lyc8/project.ewd | 2948 +++++++++++++++++ bsp/stm32/stm32f103-dofly-lyc8/project.ewp | 2278 +++++++++++++ bsp/stm32/stm32f103-dofly-lyc8/project.eww | 10 + bsp/stm32/stm32f103-dofly-lyc8/project.uvopt | 895 +++++ bsp/stm32/stm32f103-dofly-lyc8/project.uvoptx | 933 ++++++ bsp/stm32/stm32f103-dofly-lyc8/project.uvproj | 734 ++++ .../stm32f103-dofly-lyc8/project.uvprojx | 696 ++++ bsp/stm32/stm32f103-dofly-lyc8/rtconfig.h | 175 + bsp/stm32/stm32f103-dofly-lyc8/rtconfig.py | 134 + bsp/stm32/stm32f103-dofly-lyc8/template.ewd | 2948 +++++++++++++++++ bsp/stm32/stm32f103-dofly-lyc8/template.ewp | 2058 ++++++++++++ bsp/stm32/stm32f103-dofly-lyc8/template.eww | 10 + bsp/stm32/stm32f103-dofly-lyc8/template.uvopt | 162 + .../stm32f103-dofly-lyc8/template.uvoptx | 213 ++ .../stm32f103-dofly-lyc8/template.uvproj | 407 +++ .../stm32f103-dofly-lyc8/template.uvprojx | 384 +++ 41 files changed, 17711 insertions(+) create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/.config create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/.gitignore create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/Kconfig create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/README.md create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/SConstruct create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/applications/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/applications/main.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_it.h create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_it.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/system_stm32f1xx.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/Kconfig create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/SConscript create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/board.c create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/board.h create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/figures/board.jpg create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.ewd create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.ewp create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.eww create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.uvopt create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.uvoptx create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.uvproj create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/project.uvprojx create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/rtconfig.h create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/rtconfig.py create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.ewd create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.ewp create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.eww create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.uvopt create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.uvoptx create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.uvproj create mode 100644 bsp/stm32/stm32f103-dofly-lyc8/template.uvprojx diff --git a/bsp/stm32/stm32f103-dofly-lyc8/.config b/bsp/stm32/stm32f103-dofly-lyc8/.config new file mode 100644 index 000000000..ffe2f8d4c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/.config @@ -0,0 +1,337 @@ +# +# 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=0x40000 +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_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 + +# +# 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_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 + +# +# 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 + +# +# 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 + +# +# 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 + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_STM32F4_HAL is not set +# CONFIG_PKG_USING_STM32F4_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set + +# +# 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 + +# +# sample package +# + +# +# 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 + +# +# example package: hello +# +# CONFIG_PKG_USING_HELLO 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 is not set +CONFIG_BSP_USING_UART1=y + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f103-dofly-lyc8/.gitignore b/bsp/stm32/stm32f103-dofly-lyc8/.gitignore new file mode 100644 index 000000000..7221bde01 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32f103-dofly-lyc8/Kconfig b/bsp/stm32/stm32f103-dofly-lyc8/Kconfig new file mode 100644 index 000000000..2b30840a3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +config $BSP_DIR + string + option env="BSP_ROOT" + default "." + +config $RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config $PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/README.md b/bsp/stm32/stm32f103-dofly-lyc8/README.md new file mode 100644 index 000000000..ffac7c2b3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/README.md @@ -0,0 +1,111 @@ + +# STM32F103 霸道开发板 BSP 说明 + +## 简介 + +本文档为FindYGL为德飞莱 STM32F103 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +LY-STM32F103C8V1.2 是德飞莱推出的一款基于 ARM Cortex-M3 内核的开发板,最高主频为 72Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F103 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F103C8T6,主频 72MHz,64KB FLASH ,20KB RAM +- 常用外设 + - LED:1个普通LED,LED1(红色,PB8) +- 常用接口:USB 转串口 +- 调试接口,标准 JTAG/SWD + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PB15 ---> PIN: 0, 1...47| +| UART | 支持 | UART1 | +| SPI | 暂不支持 | | +| I2C | 暂不支持 | | +| RTC | 暂不支持 | | +| PWM | 暂不支持 | | +| **扩展模块** | **支持情况** | **备注** | +| | | | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 JLink 下载程序,在通过 JLink 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,其中一个 LED 会周期性闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 3.1.1 build Nov 19 2018 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [FindYGL](https://github.com/FindYGL) \ No newline at end of file diff --git a/bsp/stm32/stm32f103-dofly-lyc8/SConscript b/bsp/stm32/stm32f103-dofly-lyc8/SConscript new file mode 100644 index 000000000..fe0ae941a --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f103-dofly-lyc8/SConstruct b/bsp/stm32/stm32f103-dofly-lyc8/SConstruct new file mode 100644 index 000000000..c28354a99 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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 = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32F1xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f103-dofly-lyc8/applications/SConscript b/bsp/stm32/stm32f103-dofly-lyc8/applications/SConscript new file mode 100644 index 000000000..04f04dd54 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f103-dofly-lyc8/applications/main.c b/bsp/stm32/stm32f103-dofly-lyc8/applications/main.c new file mode 100644 index 000000000..ab91ca742 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + */ + +#include +#include +#include +#include "drv_gpio.h" +/* defined the LED0 pin: PB8 */ +#define LED0_PIN GET_PIN(B, 8) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/.mxproject new file mode 100644 index 000000000..6f092f6e9 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=D:/RT-Thread-BSP-Make/rt-thread-master/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=D:/RT-Thread-BSP-Make/rt-thread-master/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/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_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;D:/RT-Thread-BSP-Make/rt-thread-master/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config//MDK-ARM/startup_stm32f103xb.s; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 000000000..e2768b204 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,114 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F1 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32F103C(8-B)Tx +Mcu.Package=LQFP48 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA9 +Mcu.Pin5=PA10 +Mcu.Pin6=PA13 +Mcu.Pin7=PA14 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103C8Tx +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F103 +PCC.MCU=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 +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 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/main.h new file mode 100644 index 000000000..f5223c28c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,91 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 000000000..9ab2b0914 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h @@ -0,0 +1,370 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2019 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DMA_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2 +#define MAC_ADDR1 0 +#define MAC_ADDR2 0 +#define MAC_ADDR3 0 +#define MAC_ADDR4 0 +#define MAC_ADDR5 0 + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FF) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) + +#define PHY_READ_TO ((uint32_t)0x0000FFFF) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f1xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_it.h new file mode 100644 index 000000000..3e7d92a70 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Inc/stm32f1xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/main.c new file mode 100644 index 000000000..eebe591d3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/main.c @@ -0,0 +1,246 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_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-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c new file mode 100644 index 000000000..b22009fcd --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -0,0 +1,179 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /**NOJTAG: JTAG-DP Disabled and SW-DP Enabled + */ + __HAL_AFIO_REMAP_SWJ_NOJTAG(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ + +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_it.c new file mode 100644 index 000000000..14903b513 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/stm32f1xx_it.c @@ -0,0 +1,217 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f1xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F1xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/system_stm32f1xx.c b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/system_stm32f1xx.c new file mode 100644 index 000000000..af3759a3b --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/CubeMX_Config/Src/system_stm32f1xx.c @@ -0,0 +1,448 @@ +/** + ****************************************************************************** + * @file system_stm32f1xx.c + * @author MCD Application Team + * @version V4.2.0 + * @date 31-March-2017 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f1xx_xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on + * the product used), refer to "HSE_VALUE". + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f1xx_system + * @{ + */ + +/** @addtogroup STM32F1xx_System_Private_Includes + * @{ + */ + +#include "stm32f1xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Defines + * @{ + */ + +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +/*!< Uncomment the following line if you need to use external SRAM */ +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#if defined(STM32F100xB) ||defined(STM32F100xE) + uint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = 72000000U; /*!< System Clock Frequency (Core Clock) */ +#endif + +const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= 0x00000001U; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#if !defined(STM32F105xC) && !defined(STM32F107xC) + RCC->CFGR &= 0xF8FF0000U; +#else + RCC->CFGR &= 0xF0FF0000U; +#endif /* STM32F105xC */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= 0xFEF6FFFFU; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= 0xFF80FFFFU; + +#if defined(STM32F105xC) || defined(STM32F107xC) + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= 0xEBFFFFFFU; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000U; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000U; +#elif defined(STM32F100xB) || defined(STM32F100xE) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000U; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000U; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000U; +#endif /* STM32F105xC */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depending on the product used), user has to ensure + * that HSE_VALUE is same as the real frequency of the crystal used. + * Otherwise, this function may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U; + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; +#endif /* STM32F105xC */ + +#if defined(STM32F100xB) || defined(STM32F100xE) + uint32_t prediv1factor = 0U; +#endif /* STM32F100xB or STM32F100xE */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00U: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04U: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08U: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#if !defined(STM32F105xC) && !defined(STM32F107xC) + pllmull = ( pllmull >> 18U) + 2U; + + if (pllsource == 0x00U) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; + } + else + { + #if defined(STM32F100xB) || defined(STM32F100xE) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18U; + + if (pllmull != 0x0DU) + { + pllmull += 2U; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13U / 2U; + } + + if (pllsource == 0x00U) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; + + if (prediv1source == 0U) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F105xC */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/** + * @brief Setup the external memory controller. Called in startup_stm32f1xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f1xx_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmpreg; + /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114U; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0U; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); + + (void)(tmpreg); + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BBU; + GPIOD->CRH = 0xBBBBBBBBU; + + GPIOE->CRL = 0xB44444BBU; + GPIOE->CRH = 0xBBBBBBBBU; + + GPIOF->CRL = 0x44BBBBBBU; + GPIOF->CRH = 0xBBBB4444U; + + GPIOG->CRL = 0x44BBBBBBU; + GPIOG->CRH = 0x444B4B44U; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4U] = 0x00001091U; + FSMC_Bank1->BTCR[5U] = 0x00110212U; +} +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/Kconfig b/bsp/stm32/stm32f103-dofly-lyc8/board/Kconfig new file mode 100644 index 000000000..67a36c4c4 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/Kconfig @@ -0,0 +1,30 @@ +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 + + config BSP_USING_UART1 + bool "Enable UART1" + select RT_USING_SERIAL + default y + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/SConscript b/bsp/stm32/stm32f103-dofly-lyc8/board/SConscript new file mode 100644 index 000000000..713a0e4b8 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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-dofly-lyc8/board/board.c b/bsp/stm32/stm32f103-dofly-lyc8/board/board.c new file mode 100644 index 000000000..33588783e --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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 + * 2018-11-06 SummerGift change to new framework + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/board.h b/bsp/stm32/stm32f103-dofly-lyc8/board/board.h new file mode 100644 index 000000000..d6c1b9351 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift change to new framework + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#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); + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.icf new file mode 100644 index 000000000..7cff44d41 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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}; \ No newline at end of file diff --git a/bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.lds new file mode 100644 index 000000000..32c2fedb4 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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 /* 128KB 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-dofly-lyc8/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-dofly-lyc8/board/linker_scripts/link.sct new file mode 100644 index 000000000..6930ff4b5 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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-dofly-lyc8/figures/board.jpg b/bsp/stm32/stm32f103-dofly-lyc8/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edb47cd803483e416bde92bd88fd7f93a3dcd137 GIT binary patch literal 66738 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 WUGew-Klk6t1I+)Qda*M9Apb9s5aZbZ literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f103-dofly-lyc8/project.ewd b/bsp/stm32/stm32f103-dofly-lyc8/project.ewd new file mode 100644 index 000000000..dda786afe --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.ewd @@ -0,0 +1,2948 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 5 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/project.ewp b/bsp/stm32/stm32f103-dofly-lyc8/project.ewp new file mode 100644 index 000000000..751801c4f --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.ewp @@ -0,0 +1,2278 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 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 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 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 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + 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 + + + + 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 + + + + CORTEX-M3 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/project.eww b/bsp/stm32/stm32f103-dofly-lyc8/project.eww new file mode 100644 index 000000000..c2cb02eb1 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/project.uvopt b/bsp/stm32/stm32f103-dofly-lyc8/project.uvopt new file mode 100644 index 000000000..f19fcdc1c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.uvopt @@ -0,0 +1,895 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 3 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + 0 + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + stm32f1xx_hal_msp.c + 0 + 0 + + + 2 + 4 + 2 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s + startup_stm32f103xb.s + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + CORTEX-M3 + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 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 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + system_stm32f1xx.c + 0 + 0 + + + 7 + 44 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + stm32f1xx_hal_cortex.c + 0 + 0 + + + 7 + 46 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + stm32f1xx_hal_pwr.c + 0 + 0 + + + 7 + 48 + 1 + 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 + ..\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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + stm32f1xx_hal.c + 0 + 0 + + + 7 + 51 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + stm32f1xx_hal_sram.c + 0 + 0 + + + 7 + 53 + 1 + 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 + ..\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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + stm32f1xx_hal_uart.c + 0 + 0 + + + 7 + 56 + 1 + 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-dofly-lyc8/project.uvoptx b/bsp/stm32/stm32f103-dofly-lyc8/project.uvoptx new file mode 100644 index 000000000..6a23cfe17 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.uvoptx @@ -0,0 +1,933 @@ + + + + 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 + Quick Start Guide (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\STM32E_QSG.pdf + + + 1 + Base Board Schematics (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e-base-board-schematics.pdf + + + 2 + Display Board Schematics (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e-display-board-schematics.pdf + + + 3 + User Manual (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e.chm + + + 4 + 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 + 3 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -S0 -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 + -U4294967295 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(3BA00477) -L00(4) -N01("ST TMC") -D01(16410041) -L01(5) -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 + + + + 0 + + + 0 + + 1 + 0 + 2 + 10000000 + + + + + + Applications + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + stm32f1xx_hal_msp.c + 0 + 0 + + + 2 + 4 + 2 + 0 + 0 + 0 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s + startup_stm32f103xb.s + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Kernel + 1 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + CORTEX-M3 + 1 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + + + DeviceDrivers + 1 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 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 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + system_stm32f1xx.c + 0 + 0 + + + 7 + 44 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + stm32f1xx_hal_cortex.c + 0 + 0 + + + 7 + 46 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + stm32f1xx_hal_pwr.c + 0 + 0 + + + 7 + 48 + 1 + 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 + ..\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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + stm32f1xx_hal.c + 0 + 0 + + + 7 + 51 + 1 + 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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + stm32f1xx_hal_sram.c + 0 + 0 + + + 7 + 53 + 1 + 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 + ..\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 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + stm32f1xx_hal_uart.c + 0 + 0 + + + 7 + 56 + 1 + 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-dofly-lyc8/project.uvproj b/bsp/stm32/stm32f103-dofly-lyc8/project.uvproj new file mode 100644 index 000000000..9fffc5ef3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.uvproj @@ -0,0 +1,734 @@ + + + + 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 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + 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 + 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 + 1 + 1 + 1 + 0 + 0 + + + STM32F103xB, USE_HAL_DRIVER + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m3;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + startup_stm32f103xb.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + 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 + + + + + CORTEX-M3 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-lyc8/project.uvprojx b/bsp/stm32/stm32f103-dofly-lyc8/project.uvprojx new file mode 100644 index 000000000..48f12a45b --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/project.uvprojx @@ -0,0 +1,696 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060183::V5.06 update 2 (build 183)::ARMCC + + + STM32F103C8 + STMicroelectronics + Keil.STM32F1xx_DFP.2.1.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x5000) IROM(0x08000000,0x10000) 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 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 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 + 1 + 1 + 1 + 0 + 0 + + + STM32F103xB, USE_HAL_DRIVER + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m3;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + startup_stm32f103xb.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + 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 + + + + + CORTEX-M3 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-lyc8/rtconfig.h b/bsp/stm32/stm32f103-dofly-lyc8/rtconfig.h new file mode 100644 index 000000000..6c6a87c4f --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/rtconfig.h @@ -0,0 +1,175 @@ +#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 0x40000 +#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_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 */ + + +/* sample package */ + +/* samples: kernel and components samples */ + + +/* example package: hello */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F1 + +/* Hardware Drivers Config */ + +#define SOC_STM32F103c8 + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f103-dofly-lyc8/rtconfig.py b/bsp/stm32/stm32f103-dofly-lyc8/rtconfig.py new file mode 100644 index 000000000..40826ac99 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/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-dofly-lyc8/template.ewd b/bsp/stm32/stm32f103-dofly-lyc8/template.ewd new file mode 100644 index 000000000..2f45ed783 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.ewd @@ -0,0 +1,2948 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 5 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.ewp b/bsp/stm32/stm32f103-dofly-lyc8/template.ewp new file mode 100644 index 000000000..22320ce06 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.ewp @@ -0,0 +1,2058 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 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 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 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 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.eww b/bsp/stm32/stm32f103-dofly-lyc8/template.eww new file mode 100644 index 000000000..bd036bb4c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.uvopt b/bsp/stm32/stm32f103-dofly-lyc8/template.uvopt new file mode 100644 index 000000000..7946319ef --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.uvoptx b/bsp/stm32/stm32f103-dofly-lyc8/template.uvoptx new file mode 100644 index 000000000..53a75b04e --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.uvoptx @@ -0,0 +1,213 @@ + + + + 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 + Quick Start Guide (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\STM32E_QSG.pdf + + + 1 + Base Board Schematics (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e-base-board-schematics.pdf + + + 2 + Display Board Schematics (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e-display-board-schematics.pdf + + + 3 + User Manual (MCBSTM32E) + E:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Documents\mcbstm32e.chm + + + 4 + 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 + 5 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -S0 -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 + -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 + + + + 0 + + + 0 + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.uvproj b/bsp/stm32/stm32f103-dofly-lyc8/template.uvproj new file mode 100644 index 000000000..99e58d3b3 --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f103-dofly-lyc8/template.uvprojx b/bsp/stm32/stm32f103-dofly-lyc8/template.uvprojx new file mode 100644 index 000000000..56dba546c --- /dev/null +++ b/bsp/stm32/stm32f103-dofly-lyc8/template.uvprojx @@ -0,0 +1,384 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + + + STM32F103C8 + STMicroelectronics + Keil.STM32F1xx_DFP.2.1.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x5000) IROM(0x08000000,0x10000) 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 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 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 + 1 + 1 + 1 + 0 + 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 + + + + + +
-- GitLab