From b3d7073fff34394281d2277fe78765e95394f6ba Mon Sep 17 00:00:00 2001 From: Willian Chan Date: Tue, 9 Apr 2019 16:52:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E3=80=90=E5=A2=9E=E5=8A=A0=E3=80=91stm32f4?= =?UTF-8?q?69-st-disco=E5=BC=80=E5=8F=91=E6=9D=BF=E7=9A=84BSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Willian Chan --- bsp/stm32/stm32f469-st-disco/.config | 396 +++ bsp/stm32/stm32f469-st-disco/.gitignore | 42 + bsp/stm32/stm32f469-st-disco/Kconfig | 21 + bsp/stm32/stm32f469-st-disco/README.md | 112 + bsp/stm32/stm32f469-st-disco/SConscript | 15 + bsp/stm32/stm32f469-st-disco/SConstruct | 59 + .../applications/SConscript | 12 + .../stm32f469-st-disco/applications/main.c | 34 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 141 + .../board/CubeMX_Config/Inc/main.h | 71 + .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 452 +++ .../board/CubeMX_Config/Inc/stm32f4xx_it.h | 69 + .../board/CubeMX_Config/Src/main.c | 241 ++ .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 149 + .../board/CubeMX_Config/Src/stm32f4xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32f4xx.c | 761 +++++ bsp/stm32/stm32f469-st-disco/board/Kconfig | 78 + bsp/stm32/stm32f469-st-disco/board/SConscript | 37 + bsp/stm32/stm32f469-st-disco/board/board.c | 57 + bsp/stm32/stm32f469-st-disco/board/board.h | 51 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 15 + .../stm32f469-st-disco/figures/board.png | Bin 0 -> 275089 bytes bsp/stm32/stm32f469-st-disco/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32f469-st-disco/project.ewp | 2260 +++++++++++++ bsp/stm32/stm32f469-st-disco/project.eww | 10 + bsp/stm32/stm32f469-st-disco/project.uvopt | 162 + bsp/stm32/stm32f469-st-disco/project.uvoptx | 953 ++++++ bsp/stm32/stm32f469-st-disco/project.uvproj | 839 +++++ bsp/stm32/stm32f469-st-disco/project.uvprojx | 722 +++++ bsp/stm32/stm32f469-st-disco/rtconfig.h | 179 ++ bsp/stm32/stm32f469-st-disco/rtconfig.py | 143 + bsp/stm32/stm32f469-st-disco/template.ewp | 2031 ++++++++++++ bsp/stm32/stm32f469-st-disco/template.eww | 10 + bsp/stm32/stm32f469-st-disco/template.uvopt | 162 + bsp/stm32/stm32f469-st-disco/template.uvoptx | 197 ++ bsp/stm32/stm32f469-st-disco/template.uvproj | 407 +++ bsp/stm32/stm32f469-st-disco/template.uvprojx | 395 +++ 40 files changed, 14518 insertions(+) create mode 100644 bsp/stm32/stm32f469-st-disco/.config create mode 100644 bsp/stm32/stm32f469-st-disco/.gitignore create mode 100644 bsp/stm32/stm32f469-st-disco/Kconfig create mode 100644 bsp/stm32/stm32f469-st-disco/README.md create mode 100644 bsp/stm32/stm32f469-st-disco/SConscript create mode 100644 bsp/stm32/stm32f469-st-disco/SConstruct create mode 100644 bsp/stm32/stm32f469-st-disco/applications/SConscript create mode 100644 bsp/stm32/stm32f469-st-disco/applications/main.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_it.h create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_it.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/system_stm32f4xx.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/Kconfig create mode 100644 bsp/stm32/stm32f469-st-disco/board/SConscript create mode 100644 bsp/stm32/stm32f469-st-disco/board/board.c create mode 100644 bsp/stm32/stm32f469-st-disco/board/board.h create mode 100644 bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f469-st-disco/figures/board.png create mode 100644 bsp/stm32/stm32f469-st-disco/project.ewd create mode 100644 bsp/stm32/stm32f469-st-disco/project.ewp create mode 100644 bsp/stm32/stm32f469-st-disco/project.eww create mode 100644 bsp/stm32/stm32f469-st-disco/project.uvopt create mode 100644 bsp/stm32/stm32f469-st-disco/project.uvoptx create mode 100644 bsp/stm32/stm32f469-st-disco/project.uvproj create mode 100644 bsp/stm32/stm32f469-st-disco/project.uvprojx create mode 100644 bsp/stm32/stm32f469-st-disco/rtconfig.h create mode 100644 bsp/stm32/stm32f469-st-disco/rtconfig.py create mode 100644 bsp/stm32/stm32f469-st-disco/template.ewp create mode 100644 bsp/stm32/stm32f469-st-disco/template.eww create mode 100644 bsp/stm32/stm32f469-st-disco/template.uvopt create mode 100644 bsp/stm32/stm32f469-st-disco/template.uvoptx create mode 100644 bsp/stm32/stm32f469-st-disco/template.uvproj create mode 100644 bsp/stm32/stm32f469-st-disco/template.uvprojx diff --git a/bsp/stm32/stm32f469-st-disco/.config b/bsp/stm32/stm32f469-st-disco/.config new file mode 100644 index 0000000000..26b7198f87 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/.config @@ -0,0 +1,396 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +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_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set + +# +# 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 +# + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# 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_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED 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 + +# +# Privated Packages of RealThread +# +# CONFIG_PKG_USING_CODEC is not set +# CONFIG_PKG_USING_PLAYER is not set +# CONFIG_PKG_USING_MPLAYER is not set +# CONFIG_PKG_USING_PERSIMMON_SRC is not set +# CONFIG_PKG_USING_JS_PERSIMMON is not set +# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set + +# +# Network Utilities +# +# CONFIG_PKG_USING_WICED is not set +# CONFIG_PKG_USING_CLOUDSDK is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_POWER_MANAGER is not set +# CONFIG_PKG_USING_RT_OTA is not set +# CONFIG_PKG_USING_RDBD_SRC is not set +# CONFIG_PKG_USING_RTINSIGHT is not set +# CONFIG_PKG_USING_SMARTCONFIG is not set +# CONFIG_PKG_USING_RTX is not set +# CONFIG_RT_USING_TESTCASE is not set +# CONFIG_PKG_USING_NGHTTP2 is not set +# CONFIG_PKG_USING_AVS is not set +# CONFIG_PKG_USING_STS is not set +# CONFIG_PKG_USING_DLMS is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F469NI=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f469-st-disco/.gitignore b/bsp/stm32/stm32f469-st-disco/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/.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/stm32f469-st-disco/Kconfig b/bsp/stm32/stm32f469-st-disco/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/README.md b/bsp/stm32/stm32f469-st-disco/README.md new file mode 100644 index 0000000000..c10c36168c --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/README.md @@ -0,0 +1,112 @@ +# STM32F469-ST-DISCO 开发板 BSP 说明 + +## 简介 + +本文档是石河子大学陈庭伟同学为 STM32F469-ST-DISCO 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32F469-ST-DISCO 是 ST 推出的一款基于 ARM Cortex-M4 内核的开发板,最高主频为 180Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F469 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F469NIH6U,主频 180MHz,2048KB FLASH ,384KB (包含64KB 的 CCM) RAM +- 外部 RAM:型号,16MB +- 外部 FLASH:型号,16MB +- 常用外设 + - LED:4个,LD1(绿色,PG6),LD2(橙色,PD4),LD3(红色,PD5),LD4(蓝色,PK3) + - 按键:1个,USER(兼具唤醒功能,PA0) + - LCD液晶显示屏 + - 音频 + - 板载 ST-LINK/V2.1 功能 +- 常用接口:Arduino Uno接口、SD 卡接口、音频接口、LCD 接口等 +- 调试接口,板载的 ST-LINK/V2-1 SWD 下载 + +开发板更多详细信息请参考 ST 的 [STM32F469-ST-DISCO 开发板介绍](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/32f469idiscovery.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :-----: | :-----: | :-----: | +| GPIO | 支持 | | +| USART | 支持 | USART3 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 st-link 仿真器下载程序,在通过 st-link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED (LD1,绿色) 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.1 build Apr 9 2019 + 2006 - 2019 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口3 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- STM32F469NIH6U 这款芯片,RAM大小为 384KB,但是这 384KB 中有 64KB 是 CCM data RAM。在修改 `board.h` 文件和链接脚本文件的时候不能以 384KB 来配置,而应该以 (348 - 64)KB 即 320KB 来配置。 +- 在 STM32CubeMX 软件中配置 USART3 时候,引脚要映射为 PB10 和 PB11。 + +## 联系人信息 + +维护人: + +- [WillianChan](https://github.com/willianchanlovegithub), 邮箱: + diff --git a/bsp/stm32/stm32f469-st-disco/SConscript b/bsp/stm32/stm32f469-st-disco/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/SConstruct b/bsp/stm32/stm32f469-st-disco/SConstruct new file mode 100644 index 0000000000..629f25c6ee --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/SConstruct @@ -0,0 +1,59 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = '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/stm32f469-st-disco/applications/SConscript b/bsp/stm32/stm32f469-st-disco/applications/SConscript new file mode 100644 index 0000000000..6f66f7ab73 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/applications/main.c b/bsp/stm32/stm32f469-st-disco/applications/main.c new file mode 100644 index 0000000000..8feca19928 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/applications/main.c @@ -0,0 +1,34 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f469-st-disco bsp + */ + +#include +#include +#include + +/* defined the LED1 pin: PG6 */ +#define LED1_PIN GET_PIN(G, 6) + +int main(void) +{ + int count = 1; + /* set LED1 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..ec1801b187 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=D:/Work_RT-Thread/GitHub/rt-thread/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc +HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h; +SourcePath=D:/Work_RT-Thread/GitHub/rt-thread/bsp/stm32/stm32f469-st-disco/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/Inc/stm32f4xx_hal_exti.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/Src/stm32f4xx_hal_exti.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/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f469xx.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/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[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;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.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;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.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/stm32f469-st-disco/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..edd95fb5b2 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,141 @@ +#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=USART3 +Mcu.IPNb=4 +Mcu.Name=STM32F469NIHx +Mcu.Package=TFBGA216 +Mcu.Pin0=PA14 +Mcu.Pin1=PA13 +Mcu.Pin2=PC14/OSC32_IN +Mcu.Pin3=PC15/OSC32_OUT +Mcu.Pin4=PH0/OSC_IN +Mcu.Pin5=PH1/OSC_OUT +Mcu.Pin6=PB10 +Mcu.Pin7=PB11 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F469NIHx +MxCube.Version=5.1.0 +MxDb.Version=DB.5.0.10 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PB10.Locked=true +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB11.Locked=true +PB11.Mode=Asynchronous +PB11.Signal=USART3_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=STM32F469/479 +PCC.MCU=STM32F469NIHx +PCC.PartNumber=STM32F469NIHx +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.CurrentBGAView=Top +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=STM32F469NIHx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.24.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART3_UART_Init-USART3-false-HAL-true +RCC.AHBFreq_Value=180000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=45000000 +RCC.APB1TimFreq_Value=90000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=90000000 +RCC.APB2TimFreq_Value=180000000 +RCC.CortexFreq_Value=180000000 +RCC.DSIFreq_Value=20000000 +RCC.DSITXEscFreq_Value=5000000 +RCC.EthernetFreq_Value=180000000 +RCC.FCLKCortexFreq_Value=180000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=180000000 +RCC.HSE_VALUE=8000000 +RCC.I2SFreq_Value=192000000 +RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,DSIFreq_Value,DSITXEscFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,I2SFreq_Value,LCDTFTFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLDSIFreq_Value,PLLDSIVCOFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLRCLKFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAIAFreq_Value,SAIBFreq_Value,SDIOFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value +RCC.LCDTFTFreq_Value=96000000 +RCC.MCO2PinFreq_Value=180000000 +RCC.PLLCLKFreq_Value=180000000 +RCC.PLLDSIFreq_Value=160000000 +RCC.PLLDSIVCOFreq_Value=320000000 +RCC.PLLI2SQCLKFreq_Value=96000000 +RCC.PLLI2SRCLKFreq_Value=192000000 +RCC.PLLM=4 +RCC.PLLN=180 +RCC.PLLQCLKFreq_Value=90000000 +RCC.PLLRCLKFreq_Value=180000000 +RCC.PLLRFreq_Value=180000000 +RCC.PLLSAIPCLKFreq_Value=192000000 +RCC.PLLSAIQCLKFreq_Value=96000000 +RCC.PLLSAIRCLKFreq_Value=192000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SAIAFreq_Value=96000000 +RCC.SAIBFreq_Value=96000000 +RCC.SDIOFreq_Value=90000000 +RCC.SYSCLKFreq_VALUE=180000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.USBFreq_Value=90000000 +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=360000000 +RCC.VCOSAIOutputFreq_Value=384000000 +USART3.IPParameters=VirtualMode +USART3.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..14e67594ea --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,71 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "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/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 0000000000..069d483d7c --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,452 @@ +/** + ****************************************************************************** + * @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_EXTI_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_ll_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/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_it.h b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_it.h new file mode 100644 index 0000000000..0f5054a3db --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Inc/stm32f4xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __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/stm32f469-st-disco/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..4c65430269 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/main.c @@ -0,0 +1,241 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart3; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART3_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_USART3_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { +// HAL_GPIO_WritePin(GPIOG, 6, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOG, 6, GPIO_PIN_RESET); + /* 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_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 = 180; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + RCC_OscInitStruct.PLL.PLLR = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != 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(); + } +} + +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 115200; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOB_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/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c new file mode 100644 index 0000000000..a76286fb42 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,149 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f4xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_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==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11; + 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_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_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==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_it.c b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_it.c new file mode 100644 index 0000000000..b39d2d36fa --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/stm32f4xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "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/stm32f469-st-disco/board/CubeMX_Config/Src/system_stm32f4xx.c b/bsp/stm32/stm32f469-st-disco/board/CubeMX_Config/Src/system_stm32f4xx.c new file mode 100644 index 0000000000..3303f969d9 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/board/Kconfig b/bsp/stm32/stm32f469-st-disco/board/Kconfig new file mode 100644 index 0000000000..75ed2650e5 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/Kconfig @@ -0,0 +1,78 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F469NI + 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_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + depends on BSP_USING_SPI1 + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + depends on BSP_USING_SPI1 + select BSP_SPI1_TX_USING_DMA + default n + endif + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + int "i2c1 scl pin number" + range 1 216 + default 15 + config BSP_I2C1_SDA_PIN + int "I2C1 sda pin number" + range 1 216 + default 16 + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f469-st-disco/board/SConscript b/bsp/stm32/stm32f469-st-disco/board/SConscript new file mode 100644 index 0000000000..4c57496e69 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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_stm32f469xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f469xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f469xx.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 = ['STM32F469xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32f469-st-disco/board/board.c b/bsp/stm32/stm32f469-st-disco/board/board.c new file mode 100644 index 0000000000..f9701ae28f --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/board.c @@ -0,0 +1,57 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f469-st-disco bsp + */ + +#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 = 180; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + RCC_OscInitStruct.PLL.PLLR = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != 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/stm32f469-st-disco/board/board.h b/bsp/stm32/stm32f469-st-disco/board/board.h new file mode 100644 index 0000000000..0880c1f384 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/board.h @@ -0,0 +1,51 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f469-st-disco bsp + */ + +#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 (2048 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (384 - 64) +#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/stm32f469-st-disco/board/linker_scripts/link.icf b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.icf new file mode 100644 index 0000000000..2024f628ad --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2004FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.lds b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.lds new file mode 100644 index 0000000000..040fdd37b0 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 2048k /* 2048KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 320k /* 320K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.sct b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.sct new file mode 100644 index 0000000000..44653c2e11 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00050000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f469-st-disco/figures/board.png b/bsp/stm32/stm32f469-st-disco/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..29b0c6f4459af1c81153868220780a24d6561252 GIT binary patch literal 275089 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

    {o8IHfqt+h}9{tskXY=kGRc&(N2ru@s{~@ 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

    SL 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

    vLqGFLJsf1zh+ZJDI{84@`J{1lQwgkp!Ut>M+ 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�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 z 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

    R>AoQ?58=ljmh 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%0Amov5Z#{ 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 a_fr4n75|n`{+|!v|GI+wKl5OJ7ycXm*DZVi literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f469-st-disco/project.ewd b/bsp/stm32/stm32f469-st-disco/project.ewd new file mode 100644 index 0000000000..e94c83ed06 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f469-st-disco/project.ewp b/bsp/stm32/stm32f469-st-disco/project.ewp new file mode 100644 index 0000000000..3f37575373 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.ewp @@ -0,0 +1,2260 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\startup_stm32f469xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + cpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\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_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_dma.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_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_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_gpio.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 + + + diff --git a/bsp/stm32/stm32f469-st-disco/project.eww b/bsp/stm32/stm32f469-st-disco/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f469-st-disco/project.uvopt b/bsp/stm32/stm32f469-st-disco/project.uvopt new file mode 100644 index 0000000000..b53d69d5df --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/project.uvoptx b/bsp/stm32/stm32f469-st-disco/project.uvoptx new file mode 100644 index 0000000000..2a2492dcb2 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.uvoptx @@ -0,0 +1,953 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U0673FF544856824987055526 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN2 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FF1STM32F469_Quad_SPI.FLM -FS190000000 -FL12000000 -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20000000 -FF0STM32F4xx_2048 -FF1STM32F469_Quad_SPI -FL0200000 -FL12000000 -FS08000000 -FS190000000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -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 + + + 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 + 1 + 0 + 2 + 10000000 + + + + + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 1 + 0 + 0 + 0 + + 2 + 16 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 3 + 17 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + stm32f4xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f469xx.s + startup_stm32f469xx.s + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 27 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 7 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + system_stm32f4xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + stm32f4xx_hal.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + stm32f4xx_hal_cec.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + stm32f4xx_hal_cortex.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + stm32f4xx_hal_crc.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + stm32f4xx_hal_cryp.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + stm32f4xx_hal_cryp_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + stm32f4xx_hal_dma.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + stm32f4xx_hal_dma_ex.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + stm32f4xx_hal_pwr.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + stm32f4xx_hal_pwr_ex.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + stm32f4xx_hal_rcc.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + stm32f4xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + stm32f4xx_hal_rng.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + stm32f4xx_hal_gpio.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + stm32f4xx_hal_uart.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + stm32f4xx_hal_usart.c + 0 + 0 + + + +
    diff --git a/bsp/stm32/stm32f469-st-disco/project.uvproj b/bsp/stm32/stm32f469-st-disco/project.uvproj new file mode 100644 index 0000000000..200f0615aa --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.uvproj @@ -0,0 +1,839 @@ + + + 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, STM32F469xx + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\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 + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + signal.c + 1 + ..\..\..\src\signal.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + + + startup_stm32f469xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f469xx.s + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_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_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_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_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_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_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.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 + + + + + + +
    diff --git a/bsp/stm32/stm32f469-st-disco/project.uvprojx b/bsp/stm32/stm32f469-st-disco/project.uvprojx new file mode 100644 index 0000000000..c6f4262ede --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/project.uvprojx @@ -0,0 +1,722 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F469NIHx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00050000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN2 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FF1STM32F469_Quad_SPI -FS190000000 -FL12000000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM)) + 0 + $$Device:STM32F469NIHx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F469NIHx$CMSIS\SVD\STM32F46_79x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 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 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x50000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x50000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F469xx + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\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 + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + + + startup_stm32f469xx.s + 2 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f469xx.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_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_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_dma.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + + + stm32f4xx_hal_dma_ex.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_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_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_gpio.c + 1 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.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 + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f469-st-disco/rtconfig.h b/bsp/stm32/stm32f469-st-disco/rtconfig.h new file mode 100644 index 0000000000..6a8560e929 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/rtconfig.h @@ -0,0 +1,179 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_VER_NUM 0x40001 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + +/* sensors drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* Privated Packages of RealThread */ + + +/* Network Utilities */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F4 + +/* Hardware Drivers Config */ + +#define SOC_STM32F469NI + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART3 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f469-st-disco/rtconfig.py b/bsp/stm32/stm32f469-st-disco/rtconfig.py new file mode 100644 index 0000000000..638f59502a --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/rtconfig.py @@ -0,0 +1,143 @@ +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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-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' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-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' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f469-st-disco/template.ewp b/bsp/stm32/stm32f469-st-disco/template.ewp new file mode 100644 index 0000000000..21c66ca0d0 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/template.eww b/bsp/stm32/stm32f469-st-disco/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f469-st-disco/template.uvopt b/bsp/stm32/stm32f469-st-disco/template.uvopt new file mode 100644 index 0000000000..b53d69d5df --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/template.uvoptx b/bsp/stm32/stm32f469-st-disco/template.uvoptx new file mode 100644 index 0000000000..73d9b9cfc2 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/template.uvoptx @@ -0,0 +1,197 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 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 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U0673FF544856824987055526 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN2 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FF1STM32F469_Quad_SPI.FLM -FS190000000 -FL12000000 -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20000000 -FF0STM32F4xx_2048 -FF1STM32F469_Quad_SPI -FL0200000 -FL12000000 -FS08000000 -FS190000000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -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 + + + 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 + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f469-st-disco/template.uvproj b/bsp/stm32/stm32f469-st-disco/template.uvproj new file mode 100644 index 0000000000..6ca2a92953 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/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/stm32f469-st-disco/template.uvprojx b/bsp/stm32/stm32f469-st-disco/template.uvprojx new file mode 100644 index 0000000000..7741416fe8 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/template.uvprojx @@ -0,0 +1,395 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F469NIHx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x00050000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN2 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FF1STM32F469_Quad_SPI -FS190000000 -FL12000000 -FP0($$Device:STM32F469NIHx$CMSIS\Flash\STM32F4xx_2048.FLM) -FP1($$Device:STM32F469NIHx$CMSIS\Flash\STM32F469_Quad_SPI.FLM)) + 0 + $$Device:STM32F469NIHx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F469NIHx$CMSIS\SVD\STM32F46_79x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 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 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x50000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x50000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
    From d8e004fb04820f2ae975265e620777aad5e3a5d1 Mon Sep 17 00:00:00 2001 From: Willian Chan Date: Wed, 10 Apr 2019 10:48:08 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91Kconfig?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=B8=8EREADME.md=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Willian Chan --- bsp/stm32/stm32f469-st-disco/.config | 5 +- bsp/stm32/stm32f469-st-disco/README.md | 4 +- bsp/stm32/stm32f469-st-disco/SConstruct | 4 +- bsp/stm32/stm32f469-st-disco/board/Kconfig | 46 +- bsp/stm32/stm32f469-st-disco/project.uvopt | 1013 +++++++++++++++++- bsp/stm32/stm32f469-st-disco/project.uvoptx | 4 +- bsp/stm32/stm32f469-st-disco/project.uvproj | 212 +--- bsp/stm32/stm32f469-st-disco/rtconfig.py | 2 +- bsp/stm32/stm32f469-st-disco/template.uvopt | 9 +- bsp/stm32/stm32f469-st-disco/template.uvproj | 6 +- 10 files changed, 1085 insertions(+), 220 deletions(-) diff --git a/bsp/stm32/stm32f469-st-disco/.config b/bsp/stm32/stm32f469-st-disco/.config index 26b7198f87..e51a1ff610 100644 --- a/bsp/stm32/stm32f469-st-disco/.config +++ b/bsp/stm32/stm32f469-st-disco/.config @@ -386,10 +386,7 @@ CONFIG_SOC_STM32F469NI=y # CONFIG_BSP_USING_GPIO=y CONFIG_BSP_USING_UART=y -CONFIG_BSP_USING_UART1=y -# CONFIG_BSP_UART1_RX_USING_DMA is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_I2C1 is not set +CONFIG_BSP_USING_UART3=y # # Board extended module Drivers diff --git a/bsp/stm32/stm32f469-st-disco/README.md b/bsp/stm32/stm32f469-st-disco/README.md index c10c36168c..cd9aa227dc 100644 --- a/bsp/stm32/stm32f469-st-disco/README.md +++ b/bsp/stm32/stm32f469-st-disco/README.md @@ -28,7 +28,7 @@ STM32F469-ST-DISCO 是 ST 推出的一款基于 ARM Cortex-M4 内核的开发板 - 常用外设 - LED:4个,LD1(绿色,PG6),LD2(橙色,PD4),LD3(红色,PD5),LD4(蓝色,PK3) - 按键:1个,USER(兼具唤醒功能,PA0) - - LCD液晶显示屏 + - LCD - 音频 - 板载 ST-LINK/V2.1 功能 - 常用接口:Arduino Uno接口、SD 卡接口、音频接口、LCD 接口等 @@ -108,5 +108,5 @@ msh > 维护人: -- [WillianChan](https://github.com/willianchanlovegithub), 邮箱: +- [WillianChan](https://github.com/willianchanlovegithub) diff --git a/bsp/stm32/stm32f469-st-disco/SConstruct b/bsp/stm32/stm32f469-st-disco/SConstruct index 629f25c6ee..b3728e2330 100644 --- a/bsp/stm32/stm32f469-st-disco/SConstruct +++ b/bsp/stm32/stm32f469-st-disco/SConstruct @@ -15,7 +15,7 @@ except: print(RTT_ROOT) exit(-1) -TARGET = 'rt-thread.' + rtconfig.TARGET_EXT +TARGET = 'rtthread.' + rtconfig.TARGET_EXT env = Environment(tools = ['mingw'], AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, @@ -28,7 +28,7 @@ env.PrependENVPath('PATH', rtconfig.EXEC_PATH) if rtconfig.PLATFORM == 'iar': env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) env.Replace(ARFLAGS = ['']) - env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') Export('RTT_ROOT') Export('rtconfig') diff --git a/bsp/stm32/stm32f469-st-disco/board/Kconfig b/bsp/stm32/stm32f469-st-disco/board/Kconfig index 75ed2650e5..a6084461dc 100644 --- a/bsp/stm32/stm32f469-st-disco/board/Kconfig +++ b/bsp/stm32/stm32f469-st-disco/board/Kconfig @@ -21,52 +21,10 @@ menu "On-chip Peripheral Drivers" default y select RT_USING_SERIAL if BSP_USING_UART - config BSP_USING_UART1 - bool "Enable UART1" + config BSP_USING_UART3 + bool "Enable UART3" default y - config BSP_UART1_RX_USING_DMA - bool "Enable UART1 RX DMA" - depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA - default n - endif - - menuconfig BSP_USING_SPI - bool "Enable SPI BUS" - default n - select RT_USING_SPI - if BSP_USING_SPI - config BSP_USING_SPI1 - bool "Enable SPI1 BUS" - default n - - config BSP_SPI1_TX_USING_DMA - bool "Enable SPI1 TX DMA" - depends on BSP_USING_SPI1 - default n - - config BSP_SPI1_RX_USING_DMA - bool "Enable SPI1 RX DMA" - depends on BSP_USING_SPI1 - select BSP_SPI1_TX_USING_DMA - default n - endif - - menuconfig BSP_USING_I2C1 - bool "Enable I2C1 BUS (software simulation)" - default n - select RT_USING_I2C - select RT_USING_I2C_BITOPS - select RT_USING_PIN - if BSP_USING_I2C1 - config BSP_I2C1_SCL_PIN - int "i2c1 scl pin number" - range 1 216 - default 15 - config BSP_I2C1_SDA_PIN - int "I2C1 sda pin number" - range 1 216 - default 16 endif endmenu diff --git a/bsp/stm32/stm32f469-st-disco/project.uvopt b/bsp/stm32/stm32f469-st-disco/project.uvopt index b53d69d5df..739e2ceaf2 100644 --- a/bsp/stm32/stm32f469-st-disco/project.uvopt +++ b/bsp/stm32/stm32f469-st-disco/project.uvopt @@ -71,7 +71,7 @@ 0 - 0 + 1 0 1 @@ -96,10 +96,10 @@ 0 1 1 - 0 + 1 0 0 - 6 + -1 @@ -110,9 +110,14 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U -O207 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + 0 JL2CM3 @@ -159,4 +164,1004 @@ + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 0 + 0 + 0 + 0 + + 2 + 16 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 3 + 17 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + board\board.c + board.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + board\CubeMX_Config\Src\stm32f4xx_hal_msp.c + stm32f4xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f469xx.s + startup_stm32f469xx.s + 0 + 0 + + + 3 + 20 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 27 + 2 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 7 + 43 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c + system_stm32f4xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c + stm32f4xx_hal.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c + stm32f4xx_hal_cec.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c + stm32f4xx_hal_cortex.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c + stm32f4xx_hal_crc.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c + stm32f4xx_hal_cryp.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c + stm32f4xx_hal_cryp_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c + stm32f4xx_hal_dma.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c + stm32f4xx_hal_dma_ex.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c + stm32f4xx_hal_pwr.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c + stm32f4xx_hal_pwr_ex.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c + stm32f4xx_hal_rcc.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c + stm32f4xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c + stm32f4xx_hal_rng.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c + stm32f4xx_hal_gpio.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c + stm32f4xx_hal_uart.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 1 + 9376076 + 0 + 0 + 5 + 0 + ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c + stm32f4xx_hal_usart.c + 0 + 0 + + + diff --git a/bsp/stm32/stm32f469-st-disco/project.uvoptx b/bsp/stm32/stm32f469-st-disco/project.uvoptx index 2a2492dcb2..cb05257668 100644 --- a/bsp/stm32/stm32f469-st-disco/project.uvoptx +++ b/bsp/stm32/stm32f469-st-disco/project.uvoptx @@ -73,7 +73,7 @@ 0 - 1 + 0 0 1 @@ -376,7 +376,7 @@ Applications - 1 + 0 0 0 0 diff --git a/bsp/stm32/stm32f469-st-disco/project.uvproj b/bsp/stm32/stm32f469-st-disco/project.uvproj index 200f0615aa..e3f25c70e9 100644 --- a/bsp/stm32/stm32f469-st-disco/project.uvproj +++ b/bsp/stm32/stm32f469-st-disco/project.uvproj @@ -1,7 +1,10 @@ + 1.1 +
    ### uVision Project, (C) Keil Software
    + rt-thread @@ -12,26 +15,26 @@ 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\ @@ -42,7 +45,7 @@ 1 .\build\keil\Obj\ - rt-thread + rtthread 1 0 0 @@ -55,8 +58,8 @@ 0 0 - - + + 0 0 0 @@ -65,8 +68,8 @@ 0 0 - - + + 0 0 @@ -74,12 +77,12 @@ 1 0 fromelf --bin !L --output rtthread.bin - + 0 0 0 - + 0 @@ -93,8 +96,8 @@ 0 0 3 - - + + 1 @@ -138,24 +141,24 @@ 1 0 1 - 0 + 1 0 - 6 + -1 - - - - - + + + + + - - - - - - Segger\JL2CM3.dll + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll @@ -170,10 +173,10 @@ 1 BIN\UL2CM3.DLL "" () - - - - + + + + 0 @@ -206,7 +209,7 @@ 0 0 "Cortex-M4" - + 0 0 0 @@ -337,7 +340,7 @@ 0x10000 - + 1 @@ -356,9 +359,9 @@ 1 0 - + USE_HAL_DRIVER, STM32F469xx - + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\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 @@ -373,10 +376,10 @@ 0 0 - - - - + + + + @@ -388,13 +391,13 @@ 0 0x08000000 0x20000000 - + .\board\linker_scripts\link.sct - - - - - + + + + + @@ -407,99 +410,71 @@ 1 ..\..\..\src\clock.c - - components.c 1 ..\..\..\src\components.c - - cpu.c 1 ..\..\..\src\cpu.c - - device.c 1 ..\..\..\src\device.c - - idle.c 1 ..\..\..\src\idle.c - - ipc.c 1 ..\..\..\src\ipc.c - - irq.c 1 ..\..\..\src\irq.c - - kservice.c 1 ..\..\..\src\kservice.c - - mem.c 1 ..\..\..\src\mem.c - - mempool.c 1 ..\..\..\src\mempool.c - - object.c 1 ..\..\..\src\object.c - - scheduler.c 1 ..\..\..\src\scheduler.c - - signal.c 1 ..\..\..\src\signal.c - - thread.c 1 ..\..\..\src\thread.c - - timer.c 1 @@ -525,36 +500,26 @@ 1 board\board.c - - stm32f4xx_hal_msp.c 1 board\CubeMX_Config\Src\stm32f4xx_hal_msp.c - - startup_stm32f469xx.s 2 ..\libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f469xx.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 @@ -570,29 +535,21 @@ 1 ..\..\..\libcpu\arm\common\backtrace.c - - div0.c 1 ..\..\..\libcpu\arm\common\div0.c - - showmem.c 1 ..\..\..\libcpu\arm\common\showmem.c - - cpuport.c 1 ..\..\..\libcpu\arm\cortex-m4\cpuport.c - - context_rvds.S 2 @@ -608,57 +565,41 @@ 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 @@ -674,36 +615,26 @@ 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 @@ -719,113 +650,81 @@ 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_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_dma.c 1 ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c - - stm32f4xx_hal_dma_ex.c 1 ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_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_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_gpio.c 1 ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c - - stm32f4xx_hal_uart.c 1 ..\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c - - stm32f4xx_hal_usart.c 1 @@ -836,4 +735,5 @@ +
    diff --git a/bsp/stm32/stm32f469-st-disco/rtconfig.py b/bsp/stm32/stm32f469-st-disco/rtconfig.py index 638f59502a..e066bd854b 100644 --- a/bsp/stm32/stm32f469-st-disco/rtconfig.py +++ b/bsp/stm32/stm32f469-st-disco/rtconfig.py @@ -73,7 +73,7 @@ elif PLATFORM == 'armcc': 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' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' diff --git a/bsp/stm32/stm32f469-st-disco/template.uvopt b/bsp/stm32/stm32f469-st-disco/template.uvopt index b53d69d5df..ed90c9e187 100644 --- a/bsp/stm32/stm32f469-st-disco/template.uvopt +++ b/bsp/stm32/stm32f469-st-disco/template.uvopt @@ -99,7 +99,7 @@ 0 0 0 - 6 + 11 @@ -110,9 +110,14 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U -O207 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + 0 JL2CM3 diff --git a/bsp/stm32/stm32f469-st-disco/template.uvproj b/bsp/stm32/stm32f469-st-disco/template.uvproj index 6ca2a92953..b56a2671b3 100644 --- a/bsp/stm32/stm32f469-st-disco/template.uvproj +++ b/bsp/stm32/stm32f469-st-disco/template.uvproj @@ -45,7 +45,7 @@ 1 .\build\keil\Obj\ - rt-thread + rtthread 1 0 0 @@ -144,7 +144,7 @@ 0 0 - 6 + 11 @@ -158,7 +158,7 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll From 9bf8d1d119a66e66be0e10c7e6c32e455addb62d Mon Sep 17 00:00:00 2001 From: Willian Chan Date: Wed, 10 Apr 2019 12:04:01 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91README.?= =?UTF-8?q?md=E6=96=87=E4=BB=B6=E5=8F=8Artconfig.py=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Willian Chan --- bsp/stm32/stm32f469-st-disco/README.md | 13 ++++++------- bsp/stm32/stm32f469-st-disco/rtconfig.py | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bsp/stm32/stm32f469-st-disco/README.md b/bsp/stm32/stm32f469-st-disco/README.md index cd9aa227dc..57aff27b3f 100644 --- a/bsp/stm32/stm32f469-st-disco/README.md +++ b/bsp/stm32/stm32f469-st-disco/README.md @@ -23,15 +23,14 @@ STM32F469-ST-DISCO 是 ST 推出的一款基于 ARM Cortex-M4 内核的开发板 该开发板常用 **板载资源** 如下: - MCU:STM32F469NIH6U,主频 180MHz,2048KB FLASH ,384KB (包含64KB 的 CCM) RAM -- 外部 RAM:型号,16MB -- 外部 FLASH:型号,16MB +- 外部 RAM:型号25Q128A,16MB +- 外部 FLASH:型号7LL12D9NOR,16MB - 常用外设 - LED:4个,LD1(绿色,PG6),LD2(橙色,PD4),LD3(红色,PD5),LD4(蓝色,PK3) - 按键:1个,USER(兼具唤醒功能,PA0) - - LCD - - 音频 - - 板载 ST-LINK/V2.1 功能 -- 常用接口:Arduino Uno接口、SD 卡接口、音频接口、LCD 接口等 + - LCD:4寸800×480TFT屏 + - 音频:SAI音频DAC +- 常用接口:Arduino UNO V3 接口、MicroSD 卡接口、音频接口、LCD 接口、I2C 接口等 - 调试接口,板载的 ST-LINK/V2-1 SWD 下载 开发板更多详细信息请参考 ST 的 [STM32F469-ST-DISCO 开发板介绍](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/32f469idiscovery.html)。 @@ -101,7 +100,7 @@ msh > ## 注意事项 -- STM32F469NIH6U 这款芯片,RAM大小为 384KB,但是这 384KB 中有 64KB 是 CCM data RAM。在修改 `board.h` 文件和链接脚本文件的时候不能以 384KB 来配置,而应该以 (348 - 64)KB 即 320KB 来配置。 +- STM32F469NIH6U 这款芯片,RAM大小为 384KB,但是这 384KB 中有 64KB 是 CCM data RAM。在修改 `board.h` 文件和链接脚本文件的时候不能以 384KB 来配置,而应该以 (384 - 64)KB 即 320KB 来配置。 - 在 STM32CubeMX 软件中配置 USART3 时候,引脚要映射为 PB10 和 PB11。 ## 联系人信息 diff --git a/bsp/stm32/stm32f469-st-disco/rtconfig.py b/bsp/stm32/stm32f469-st-disco/rtconfig.py index e066bd854b..32024fa83a 100644 --- a/bsp/stm32/stm32f469-st-disco/rtconfig.py +++ b/bsp/stm32/stm32f469-st-disco/rtconfig.py @@ -46,7 +46,7 @@ if PLATFORM == 'gcc': DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' CFLAGS = DEVICE + ' -Dgcc' AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' - LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' CPATH = '' LPATH = '' From bee289a63ece65e89fe9693ac127a4b071c78065 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Wed, 10 Apr 2019 21:46:21 +0800 Subject: [PATCH 4/4] Update SConscript --- bsp/stm32/stm32f469-st-disco/applications/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/stm32/stm32f469-st-disco/applications/SConscript b/bsp/stm32/stm32f469-st-disco/applications/SConscript index 6f66f7ab73..c25223940b 100644 --- a/bsp/stm32/stm32f469-st-disco/applications/SConscript +++ b/bsp/stm32/stm32f469-st-disco/applications/SConscript @@ -2,7 +2,7 @@ import rtconfig from building import * cwd = GetCurrentDir() -CPPPATH = [cwd, str(Dir('#'))] +CPPPATH = [cwd] src = Split(""" main.c """)