From 410034fa141ebb94b8014b268018220ef3a9194e Mon Sep 17 00:00:00 2001 From: SummerGift Date: Mon, 24 Dec 2018 15:59:13 +0800 Subject: [PATCH] [bsp][stm32] add f0 bsp templates --- .../libraries/templates/stm32f0xx/.config | 371 +++ .../libraries/templates/stm32f0xx/.gitignore | 42 + .../libraries/templates/stm32f0xx/Kconfig | 22 + .../libraries/templates/stm32f0xx/README.md | 123 + .../libraries/templates/stm32f0xx/SConscript | 14 + .../libraries/templates/stm32f0xx/SConstruct | 58 + .../stm32f0xx/applications/SConscript | 11 + .../templates/stm32f0xx/applications/main.c | 33 + .../stm32f0xx/board/CubeMX_Config/.mxproject | 16 + .../board/CubeMX_Config/CubeMX_Config.ioc | 116 + .../stm32f0xx/board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32f0xx_hal_conf.h | 323 ++ .../board/CubeMX_Config/Inc/stm32f0xx_it.h | 80 + .../stm32f0xx/board/CubeMX_Config/Src/main.c | 296 ++ .../CubeMX_Config/Src/stm32f0xx_hal_msp.c | 242 ++ .../board/CubeMX_Config/Src/stm32f0xx_it.c | 159 + .../CubeMX_Config/Src/system_stm32f1xx.c | 448 +++ .../templates/stm32f0xx/board/Kconfig | 56 + .../templates/stm32f0xx/board/SConscript | 29 + .../templates/stm32f0xx/board/board.c | 49 + .../templates/stm32f0xx/board/board.h | 37 + .../stm32f0xx/board/linker_scripts/link.icf | 28 + .../stm32f0xx/board/linker_scripts/link.lds | 143 + .../stm32f0xx/board/linker_scripts/link.sct | 15 + .../templates/stm32f0xx/figures/board.png | Bin 0 -> 177116 bytes .../libraries/templates/stm32f0xx/project.ewd | 2834 +++++++++++++++++ .../libraries/templates/stm32f0xx/project.ewp | 2384 ++++++++++++++ .../libraries/templates/stm32f0xx/project.eww | 10 + .../templates/stm32f0xx/project.uvopt | 162 + .../templates/stm32f0xx/project.uvoptx | 984 ++++++ .../templates/stm32f0xx/project.uvproj | 1126 +++++++ .../templates/stm32f0xx/project.uvprojx | 737 +++++ .../libraries/templates/stm32f0xx/rtconfig.h | 182 ++ .../libraries/templates/stm32f0xx/rtconfig.py | 134 + .../templates/stm32f0xx/template.ewd | 2834 +++++++++++++++++ .../templates/stm32f0xx/template.ewp | 2032 ++++++++++++ .../templates/stm32f0xx/template.eww | 10 + .../templates/stm32f0xx/template.uvgui.zylx | 1856 +++++++++++ .../templates/stm32f0xx/template.uvopt | 204 ++ .../templates/stm32f0xx/template.uvoptx | 192 ++ .../templates/stm32f0xx/template.uvproj | 422 +++ .../templates/stm32f0xx/template.uvprojx | 395 +++ 42 files changed, 19300 insertions(+) create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/.config create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/.gitignore create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/Kconfig create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/README.md create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/SConstruct create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/applications/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/applications/main.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_it.h create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_it.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/system_stm32f1xx.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/Kconfig create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/board.c create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/board.h create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.icf create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.lds create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.sct create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/figures/board.png create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.ewd create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.ewp create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.eww create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.uvopt create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.uvoptx create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.uvproj create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/project.uvprojx create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/rtconfig.h create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/rtconfig.py create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.ewd create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.ewp create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.eww create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.uvgui.zylx create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.uvopt create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.uvoptx create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.uvproj create mode 100644 bsp/stm32/libraries/templates/stm32f0xx/template.uvprojx diff --git a/bsp/stm32/libraries/templates/stm32f0xx/.config b/bsp/stm32/libraries/templates/stm32f0xx/.config new file mode 100644 index 0000000000..28eea196b2 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/.config @@ -0,0 +1,371 @@ +# +# 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_M0=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_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_PCF8574 is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set + +# +# 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 + +# +# Privated Packages of RealThread +# +# CONFIG_PKG_USING_CODEC is not set +# CONFIG_PKG_USING_PLAYER is not set +# CONFIG_PKG_USING_PERSIMMON_SRC is not set + +# +# Network Utilities +# +# CONFIG_PKG_USING_WICED is not set +# CONFIG_PKG_USING_CLOUDSDK is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_POWER_MANAGER is not set +# CONFIG_PKG_USING_RT_OTA is not set +# CONFIG_PKG_USING_RDBD_SRC is not set +# CONFIG_PKG_USING_RTINSIGHT is not set +# CONFIG_PKG_USING_SMARTCONFIG is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F0=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F091RC=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_USING_SPI1 is not set +# CONFIG_BSP_SPI_USING_DMA is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/libraries/templates/stm32f0xx/.gitignore b/bsp/stm32/libraries/templates/stm32f0xx/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/.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/libraries/templates/stm32f0xx/Kconfig b/bsp/stm32/libraries/templates/stm32f0xx/Kconfig new file mode 100644 index 0000000000..2b30840a3e --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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/libraries/templates/stm32f0xx/README.md b/bsp/stm32/libraries/templates/stm32f0xx/README.md new file mode 100644 index 0000000000..e7d97509ef --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/README.md @@ -0,0 +1,123 @@ +# BSP README 模板 + +## 简介 + +本文档为 xxx 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +【此处简单介绍一下开发板】 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32xxx,主频 xxxMHz,xxxKB FLASH ,xxxKB RAM +- 外部 RAM:型号,xMB +- 外部 FLASH:型号,xMB +- 常用外设 + - LED:x个,DS0(红色,PB1),DS1(绿色,PB0) + - 按键:x个,K0(兼具唤醒功能,PA0),K1(PC13) +- 常用接口:USB 转串口、SD 卡接口、以太网接口、LCD 接口等 +- 调试接口,标准 JTAG/SWD + +开发板更多详细信息请参考【厂商名】 [xxx开发板介绍](https://xxx)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | | +| SPI Flash | 支持 | | +| 以太网 | 支持 | | +| SD卡 | 暂不支持 | | +| CAN | 暂不支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 | +| UART | 支持 | UART1/x/x | +| SPI | 支持 | SPI1/x/x | +| I2C | 支持 | 软件 I2C | +| SDIO | 暂不支持 | 即将支持 | +| RTC | 暂不支持 | 即将支持 | +| PWM | 暂不支持 | 即将支持 | +| USB Device | 暂不支持 | 即将支持 | +| USB Host | 暂不支持 | 即将支持 | +| IWG | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | +| xxx 模块 | 支持 | | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 xxx 仿真器下载程序,在通过 xxx 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,【这里写开发板运行起来之后的现象,如:LED 闪烁等】。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 3.1.1 build Nov 19 2018 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [BSP 进阶使用指南](../docs/BSP进阶使用指南.md)。 + +## 注意事项 + +- xxx + +## 联系人信息 + +维护人: + +- [xxx](https://个人主页), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/libraries/templates/stm32f0xx/SConscript b/bsp/stm32/libraries/templates/stm32f0xx/SConscript new file mode 100644 index 0000000000..fe0ae941ae --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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/libraries/templates/stm32f0xx/SConstruct b/bsp/stm32/libraries/templates/stm32f0xx/SConstruct new file mode 100644 index 0000000000..1676e02b25 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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 = 'STM32F0xx_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/libraries/templates/stm32f0xx/applications/SConscript b/bsp/stm32/libraries/templates/stm32f0xx/applications/SConscript new file mode 100644 index 0000000000..04f04dd543 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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/libraries/templates/stm32f0xx/applications/main.c b/bsp/stm32/libraries/templates/stm32f0xx/applications/main.c new file mode 100644 index 0000000000..5054699c0d --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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 zylx first version + */ + +#include +#include +#include +#include "drv_gpio.h" +/* defined the LED0 pin: PB1 */ +#define LED0_PIN GET_PIN(B, 1) + +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/libraries/templates/stm32f0xx/board/CubeMX_Config/.mxproject b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..c0788ffb49 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/.mxproject @@ -0,0 +1,16 @@ +[PreviousGenFiles] +HeaderPath=D:/BspFramework/rt-thread/bsp/stm32/stm32f0xx/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h;stm32f0xx_it.h;stm32f0xx_hal_conf.h; +SourcePath=D:/BspFramework/rt-thread/bsp/stm32/stm32f0xx/board/CubeMX_Config/Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c;stm32f0xx_it.c;stm32f0xx_hal_msp.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h;Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_usart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h;Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f091xc.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c; + +[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;E:/git_project/BspFramework/rt-thread/bsp/stm32/stm32f10x/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; + +[] +SourceFiles=;; + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..1094ab3d37 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,116 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F0 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IP4=USART2 +Mcu.IPNb=5 +Mcu.Name=STM32F091R(B-C)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PF0-OSC_IN +Mcu.Pin1=PF1-OSC_OUT +Mcu.Pin2=PA2 +Mcu.Pin3=PA3 +Mcu.Pin4=PA8 +Mcu.Pin5=PA9 +Mcu.Pin6=PA10 +Mcu.Pin7=PA13 +Mcu.Pin8=PA14 +Mcu.Pin9=VP_SYS_VS_Systick +Mcu.PinsNb=10 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F091RCTx +MxCube.Version=5.0.0 +MxDb.Version=DB.5.0.0 +NVIC.HardFault_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.SVC_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +PA10.Mode=Synchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_SWCLK +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA8.Mode=Synchronous +PA8.Signal=USART1_CK +PA9.Mode=Synchronous +PA9.Signal=USART1_TX +PCC.Checker=false +PCC.Line=STM32F0x1 +PCC.MCU=STM32F091R(B-C)Tx +PCC.PartNumber=STM32F091RCTx +PCC.Seq0=0 +PCC.Series=STM32F0 +PCC.Temperature=25 +PCC.Vdd=3.6 +PF0-OSC_IN.Mode=HSE-External-Oscillator +PF0-OSC_IN.Signal=RCC_OSC_IN +PF1-OSC_OUT.Mode=HSE-External-Oscillator +PF1-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=STM32F091RCTx +ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.9.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=EWARM V8 +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_Init-USART1-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true +RCC.AHBFreq_Value=48000000 +RCC.APB1Freq_Value=48000000 +RCC.APB1TimFreq_Value=48000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.FCLKCortexFreq_Value=48000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=48000000 +RCC.HSICECFreq_Value=32786.88524590164 +RCC.I2SFreq_Value=48000000 +RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,CECFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSICECFreq_Value,I2SFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=48000000 +RCC.PLLCLKFreq_Value=48000000 +RCC.PLLMCOFreq_Value=48000000 +RCC.PLLMUL=RCC_PLL_MUL6 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SYSCLKFreq_VALUE=48000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=48000000 +RCC.USART1Freq_Value=48000000 +RCC.USART2Freq_Value=48000000 +RCC.USART3Freq_Value=48000000 +RCC.VCOOutput2Freq_Value=8000000 +USART1.IPParameters=VirtualMode-Synchronous +USART1.VirtualMode-Synchronous=VM_SYNC +USART2.IPParameters=VirtualMode-Asynchronous +USART2.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/main.h b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..0e95f0d09a --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_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/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h new file mode 100644 index 0000000000..a45ff54b30 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h @@ -0,0 +1,323 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2018 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F0xx_HAL_CONF_H +#define __STM32F0xx_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_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_TSC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +#define HAL_USART_MODULE_ENABLED +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_PCD_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 +#define HAL_I2C_MODULE_ENABLED + +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +/** + * @brief In the following line adjust the External High Speed oscillator (HSE) Startup + * Timeout 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 In the following line adjust the Internal High Speed oscillator (HSI) Startup + * Timeout value + */ +#if !defined (HSI_STARTUP_TIMEOUT) + #define HSI_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSI start up */ +#endif /* HSI_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator for ADC (HSI14) value. + */ +#if !defined (HSI14_VALUE) +#define HSI14_VALUE ((uint32_t)14000000) /*!< Value of the Internal High Speed oscillator for ADC in Hz. + The real value may vary depending on the variations + in voltage and temperature. */ +#endif /* HSI14_VALUE */ + +/** + * @brief Internal High Speed oscillator for USB (HSI48) value. + */ +#if !defined (HSI48_VALUE) +#define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal High Speed oscillator for USB in Hz. + The real value may vary depending on the variations + in voltage and temperature. */ +#endif /* HSI48_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)40000) +#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 (LSI) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed 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) */ + /* Warning: Must be set to higher priority for HAL_Delay() */ + /* and HAL_GetTick() usage under interrupt context */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 +#define INSTRUCTION_CACHE_ENABLE 0 +#define DATA_CACHE_ENABLE 0 +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f0xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f0xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f0xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f0xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f0xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f0xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f0xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32f0xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f0xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f0xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f0xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f0xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f0xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f0xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f0xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f0xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f0xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f0xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f0xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f0xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f0xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f0xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED + #include "stm32f0xx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f0xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f0xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f0xx_hal_wwdg.h" +#endif /* HAL_WWDG_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((char *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(char* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_it.h b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_it.h new file mode 100644 index 0000000000..0c8cb46a8b --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Inc/stm32f0xx_it.h @@ -0,0 +1,80 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F0xx_IT_H +#define __STM32F0xx_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 SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/main.c b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..560a63e077 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/main.c @@ -0,0 +1,296 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +USART_HandleTypeDef husart1; +UART_HandleTypeDef huart2; + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_Init(void); +static void MX_USART2_UART_Init(void); +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ + +/* 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_Init(); + MX_USART2_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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; + RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_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 */ + husart1.Instance = USART1; + husart1.Init.BaudRate = 115200; + husart1.Init.WordLength = USART_WORDLENGTH_8B; + husart1.Init.StopBits = USART_STOPBITS_1; + husart1.Init.Parity = USART_PARITY_NONE; + husart1.Init.Mode = USART_MODE_TX_RX; + husart1.Init.CLKPolarity = USART_POLARITY_LOW; + husart1.Init.CLKPhase = USART_PHASE_1EDGE; + husart1.Init.CLKLastBit = USART_LASTBIT_DISABLE; + if (HAL_USART_Init(&husart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief USART2 Initialization Function + * @param None + * @retval None + */ +static void MX_USART2_UART_Init(void) +{ + + /* USER CODE BEGIN USART2_Init 0 */ + + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOF_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 */ + while(1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(char *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/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c new file mode 100644 index 0000000000..8bdf8316f9 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c @@ -0,0 +1,242 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f0xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief USART MSP Initialization +* This function configures the hardware resources used in this example +* @param husart: USART handle pointer +* @retval None +*/ +void HAL_USART_MspInit(USART_HandleTypeDef* husart) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(husart->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 + PA8 ------> USART1_CK + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_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==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + +} + +/** +* @brief USART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param husart: USART handle pointer +* @retval None +*/ + +void HAL_USART_MspDeInit(USART_HandleTypeDef* husart) +{ + + if(husart->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 + PA8 ------> USART1_CK + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 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==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_it.c b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_it.c new file mode 100644 index 0000000000..4a31075b7c --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/stm32f0xx_it.c @@ -0,0 +1,159 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f0xx_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-M0 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 System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_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 */ +} + +/******************************************************************************/ +/* STM32F0xx 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_stm32f0xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/system_stm32f1xx.c b/bsp/stm32/libraries/templates/stm32f0xx/board/CubeMX_Config/Src/system_stm32f1xx.c new file mode 100644 index 0000000000..af3759a3b6 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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/libraries/templates/stm32f0xx/board/Kconfig b/bsp/stm32/libraries/templates/stm32f0xx/board/Kconfig new file mode 100644 index 0000000000..766529e3a3 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/Kconfig @@ -0,0 +1,56 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F091RC + bool + select SOC_SERIES_STM32F0 + 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 + + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + select RT_USING_SPI + default n + + config BSP_SPI_USING_DMA + bool "Enable SPI DMA support" + default n + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + int "i2c1 scl pin number" + range 1 216 + default 15 + config BSP_I2C1_SDA_PIN + int "I2C1 sda pin number" + range 1 216 + default 16 + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/SConscript b/bsp/stm32/libraries/templates/stm32f0xx/board/SConscript new file mode 100644 index 0000000000..00d27d1c9b --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/SConscript @@ -0,0 +1,29 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f0xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F0xx_HAL/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc/startup_stm32f091xc.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F0xx_HAL/CMSIS/Device/ST/STM32F0xx/Source/Templates/arm/startup_stm32f091xc.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F0xx_HAL/CMSIS/Device/ST/STM32F0xx/Source/Templates/iar/startup_stm32f091xc.s'] + +CPPDEFINES = ['STM32F091xC'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/board.c b/bsp/stm32/libraries/templates/stm32f0xx/board/board.c new file mode 100644 index 0000000000..9115460e72 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/board.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-21 zylx first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; + RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/libraries/templates/stm32f0xx/board/board.h b/bsp/stm32/libraries/templates/stm32f0xx/board/board.h new file mode 100644 index 0000000000..2faad681d6 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/board.h @@ -0,0 +1,37 @@ +/* + * 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" + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 32 +#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/libraries/templates/stm32f0xx/board/linker_scripts/link.icf b/bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.icf new file mode 100644 index 0000000000..04c0e65c7a --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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__ = 0x08040000; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20008000; +/*-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/libraries/templates/stm32f0xx/board/linker_scripts/link.lds b/bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.lds new file mode 100644 index 0000000000..be18c21a29 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/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 = 256k /* 256KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 32k /* 32K 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/libraries/templates/stm32f0xx/board/linker_scripts/link.sct b/bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.sct new file mode 100644 index 0000000000..b0eb8319f1 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00008000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/figures/board.png b/bsp/stm32/libraries/templates/stm32f0xx/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..8562ae6604128b239de0a6aeea03edc2bcb63e54 GIT binary patch literal 177116 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%0AJe|Gfm;{x`U%%z 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℘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 LtLG;6>-&EJFL|l; literal 0 HcmV?d00001 diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.ewd b/bsp/stm32/libraries/templates/stm32f0xx/project.ewd new file mode 100644 index 0000000000..5c652a809d --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.ewp b/bsp/stm32/libraries/templates/stm32f0xx/project.ewp new file mode 100644 index 0000000000..7deb805180 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.ewp @@ -0,0 +1,2384 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + 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\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_adc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_ex.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_flash.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.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_i2c.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_irda.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_iwdg.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_rtc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rtc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_smartcard.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_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 + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_wwdg.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_adc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_crc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dac.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_fsmc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_i2c.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rtc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_sdmmc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usb.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.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_can.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_eth.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_hcd.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2s.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_mmc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sd.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nand.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pccard.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nor.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_pcd.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pcd_ex.c + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.eww b/bsp/stm32/libraries/templates/stm32f0xx/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.uvopt b/bsp/stm32/libraries/templates/stm32f0xx/project.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.uvoptx b/bsp/stm32/libraries/templates/stm32f0xx/project.uvoptx new file mode 100644 index 0000000000..0d0619b4fa --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.uvoptx @@ -0,0 +1,984 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F0xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U0670FF495351885087162831 -I0 -O206 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + 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\stm32f0xx_hal_msp.c + stm32f0xx_hal_msp.c + 0 + 0 + + + 2 + 4 + 2 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f091xc.s + startup_stm32f091xc.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-M0 + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\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\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c + system_stm32f0xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + stm32f0xx_hal_dma.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + stm32f0xx_hal_cortex.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_crc.c + stm32f0xx_hal_crc.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + stm32f0xx_hal_pwr.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + stm32f0xx_hal_rcc.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + stm32f0xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + stm32f0xx_hal.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_crc.c + stm32f0xx_ll_crc.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + stm32f0xx_ll_dma.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + stm32f0xx_ll_exti.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + stm32f0xx_ll_gpio.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + stm32f0xx_ll_pwr.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + stm32f0xx_ll_rcc.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + stm32f0xx_ll_utils.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + stm32f0xx_hal_gpio.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + stm32f0xx_hal_uart.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + stm32f0xx_hal_uart_ex.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_usart.c + stm32f0xx_hal_usart.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + stm32f0xx_ll_usart.c + 0 + 0 + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.uvproj b/bsp/stm32/libraries/templates/stm32f0xx/project.uvproj new file mode 100644 index 0000000000..f7cd8f7822 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.uvproj @@ -0,0 +1,1126 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + STM32F103xB, USE_HAL_DRIVER + + 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 + + + + + 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_adc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc.c + + + + + stm32f1xx_hal_adc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_ex.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_flash.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c + + + + + stm32f1xx_hal_flash_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.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_i2c.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2c.c + + + + + stm32f1xx_hal_irda.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_irda.c + + + + + stm32f1xx_hal_iwdg.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_iwdg.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_rtc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rtc.c + + + + + stm32f1xx_hal_rtc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rtc_ex.c + + + + + stm32f1xx_hal_smartcard.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_smartcard.c + + + + + stm32f1xx_hal_spi.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi.c + + + + + stm32f1xx_hal_spi_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_spi_ex.c + + + + + stm32f1xx_hal_tim.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c + + + + + stm32f1xx_hal_tim_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_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 + + + + + stm32f1xx_hal_wwdg.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_wwdg.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_ll_adc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_adc.c + + + + + stm32f1xx_ll_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_crc.c + + + + + stm32f1xx_ll_dac.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dac.c + + + + + stm32f1xx_ll_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c + + + + + stm32f1xx_ll_exti.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c + + + + + stm32f1xx_ll_fsmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_fsmc.c + + + + + stm32f1xx_ll_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c + + + + + stm32f1xx_ll_i2c.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_i2c.c + + + + + stm32f1xx_ll_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c + + + + + stm32f1xx_ll_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c + + + + + stm32f1xx_ll_rtc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rtc.c + + + + + stm32f1xx_ll_sdmmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_sdmmc.c + + + + + stm32f1xx_ll_spi.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c + + + + + stm32f1xx_ll_tim.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c + + + + + stm32f1xx_ll_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c + + + + + stm32f1xx_ll_usb.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usb.c + + + + + stm32f1xx_ll_utils.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_can.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_can.c + + + + + stm32f1xx_hal_dac.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac.c + + + + + stm32f1xx_hal_dac_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dac_ex.c + + + + + stm32f1xx_hal_eth.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_eth.c + + + + + stm32f1xx_hal_hcd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_hcd.c + + + + + stm32f1xx_hal_i2s.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2s.c + + + + + stm32f1xx_hal_mmc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_mmc.c + + + + + stm32f1xx_hal_sd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sd.c + + + + + stm32f1xx_hal_nand.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nand.c + + + + + stm32f1xx_hal_pccard.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pccard.c + + + + + stm32f1xx_hal_nor.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_nor.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_pcd.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pcd.c + + + + + stm32f1xx_hal_pcd_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pcd_ex.c + + + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/project.uvprojx b/bsp/stm32/libraries/templates/stm32f0xx/project.uvprojx new file mode 100644 index 0000000000..2e785baf94 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/project.uvprojx @@ -0,0 +1,737 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F091RCTx + STMicroelectronics + Keil.STM32F0xx_DFP.2.0.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00008000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM)) + 0 + $$Device:STM32F091RCTx$Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + + + + + + + + + + $$Device:STM32F091RCTx$CMSIS\SVD\STM32F0x1.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 + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F091RC + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m0;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Include;..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Inc;..\libraries\STM32F0xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f0xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f0xx_hal_msp.c + + + startup_stm32f091xc.s + 2 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f091xc.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-M0 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m0\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_stm32f0xx.c + 1 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c + + + stm32f0xx_hal_dma.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + + + stm32f0xx_hal_cortex.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + + + stm32f0xx_hal_crc.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_crc.c + + + stm32f0xx_hal_pwr.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + + + stm32f0xx_hal_rcc.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + + + stm32f0xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + stm32f0xx_hal.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + + + stm32f0xx_ll_crc.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_crc.c + + + stm32f0xx_ll_dma.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + + + stm32f0xx_ll_exti.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + + + stm32f0xx_ll_gpio.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + + + stm32f0xx_ll_pwr.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + + + stm32f0xx_ll_rcc.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + + + stm32f0xx_ll_utils.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + + + stm32f0xx_hal_gpio.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + + + stm32f0xx_hal_uart.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + + + stm32f0xx_hal_uart_ex.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + + + stm32f0xx_hal_usart.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_usart.c + + + stm32f0xx_ll_usart.c + 1 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.h b/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.h new file mode 100644 index 0000000000..bb37c4d3a2 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.h @@ -0,0 +1,182 @@ +#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_M0 + +/* 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 */ + + +/* Privated Packages of RealThread */ + + +/* Network Utilities */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F0 + +/* Hardware Drivers Config */ + +#define SOC_STM32F091RC + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.py b/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.py new file mode 100644 index 0000000000..c4d744f4f3 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/rtconfig.py @@ -0,0 +1,134 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m0' +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-m0 -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-M0 ' + 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-M0' + 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-M0' + 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/libraries/templates/stm32f0xx/template.ewd b/bsp/stm32/libraries/templates/stm32f0xx/template.ewd new file mode 100644 index 0000000000..4a945bbaab --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\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 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\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/libraries/templates/stm32f0xx/template.ewp b/bsp/stm32/libraries/templates/stm32f0xx/template.ewp new file mode 100644 index 0000000000..5cb0b253ee --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.ewp @@ -0,0 +1,2032 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.eww b/bsp/stm32/libraries/templates/stm32f0xx/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.uvgui.zylx b/bsp/stm32/libraries/templates/stm32f0xx/template.uvgui.zylx new file mode 100644 index 0000000000..23e2968f78 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.uvgui.zylx @@ -0,0 +1,1856 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 140 90 + + + 346 + Code Coverage + 1010 160 + + + 204 + Performance Analyzer + 1170 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 80 80 80 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser - *** Not Enabled *** + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 288 + 459 + 1899 + 1164 + + + + 0 + + 60 + 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000090050000DF000000 + + + 16 + F40000006600000090050000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + F2000000090100000E02000049030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + F2000000090100000E02000049030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + F2000000090100000E02000049030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000006A03000080070000E6030000 + + + 16 + F200000009010000BA03000099010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001902000090050000BD020000 + + + 16 + F200000009010000BA03000099010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + F2000000090100000E02000049030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 953 + 0 + 8192 + 0 + + 16 + 0000000000000000C40300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 3334 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000052030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000069030000000000004F000000F0000000520300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000520300008007000056030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000006D03000080070000FD030000000000005603000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF24536F757263652042726F77736572202D202A2A2A204E6F7420456E61626C6564202A2A2A00000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2602 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000040000000000000000000000000000000000000100000001000000960000000200205000000000067265626F6F7496000000000000001400067265626F6F740D48414C5F5541525445585F57610F72745F68775F6370755F72657365740F72745F68775F6370695F7265736574094952516E5F547970651A444D41315F4368325F335F444D41325F4368315F325F4952516E14444D41315F4368616E6E656C325F335F4952516E13444D415F4368616E6E656C5F5479706544656612444D415F53747265616D5F547970654465660D55534152545F54797065446566135F5F48414C5F554152545F434C4541525F4954155F5F48414C5F554152545F434C4541525F464C41471173746D33325F756172745F636F6E666967187374727563742073746D33325F756172745F636F6E6669670A73746D33325F756172741149535F55534152545F494E5354414E434504444D41310655534152543106555341525433055F4952516E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 978 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000972742D746872656164960000000000000001000972742D746872656164000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.uvopt b/bsp/stm32/libraries/templates/stm32f0xx/template.uvopt new file mode 100644 index 0000000000..8181d6fe2e --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.uvopt @@ -0,0 +1,204 @@ + + + + 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 + + 18 + + + 0 + Data Sheet + DATASHTS\ST\STM32F0xx\DM00039193.pdf + + + 1 + Reference Manual + DATASHTS\ST\STM32F0xx\DM00031936.pdf + + + 2 + Technical Reference Manual + datashts\arm\cortex_m0\r0p0\DDI0432C_CORTEX_M0_R0P0_TRM.PDF + + + 3 + Generic User Guide + datashts\arm\cortex_m0\r0p0\DUI0497A_CORTEX_M0_R0P0_GENERIC_UG.PDF + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U0670FF495351885087162831 -I0 -O207 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000) + + + 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 + + + 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 + + + + + + + + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.uvoptx b/bsp/stm32/libraries/templates/stm32f0xx/template.uvoptx new file mode 100644 index 0000000000..1f7607d747 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.uvoptx @@ -0,0 +1,192 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F0xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U0670FF495351885087162831 -I0 -O206 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.uvproj b/bsp/stm32/libraries/templates/stm32f0xx/template.uvproj new file mode 100644 index 0000000000..9dfc31ef21 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.uvproj @@ -0,0 +1,422 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + STM32F071VB + STMicroelectronics + IRAM(0x20000000-0x20002FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M0") + + "Startup\ST\STM32F0xx\startup_stm32f051.s" ("STM32F051 Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000) + 7477 + stm32f0xx.h + + + + + + + -DSTM32F051 + + + SFD\ST\STM32F0xx\STM32F0xx.sfr + 0 + 0 + + + + ST\STM32F0xx\ + ST\STM32F0xx\ + + 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 + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 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 + 6 + + + + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x3000 + + + 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 + 0x3000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32f0xx/template.uvprojx b/bsp/stm32/libraries/templates/stm32f0xx/template.uvprojx new file mode 100644 index 0000000000..250a940577 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32f0xx/template.uvprojx @@ -0,0 +1,395 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F091RCTx + STMicroelectronics + Keil.STM32F0xx_DFP.2.0.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00008000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM)) + 0 + $$Device:STM32F091RCTx$Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + + + + + + + + + + $$Device:STM32F091RCTx$CMSIS\SVD\STM32F0x1.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 + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +