From daf211bee6b5f03778dd607b530f4b6904f29ec4 Mon Sep 17 00:00:00 2001 From: sunlichao Date: Thu, 14 Feb 2019 09:53:17 +0800 Subject: [PATCH] =?UTF-8?q?[bsp][stm32]=E6=B7=BB=E5=8A=A0stm32f405?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E6=9D=BFBSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f405-smdz-breadfruit/.config | 350 ++ .../stm32f405-smdz-breadfruit/.gitignore | 42 + bsp/stm32/stm32f405-smdz-breadfruit/Kconfig | 21 + bsp/stm32/stm32f405-smdz-breadfruit/README.md | 135 + .../stm32f405-smdz-breadfruit/SConscript | 15 + .../stm32f405-smdz-breadfruit/SConstruct | 58 + .../applications/SConscript | 12 + .../applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 17 + .../board/CubeMX_Config/CubeMX_Config.ioc | 106 + .../board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 451 +++ .../board/CubeMX_Config/Inc/stm32f4xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 247 ++ .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 172 + .../board/CubeMX_Config/Src/stm32f4xx_it.c | 217 ++ .../CubeMX_Config/Src/system_stm32f4xx.c | 761 +++++ .../stm32f405-smdz-breadfruit/board/Kconfig | 40 + .../board/SConscript | 37 + .../stm32f405-smdz-breadfruit/board/board.c | 49 + .../stm32f405-smdz-breadfruit/board/board.h | 50 + .../board/linker_scripts/link.icf | 30 + .../board/linker_scripts/link.lds | 146 + .../board/linker_scripts/link.sct | 15 + .../figures/board.png | Bin 0 -> 250752 bytes .../stm32f405-smdz-breadfruit/project.ewd | 2834 +++++++++++++++++ .../stm32f405-smdz-breadfruit/project.ewp | 2410 ++++++++++++++ .../stm32f405-smdz-breadfruit/project.eww | 10 + .../stm32f405-smdz-breadfruit/project.uvopt | 162 + .../stm32f405-smdz-breadfruit/project.uvoptx | 191 ++ .../stm32f405-smdz-breadfruit/project.uvproj | 1189 +++++++ .../stm32f405-smdz-breadfruit/project.uvprojx | 1170 +++++++ .../stm32f405-smdz-breadfruit/rtconfig.h | 311 ++ .../stm32f405-smdz-breadfruit/rtconfig.py | 134 + .../stm32f405-smdz-breadfruit/template.ewp | 2031 ++++++++++++ .../stm32f405-smdz-breadfruit/template.eww | 10 + .../stm32f405-smdz-breadfruit/template.uvopt | 162 + .../stm32f405-smdz-breadfruit/template.uvoptx | 191 ++ .../stm32f405-smdz-breadfruit/template.uvproj | 407 +++ .../template.uvprojx | 394 +++ 40 files changed, 14785 insertions(+) create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/.config create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/.gitignore create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/Kconfig create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/README.md create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/SConscript create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/SConstruct create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/applications/SConscript create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/applications/main.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_it.h create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_it.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/system_stm32f4xx.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/Kconfig create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/SConscript create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/board.c create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/board.h create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.sct create mode 100755 bsp/stm32/stm32f405-smdz-breadfruit/figures/board.png create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.ewd create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.ewp create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.eww create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.uvopt create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.uvoptx create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.uvproj create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/project.uvprojx create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.h create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.py create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.ewp create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.eww create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.uvopt create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.uvoptx create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.uvproj create mode 100644 bsp/stm32/stm32f405-smdz-breadfruit/template.uvprojx diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/.config b/bsp/stm32/stm32f405-smdz-breadfruit/.config new file mode 100644 index 0000000000..fe5e73f6c0 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/.config @@ -0,0 +1,350 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +CONFIG_RT_VER_NUM=0x40001 +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# ARM CMSIS +# +# CONFIG_RT_USING_CMSIS_OS is not set +# CONFIG_RT_USING_RTT_CMSIS is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ADBD is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F405RG=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART2=y +# CONFIG_BSP_UART2_RX_USING_DMA is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/.gitignore b/bsp/stm32/stm32f405-smdz-breadfruit/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/.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/stm32f405-smdz-breadfruit/Kconfig b/bsp/stm32/stm32f405-smdz-breadfruit/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/Kconfig @@ -0,0 +1,21 @@ +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/stm32f405-smdz-breadfruit/README.md b/bsp/stm32/stm32f405-smdz-breadfruit/README.md new file mode 100644 index 0000000000..1307903d56 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/README.md @@ -0,0 +1,135 @@ +# STM32F405 三木电子开发板 BSP 说明 + +## 简介 + +本文档为 SM1432F405 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +SM1432F405 是三木电子推出的一款基于 ARM Cortex-M4 内核的开发板,最高主频为 168Mhz,该开发板配置USB通信接口,SD卡存储接口,io扩展,按键等,方便扩展多种模块。 + +开发板型号:SM1432F405 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F405RG,主频 168MHz,1024KB FLASH ,196KB RAM +- 常用外设 + - LED:4个,D1(绿色,PC4),D2(蓝色,PA8),D3(黄色,PC5),D4(红色,PA10) + - 按键:2个,K1(复位),K2(用户按键,PA13) +- 常用接口:USB接口、SD 卡接口,IO扩展口,三轴加速度传感器 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB | 暂不支持 | | +| SD卡 | 暂不支持 | | +| MMA7660三轴加速度传感器 | 暂不支持 | 即将支持 | +| LED | 暂不支持 |即将支持 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0..PA15,PB0..PB15,PC0..PC5 ---> PIN: 0..37 | +| UART | 支持 | UART2 | +| SPI | 暂不支持 | 即将支持 | +| I2C | 暂不支持 | 即将支持 | +| SDIO | 暂不支持 | 即将支持 | +| RTC | 暂不支持 | 即将支持 | +| PWM | 暂不支持 | 即将支持 | +| USB Device | 暂不支持 | 即将支持 | +| USB Host | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | +| W5500 模块 | 暂不支持 | 即将支持 | +| OLED 模块 | 暂不支持 | 即将支持 | +| 蜂鸣器 模块 | 暂不支持 | 即将支持 | +| 旋转编码器模块 | 暂不支持 | 即将支持 | +| TM1638A数码管显示模块 | 暂不支持 | 即将支持 | +| TM1638B数码管显示模块 | 暂不支持 | 即将支持 | +| 步进电机模块 | 暂不支持 | 即将支持 | +| 直流电机模块 | 暂不支持 | 即将支持 | +| 光照传感器模块 | 暂不支持 | 即将支持 | +| 温湿度传感器模块 | 暂不支持 | 即将支持 | + + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +方式一: + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用JLINK仿真器下载程序,在通过JLINK仿真器连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +方式二: + +> 在ENV工具中,使用scons命令进行编译,生成.bin文件,然后使用Jlink仿真器下载到开发板中 + +#### 运行结果 + +下载程序成功之后,系统会自动运行。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Feb 13 2019 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口2 的功能,如果需使用 SD 卡 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [sunlichao](https://github.com/slcmcu/rt-thread), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/SConscript b/bsp/stm32/stm32f405-smdz-breadfruit/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/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/stm32f405-smdz-breadfruit/SConstruct b/bsp/stm32/stm32f405-smdz-breadfruit/SConstruct new file mode 100644 index 0000000000..6180d5bea2 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/SConstruct @@ -0,0 +1,58 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.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 = 'STM32F4xx_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/stm32f405-smdz-breadfruit/applications/SConscript b/bsp/stm32/stm32f405-smdz-breadfruit/applications/SConscript new file mode 100644 index 0000000000..6f66f7ab73 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/applications/SConscript @@ -0,0 +1,12 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() +CPPPATH = [cwd, str(Dir('#'))] +src = Split(""" +main.c +""") + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/applications/main.c b/bsp/stm32/stm32f405-smdz-breadfruit/applications/main.c new file mode 100644 index 0000000000..487ddf44f6 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include +#include +#include + +/* defined the LED0 pin: PB1 */ +#define LED0_PIN GET_PIN(B, 1) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..506edb0e87 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/.mxproject @@ -0,0 +1,17 @@ +[PreviousGenFiles] +HeaderPath=D:/mywork/stm32f405/board/CubeMX_Config/Inc +HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h; +SourcePath=D:/mywork/stm32f405/board/CubeMX_Config/Src +SourceFiles=stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.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; + +[PreviousUsedIarFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; +HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; +HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..b4aeaf68c1 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,106 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F4 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART2 +Mcu.IPNb=4 +Mcu.Name=STM32F405RGTx +Mcu.Package=LQFP64 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=PH0-OSC_IN +Mcu.Pin3=PH1-OSC_OUT +Mcu.Pin4=PA2 +Mcu.Pin5=PA3 +Mcu.Pin6=VP_SYS_VS_Systick +Mcu.PinsNb=7 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F405RGTx +MxCube.Version=5.0.0 +MxDb.Version=DB.5.0.0 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F405/415 +PCC.MCU=STM32F405RGTx +PCC.PartNumber=STM32F405RGTx +PCC.Seq0=0 +PCC.Series=STM32F4 +PCC.Temperature=25 +PCC.Vdd=3.3 +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-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=STM32F405RGTx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.23.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V8 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true +RCC.AHBFreq_Value=16000000 +RCC.APB1Freq_Value=16000000 +RCC.APB2Freq_Value=16000000 +RCC.CortexFreq_Value=16000000 +RCC.FamilyName=M +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=96000000 +RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB2Freq_Value,CortexFreq_Value,FamilyName,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,PLLCLKFreq_Value,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSI_VALUE=32000 +RCC.PLLCLKFreq_Value=96000000 +RCC.PLLQCLKFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=16000000 +RCC.VCOI2SOutputFreq_Value=192000000 +RCC.VCOInputFreq_Value=1000000 +RCC.VCOOutputFreq_Value=192000000 +RCC.VcooutputI2S=96000000 +USART2.IPParameters=VirtualMode +USART2.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..9d41187606 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,91 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 0000000000..15f9b6ae02 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,451 @@ +/** + ****************************************************************************** + * @file stm32f4xx_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 __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_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_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_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_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_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)8000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< 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)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)32000U) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE ((uint32_t)12288000U) /*!< Value of the External audio frequency in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* 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)3300U) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FFU) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU) + +#define PHY_READ_TO ((uint32_t)0x0000FFFFU) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* ################## 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 "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_it.h b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_it.h new file mode 100644 index 0000000000..7a788c296b --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Inc/stm32f4xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_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 __STM32F4xx_IT_H +#define __STM32F4xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..d7d2553fbf --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/main.c @@ -0,0 +1,247 @@ +/* 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 */ + +/* 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 */ + +/* 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}; + + /**Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + 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_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != 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 = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c new file mode 100644 index 0000000000..0b13484aba --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,172 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f4xx_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 = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_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, GPIO_PIN_2|GPIO_PIN_3); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_it.c b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_it.c new file mode 100644 index 0000000000..5973f7fddb --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/stm32f4xx_it.c @@ -0,0 +1,217 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_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 "stm32f4xx_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-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx 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_stm32f4xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/system_stm32f4xx.c b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/system_stm32f4xx.c new file mode 100644 index 0000000000..3303f969d9 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/CubeMX_Config/Src/system_stm32f4xx.c @@ -0,0 +1,761 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * + * 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_stm32f4xx.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. + * + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_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; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +uint32_t SystemCoreClock = 16000000; +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 STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), 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, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/Kconfig b/bsp/stm32/stm32f405-smdz-breadfruit/board/Kconfig new file mode 100644 index 0000000000..2d393bda9f --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/Kconfig @@ -0,0 +1,40 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F405RG + bool + select SOC_SERIES_STM32F4 + 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_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 + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/SConscript b/bsp/stm32/stm32f405-smdz-breadfruit/board/SConscript new file mode 100644 index 0000000000..f6d1a174f5 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/SConscript @@ -0,0 +1,37 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f4xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f405xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f405xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f405xx.s'] + +# STM32F405xx) || STM32F415xx) || STM32F407xx) || STM32F417xx) +# STM32F427xx) || STM32F437xx) || STM32F429xx) || STM32F439xx) +# STM32F401xC) || STM32F401xE) || STM32F410Tx) || STM32F410Cx) +# STM32F410Rx) || STM32F411xE) || STM32F446xx) || STM32F469xx) +# STM32F479xx) || STM32F412Cx) || STM32F412Rx) || STM32F412Vx) +# STM32F412Zx) || STM32F413xx) || STM32F423xx) +# You can select chips from the list above +CPPDEFINES = ['STM32F405xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/board.c b/bsp/stm32/stm32f405-smdz-breadfruit/board/board.c new file mode 100644 index 0000000000..ef1f24cbb5 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/board.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 4; + RCC_OscInitStruct.PLL.PLLN = 168; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/board.h b/bsp/stm32/stm32f405-smdz-breadfruit/board/board.h new file mode 100644 index 0000000000..5b30f605d9 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/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 (1024 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (128) +#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 (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.icf b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.icf new file mode 100644 index 0000000000..66c522a006 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.icf @@ -0,0 +1,30 @@ +/*###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__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM1_end__ = 0x2001FFFF; +define symbol __ICFEDIT_region_RAM2_start__ = 0x10000000; +define symbol __ICFEDIT_region_RAM2_end__ = 0x1000FFFF; +/*-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 RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_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 RAM1_region { readwrite, last block CSTACK }; diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.lds b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.lds new file mode 100644 index 0000000000..fb96952f93 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.lds @@ -0,0 +1,146 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + * flybreak 2018-11-19 Add support for RAM2 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ + RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ + RAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 64k /* 64K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > CODE = 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 = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM1 + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM1 + + __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) + } > RAM1 + __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/stm32f405-smdz-breadfruit/board/linker_scripts/link.sct b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0d7c47992d --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00020000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/figures/board.png b/bsp/stm32/stm32f405-smdz-breadfruit/figures/board.png new file mode 100755 index 0000000000000000000000000000000000000000..3be266681f42a87e282486a21d737bf7aa1eb683 GIT binary patch literal 250752 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

tZz33bKrRYKBbbsOTkhE5JwYzX!@3 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 R1~_pl6^~F$nP0=6!O0G`kMsrnVFdVJ~UKy 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 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.ewp b/bsp/stm32/stm32f405-smdz-breadfruit/project.ewp new file mode 100644 index 0000000000..db4161a4b3 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.ewp @@ -0,0 +1,2410 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\startup_stm32f407xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + CORTEX-M4 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dfsdm.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma2d.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dsi.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hcd.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_irda.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_lptim.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nand.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nor.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pccard.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_qspi.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sd.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sdram.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_smartcard.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spdifrx.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fmc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fsmc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_sdmmc.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_usb.c + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.eww b/bsp/stm32/stm32f405-smdz-breadfruit/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.uvopt b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvopt new file mode 100644 index 0000000000..b53d69d5df --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.uvoptx b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvoptx new file mode 100644 index 0000000000..f8c4606a9e --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvoptx @@ -0,0 +1,191 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 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 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.uvproj b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvproj new file mode 100644 index 0000000000..a2c80e0594 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvproj @@ -0,0 +1,1189 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F407ZG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + USE_HAL_DRIVER, STM32F407xx + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m4;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;..\libraries\STM32F4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + + + startup_stm32f407xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f407xx.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M4 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f4xx.c + 1 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + + + stm32f4xx_hal.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + + + stm32f4xx_hal_adc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc.c + + + + + stm32f4xx_hal_adc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc_ex.c + + + + + stm32f4xx_hal_can.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c + + + + + stm32f4xx_hal_cec.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + + + stm32f4xx_hal_cortex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + + + stm32f4xx_hal_crc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + + + stm32f4xx_hal_cryp.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + + + stm32f4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + + + stm32f4xx_hal_dac.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac.c + + + + + stm32f4xx_hal_dac_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac_ex.c + + + + + stm32f4xx_hal_dcmi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi.c + + + + + stm32f4xx_hal_dcmi_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi_ex.c + + + + + stm32f4xx_hal_dfsdm.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dfsdm.c + + + + + stm32f4xx_hal_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + + + stm32f4xx_hal_dma2d.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma2d.c + + + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + + + stm32f4xx_hal_dsi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dsi.c + + + + + stm32f4xx_hal_eth.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c + + + + + stm32f4xx_hal_flash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c + + + + + stm32f4xx_hal_flash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c + + + + + stm32f4xx_hal_flash_ramfunc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c + + + + + stm32f4xx_hal_fmpi2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c.c + + + + + stm32f4xx_hal_fmpi2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c_ex.c + + + + + stm32f4xx_hal_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + + + stm32f4xx_hal_hash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash.c + + + + + stm32f4xx_hal_hash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash_ex.c + + + + + stm32f4xx_hal_hcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hcd.c + + + + + stm32f4xx_hal_i2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c.c + + + + + stm32f4xx_hal_i2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c_ex.c + + + + + stm32f4xx_hal_i2s.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s.c + + + + + stm32f4xx_hal_i2s_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s_ex.c + + + + + stm32f4xx_hal_irda.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_irda.c + + + + + stm32f4xx_hal_iwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c + + + + + stm32f4xx_hal_lptim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_lptim.c + + + + + stm32f4xx_hal_ltdc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc.c + + + + + stm32f4xx_hal_ltdc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc_ex.c + + + + + stm32f4xx_hal_nand.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nand.c + + + + + stm32f4xx_hal_nor.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nor.c + + + + + stm32f4xx_hal_pccard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pccard.c + + + + + stm32f4xx_hal_pcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd.c + + + + + stm32f4xx_hal_pcd_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd_ex.c + + + + + stm32f4xx_hal_pwr.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + + + stm32f4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + + + stm32f4xx_hal_qspi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_qspi.c + + + + + stm32f4xx_hal_rcc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + + + stm32f4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + + + stm32f4xx_hal_rng.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + + + stm32f4xx_hal_rtc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c + + + + + stm32f4xx_hal_rtc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c + + + + + stm32f4xx_hal_sai.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai.c + + + + + stm32f4xx_hal_sai_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai_ex.c + + + + + stm32f4xx_hal_sd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sd.c + + + + + stm32f4xx_hal_sdram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sdram.c + + + + + stm32f4xx_hal_smartcard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_smartcard.c + + + + + stm32f4xx_hal_spdifrx.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spdifrx.c + + + + + stm32f4xx_hal_spi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c + + + + + stm32f4xx_hal_sram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sram.c + + + + + stm32f4xx_hal_tim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c + + + + + stm32f4xx_hal_tim_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c + + + + + stm32f4xx_hal_uart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + + + stm32f4xx_hal_usart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + + + stm32f4xx_hal_wwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c + + + + + stm32f4xx_ll_fmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fmc.c + + + + + stm32f4xx_ll_fsmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fsmc.c + + + + + stm32f4xx_ll_sdmmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_sdmmc.c + + + + + stm32f4xx_ll_usb.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_usb.c + + + + + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/project.uvprojx b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvprojx new file mode 100644 index 0000000000..88c46860e7 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/project.uvprojx @@ -0,0 +1,1170 @@ + + + 2.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F407ZGTx + STMicroelectronics + Keil.STM32F4xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IRAM2(0x10000000,0x10000) IROM(0x08000000,0x100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) + 0 + $$Device:STM32F407ZGTx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F407ZGTx$CMSIS\SVD\STM32F40x.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 -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F407xx + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m4;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;..\libraries\STM32F4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + + + startup_stm32f407xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f407xx.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M4 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f4xx.c + 1 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + + + + + stm32f4xx_hal.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + + + + + stm32f4xx_hal_adc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc.c + + + + + stm32f4xx_hal_adc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_adc_ex.c + + + + + stm32f4xx_hal_can.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c + + + + + stm32f4xx_hal_cec.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + + + + + stm32f4xx_hal_cortex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + + + + + stm32f4xx_hal_crc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + + + + + stm32f4xx_hal_cryp.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + + + + + stm32f4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + + + + + stm32f4xx_hal_dac.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac.c + + + + + stm32f4xx_hal_dac_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dac_ex.c + + + + + stm32f4xx_hal_dcmi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi.c + + + + + stm32f4xx_hal_dcmi_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dcmi_ex.c + + + + + stm32f4xx_hal_dfsdm.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dfsdm.c + + + + + stm32f4xx_hal_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + + + stm32f4xx_hal_dma2d.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma2d.c + + + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + + + + + stm32f4xx_hal_dsi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dsi.c + + + + + stm32f4xx_hal_eth.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c + + + + + stm32f4xx_hal_flash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c + + + + + stm32f4xx_hal_flash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c + + + + + stm32f4xx_hal_flash_ramfunc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c + + + + + stm32f4xx_hal_fmpi2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c.c + + + + + stm32f4xx_hal_fmpi2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_fmpi2c_ex.c + + + + + stm32f4xx_hal_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + + + + + stm32f4xx_hal_hash.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash.c + + + + + stm32f4xx_hal_hash_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hash_ex.c + + + + + stm32f4xx_hal_hcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_hcd.c + + + + + stm32f4xx_hal_i2c.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c.c + + + + + stm32f4xx_hal_i2c_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c_ex.c + + + + + stm32f4xx_hal_i2s.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s.c + + + + + stm32f4xx_hal_i2s_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2s_ex.c + + + + + stm32f4xx_hal_irda.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_irda.c + + + + + stm32f4xx_hal_iwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c + + + + + stm32f4xx_hal_lptim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_lptim.c + + + + + stm32f4xx_hal_ltdc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc.c + + + + + stm32f4xx_hal_ltdc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_ltdc_ex.c + + + + + stm32f4xx_hal_nand.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nand.c + + + + + stm32f4xx_hal_nor.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_nor.c + + + + + stm32f4xx_hal_pccard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pccard.c + + + + + stm32f4xx_hal_pcd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd.c + + + + + stm32f4xx_hal_pcd_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pcd_ex.c + + + + + stm32f4xx_hal_pwr.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + + + + + stm32f4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + + + + + stm32f4xx_hal_qspi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_qspi.c + + + + + stm32f4xx_hal_rcc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + + + + + stm32f4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + + + + + stm32f4xx_hal_rng.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + + + + + stm32f4xx_hal_rtc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc.c + + + + + stm32f4xx_hal_rtc_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rtc_ex.c + + + + + stm32f4xx_hal_sai.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai.c + + + + + stm32f4xx_hal_sai_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sai_ex.c + + + + + stm32f4xx_hal_sd.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sd.c + + + + + stm32f4xx_hal_sdram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sdram.c + + + + + stm32f4xx_hal_smartcard.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_smartcard.c + + + + + stm32f4xx_hal_spdifrx.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spdifrx.c + + + + + stm32f4xx_hal_spi.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c + + + + + stm32f4xx_hal_sram.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_sram.c + + + + + stm32f4xx_hal_tim.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c + + + + + stm32f4xx_hal_tim_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c + + + + + stm32f4xx_hal_uart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + + + + + stm32f4xx_hal_usart.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + + + + + stm32f4xx_hal_wwdg.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c + + + + + stm32f4xx_ll_fmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fmc.c + + + + + stm32f4xx_ll_fsmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_fsmc.c + + + + + stm32f4xx_ll_sdmmc.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_sdmmc.c + + + + + stm32f4xx_ll_usb.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_usb.c + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.h b/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.h new file mode 100644 index 0000000000..1129acefb6 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.h @@ -0,0 +1,311 @@ +#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 +/* RT_USING_SMP is not set */ +#define RT_ALIGN_SIZE 4 +/* RT_THREAD_PRIORITY_8 is not set */ +#define RT_THREAD_PRIORITY_32 +/* RT_THREAD_PRIORITY_256 is not set */ +#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 +/* RT_USING_TIMER_SOFT is not set */ +#define RT_DEBUG +/* RT_DEBUG_INIT_CONFIG is not set */ +/* RT_DEBUG_THREAD_CONFIG is not set */ +/* RT_DEBUG_SCHEDULER_CONFIG is not set */ +/* RT_DEBUG_IPC_CONFIG is not set */ +/* RT_DEBUG_TIMER_CONFIG is not set */ +/* RT_DEBUG_IRQ_CONFIG is not set */ +/* RT_DEBUG_MEM_CONFIG is not set */ +/* RT_DEBUG_SLAB_CONFIG is not set */ +/* RT_DEBUG_MEMHEAP_CONFIG is not set */ +/* RT_DEBUG_MODULE_CONFIG is not set */ + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* RT_USING_SIGNALS is not set */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +/* RT_USING_MEMHEAP is not set */ +/* RT_USING_NOHEAP is not set */ +#define RT_USING_SMALL_MEM +/* RT_USING_SLAB is not set */ +/* RT_USING_MEMTRACE is not set */ +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +/* RT_USING_DEVICE_OPS is not set */ +/* RT_USING_INTERRUPT_INFO is not set */ +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart2" +#define RT_VER_NUM 0x40001 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 +/* ARCH_CPU_STACK_GROWS_UPWARD is not set */ + +/* 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 */ + +/* RT_USING_CPLUSPLUS is not set */ + +/* 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 +/* FINSH_ECHO_DISABLE_DEFAULT is not set */ +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +/* FINSH_USING_AUTH is not set */ +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + +/* RT_USING_DFS is not set */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +/* RT_USING_CAN is not set */ +/* RT_USING_HWTIMER is not set */ +/* RT_USING_CPUTIME is not set */ +/* RT_USING_I2C is not set */ +#define RT_USING_PIN +/* RT_USING_ADC is not set */ +/* RT_USING_PWM is not set */ +/* RT_USING_MTD_NOR is not set */ +/* RT_USING_MTD_NAND is not set */ +/* RT_USING_MTD is not set */ +/* RT_USING_PM is not set */ +/* RT_USING_RTC is not set */ +/* RT_USING_SDIO is not set */ +/* RT_USING_SPI is not set */ +/* RT_USING_WDT is not set */ +/* RT_USING_AUDIO is not set */ + +/* Using WiFi */ + +/* RT_USING_WIFI is not set */ + +/* Using USB */ + +/* RT_USING_USB_HOST is not set */ +/* RT_USING_USB_DEVICE is not set */ + +/* POSIX layer and C standard library */ + +/* RT_USING_LIBC is not set */ +/* RT_USING_PTHREADS is not set */ + +/* Network */ + +/* Socket abstraction layer */ + +/* RT_USING_SAL is not set */ + +/* light weight TCP/IP stack */ + +/* RT_USING_LWIP is not set */ + +/* Modbus master and slave stack */ + +/* RT_USING_MODBUS is not set */ + +/* AT commands */ + +/* RT_USING_AT is not set */ + +/* VBUS(Virtual Software BUS) */ + +/* RT_USING_VBUS is not set */ + +/* Utilities */ + +/* RT_USING_LOGTRACE is not set */ +/* RT_USING_RYM is not set */ +/* RT_USING_ULOG is not set */ +/* RT_USING_UTEST is not set */ + +/* ARM CMSIS */ + +/* RT_USING_CMSIS_OS is not set */ +/* RT_USING_RTT_CMSIS is not set */ +/* RT_USING_LWP is not set */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + +/* PKG_USING_PAHOMQTT is not set */ +/* PKG_USING_WEBCLIENT is not set */ +/* PKG_USING_WEBNET is not set */ +/* PKG_USING_MONGOOSE is not set */ +/* PKG_USING_WEBTERMINAL is not set */ +/* PKG_USING_CJSON is not set */ +/* PKG_USING_JSMN is not set */ +/* PKG_USING_LJSON is not set */ +/* PKG_USING_EZXML is not set */ +/* PKG_USING_NANOPB is not set */ + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* PKG_USING_WLANMARVELL is not set */ + +/* Wiced WiFi */ + +/* PKG_USING_WLAN_WICED is not set */ +/* PKG_USING_COAP is not set */ +/* PKG_USING_NOPOLL is not set */ +/* PKG_USING_NETUTILS is not set */ +/* PKG_USING_AT_DEVICE is not set */ +/* PKG_USING_WIZNET is not set */ + +/* IoT Cloud */ + +/* PKG_USING_ONENET is not set */ +/* PKG_USING_GAGENT_CLOUD is not set */ +/* PKG_USING_ALI_IOTKIT is not set */ +/* PKG_USING_AZURE is not set */ +/* PKG_USING_TENCENT_IOTKIT is not set */ + +/* security packages */ + +/* PKG_USING_MBEDTLS is not set */ +/* PKG_USING_libsodium is not set */ +/* PKG_USING_TINYCRYPT is not set */ + +/* language packages */ + +/* PKG_USING_LUA is not set */ +/* PKG_USING_JERRYSCRIPT is not set */ +/* PKG_USING_MICROPYTHON is not set */ + +/* multimedia packages */ + +/* PKG_USING_OPENMV is not set */ +/* PKG_USING_MUPDF is not set */ + +/* tools packages */ + +/* PKG_USING_CMBACKTRACE is not set */ +/* PKG_USING_EASYFLASH is not set */ +/* PKG_USING_EASYLOGGER is not set */ +/* PKG_USING_SYSTEMVIEW is not set */ +/* PKG_USING_RDB is not set */ +/* PKG_USING_QRCODE is not set */ +/* PKG_USING_ULOG_EASYFLASH is not set */ +/* PKG_USING_ADBD is not set */ + +/* system packages */ + +/* PKG_USING_GUIENGINE is not set */ +/* PKG_USING_PERSIMMON is not set */ +/* PKG_USING_CAIRO is not set */ +/* PKG_USING_PIXMAN is not set */ +/* PKG_USING_LWEXT4 is not set */ +/* PKG_USING_PARTITION is not set */ +/* PKG_USING_FAL is not set */ +/* PKG_USING_SQLITE is not set */ +/* PKG_USING_RTI is not set */ +/* PKG_USING_LITTLEVGL2RTT is not set */ +/* PKG_USING_CMSIS is not set */ +/* PKG_USING_DFS_YAFFS is not set */ +/* PKG_USING_LITTLEFS is not set */ + +/* peripheral libraries and drivers */ + +/* PKG_USING_REALTEK_AMEBA is not set */ +/* PKG_USING_SHT2X is not set */ +/* PKG_USING_AHT10 is not set */ +/* PKG_USING_AP3216C is not set */ +/* PKG_USING_STM32_SDIO is not set */ +/* PKG_USING_ICM20608 is not set */ +/* PKG_USING_U8G2 is not set */ +/* PKG_USING_BUTTON is not set */ +/* PKG_USING_MPU6XXX is not set */ +/* PKG_USING_PCF8574 is not set */ +/* PKG_USING_KENDRYTE_SDK is not set */ + +/* miscellaneous packages */ + +/* PKG_USING_LIBCSV is not set */ +/* PKG_USING_OPTPARSE is not set */ +/* PKG_USING_FASTLZ is not set */ +/* PKG_USING_MINILZO is not set */ +/* PKG_USING_QUICKLZ is not set */ +/* PKG_USING_MULTIBUTTON is not set */ +/* PKG_USING_CANFESTIVAL is not set */ +/* PKG_USING_ZLIB is not set */ +/* PKG_USING_DSTR is not set */ +/* PKG_USING_TINYFRAME is not set */ +/* PKG_USING_KENDRYTE_DEMO is not set */ + +/* samples: kernel and components samples */ + +/* PKG_USING_KERNEL_SAMPLES is not set */ +/* PKG_USING_FILESYSTEM_SAMPLES is not set */ +/* PKG_USING_NETWORK_SAMPLES is not set */ +/* PKG_USING_PERIPHERAL_SAMPLES is not set */ +/* PKG_USING_HELLO is not set */ +/* PKG_USING_VI is not set */ +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F4 + +/* Hardware Drivers Config */ + +#define SOC_STM32F405RG + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART2 +/* BSP_UART2_RX_USING_DMA is not set */ + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.py b/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.py new file mode 100644 index 0000000000..ca3993b30d --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/rtconfig.py @@ -0,0 +1,134 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +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'/usr/bin' +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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + 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-M4' + AFLAGS += ' --fpu VFPv4_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.ewp b/bsp/stm32/stm32f405-smdz-breadfruit/template.ewp new file mode 100644 index 0000000000..21c66ca0d0 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.ewp @@ -0,0 +1,2031 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.eww b/bsp/stm32/stm32f405-smdz-breadfruit/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.uvopt b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvopt new file mode 100644 index 0000000000..b53d69d5df --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.uvoptx b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvoptx new file mode 100644 index 0000000000..f8c4606a9e --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvoptx @@ -0,0 +1,191 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 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 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.uvproj b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvproj new file mode 100644 index 0000000000..6ca2a92953 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F407ZG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\ST\STM32F4xx\startup_stm32f40_41xxx.s" ("STM32F40/41xxx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000) + 6105 + stm32f4xx.h + + + + + + + -DSTM32F40_41xxx + + + SFD\ST\STM32F4xx\STM32F40x.sfr + 0 + 0 + + + + ST\STM32F4xx\ + ST\STM32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU -REMAP + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f405-smdz-breadfruit/template.uvprojx b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvprojx new file mode 100644 index 0000000000..66fe3140e7 --- /dev/null +++ b/bsp/stm32/stm32f405-smdz-breadfruit/template.uvprojx @@ -0,0 +1,394 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F407ZGTx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IRAM2(0x10000000,0x10000) IROM(0x08000000,0x100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) + 0 + $$Device:STM32F407ZGTx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F407ZGTx$CMSIS\SVD\STM32F40x.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 -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 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 + + + + + + + + + + + +
-- GitLab