From 4bf3a83f4757839d38af57c855268d02cd4e7b8f Mon Sep 17 00:00:00 2001 From: lhxzui Date: Thu, 30 May 2019 18:00:03 +0800 Subject: [PATCH 1/2] 1. Add bsp stm32f072-st-nucleo --- bsp/stm32/stm32f072-st-nucleo/.config | 375 +++ bsp/stm32/stm32f072-st-nucleo/.gitignore | 42 + bsp/stm32/stm32f072-st-nucleo/Kconfig | 22 + bsp/stm32/stm32f072-st-nucleo/README.md | 103 + bsp/stm32/stm32f072-st-nucleo/SConscript | 15 + bsp/stm32/stm32f072-st-nucleo/SConstruct | 59 + .../applications/SConscript | 11 + .../stm32f072-st-nucleo/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 17 + .../board/CubeMX_Config/CubeMX_Config.ioc | 148 + .../board/CubeMX_Config/Inc/main.h | 103 + .../CubeMX_Config/Inc/stm32f0xx_hal_conf.h | 323 ++ .../board/CubeMX_Config/Inc/stm32f0xx_it.h | 80 + .../board/CubeMX_Config/Src/main.c | 272 ++ .../CubeMX_Config/Src/stm32f0xx_hal_msp.c | 169 + .../board/CubeMX_Config/Src/stm32f0xx_it.c | 160 + .../CubeMX_Config/Src/system_stm32f0xx.c | 333 ++ bsp/stm32/stm32f072-st-nucleo/board/Kconfig | 87 + .../stm32f072-st-nucleo/board/SConscript | 35 + bsp/stm32/stm32f072-st-nucleo/board/board.c | 46 + bsp/stm32/stm32f072-st-nucleo/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 15 + .../stm32f072-st-nucleo/figures/board.jpg | Bin 0 -> 265311 bytes bsp/stm32/stm32f072-st-nucleo/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f072-st-nucleo/project.ewp | 2342 +++++++++++++ bsp/stm32/stm32f072-st-nucleo/project.eww | 10 + bsp/stm32/stm32f072-st-nucleo/project.uvoptx | 1109 ++++++ bsp/stm32/stm32f072-st-nucleo/project.uvproj | 804 +++++ bsp/stm32/stm32f072-st-nucleo/project.uvprojx | 787 +++++ bsp/stm32/stm32f072-st-nucleo/rtconfig.h | 172 + bsp/stm32/stm32f072-st-nucleo/rtconfig.py | 143 + bsp/stm32/stm32f072-st-nucleo/template.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f072-st-nucleo/template.ewp | 2074 ++++++++++++ bsp/stm32/stm32f072-st-nucleo/template.eww | 10 + bsp/stm32/stm32f072-st-nucleo/template.uvoptx | 197 ++ bsp/stm32/stm32f072-st-nucleo/template.uvproj | 412 +++ .../stm32f072-st-nucleo/template.uvprojx | 395 +++ 39 files changed, 17070 insertions(+) create mode 100644 bsp/stm32/stm32f072-st-nucleo/.config create mode 100644 bsp/stm32/stm32f072-st-nucleo/.gitignore create mode 100644 bsp/stm32/stm32f072-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32f072-st-nucleo/README.md create mode 100644 bsp/stm32/stm32f072-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32f072-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32f072-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32f072-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_it.h create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_it.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/system_stm32f0xx.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f072-st-nucleo/figures/board.jpg create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.uvproj create mode 100644 bsp/stm32/stm32f072-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32f072-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32f072-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.ewd create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.uvproj create mode 100644 bsp/stm32/stm32f072-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32f072-st-nucleo/.config b/bsp/stm32/stm32f072-st-nucleo/.config new file mode 100644 index 0000000000..487ada1e71 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/.config @@ -0,0 +1,375 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +CONFIG_RT_VER_NUM=0x40002 +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 is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV 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_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ADBD is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_THREAD_POOL is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X 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_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_NNOM is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F0=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F072RB=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +# CONFIG_BSP_USING_UART1 is not set +CONFIG_BSP_USING_UART2=y +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f072-st-nucleo/.gitignore b/bsp/stm32/stm32f072-st-nucleo/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/.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/stm32f072-st-nucleo/Kconfig b/bsp/stm32/stm32f072-st-nucleo/Kconfig new file mode 100644 index 0000000000..7a400db91f --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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/stm32f072-st-nucleo/README.md b/bsp/stm32/stm32f072-st-nucleo/README.md new file mode 100644 index 0000000000..562856b71c --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/README.md @@ -0,0 +1,103 @@ +# NUCLEO-F072RB 开发板 BSP 说明 + +## 简介 + +本文档为刘恒为 NUCLEO-F072RB 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +NUCLEO-F072RB 是 ST 官方推出的开发板,搭载 STM32F072RBT6 芯片,基于 ARM Cortex-M0 内核,最高主频 48 MHz,具有丰富的板载资源,可以充分发挥 STM32F072RBT6 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +NUCLEO-F072RB 开发板常用 **板载资源** 如下: + +- MCU:STM32F072RBT6,主频 48MHz,128KB FLASH ,16KB RAM +- 常用外设 + - LED:3 个,USB communication (LD1), user LED (LD2), power LED (LD3) 。 + - 按键:2 个,USER and RESET 。 +- 常用接口:USB 转串口、Arduino Uno 和 ST morpho 两类扩展接口 +- 调试接口:板载 ST-LINK/V2-1 调试器。 + +更多相关信息资料见 ST 官网详情页:[NUCLEO_F072RB_STM32Nucleo-64开发板]https://www.stmcu.com.cn/Designresource/design_resource_detail?file_name=NUCLEO_F072RB_STM32Nucleo-64%E5%BC%80%E5%8F%91%E6%9D%BF&lang=EN&ver= + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :------------ | :----------: | :-----------------------------------: | +| GPIO | 支持 | PA0, PA1... PH1 ---> PIN: 0, 1...63 | +| UART | 支持 | UART2 | +| LED | 支持 | LED2 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用 Type-A to Mini-B 线连接开发板和 PC 供电,红色 LED LD3 (PWR) 和 LD1 (COM) 会点亮。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 下载程序,点击下载按钮即可下载程序到开发板。 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LD3 和 LD1 常亮、绿色 LD2 会周期性闪烁。 + +USB 虚拟 COM 端口默认连接串口 2,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + + \ | / +- RT - Thread Operating System + / | \ 4.0.2 build May 30 2019 + 2006 - 2019 Copyright by rt-thread team +msh > + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口 2 的功能,更多高级功能需要利用 env 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +## 联系人信息 + +维护人: + +- [刘恒](https://github.com/lhxzui), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f072-st-nucleo/SConscript b/bsp/stm32/stm32f072-st-nucleo/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f072-st-nucleo/SConstruct b/bsp/stm32/stm32f072-st-nucleo/SConstruct new file mode 100644 index 0000000000..7979e3a23e --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/SConstruct @@ -0,0 +1,59 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = '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/stm32f072-st-nucleo/applications/SConscript b/bsp/stm32/stm32f072-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..04f04dd543 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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/stm32f072-st-nucleo/applications/main.c b/bsp/stm32/stm32f072-st-nucleo/applications/main.c new file mode 100644 index 0000000000..81b03091e1 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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 + +/* defined the LED2 pin: PA5 */ +#define LED2_PIN GET_PIN(A, 5) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..881c550bee --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/.mxproject @@ -0,0 +1,17 @@ +[PreviousGenFiles] +HeaderPath=F:/program/rt-thread/rt-thread/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h;stm32f0xx_it.h;stm32f0xx_hal_conf.h; +SourcePath=F:/program/rt-thread/rt-thread/bsp/stm32/stm32f072-st-nucleo/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_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_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_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/stm32f072xb.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;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f0xx_it.c;..\Src\stm32f0xx_hal_msp.c;../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_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;../\Src/system_stm32f0xx.c;../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_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;../\Src/system_stm32f0xx.c;../Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;null; +HeaderPath=..\Drivers\STM32F0xx_HAL_Driver\Inc;..\Drivers\STM32F0xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F0xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32F072xB; + +[] +SourceFiles=;; + diff --git a/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..e62fa13da5 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,148 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=true +Mcu.Family=STM32F0 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART2 +Mcu.IPNb=4 +Mcu.Name=STM32F072R(8-B)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14-OSC32_IN +Mcu.Pin10=VP_SYS_VS_Systick +Mcu.Pin2=PC15-OSC32_OUT +Mcu.Pin3=PF0-OSC_IN +Mcu.Pin4=PF1-OSC_OUT +Mcu.Pin5=PA2 +Mcu.Pin6=PA3 +Mcu.Pin7=PA5 +Mcu.Pin8=PA13 +Mcu.Pin9=PA14 +Mcu.PinsNb=11 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F072RBTx +MxCube.Version=5.2.0 +MxDb.Version=DB.5.0.20 +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=TMS +PA13.Locked=true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=TCK +PA14.Locked=true +PA14.Mode=Serial_Wire +PA14.Signal=SYS_SWCLK +PA2.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA2.GPIO_Label=USART_TX +PA2.GPIO_Mode=GPIO_MODE_AF_PP +PA2.GPIO_PuPd=GPIO_NOPULL +PA2.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA3.GPIO_Label=USART_RX +PA3.GPIO_Mode=GPIO_MODE_AF_PP +PA3.GPIO_PuPd=GPIO_NOPULL +PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA5.GPIO_Label=LD2 [Green Led] +PA5.GPIO_Mode=GPIO_MODE_OUTPUT_PP +PA5.GPIO_PuPd=GPIO_NOPULL +PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA5.Locked=true +PA5.Signal=GPIO_Output +PC13.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI +PC13.GPIO_Label=B1 [Blue PushButton] +PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC13.Locked=true +PC13.Signal=GPXTI13 +PC14-OSC32_IN.Locked=true +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F0x2 +PCC.MCU=STM32F072R(8-B)Tx +PCC.PartNumber=STM32F072RBTx +PCC.Seq0=0 +PCC.Series=STM32F0 +PCC.Temperature=25 +PCC.Vdd=3.6 +PF0-OSC_IN.Locked=true +PF0-OSC_IN.Signal=RCC_OSC_IN +PF1-OSC_OUT.Locked=true +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=STM32F072RBTx +ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.10.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_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.FLatency-AdvancedSettings=FLASH_LATENCY_1 +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,FLatency-AdvancedSettings,FamilyName,HCLKFreq_Value,HSICECFreq_Value,I2SFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLDivider,PLLMCOFreq_Value,PLLMUL,PREFETCH_ENABLE-AdvancedSettings,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USART1Freq_Value,USART2Freq_Value +RCC.MCOFreq_Value=48000000 +RCC.PLLCLKFreq_Value=48000000 +RCC.PLLDivider=RCC_PREDIV_DIV2 +RCC.PLLMCOFreq_Value=48000000 +RCC.PLLMUL=RCC_PLL_MUL12 +RCC.PREFETCH_ENABLE-AdvancedSettings=1 +RCC.SYSCLKFreq_VALUE=48000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_HSI48 +RCC.TimSysFreq_Value=48000000 +RCC.USART1Freq_Value=48000000 +RCC.USART2Freq_Value=48000000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +USART2.IPParameters=VirtualMode,VirtualMode-Asynchronous +USART2.VirtualMode=VM_ASYNC +USART2.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-F072RB +boardIOC=true diff --git a/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..7f861cde0e --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,103 @@ +/* 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 -----------------------------------------------------------*/ +#define B1_Pin GPIO_PIN_13 +#define B1_GPIO_Port GPIOC +#define USART_TX_Pin GPIO_PIN_2 +#define USART_TX_GPIO_Port GPIOA +#define USART_RX_Pin GPIO_PIN_3 +#define USART_RX_GPIO_Port GPIOA +#define LD2_Pin GPIO_PIN_5 +#define LD2_GPIO_Port GPIOA +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +/* 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/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h new file mode 100644 index 0000000000..b03369da38 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_hal_conf.h @@ -0,0 +1,323 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2019 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __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/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_it.h b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Inc/stm32f0xx_it.h new file mode 100644 index 0000000000..0c8cb46a8b --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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/stm32f072-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..317997715b --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,272 @@ +/* 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 ---------------------------------------------------------*/ +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_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_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_HSI48; + RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 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_HSI48; + 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_USART2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @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 = 38400; + 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_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : LD2_Pin */ + GPIO_InitStruct.Pin = LD2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + 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/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c new file mode 100644 index 0000000000..907465857b --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c @@ -0,0 +1,169 @@ +/* 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 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 = USART_TX_Pin|USART_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 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 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, USART_TX_Pin|USART_RX_Pin); + + /* 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/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_it.c b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_it.c new file mode 100644 index 0000000000..9167d5e9be --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_it.c @@ -0,0 +1,160 @@ +/* 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/stm32f072-st-nucleo/board/CubeMX_Config/Src/system_stm32f0xx.c b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/system_stm32f0xx.c new file mode 100644 index 0000000000..410809c2b8 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/system_stm32f0xx.c @@ -0,0 +1,333 @@ +/** + ****************************************************************************** + * @file system_stm32f0xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f0xx.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_stm32f0xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. This file configures the system clock as follows: + *============================================================================= + * Supported STM32F0xx device + *----------------------------------------------------------------------------- + * System Clock source | HSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 8000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 8000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 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 stm32f0xx_system + * @{ + */ + +/** @addtogroup STM32F0xx_System_Private_Includes + * @{ + */ + +#include "stm32f0xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Defines + * @{ + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< 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 ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +#if !defined (HSI48_VALUE) +#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI48_VALUE */ +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock there is no need to + call the 2 first functions listed above, since SystemCoreClock variable is + updated automatically. + */ +uint32_t SystemCoreClock = 8000000; + +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * Initialize the default HSI clock source, vector table location and the PLL configuration is reset. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001U; + +#if defined (STM32F051x8) || defined (STM32F058x8) + /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */ + RCC->CFGR &= (uint32_t)0xF8FFB80CU; +#else + /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE, MCOSEL[2:0], MCOPRE[2:0] and PLLNODIV bits */ + RCC->CFGR &= (uint32_t)0x08FFB80CU; +#endif /* STM32F051x8 or STM32F058x8 */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFFU; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFFU; + + /* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */ + RCC->CFGR &= (uint32_t)0xFFC0FFFFU; + + /* Reset PREDIV[3:0] bits */ + RCC->CFGR2 &= (uint32_t)0xFFFFFFF0U; + +#if defined (STM32F072xB) || defined (STM32F078xx) + /* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFCFE2CU; +#elif defined (STM32F071xB) + /* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFFCEACU; +#elif defined (STM32F091xC) || defined (STM32F098xx) + /* Reset USART3SW[1:0], USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFF0FEACU; +#elif defined (STM32F030x6) || defined (STM32F030x8) || defined (STM32F031x6) || defined (STM32F038xx) || defined (STM32F030xC) + /* Reset USART1SW[1:0], I2C1SW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFFFEECU; +#elif defined (STM32F051x8) || defined (STM32F058xx) + /* Reset USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFFFEACU; +#elif defined (STM32F042x6) || defined (STM32F048xx) + /* Reset USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFFFE2CU; +#elif defined (STM32F070x6) || defined (STM32F070xB) + /* Reset USART1SW[1:0], I2C1SW, USBSW and ADCSW bits */ + RCC->CFGR3 &= (uint32_t)0xFFFFFE6CU; + /* Set default USB clock to PLLCLK, since there is no HSI48 */ + RCC->CFGR3 |= (uint32_t)0x00000080U; +#else + #warning "No target selected" +#endif + + /* Reset HSI14 bit */ + RCC->CR2 &= (uint32_t)0xFFFFFFFEU; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000U; + +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f0xx_hal.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 stm32f0xx_hal.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMUL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + pllmull = ( pllmull >> 18) + 2; + predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1; + + if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */ + SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull; + } +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) + else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV) + { + /* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */ + SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull; + } +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */ + else + { +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \ + || defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \ + || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + /* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */ + SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull; +#else + /* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || + STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || + STM32F091xC || STM32F098xx || STM32F030xC */ + } + break; + default: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/bsp/stm32/stm32f072-st-nucleo/board/Kconfig b/bsp/stm32/stm32f072-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..ce845a3606 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/Kconfig @@ -0,0 +1,87 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F072RB + 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 + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default n + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART2 + bool "Enable UART2" + default y + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + depends on BSP_USING_SPI1 + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + depends on BSP_USING_SPI1 + select BSP_SPI1_TX_USING_DMA + default n + endif + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + int "i2c1 scl pin number" + range 1 216 + default 15 + config BSP_I2C1_SDA_PIN + int "I2C1 sda pin number" + range 1 216 + default 16 + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f072-st-nucleo/board/SConscript b/bsp/stm32/stm32f072-st-nucleo/board/SConscript new file mode 100644 index 0000000000..b1b2fc16e6 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/SConscript @@ -0,0 +1,35 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/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_stm32f072xb.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F0xx_HAL/CMSIS/Device/ST/STM32F0xx/Source/Templates/arm/startup_stm32f072xb.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F0xx_HAL/CMSIS/Device/ST/STM32F0xx/Source/Templates/iar/startup_stm32f072xb.s'] + +# STM32F030x6 || STM32F030x8 || STM32F031x6 +# STM32F038xx || STM32F042x6 || STM32F048xx +# STM32F070x6 || STM32F051x8 || STM32F058xx +# STM32F071xB || STM32F072xB || STM32F078xx +# STM32F070xB || STM32F091xC || STM32F098xx || STM32F030xC +# You can select chips from the list above +CPPDEFINES = ['STM32F072xB'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f072-st-nucleo/board/board.c b/bsp/stm32/stm32f072-st-nucleo/board/board.c new file mode 100644 index 0000000000..8adbcd7bdd --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/board.c @@ -0,0 +1,46 @@ +/* + * 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_HSI48; + RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 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_HSI48; + 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_USART2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f072-st-nucleo/board/board.h b/bsp/stm32/stm32f072-st-nucleo/board/board.h new file mode 100644 index 0000000000..bfd0371048 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (128 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 16 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..63ea0d85b4 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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__ = 0x0801FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20003FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..0e6568d176 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 128k /* 128KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 16k /* 16K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..adff0c5912 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00020000 { ; load region size_region + ER_IROM1 0x08000000 0x00020000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00004000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f072-st-nucleo/figures/board.jpg b/bsp/stm32/stm32f072-st-nucleo/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c12bf9ffc62778b52f177606950b6624cd7eec3 GIT binary patch literal 265311 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

Gs{2rLy|Pmvi~_d3w0;RA32LTpdN&0 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%0ALyXoPK+Vg@#3;8vxkvk%xc8=vhJS$@SL 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 literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f072-st-nucleo/project.ewd b/bsp/stm32/stm32f072-st-nucleo/project.ewd new file mode 100644 index 0000000000..ff5dc49169 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/project.ewp b/bsp/stm32/stm32f072-st-nucleo/project.ewp new file mode 100644 index 0000000000..4b456f3bff --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.ewp @@ -0,0 +1,2342 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f0xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\iar\startup_stm32f072xb.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + cpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m0\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m0\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_crc.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/project.eww b/bsp/stm32/stm32f072-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/project.uvoptx b/bsp/stm32/stm32f072-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..f43b9c1137 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.uvoptx @@ -0,0 +1,1109 @@ + + + + 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 + + 8000000 + + 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 + JL2CM3 + -U778337147 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F0xx_128 -FL020000 -FS08000000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066DFF555355755087081621 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_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 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 1 + 0 + 0 + 0 + + 2 + 16 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 3 + 17 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f0xx_hal_msp.c + stm32f0xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f072xb.s + startup_stm32f072xb.s + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 27 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + context_rvds.S + 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 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + 6 + 47 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 6 + 48 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 6 + 49 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 6 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 6 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 6 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + + + STM32_HAL + 1 + 0 + 0 + 0 + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c + system_stm32f0xx.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + stm32f0xx_hal_dma.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + stm32f0xx_hal_cortex.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_crc.c + stm32f0xx_hal_crc.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + stm32f0xx_hal_pwr.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + stm32f0xx_hal_rcc.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + stm32f0xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + stm32f0xx_hal.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_crc.c + stm32f0xx_ll_crc.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + stm32f0xx_ll_dma.c + 0 + 0 + + + 7 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + stm32f0xx_ll_exti.c + 0 + 0 + + + 7 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + stm32f0xx_ll_gpio.c + 0 + 0 + + + 7 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + stm32f0xx_ll_pwr.c + 0 + 0 + + + 7 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + stm32f0xx_ll_rcc.c + 0 + 0 + + + 7 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + stm32f0xx_ll_utils.c + 0 + 0 + + + 7 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + stm32f0xx_hal_gpio.c + 0 + 0 + + + 7 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + stm32f0xx_hal_uart.c + 0 + 0 + + + 7 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + stm32f0xx_hal_uart_ex.c + 0 + 0 + + + 7 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32F0xx_HAL\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_usart.c + stm32f0xx_hal_usart.c + 0 + 0 + + + 7 + 72 + 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/stm32f072-st-nucleo/project.uvproj b/bsp/stm32/stm32f072-st-nucleo/project.uvproj new file mode 100644 index 0000000000..73cbbfe7d8 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.uvproj @@ -0,0 +1,804 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + + + STM32F072RB + STMicroelectronics + IRAM(0x20000000-0x20003FFF) IROM(0x08000000-0x0801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M0") + + "Startup\ST\STM32F0xx\startup_stm32f072.s" ("STM32F072 Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000) + 7471 + stm32f0xx.h + + + + + + + -DSTM32F072 + + + SFD\ST\STM32F0xx\STM32F072x.SFR + 0 + 0 + + + + ST\STM32F0xx\ + ST\STM32F0xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\ + 1 + 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 + 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 + 1 + 1 + 0 + + 0 + 11 + + + + + + + + + + + + + + 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 + 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 + 0x4000 + + + 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 + 0x4000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + STM32F072xB, USE_HAL_DRIVER + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m0;..\..\..\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 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f0xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f0xx_hal_msp.c + + + startup_stm32f072xb.s + 2 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f072xb.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + finsh_compiler.c + 1 + ..\..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\..\components\finsh\finsh_token.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/stm32f072-st-nucleo/project.uvprojx b/bsp/stm32/stm32f072-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..66b43f9647 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/project.uvprojx @@ -0,0 +1,787 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F072RBTx + STMicroelectronics + Keil.STM32F0xx_DFP.2.0.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00004000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM)) + 0 + $$Device:STM32F072RBTx$Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + + + + + + + + + + $$Device:STM32F072RBTx$CMSIS\SVD\STM32F0x2.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 + 0x4000 + + + 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 + 0x4000 + + + 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 + + + STM32F072xB, USE_HAL_DRIVER + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m0;..\..\..\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 + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f0xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f0xx_hal_msp.c + + + startup_stm32f072xb.s + 2 + ..\libraries\STM32F0xx_HAL\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f072xb.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + finsh_compiler.c + 1 + ..\..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\..\components\finsh\finsh_token.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/stm32f072-st-nucleo/rtconfig.h b/bsp/stm32/stm32f072-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..1537bfbd69 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/rtconfig.h @@ -0,0 +1,172 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart2" +#define RT_VER_NUM 0x40002 +#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_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_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F0 + +/* Hardware Drivers Config */ + +#define SOC_STM32F072RB + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART2 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f072-st-nucleo/rtconfig.py b/bsp/stm32/stm32f072-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..bbc6a35774 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/rtconfig.py @@ -0,0 +1,143 @@ +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 + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-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' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-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' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f072-st-nucleo/template.ewd b/bsp/stm32/stm32f072-st-nucleo/template.ewd new file mode 100644 index 0000000000..54527cf5c8 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/template.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/template.ewp b/bsp/stm32/stm32f072-st-nucleo/template.ewp new file mode 100644 index 0000000000..75b7527146 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/template.ewp @@ -0,0 +1,2074 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/template.eww b/bsp/stm32/stm32f072-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f072-st-nucleo/template.uvoptx b/bsp/stm32/stm32f072-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..accd4c51d6 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/template.uvoptx @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 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 + JL2CM3 + -U778337147 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F0xx_128 -FL020000 -FS08000000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066DFF555355755087081621 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_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 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f072-st-nucleo/template.uvproj b/bsp/stm32/stm32f072-st-nucleo/template.uvproj new file mode 100644 index 0000000000..09efb8d4c1 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/template.uvproj @@ -0,0 +1,412 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + + + STM32F072RB + STMicroelectronics + IRAM(0x20000000-0x20003FFF) IROM(0x08000000-0x0801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M0") + + "Startup\ST\STM32F0xx\startup_stm32f072.s" ("STM32F072 Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000) + 7471 + stm32f0xx.h + + + + + + + -DSTM32F072 + + + SFD\ST\STM32F0xx\STM32F072x.SFR + 0 + 0 + + + + ST\STM32F0xx\ + ST\STM32F0xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\ + 1 + 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 + 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 + 1 + 1 + 0 + + 0 + 11 + + + + + + + + + + + + + + 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 + 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 + 0x4000 + + + 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 + 0x4000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + +
diff --git a/bsp/stm32/stm32f072-st-nucleo/template.uvprojx b/bsp/stm32/stm32f072-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..23a8289b77 --- /dev/null +++ b/bsp/stm32/stm32f072-st-nucleo/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 + + + STM32F072RBTx + STMicroelectronics + Keil.STM32F0xx_DFP.2.0.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00004000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_128 -FS08000000 -FL020000 -FP0($$Device:STM32F072RBTx$CMSIS\Flash\STM32F0xx_128.FLM)) + 0 + $$Device:STM32F072RBTx$Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + + + + + + + + + + $$Device:STM32F072RBTx$CMSIS\SVD\STM32F0x2.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 + 0x4000 + + + 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 + 0x4000 + + + 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 + + + + + + + + + + + +
From 7cbdf9e4a92cb767eaae595b3808fca6457d34d4 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Thu, 6 Jun 2019 07:43:17 +0800 Subject: [PATCH 2/2] Update SConscript --- bsp/stm32/stm32f072-st-nucleo/applications/SConscript | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bsp/stm32/stm32f072-st-nucleo/applications/SConscript b/bsp/stm32/stm32f072-st-nucleo/applications/SConscript index 04f04dd543..5efd37ed23 100644 --- a/bsp/stm32/stm32f072-st-nucleo/applications/SConscript +++ b/bsp/stm32/stm32f072-st-nucleo/applications/SConscript @@ -1,10 +1,8 @@ -Import('RTT_ROOT') -Import('rtconfig') from building import * cwd = GetCurrentDir() -src = Glob('*.c') -CPPPATH = [cwd, str(Dir('#'))] +src = Glob('*.c') + Glob('*.cpp') +CPPPATH = [cwd] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)