From a9cb5151c826008cdd93cd69c00370b985c3fd3c Mon Sep 17 00:00:00 2001 From: BalanceTWK Date: Fri, 4 Jan 2019 21:40:14 +0800 Subject: [PATCH 01/26] =?UTF-8?q?[bsp][imxrt]=20=E6=B7=BB=E5=8A=A0RTC?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E9=80=89=E9=A1=B9=20RT=5FUSING=5FLIBC=20|=20?= =?UTF-8?q?add=20RTC=20dependency=20options=20RT=5FUSING=5FLIBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/imxrt/imxrt1050-ArchMix/Kconfig | 1 + bsp/imxrt/imxrt1050-evk/Kconfig | 1 + bsp/imxrt1052-evk/Kconfig | 1 + 3 files changed, 3 insertions(+) diff --git a/bsp/imxrt/imxrt1050-ArchMix/Kconfig b/bsp/imxrt/imxrt1050-ArchMix/Kconfig index 6aa07d476d..6d10460622 100644 --- a/bsp/imxrt/imxrt1050-ArchMix/Kconfig +++ b/bsp/imxrt/imxrt1050-ArchMix/Kconfig @@ -284,6 +284,7 @@ endmenu config RT_USING_RTC_HP bool "Using hp rtc" select RT_USING_RTC + select RT_USING_LIBC default n #endmenu diff --git a/bsp/imxrt/imxrt1050-evk/Kconfig b/bsp/imxrt/imxrt1050-evk/Kconfig index 6a9e202469..7f15d5c9fa 100644 --- a/bsp/imxrt/imxrt1050-evk/Kconfig +++ b/bsp/imxrt/imxrt1050-evk/Kconfig @@ -445,6 +445,7 @@ endmenu config RT_USING_RTC_HP bool "Using hp rtc" select RT_USING_RTC + select RT_USING_LIBC default n #endmenu diff --git a/bsp/imxrt1052-evk/Kconfig b/bsp/imxrt1052-evk/Kconfig index b2e97fc33a..b76ec359e6 100644 --- a/bsp/imxrt1052-evk/Kconfig +++ b/bsp/imxrt1052-evk/Kconfig @@ -444,6 +444,7 @@ endmenu config RT_USING_RTC_HP bool "Using hp rtc" select RT_USING_RTC + select RT_USING_LIBC default n #endmenu From d7741b55066e435cd5f6778e8f4818373360407c Mon Sep 17 00:00:00 2001 From: jinsheng Date: Thu, 10 Jan 2019 22:39:34 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0stm32f746-disco=20bsp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f746-st-disco/.config | 341 ++ bsp/stm32/stm32f746-st-disco/.gitignore | 42 + bsp/stm32/stm32f746-st-disco/Kconfig | 21 + bsp/stm32/stm32f746-st-disco/README.md | 107 + bsp/stm32/stm32f746-st-disco/SConscript | 14 + bsp/stm32/stm32f746-st-disco/SConstruct | 47 + .../applications/SConscript | 12 + .../stm32f746-st-disco/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 155 + .../board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 455 +++ .../board/CubeMX_Config/Inc/stm32f7xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 271 ++ .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 182 + .../board/CubeMX_Config/Src/stm32f7xx_it.c | 217 ++ .../CubeMX_Config/Src/system_stm32f7xx.c | 278 ++ bsp/stm32/stm32f746-st-disco/board/Kconfig | 45 + bsp/stm32/stm32f746-st-disco/board/SConscript | 27 + bsp/stm32/stm32f746-st-disco/board/board.c | 66 + bsp/stm32/stm32f746-st-disco/board/board.h | 41 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 144 + .../board/linker_scripts/link.sct | 15 + .../stm32f746-st-disco/figures/board.jpg | Bin 0 -> 380301 bytes bsp/stm32/stm32f746-st-disco/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f746-st-disco/project.ewp | 2263 +++++++++++++ bsp/stm32/stm32f746-st-disco/project.eww | 10 + bsp/stm32/stm32f746-st-disco/project.uvoptx | 1029 ++++++ bsp/stm32/stm32f746-st-disco/project.uvprojx | 718 ++++ bsp/stm32/stm32f746-st-disco/rtconfig.h | 179 + bsp/stm32/stm32f746-st-disco/rtconfig.py | 144 + bsp/stm32/stm32f746-st-disco/template.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f746-st-disco/template.ewp | 2031 +++++++++++ bsp/stm32/stm32f746-st-disco/template.eww | 10 + bsp/stm32/stm32f746-st-disco/template.uvoptx | 256 ++ bsp/stm32/stm32f746-st-disco/template.uvprojx | 386 +++ 37 files changed, 15687 insertions(+) create mode 100644 bsp/stm32/stm32f746-st-disco/.config create mode 100644 bsp/stm32/stm32f746-st-disco/.gitignore create mode 100644 bsp/stm32/stm32f746-st-disco/Kconfig create mode 100644 bsp/stm32/stm32f746-st-disco/README.md create mode 100644 bsp/stm32/stm32f746-st-disco/SConscript create mode 100644 bsp/stm32/stm32f746-st-disco/SConstruct create mode 100644 bsp/stm32/stm32f746-st-disco/applications/SConscript create mode 100644 bsp/stm32/stm32f746-st-disco/applications/main.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/system_stm32f7xx.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/Kconfig create mode 100644 bsp/stm32/stm32f746-st-disco/board/SConscript create mode 100644 bsp/stm32/stm32f746-st-disco/board/board.c create mode 100644 bsp/stm32/stm32f746-st-disco/board/board.h create mode 100644 bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f746-st-disco/figures/board.jpg create mode 100644 bsp/stm32/stm32f746-st-disco/project.ewd create mode 100644 bsp/stm32/stm32f746-st-disco/project.ewp create mode 100644 bsp/stm32/stm32f746-st-disco/project.eww create mode 100644 bsp/stm32/stm32f746-st-disco/project.uvoptx create mode 100644 bsp/stm32/stm32f746-st-disco/project.uvprojx create mode 100644 bsp/stm32/stm32f746-st-disco/rtconfig.h create mode 100644 bsp/stm32/stm32f746-st-disco/rtconfig.py create mode 100644 bsp/stm32/stm32f746-st-disco/template.ewd create mode 100644 bsp/stm32/stm32f746-st-disco/template.ewp create mode 100644 bsp/stm32/stm32f746-st-disco/template.eww create mode 100644 bsp/stm32/stm32f746-st-disco/template.uvoptx create mode 100644 bsp/stm32/stm32f746-st-disco/template.uvprojx diff --git a/bsp/stm32/stm32f746-st-disco/.config b/bsp/stm32/stm32f746-st-disco/.config new file mode 100644 index 0000000000..cc9a707882 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/.config @@ -0,0 +1,341 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40000 +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M7=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# ARM CMSIS +# +# CONFIG_RT_USING_CMSIS_OS is not set +# CONFIG_RT_USING_RTT_CMSIS is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_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 + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_STM32F4_HAL is not set +# CONFIG_PKG_USING_STM32F4_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set + +# +# sample package +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# example package: hello +# +# CONFIG_PKG_USING_HELLO is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F7=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F746NG=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_USART=y + +# +# 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 + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f746-st-disco/.gitignore b/bsp/stm32/stm32f746-st-disco/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f746-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/stm32f746-st-disco/Kconfig b/bsp/stm32/stm32f746-st-disco/Kconfig new file mode 100644 index 0000000000..d174bcc585 --- /dev/null +++ b/bsp/stm32/stm32f746-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/stm32f746-st-disco/README.md b/bsp/stm32/stm32f746-st-disco/README.md new file mode 100644 index 0000000000..1d9ad2f316 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/README.md @@ -0,0 +1,107 @@ +# STM32F746-st-disco 开发板 BSP 说明 + +## 简介 + +本文档为 jinsheng 为 STM32F746-disco 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32F746-disco 是 ST 推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为 216Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F746 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f746,主频 216MHz,1MB FLASH ,340KB RAM +- 常用外设 + - LED:1个,LED1(绿色,PI1) + - 按键:2个,Reset 和 User。 +- 调试接口,ST-LINK/V2-1 + +开发板更多详细信息请参考官网 [stm32f746-disco 开发板介绍](https://www.st.com/en/evaluation-tools/32f746gdiscovery.html)。 + +主芯片更多详细信息请参考官网 [stm32f746 芯片资料](https://www.st.com/en/microcontrollers/stm32f746ng.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :------------ | :----------: | :-----------------------------------: | +| GPIO | 支持 | PI1 | +| UART | 支持 | UART1 | +| SD卡 | 暂不支持 | 即将支持 | +| 以太网 | 暂不支持 | 即将支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 st-link 仿真器下载程序,在通过 st-link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,LED 闪烁。 + +连接开发板对应串口到 PC ,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Dec 10 2018 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入 `menuconfig` 命令配置工程,配置好之后保存退出。 + +3. 输入 `pkgs --update` 命令更新软件包。 + +4. 输入 `scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: +- [jinsheng](https://github.com/jinsheng20) diff --git a/bsp/stm32/stm32f746-st-disco/SConscript b/bsp/stm32/stm32f746-st-disco/SConscript new file mode 100644 index 0000000000..fe0ae941ae --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f746-st-disco/SConstruct b/bsp/stm32/stm32f746-st-disco/SConstruct new file mode 100644 index 0000000000..51333e0a9c --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/SConstruct @@ -0,0 +1,47 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +SDK_ROOT = os.path.abspath('./') + +# include drivers +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/STM32F7xx_HAL/SConscript')) + +# include libraries +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/HAL_Drivers/SConscript')) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f746-st-disco/applications/SConscript b/bsp/stm32/stm32f746-st-disco/applications/SConscript new file mode 100644 index 0000000000..6f66f7ab73 --- /dev/null +++ b/bsp/stm32/stm32f746-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/stm32f746-st-disco/applications/main.c b/bsp/stm32/stm32f746-st-disco/applications/main.c new file mode 100644 index 0000000000..ac6b12ff9e --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-06 jinsheng first version + */ + +#include +#include +#include +#include "drv_gpio.h" +/* defined the LED1 pin: PI1 */ +#define LED1_PIN GET_PIN(I, 1) + +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/stm32f746-st-disco/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..4c4aaefcec --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=E:/rt-thread/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc +HeaderFiles=stm32f7xx_it.h;stm32f7xx_hal_conf.h;main.h; +SourcePath=E:/rt-thread/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src +SourceFiles=stm32f7xx_it.c;stm32f7xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/system_stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f7xx_it.c;..\Src\stm32f7xx_hal_msp.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;null; +HeaderPath=..\Drivers\STM32F7xx_HAL_Driver\Inc;..\Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F7xx\Include;..\Drivers\CMSIS\Include;..\Inc; + diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..26a4acd161 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,155 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SYS +Mcu.IP4=USART1 +Mcu.IPNb=5 +Mcu.Name=STM32F746NGHx +Mcu.Package=TFBGA216 +Mcu.Pin0=PA14 +Mcu.Pin1=PA13 +Mcu.Pin2=PB7 +Mcu.Pin3=PC14/OSC32_IN +Mcu.Pin4=PA9 +Mcu.Pin5=PC15/OSC32_OUT +Mcu.Pin6=PH0/OSC_IN +Mcu.Pin7=PH1/OSC_OUT +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F746NGHx +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB7.Mode=Asynchronous +PB7.Signal=USART1_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=STM32F7x6 +PCC.MCU=STM32F746NGHx +PCC.PartNumber=STM32F746NGHx +PCC.Seq0=0 +PCC.Series=STM32F7 +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=STM32F746NGHx +ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.14.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_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.AHBFreq_Value=216000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=54000000 +RCC.APB1TimFreq_Value=108000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=108000000 +RCC.APB2TimFreq_Value=216000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=216000000 +RCC.EthernetFreq_Value=216000000 +RCC.FCLKCortexFreq_Value=216000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=216000000 +RCC.HSE_VALUE=25000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=54000000 +RCC.I2C2Freq_Value=54000000 +RCC.I2C3Freq_Value=54000000 +RCC.I2C4Freq_Value=54000000 +RCC.I2SFreq_Value=96000000 +RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LCDTFToutputFreq_Value,LPTIM1Freq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PLLSourceVirtual,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value +RCC.LCDTFToutputFreq_Value=48000000 +RCC.LPTIM1Freq_Value=54000000 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=216000000 +RCC.PLLCLKFreq_Value=216000000 +RCC.PLLI2SPCLKFreq_Value=96000000 +RCC.PLLI2SQCLKFreq_Value=96000000 +RCC.PLLI2SRCLKFreq_Value=96000000 +RCC.PLLI2SRoutputFreq_Value=96000000 +RCC.PLLM=25 +RCC.PLLN=432 +RCC.PLLQCLKFreq_Value=216000000 +RCC.PLLQoutputFreq_Value=216000000 +RCC.PLLSAIPCLKFreq_Value=96000000 +RCC.PLLSAIQCLKFreq_Value=96000000 +RCC.PLLSAIRCLKFreq_Value=96000000 +RCC.PLLSAIoutputFreq_Value=96000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RNGFreq_Value=216000000 +RCC.SAI1Freq_Value=96000000 +RCC.SAI2Freq_Value=96000000 +RCC.SDMMCFreq_Value=216000000 +RCC.SPDIFRXFreq_Value=96000000 +RCC.SYSCLKFreq_VALUE=216000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.UART4Freq_Value=54000000 +RCC.UART5Freq_Value=54000000 +RCC.UART7Freq_Value=54000000 +RCC.UART8Freq_Value=54000000 +RCC.USART1Freq_Value=108000000 +RCC.USART2Freq_Value=54000000 +RCC.USART3Freq_Value=54000000 +RCC.USART6Freq_Value=108000000 +RCC.USBFreq_Value=216000000 +RCC.VCOI2SOutputFreq_Value=192000000 +RCC.VCOInputFreq_Value=1000000 +RCC.VCOOutputFreq_Value=432000000 +RCC.VCOSAIOutputFreq_Value=192000000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..03c0f13fc7 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,91 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_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/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h new file mode 100644 index 0000000000..c1594b10b1 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -0,0 +1,455 @@ +/** + ****************************************************************************** + * @file stm32f7xx_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 __STM32F7xx_HAL_CONF_H +#define __STM32F7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_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_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_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_SPDIFRX_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_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_I2C_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)25000000U) /*!< 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 Internal oscillator 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 0U +#define ART_ACCLERATOR_ENABLE 0U /* To enable instruction cache and prefetch */ + +/* ########################## 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 "stm32f7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f7xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32f7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32f7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f7xx_hal_smbus.h" +#endif /* HAL_SMBUS_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 /* __STM32F7xx_HAL_CONF_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h new file mode 100644 index 0000000000..a398e3c63b --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Inc/stm32f7xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F7xx_IT_H +#define __STM32F7xx_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 /* __STM32F7xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..98a5c999a1 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/main.c @@ -0,0 +1,271 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + /**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 = 25; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 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_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_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/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c new file mode 100644 index 0000000000..4204500b71 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -0,0 +1,182 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f7xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_RCC_SYSCFG_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==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB7 ------> USART1_RX + PA9 ------> USART1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ + +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PB7 ------> USART1_RX + PA9 ------> USART1_TX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c new file mode 100644 index 0000000000..59f6002ae1 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/stm32f7xx_it.c @@ -0,0 +1,217 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f7xx_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-M7 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 */ +} + +/******************************************************************************/ +/* STM32F7xx 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_stm32f7xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/system_stm32f7xx.c b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/system_stm32f7xx.c new file mode 100644 index 0000000000..cb4e56623f --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/CubeMX_Config/Src/system_stm32f7xx.c @@ -0,0 +1,278 @@ +/** + ****************************************************************************** + * @file system_stm32f7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M7 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_stm32f7xx.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 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f7xx_system + * @{ + */ + +/** @addtogroup STM32F7xx_System_Private_Includes + * @{ + */ + +#include "stm32f7xx.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 STM32F7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ + +/*!< 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 STM32F7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_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 STM32F7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @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; + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = RAMDTCM_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 stm32f7xx_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 stm32f7xx_hal_conf.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, 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; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-disco/board/Kconfig b/bsp/stm32/stm32f746-st-disco/board/Kconfig new file mode 100644 index 0000000000..425b47cd47 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/Kconfig @@ -0,0 +1,45 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F746NG + bool + select SOC_SERIES_STM32F7 + default y + +menu "Onboard Peripheral Drivers" + config BSP_USING_USB_TO_USART + bool "Enable USB TO USART (uart1)" + select BSP_USING_UART + select BSP_USING_UART1 + default y + +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 + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f746-st-disco/board/SConscript b/bsp/stm32/stm32f746-st-disco/board/SConscript new file mode 100644 index 0000000000..1ba1cc5d9a --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/SConscript @@ -0,0 +1,27 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32f7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +if rtconfig.CROSS_TOOL == 'gcc': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/gcc/startup_stm32f746xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/arm/startup_stm32f746xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/iar/startup_stm32f746xx.s'] + +# STM32F756xx || STM32F746xx || STM32F745xx || STM32F767xx || +# STM32F769xx || STM32F777xx || STM32F779xx || STM32F722xx || +# STM32F723xx || STM32F732xx || STM32F733xx || STM32F730xx || STM32F750xx +# You can select chips from the list above +CPPDEFINES = ['STM32F746xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') \ No newline at end of file diff --git a/bsp/stm32/stm32f746-st-disco/board/board.c b/bsp/stm32/stm32f746-st-disco/board/board.c new file mode 100644 index 0000000000..71d83a3f83 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/board.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-06 jinsheng first version + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {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 = 25; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 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_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f746-st-disco/board/board.h b/bsp/stm32/stm32f746-st-disco/board/board.h new file mode 100644 index 0000000000..e8f5a1a96c --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-06 jinsheng first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (1024 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (320) +#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); + +#endif + diff --git a/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.icf b/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.icf new file mode 100644 index 0000000000..bfcc26a0cb --- /dev/null +++ b/bsp/stm32/stm32f746-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__ = 0x080FFFFF; +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}; \ No newline at end of file diff --git a/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.lds b/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.lds new file mode 100644 index 0000000000..83adc09622 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.lds @@ -0,0 +1,144 @@ +/* + * linker script for STM32F7xx with GNU ld + * jinsheng 2019-01-06 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 320k /* 320 K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.sct b/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.sct new file mode 100644 index 0000000000..37a465fb5c --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00050000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f746-st-disco/figures/board.jpg b/bsp/stm32/stm32f746-st-disco/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1834673fec64bd9e4380674cef652d71135d273c GIT binary patch literal 380301 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≪p7M7{_04ktP<;p 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 Je}nrv{||SEgy#SN literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32f746-st-disco/project.ewd b/bsp/stm32/stm32f746-st-disco/project.ewd new file mode 100644 index 0000000000..0947039ad1 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/project.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-disco/project.ewp b/bsp/stm32/stm32f746-st-disco/project.ewp new file mode 100644 index 0000000000..c25fbcb5e0 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/project.ewp @@ -0,0 +1,2263 @@ + + 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\stm32f7xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\iar\startup_stm32f746xx.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 + + + + CORTEX-M7 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f746-st-disco/project.eww b/bsp/stm32/stm32f746-st-disco/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f746-st-disco/project.uvoptx b/bsp/stm32/stm32f746-st-disco/project.uvoptx new file mode 100644 index 0000000000..b420799f3e --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/project.uvoptx @@ -0,0 +1,1029 @@ + + + + 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 + + 216000000 + + 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 + BSP User Manual (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\Drivers\BSP\STM32746G-Discovery\STM32746G-Discovery_BSP_User_Manual.chm + + + 1 + BSP User Manual (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\Drivers\BSP\STM32756G_EVAL\STM32756G_EVAL_BSP_User_Manual.chm + + + 2 + User Manual (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\DM00188617.pdf + + + 3 + STM32F756G-Eval Quick Start Guide (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\STM32F756G-EVAL_QSG.pdf + + + 4 + Bill of Materials (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_bom.zip + + + 5 + Gerber Files (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_gerber.zip + + + 6 + Schematics (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_sch.zip + + + 7 + STM32F746G-Discovery Quick Start Guide (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\32F746GDISCOVERY_QSG.pdf + + + 8 + User Manual (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\DM00190424.pdf + + + 9 + Bill of Materials (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_bom.zip + + + 10 + Gerber Files (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_gerber.zip + + + 11 + Schematics (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_sch.zip + + + 12 + STM32F746G_Discovery Web Page (STM32F746G-Discovery) + http://www.st.com/en/evaluation-tools/32f746gdiscovery.html + + + 13 + STM32756G_EVAL Evaluation Board Web Page (STM32756G-EVAL) + http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1199/PF261640 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 5 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U0670FF505356867767062043 -O206 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F767BGTx$CMSIS\Flash\STM32F7x_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 + 0 + + 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 + 0 + 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\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f746xx.s + startup_stm32f746xx.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 + + + + + CORTEX-M7 + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 7 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + stm32f7xx_hal.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-disco/project.uvprojx b/bsp/stm32/stm32f746-st-disco/project.uvprojx new file mode 100644 index 0000000000..c3e5b927f7 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/project.uvprojx @@ -0,0 +1,718 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060422::V5.06 update 4 (build 422)::ARMCC + + + STM32F746NGHx + STMicroelectronics + Keil.STM32F7xx_DFP.2.9.0 + http://www.keil.com/pack + IRAM(0x20010000,0x40000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM)) + 0 + $$Device:STM32F746NGHx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746NGHx$CMSIS\SVD\STM32F7x6_v1r1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 1 + 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 + 0x20010000 + 0x40000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 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 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F746xx + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\cortex-m7;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Inc;..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Include;..\libraries\STM32F7xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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 + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + startup_stm32f746xx.s + 2 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f746xx.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 + + + + + CORTEX-M7 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + + + STM32_HAL + + + system_stm32f7xx.c + 1 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_cec.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cortex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_crc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_cryp.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_dma_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_pwr.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rcc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_rng.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_sram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_gpio.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_uart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_usart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + + + + + +
diff --git a/bsp/stm32/stm32f746-st-disco/rtconfig.h b/bsp/stm32/stm32f746-st-disco/rtconfig.h new file mode 100644 index 0000000000..8812d515df --- /dev/null +++ b/bsp/stm32/stm32f746-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 + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40000 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* ARM CMSIS */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* sample package */ + +/* samples: kernel and components samples */ + + +/* example package: hello */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F7 + +/* Hardware Drivers Config */ + +#define SOC_STM32F746NG + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f746-st-disco/rtconfig.py b/bsp/stm32/stm32f746-st-disco/rtconfig.py new file mode 100644 index 0000000000..dbe66205eb --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/rtconfig.py @@ -0,0 +1,144 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +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 = '/usr/local/Cellar/arm-none-eabi-gcc/7-2017-q4-major/gcc/bin/' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + STRIP = PREFIX + 'strip' + + DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -g -Wall' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2 -Os' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + + # module setting + CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti ' + M_CFLAGS = CFLAGS + ' -mlong-calls -fPIC ' + M_CXXFLAGS = CXXFLAGS + ' -mlong-calls -fPIC' + M_LFLAGS = DEVICE + CXXFLAGS + ' -Wl,--gc-sections,-z,max-page-size=0x4' +\ + ' -shared -fPIC -nostartfiles -static-libgcc' + M_POST_ACTION = STRIP + ' -R .hash $TARGET\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp --fpu=FPv4-SP' + CFLAGS = DEVICE + ' --apcs=interwork ' + AFLAGS = DEVICE + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread.map --scatter rtthread.sct' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/INC' + LFLAGS += ' --libpath "' + EXEC_PATH + '/ARM/ARMCC/lib"' + + EXEC_PATH += '/arm/bin40/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2 -Otime' + + CXXFLAGS = CFLAGS + 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 = '' + + 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 += ' --debug' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' -Ol' + CFLAGS += ' --use_c++_inline' + CFLAGS += ' --silent' + + AFLAGS = '' + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + LFLAGS = ' --config rtthread.icf' + LFLAGS += ' --redirect _Printf=_PrintfTiny' + LFLAGS += ' --redirect _Scanf=_ScanfSmall' + LFLAGS += ' --entry __iar_program_start' + LFLAGS += ' --silent' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = '' diff --git a/bsp/stm32/stm32f746-st-disco/template.ewd b/bsp/stm32/stm32f746-st-disco/template.ewd new file mode 100644 index 0000000000..191c0b5817 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/template.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-disco/template.ewp b/bsp/stm32/stm32f746-st-disco/template.ewp new file mode 100644 index 0000000000..9fada43dfd --- /dev/null +++ b/bsp/stm32/stm32f746-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/stm32f746-st-disco/template.eww b/bsp/stm32/stm32f746-st-disco/template.eww new file mode 100644 index 0000000000..59608f6e4a --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/template.eww @@ -0,0 +1,10 @@ + + + + $WS_DIR$\project.ewp + + + $WS_DIR$\template.ewp + + + diff --git a/bsp/stm32/stm32f746-st-disco/template.uvoptx b/bsp/stm32/stm32f746-st-disco/template.uvoptx new file mode 100644 index 0000000000..d855f10c81 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/template.uvoptx @@ -0,0 +1,256 @@ + + + + 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 + + 216000000 + + 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 + BSP User Manual (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\Drivers\BSP\STM32746G-Discovery\STM32746G-Discovery_BSP_User_Manual.chm + + + 1 + BSP User Manual (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\Drivers\BSP\STM32756G_EVAL\STM32756G_EVAL_BSP_User_Manual.chm + + + 2 + User Manual (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\DM00188617.pdf + + + 3 + STM32F756G-Eval Quick Start Guide (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\STM32F756G-EVAL_QSG.pdf + + + 4 + Bill of Materials (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_bom.zip + + + 5 + Gerber Files (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_gerber.zip + + + 6 + Schematics (STM32756G-EVAL) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32756G_EVAL\Documentation\stm327x6g-eval_sch.zip + + + 7 + STM32F746G-Discovery Quick Start Guide (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\32F746GDISCOVERY_QSG.pdf + + + 8 + User Manual (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\DM00190424.pdf + + + 9 + Bill of Materials (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_bom.zip + + + 10 + Gerber Files (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_gerber.zip + + + 11 + Schematics (STM32F746G-Discovery) + D:\Keil_v5\ARM\PACK\Keil\STM32F7xx_DFP\2.9.0\MDK\Boards\ST\STM32F746G_Discovery\Documentation\stm32f746g-disco_sch.zip + + + 12 + STM32F746G_Discovery Web Page (STM32F746G-Discovery) + http://www.st.com/en/evaluation-tools/32f746gdiscovery.html + + + 13 + STM32756G_EVAL Evaluation Board Web Page (STM32756G-EVAL) + http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1199/PF261640 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 5 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F767BGTx$CMSIS\Flash\STM32F7x_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 + 0 + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f746-st-disco/template.uvprojx b/bsp/stm32/stm32f746-st-disco/template.uvprojx new file mode 100644 index 0000000000..0925446519 --- /dev/null +++ b/bsp/stm32/stm32f746-st-disco/template.uvprojx @@ -0,0 +1,386 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + + + STM32F746NGHx + STMicroelectronics + Keil.STM32F7xx_DFP.2.9.0 + http://www.keil.com/pack + IRAM(0x20010000,0x40000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM)) + 0 + $$Device:STM32F746NGHx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746NGHx$CMSIS\SVD\STM32F7x6_v1r1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 1 + 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 + 0x20010000 + 0x40000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 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 + 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 de624c52c140f9b6e6d782025398b0c0a250d666 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 11:23:08 +0800 Subject: [PATCH 03/26] [Kernel] Enable RUNNING status in thread. --- src/scheduler.c | 13 +++++++++---- src/thread.c | 14 +++++++++----- src/timer.c | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/scheduler.c b/src/scheduler.c index 850c70306d..0ced21105e 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -265,6 +265,7 @@ void rt_system_scheduler_start(void) #endif /*RT_USING_SMP*/ rt_schedule_remove_thread(to_thread); + to_thread->stat = RT_THREAD_RUNNING; /* switch to new thread */ #ifdef RT_USING_SMP @@ -311,7 +312,7 @@ void rt_schedule(void) int cpu_id; /* disable interrupt */ - level = rt_hw_interrupt_disable(); + level = rt_hw_interrupt_disable(); cpu_id = rt_hw_cpu_id(); pcpu = rt_cpu_index(cpu_id); @@ -330,7 +331,7 @@ void rt_schedule(void) { to_thread = _get_highest_priority_thread(&highest_ready_priority); current_thread->oncpu = RT_CPU_DETACHED; - if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_READY) + if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING) { if (current_thread->current_priority < highest_ready_priority) { @@ -350,6 +351,7 @@ void rt_schedule(void) RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (current_thread, to_thread)); rt_schedule_remove_thread(to_thread); + to_thread->stat = RT_THREAD_RUNNING; /* switch to new thread */ RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, @@ -414,7 +416,7 @@ void rt_schedule(void) to_thread = _get_highest_priority_thread(&highest_ready_priority); - if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_READY) + if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING) { if (rt_current_thread->current_priority < highest_ready_priority) { @@ -441,6 +443,7 @@ void rt_schedule(void) } rt_schedule_remove_thread(to_thread); + to_thread->stat = RT_THREAD_RUNNING; /* switch to new thread */ RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, @@ -482,6 +485,7 @@ void rt_schedule(void) else { rt_schedule_remove_thread(rt_current_thread); + rt_current_thread->stat = RT_THREAD_RUNNING; } } } @@ -531,7 +535,7 @@ void rt_scheduler_do_irq_switch(void *context) { to_thread = _get_highest_priority_thread(&highest_ready_priority); current_thread->oncpu = RT_CPU_DETACHED; - if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_READY) + if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING) { if (current_thread->current_priority < highest_ready_priority) { @@ -552,6 +556,7 @@ void rt_scheduler_do_irq_switch(void *context) RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (current_thread, to_thread)); rt_schedule_remove_thread(to_thread); + to_thread->stat = RT_THREAD_RUNNING; #ifdef RT_USING_OVERFLOW_CHECK _rt_scheduler_stack_check(to_thread); diff --git a/src/thread.c b/src/thread.c index df9f151834..b23d2fb6b9 100644 --- a/src/thread.c +++ b/src/thread.c @@ -655,6 +655,7 @@ RTM_EXPORT(rt_thread_control); */ rt_err_t rt_thread_suspend(rt_thread_t thread) { + register rt_base_t stat; register rt_base_t temp; /* thread check */ @@ -663,22 +664,25 @@ rt_err_t rt_thread_suspend(rt_thread_t thread) RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread suspend: %s\n", thread->name)); - if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_READY) + stat = thread->stat & RT_THREAD_STAT_MASK; + if ((stat != RT_THREAD_READY) && (stat != RT_THREAD_RUNNING)) { RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread suspend: thread disorder, 0x%2x\n", thread->stat)); - return -RT_ERROR; } - RT_ASSERT(thread == rt_thread_self()); - /* disable interrupt */ temp = rt_hw_interrupt_disable(); + if (stat == RT_THREAD_RUNNING) + { + /* not suspend running status thread on other core */ + RT_ASSERT(thread == rt_thread_self()); + } /* change thread stat */ - thread->stat = RT_THREAD_SUSPEND | (thread->stat & ~RT_THREAD_STAT_MASK); rt_schedule_remove_thread(thread); + thread->stat = RT_THREAD_SUSPEND | (thread->stat & ~RT_THREAD_STAT_MASK); /* stop thread timer anyway */ rt_timer_stop(&(thread->thread_timer)); diff --git a/src/timer.c b/src/timer.c index fd938065db..3992cf6ff4 100644 --- a/src/timer.c +++ b/src/timer.c @@ -399,7 +399,7 @@ rt_err_t rt_timer_start(rt_timer_t timer) if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) { /* check whether timer thread is ready */ - if ((timer_thread.stat & RT_THREAD_STAT_MASK) != RT_THREAD_READY) + if ((timer_thread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND) { /* resume timer thread to check soft timer */ rt_thread_resume(&timer_thread); From 8f0d8658b737367e199aedb3c5fa9dce82330f5d Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 11:28:50 +0800 Subject: [PATCH 04/26] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a82fe6a2bf..32b69a3adf 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,10 +1,15 @@ ## 拉取/合并请求描述:(PR description) -请仔细阅读以下文字。请在这里填写您的PR描述,可以包括以下之一的内容:为什么提交这份PR;解决的问题是什么,你的解决方案是什么; -Please read the following carefully. Please fill in your PR description here, which can include one of the following items: why to submit this PR; what is the problem solved and what is your solution; +[ +这段方括号里的内容是您必须填写并替换掉的,否则PR不可能被合并。方括号外面的内容不需要修改,但请仔细阅读。 +The content in this square bracket must be filled in and replaced, otherwise PR can not be merged. The contents outside square brackets need not be changed, but please read them carefully. -并确认已经在什么情况或板卡上进行了测试。 +请在这里填写您的PR描述,可以包括以下之一的内容:为什么提交这份PR;解决的问题是什么,你的解决方案是什么; +Please fill in your PR description here, which can include one of the following items: why to submit this PR; what is the problem solved and what is your solution; + +并确认并列出已经在什么情况或板卡上进行了测试。 And confirm in which case or board have been tested. +] 以下的内容请在提交PR后,一项项进行check,没问题后逐条在页面上打钩。 The following contents should be checked item by item after submitted PR, and ticked on the browser one by one after no problem. From c2a85453b3452b3456d13d0a4fa4b3841a58cb17 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 14:22:13 +0800 Subject: [PATCH 05/26] [finsh] Add RUNNING stat in thread --- components/finsh/cmd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/finsh/cmd.c b/components/finsh/cmd.c index 2276fad302..0a30aee809 100644 --- a/components/finsh/cmd.c +++ b/components/finsh/cmd.c @@ -214,6 +214,7 @@ long list_thread(void) else if (stat == RT_THREAD_SUSPEND) rt_kprintf(" suspend"); else if (stat == RT_THREAD_INIT) rt_kprintf(" init "); else if (stat == RT_THREAD_CLOSE) rt_kprintf(" close "); + else if (stat == RT_THREAD_RUNNING) rt_kprintf(" running"); #if defined(ARCH_CPU_STACK_GROWS_UPWARD) ptr = (rt_uint8_t *)thread->stack_addr + thread->stack_size - 1; From bd7ebbf17b3b8c28fcf8c797a6e29bc78e220157 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 14:24:00 +0800 Subject: [PATCH 06/26] [DFS][romfs] fix the mkrom issue when file/dir size zero --- components/dfs/filesystems/romfs/dfs_romfs.h | 8 ++++---- .../dfs/filesystems/romfs => tools}/mkromfs.py | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) rename {components/dfs/filesystems/romfs => tools}/mkromfs.py (93%) diff --git a/components/dfs/filesystems/romfs/dfs_romfs.h b/components/dfs/filesystems/romfs/dfs_romfs.h index 74b256c8a6..05d2906449 100644 --- a/components/dfs/filesystems/romfs/dfs_romfs.h +++ b/components/dfs/filesystems/romfs/dfs_romfs.h @@ -17,11 +17,11 @@ struct romfs_dirent { - rt_uint32_t type; /* dirent type */ + rt_uint32_t type; /* dirent type */ - const char *name; /* dirent name */ - const rt_uint8_t *data; /* file date ptr */ - rt_size_t size; /* file size */ + const char *name; /* dirent name */ + const rt_uint8_t *data; /* file date ptr */ + rt_size_t size; /* file size */ }; int dfs_romfs_init(void); diff --git a/components/dfs/filesystems/romfs/mkromfs.py b/tools/mkromfs.py similarity index 93% rename from components/dfs/filesystems/romfs/mkromfs.py rename to tools/mkromfs.py index f3c12876d2..5371106987 100644 --- a/components/dfs/filesystems/romfs/mkromfs.py +++ b/tools/mkromfs.py @@ -40,6 +40,10 @@ class File(object): head = 'static const rt_uint8_t %s[] = {\n' % \ (prefix + self.c_name) tail = '\n};' + + if self.entry_size == 0: + return '' + return head + ','.join(('0x%02x' % ord(i) for i in self._data)) + tail @property @@ -118,23 +122,31 @@ class Folder(object): It is recursive.''' # make the current dirent # static is good. Only root dirent is global visible. + if self.entry_size == 0: + return '' + dhead = 'static const struct romfs_dirent %s[] = {\n' % (prefix + self.c_name) dtail = '\n};' body_fmt = ' {{{type}, "{name}", (rt_uint8_t *){data}, sizeof({data})/sizeof({data}[0])}}' + body_fmt0= ' {{{type}, "{name}", RT_NULL, 0}}' # prefix of children cpf = prefix+self.c_name body_li = [] payload_li = [] for c in self._children: + entry_size = c.entry_size if isinstance(c, File): tp = 'ROMFS_DIRENT_FILE' elif isinstance(c, Folder): tp = 'ROMFS_DIRENT_DIR' else: assert False, 'Unkown instance:%s' % str(c) - body_li.append(body_fmt.format(type=tp, - name=c.name, - data=cpf+c.c_name)) + if entry_size == 0: + body_li.append(body_fmt0.format(type=tp, name = c.name)) + else: + body_li.append(body_fmt.format(type=tp, + name=c.name, + data=cpf+c.c_name)) payload_li.append(c.c_data(prefix=cpf)) # All the data we need is defined in payload so we should append the From 711c923614f7526404caec9954c8b541bcee1eb2 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 14:25:52 +0800 Subject: [PATCH 07/26] [lwp] Fix compiling warning in lwP. --- components/lwp/lwp_syscall.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/lwp/lwp_syscall.h b/components/lwp/lwp_syscall.h index 8389835138..a2809059f0 100644 --- a/components/lwp/lwp_syscall.h +++ b/components/lwp/lwp_syscall.h @@ -30,14 +30,19 @@ typedef uint32_t id_t; /* may contain pid, uid or gid */ #define PRIO_PGRP 1 #define PRIO_USER 2 +#ifndef TIMEVAL_TO_TIMESPEC #define TIMEVAL_TO_TIMESPEC(tv, ts) { \ (ts)->tv_sec = (tv)->tv_sec; \ (ts)->tv_nsec = (tv)->tv_usec * 1000; \ } +#endif + +#ifndef TIMESPEC_TO_TIMEVAL #define TIMESPEC_TO_TIMEVAL(tv, ts) { \ (tv)->tv_sec = (ts)->tv_sec; \ (tv)->tv_usec = (ts)->tv_nsec / 1000; \ } +#endif void sys_exit(int value); ssize_t sys_read(int fd, void *buf, size_t nbyte); From 9af2d2935136ef46e9bc455777165934d9df96b3 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 14:31:55 +0800 Subject: [PATCH 08/26] [DFS][romfs] code cleanup --- components/dfs/filesystems/romfs/dfs_romfs.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/components/dfs/filesystems/romfs/dfs_romfs.h b/components/dfs/filesystems/romfs/dfs_romfs.h index 05d2906449..2004e55bc6 100644 --- a/components/dfs/filesystems/romfs/dfs_romfs.h +++ b/components/dfs/filesystems/romfs/dfs_romfs.h @@ -1,10 +1,11 @@ /* - * Copyright (c) 2006-2018, RT-Thread Development Team + * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes + * 2019/01/13 Bernard code cleanup */ #ifndef __DFS_ROMFS_H__ @@ -17,11 +18,11 @@ struct romfs_dirent { - rt_uint32_t type; /* dirent type */ + rt_uint32_t type; /* dirent type */ - const char *name; /* dirent name */ - const rt_uint8_t *data; /* file date ptr */ - rt_size_t size; /* file size */ + const char *name; /* dirent name */ + const rt_uint8_t *data; /* file date ptr */ + rt_size_t size; /* file size */ }; int dfs_romfs_init(void); From b998c4ed8dbf12e0744b7ffee95cb9c1ebcbc108 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sun, 13 Jan 2019 14:33:24 +0800 Subject: [PATCH 09/26] [DFS][romfs] code cleanup --- components/dfs/filesystems/romfs/dfs_romfs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/dfs/filesystems/romfs/dfs_romfs.h b/components/dfs/filesystems/romfs/dfs_romfs.h index 2004e55bc6..efb6d44caf 100644 --- a/components/dfs/filesystems/romfs/dfs_romfs.h +++ b/components/dfs/filesystems/romfs/dfs_romfs.h @@ -18,7 +18,7 @@ struct romfs_dirent { - rt_uint32_t type; /* dirent type */ + rt_uint32_t type; /* dirent type */ const char *name; /* dirent name */ const rt_uint8_t *data; /* file date ptr */ From 5e47dc41b3b28534782ed6f7447e46badae6bb9a Mon Sep 17 00:00:00 2001 From: Noe Xu Date: Mon, 7 Jan 2019 00:27:01 -0800 Subject: [PATCH 10/26] [STM32] Fix issue that CAN driver won't receive any messages once OV iterrupt occurs. Change-Id: I4cd98ca4840f32925e89e8c467ec78e03e9a2836 --- bsp/stm32f4xx-HAL/drivers/drv_can.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bsp/stm32f4xx-HAL/drivers/drv_can.c b/bsp/stm32f4xx-HAL/drivers/drv_can.c index 603a2a745b..c19ce2584e 100644 --- a/bsp/stm32f4xx-HAL/drivers/drv_can.c +++ b/bsp/stm32f4xx-HAL/drivers/drv_can.c @@ -362,12 +362,16 @@ void CAN2_SCE_IRQHandler(void) */ void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) { - /* TODO Error Callback */ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hcan); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_ErrorCallback could be implemented in the user file - */ + __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR | + CAN_IT_FMP0| + CAN_IT_FOV0| + CAN_IT_FMP1| + CAN_IT_FOV1| + CAN_IT_TME); } /** From 52729bb62d126ace0c564268d47ae4232f69e684 Mon Sep 17 00:00:00 2001 From: Noe Xu Date: Sun, 23 Dec 2018 00:50:47 -0800 Subject: [PATCH 11/26] Fix rtthread CAN driver issue. Reset rx tx handler when closing CAN device, Or it will not work after reopening. Change-Id: I43482c21263a989322f8df2ac9349128f7cb630a --- components/drivers/can/can.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/drivers/can/can.c b/components/drivers/can/can.c index e20fcddcff..81fdf25a1e 100644 --- a/components/drivers/can/can.c +++ b/components/drivers/can/can.c @@ -405,6 +405,7 @@ static rt_err_t rt_can_close(struct rt_device *dev) rt_free(rx_fifo); dev->open_flag &= ~RT_DEVICE_FLAG_INT_RX; + can->can_rx = RT_NULL; /* configure low level device */ can->ops->control(can, RT_DEVICE_CTRL_CLR_INT, (void *)RT_DEVICE_FLAG_INT_RX); } @@ -418,6 +419,7 @@ static rt_err_t rt_can_close(struct rt_device *dev) rt_free(tx_fifo); dev->open_flag &= ~RT_DEVICE_FLAG_INT_TX; + can->can_tx = RT_NULL; /* configure low level device */ can->ops->control(can, RT_DEVICE_CTRL_CLR_INT, (void *)RT_DEVICE_FLAG_INT_TX); } From 62efbf86debad867088e96805378e926c005d62f Mon Sep 17 00:00:00 2001 From: SummerGift Date: Mon, 14 Jan 2019 16:31:01 +0800 Subject: [PATCH 12/26] [bsp][stm32] optimize docs --- bsp/stm32/docs/STM32系列BSP制作教程.md | 16 ++++++++-------- .../docs/STM32系列BSP外设驱动使用教程.md | 2 +- bsp/stm32/docs/STM32系列外设驱动添加指南.md | 2 +- bsp/stm32/docs/figures/board_h.png | Bin 68804 -> 43593 bytes 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bsp/stm32/docs/STM32系列BSP制作教程.md b/bsp/stm32/docs/STM32系列BSP制作教程.md index 535aaf55af..a23c77bcc7 100644 --- a/bsp/stm32/docs/STM32系列BSP制作教程.md +++ b/bsp/stm32/docs/STM32系列BSP制作教程.md @@ -204,9 +204,9 @@ BSP 的制作过程分为如下五个步骤: 重新生成工程需要使用 env 工具。 -#### 3.5.1 重新生成 rt_config.h 文件 +#### 3.5.1 重新生成 rtconfig.h 文件 -在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rt_config.h 文件。如下图所示: +在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示: ![输入menuconfig进入配置界面](./figures/menuconfig_1.png) @@ -243,8 +243,7 @@ STM32 BSP 的制作规范主要分为 3 个方面:工程配置,ENV 配置和 - 遵从RT-Thread 编码规范,代码注释风格统一 - main 函数功能保持一致 - - 如果有 LED 的话,main 函数里只放一个 LED 1HZ 闪烁的程序 - - LED_PIN 定义在 board.h,初始化在 board.c 完成 + - 如果有 LED 的话,main 函数里**只放一个** LED 1HZ 闪烁的程序 - 在 `rt_hw_board_init` 中需要完成堆的初始化:调用 `rt_system_heap_init` - 默认只初始化 GPIO 驱动和 FinSH 对应的串口驱动,不使用 DMA - 当使能板载外设驱动时,应做到不需要修改代码就能编译下载使用 @@ -271,10 +270,11 @@ STM32 BSP 的制作规范主要分为 3 个方面:工程配置,ENV 配置和 ### 2. BSP 提交规范 -- 基础 BSP 和驱动应该分开提交 -- 基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台 -- 不同的驱动也要分开提交,方便 review 和合并 -- 只提交 BSP 必要的文件,删除无关的中间文件 +- 提交前请认真修改 BSP 的 README.md 文件,README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档[《STM32系列驱动介绍》](./STM32系列驱动介绍.md)了解驱动分类。 +- 提交 BSP 分为 2 个阶段提交: + - 第一阶段:基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台。完成 MDK4、MDK5 、IAR 和 GCC 编译器支持,如果芯片不支持某款编译器(比如MDK4)可以不用做。 BSP 的 README.md 文件需要填写第二阶段要完成的驱动。 + - 第二阶段:完成板载外设驱动支持,所有板载外设使用 menuconfig 配置后就能直接使用。若开发板没有板载外设,则此阶段可以不用完成。不同的驱动也要分开提交,方便 review 和合并。 +- 只提交 BSP 必要的文件,删除无关的中间文件,能够提交的文件请对照其他 BSP。 - 提交 stm32 不同系列的 Library 库时,请参考 f1/f4 系列的 HAL 库,删除多余库文件 - 提交前要对 BSP 进行编译测试,确保在不同编译器下编译正常 - 提交前要对 BSP 进行功能测试,确保 BSP 的在提交前符合工程配置章节中的要求 \ No newline at end of file diff --git a/bsp/stm32/docs/STM32系列BSP外设驱动使用教程.md b/bsp/stm32/docs/STM32系列BSP外设驱动使用教程.md index 1d1e3c3800..704cb13216 100644 --- a/bsp/stm32/docs/STM32系列BSP外设驱动使用教程.md +++ b/bsp/stm32/docs/STM32系列BSP外设驱动使用教程.md @@ -1,4 +1,4 @@ -# BSP 进阶使用指南 +# BSP 外设驱动使用教程 ## 简介 diff --git a/bsp/stm32/docs/STM32系列外设驱动添加指南.md b/bsp/stm32/docs/STM32系列外设驱动添加指南.md index 883cb3dda4..06df94f7e6 100644 --- a/bsp/stm32/docs/STM32系列外设驱动添加指南.md +++ b/bsp/stm32/docs/STM32系列外设驱动添加指南.md @@ -37,7 +37,7 @@ > 为 BSP 添加驱动时,STM32CubeMX 工具可以快速的完成**使能外设**和**配置管脚**的工作。而外设初始化,中断配置,DMA配置等等则由 RT-Thread 提供的驱动文件来完成。也就是说,虽然 STM32CubeMX 生成了多个文件用来初始化外设,但 RT-Thread 只使用了 STM32CubeMX 生成的 `stm32fxx_hal_msp.c` 文件和 `stm32fxx_hal_conf.h` 文件。 > -> 对于不同的外设驱动,通过 STM32CubeMX 工具配置的内容也不一样。开发者可以参考本文档的附录 [CubeMX配置说明]() 章节来了解不同外设的配置方法。 +> 对于不同的外设驱动,通过 STM32CubeMX 工具配置的内容也不一样。开发者可以参考本文档的附录 CubeMX 配置说明章节来了解不同外设的配置方法。 ### 3)修改 Kconfig 文件 diff --git a/bsp/stm32/docs/figures/board_h.png b/bsp/stm32/docs/figures/board_h.png index b6f416f592c112e0836945d3ceabb039dde60550..b6fecf41796029c7261fedf9e19a8fc938befed8 100644 GIT binary patch literal 43593 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

#PNH8I4_L=p`7#XWOW~Jp@bF%R+mlcay=zX>E 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 Jm6X}L{{teJDCqzI literal 68804 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�rr}FqiAMS$Y=C+n3q2H(M;v^>jv=hwulgZ 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 From 0d7ac3448f4f00e678e9d6f0bc25be922d829d68 Mon Sep 17 00:00:00 2001 From: SummerGift Date: Mon, 14 Jan 2019 16:37:29 +0800 Subject: [PATCH 13/26] [bsp][stm32] add lcd driver --- bsp/stm32/libraries/HAL_Drivers/SConscript | 3 + bsp/stm32/libraries/HAL_Drivers/drv_lcd.c | 398 +++++++++++++++++++ bsp/stm32/libraries/HAL_Drivers/drv_sdram.c | 2 +- bsp/stm32/libraries/STM32F4xx_HAL/SConscript | 11 +- 4 files changed, 411 insertions(+), 3 deletions(-) create mode 100644 bsp/stm32/libraries/HAL_Drivers/drv_lcd.c diff --git a/bsp/stm32/libraries/HAL_Drivers/SConscript b/bsp/stm32/libraries/HAL_Drivers/SConscript index 73dc24ca6a..e84ae79a9b 100644 --- a/bsp/stm32/libraries/HAL_Drivers/SConscript +++ b/bsp/stm32/libraries/HAL_Drivers/SConscript @@ -41,6 +41,9 @@ if GetDepend(['RT_USING_ADC']): if GetDepend('BSP_USING_SDRAM'): src += ['drv_sdram.c'] +if GetDepend('BSP_USING_LCD'): + src += ['drv_lcd.c'] + if GetDepend('BSP_USING_ONCHIP_RTC'): src += ['drv_rtc.c'] diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_lcd.c b/bsp/stm32/libraries/HAL_Drivers/drv_lcd.c new file mode 100644 index 0000000000..29a41bf0c1 --- /dev/null +++ b/bsp/stm32/libraries/HAL_Drivers/drv_lcd.c @@ -0,0 +1,398 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-08 zylx first version + */ + +#include +#include +#include + +#ifdef BSP_USING_LCD +#include +#include +#include "drv_gpio.h" + +//#define DRV_DEBUG +#define LOG_TAG "drv.lcd" +#include + +#define LCD_DEVICE(dev) (struct drv_lcd_device*)(dev) + +static LTDC_HandleTypeDef LtdcHandle = {0}; + +struct drv_lcd_device +{ + struct rt_device parent; + + struct rt_device_graphic_info lcd_info; + + struct rt_semaphore lcd_lock; + + /* 0:front_buf is being used 1: back_buf is being used*/ + rt_uint8_t cur_buf; + rt_uint8_t *front_buf; + rt_uint8_t *back_buf; +}; + +struct drv_lcd_device _lcd; + +static rt_err_t drv_lcd_init(struct rt_device *device) +{ + struct drv_lcd_device *lcd = LCD_DEVICE(device); + /* nothing, right now */ + lcd = lcd; + return RT_EOK; +} + +static rt_err_t drv_lcd_control(struct rt_device *device, int cmd, void *args) +{ + struct drv_lcd_device *lcd = LCD_DEVICE(device); + + switch (cmd) + { + case RTGRAPHIC_CTRL_RECT_UPDATE: + { + /* update */ + if (_lcd.cur_buf) + { + /* back_buf is being used */ + memcpy(_lcd.front_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE); + /* Configure the color frame buffer start address */ + LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); + LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.front_buf); + _lcd.cur_buf = 0; + } + else + { + /* front_buf is being used */ + memcpy(_lcd.back_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE); + /* Configure the color frame buffer start address */ + LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); + LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.back_buf); + _lcd.cur_buf = 1; + } + rt_sem_take(&_lcd.lcd_lock, RT_TICK_PER_SECOND / 20); + HAL_LTDC_Relaod(&LtdcHandle, LTDC_SRCR_VBR); + } + break; + + case RTGRAPHIC_CTRL_GET_INFO: + { + struct rt_device_graphic_info *info = (struct rt_device_graphic_info *)args; + + RT_ASSERT(info != RT_NULL); + info->pixel_format = lcd->lcd_info.pixel_format; + info->bits_per_pixel = 16; + info->width = lcd->lcd_info.width; + info->height = lcd->lcd_info.height; + info->framebuffer = lcd->lcd_info.framebuffer; + } + break; + } + + return RT_EOK; +} + +void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc) +{ + /* emable line interupt */ + __HAL_LTDC_ENABLE_IT(&LtdcHandle, LTDC_IER_LIE); +} + +void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc) +{ + rt_sem_release(&_lcd.lcd_lock); +} + +void LTDC_IRQHandler(void) +{ + rt_enter_critical(); + + HAL_LTDC_IRQHandler(&LtdcHandle); + + rt_exit_critical(); +} + +rt_err_t stm32_lcd_init(struct drv_lcd_device *lcd) +{ + LTDC_LayerCfgTypeDef pLayerCfg = {0}; + + /* LTDC Initialization -------------------------------------------------------*/ + + /* Polarity configuration */ + /* Initialize the horizontal synchronization polarity as active low */ + LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; + /* Initialize the vertical synchronization polarity as active low */ + LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; + /* Initialize the data enable polarity as active low */ + LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; + /* Initialize the pixel clock polarity as input pixel clock */ + LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + + /* Timing configuration */ + /* Horizontal synchronization width = Hsync - 1 */ + LtdcHandle.Init.HorizontalSync = LCD_HSYNC_WIDTH - 1; + /* Vertical synchronization height = Vsync - 1 */ + LtdcHandle.Init.VerticalSync = LCD_VSYNC_HEIGHT - 1; + /* Accumulated horizontal back porch = Hsync + HBP - 1 */ + LtdcHandle.Init.AccumulatedHBP = LCD_HSYNC_WIDTH + LCD_HBP - 1; + /* Accumulated vertical back porch = Vsync + VBP - 1 */ + LtdcHandle.Init.AccumulatedVBP = LCD_VSYNC_HEIGHT + LCD_VBP - 1; + /* Accumulated active width = Hsync + HBP + Active Width - 1 */ + LtdcHandle.Init.AccumulatedActiveW = LCD_HSYNC_WIDTH + LCD_HBP + lcd->lcd_info.width - 1 ; + /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ + LtdcHandle.Init.AccumulatedActiveH = LCD_VSYNC_HEIGHT + LCD_VBP + lcd->lcd_info.height - 1; + /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ + LtdcHandle.Init.TotalHeigh = LtdcHandle.Init.AccumulatedActiveH + LCD_VFP; + /* Total width = Hsync + HBP + Active Width + HFP - 1 */ + LtdcHandle.Init.TotalWidth = LtdcHandle.Init.AccumulatedActiveW + LCD_HFP; + + /* Configure R,G,B component values for LCD background color */ + LtdcHandle.Init.Backcolor.Blue = 0; + LtdcHandle.Init.Backcolor.Green = 0; + LtdcHandle.Init.Backcolor.Red = 0; + + LtdcHandle.Instance = LTDC; + + /* Layer1 Configuration ------------------------------------------------------*/ + + /* Windowing configuration */ + pLayerCfg.WindowX0 = 0; + pLayerCfg.WindowX1 = lcd->lcd_info.width; + pLayerCfg.WindowY0 = 0; + pLayerCfg.WindowY1 = lcd->lcd_info.height; + + /* Pixel Format configuration*/ + if (lcd->lcd_info.pixel_format == RTGRAPHIC_PIXEL_FORMAT_RGB565) + { + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; + } + else if (lcd->lcd_info.pixel_format == RTGRAPHIC_PIXEL_FORMAT_ARGB888) + { + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + } + else if (lcd->lcd_info.pixel_format == RTGRAPHIC_PIXEL_FORMAT_RGB888) + { + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB888; + } + else if (lcd->lcd_info.pixel_format == RTGRAPHIC_PIXEL_FORMAT_RGB888) + { + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB888; + } + else + { + LOG_E("unsupported pixel format"); + return -RT_ERROR; + } + + /* Start Address configuration : frame buffer is located at FLASH memory */ + pLayerCfg.FBStartAdress = (uint32_t)lcd->front_buf; + + /* Alpha constant (255 totally opaque) */ + pLayerCfg.Alpha = 255; + + /* Default Color configuration (configure A,R,G,B component values) */ + pLayerCfg.Alpha0 = 255; + pLayerCfg.Backcolor.Blue = 0; + pLayerCfg.Backcolor.Green = 0; + pLayerCfg.Backcolor.Red = 0; + + /* Configure blending factors */ + /* Constant Alpha value: pLayerCfg.Alpha / 255 + C: Current Layer Color + Cs: Background color + BC = Constant Alpha x C + (1 - Constant Alpha ) x Cs */ + /* BlendingFactor1: Pixel Alpha x Constant Alpha */ + pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + /* BlendingFactor2: 1 - (Pixel Alpha x Constant Alpha) */ + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + + /* Configure the number of lines and number of pixels per line */ + pLayerCfg.ImageWidth = lcd->lcd_info.width; + pLayerCfg.ImageHeight = lcd->lcd_info.height; + + /* Configure the LTDC */ + if (HAL_LTDC_Init(&LtdcHandle) != HAL_OK) + { + LOG_E("LTDC init failed"); + return -RT_ERROR; + } + + /* Configure the Background Layer*/ + if (HAL_LTDC_ConfigLayer(&LtdcHandle, &pLayerCfg, 0) != HAL_OK) + { + LOG_E("LTDC layer init failed"); + return -RT_ERROR; + } + else + { + /* enable LTDC interrupt */ + HAL_NVIC_SetPriority(LTDC_IRQn, 1, 0); + HAL_NVIC_EnableIRQ(LTDC_IRQn); + LOG_D("LTDC init success"); + return RT_EOK; + } +} +#if defined(LCD_BACKLIGHT_USING_PWM) +void turn_on_lcd_backlight(void) +{ + struct rt_device_pwm *pwm_dev; + + /* turn on the LCD backlight */ + pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); + /* pwm frequency:100K = 10000ns */ + rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, 10000, 10000); + rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); +} +#elif defined(LCD_BACKLIGHT_USING_GPIO) +void turn_on_lcd_backlight(void) +{ + rt_pin_mode(LCD_BL_GPIO_NUM, PIN_MODE_OUTPUT); + rt_pin_mode(LCD_DISP_GPIO_NUM, PIN_MODE_OUTPUT); + + rt_pin_write(LCD_DISP_GPIO_NUM, PIN_HIGH); + rt_pin_write(LCD_BL_GPIO_NUM, PIN_HIGH); +} +#endif + +#ifdef RT_USING_DEVICE_OPS +const static struct rt_device_ops lcd_ops = +{ + drv_lcd_init, + RT_NULL, + RT_NULL, + RT_NULL, + RT_NULL, + drv_lcd_control +}; +#endif + +int drv_lcd_hw_init(void) +{ + rt_err_t result = RT_EOK; + struct rt_device *device = &_lcd.parent; + + /* memset _lcd to zero */ + memset(&_lcd, 0x00, sizeof(_lcd)); + + /* init lcd_lock semaphore */ + result = rt_sem_init(&_lcd.lcd_lock, "lcd_lock", 0, RT_IPC_FLAG_FIFO); + if (result != RT_EOK) + { + LOG_E("init semaphore failed!\n"); + result = -RT_ENOMEM; + goto __exit; + } + + /* config LCD dev info */ + _lcd.lcd_info.height = LCD_HEIGHT; + _lcd.lcd_info.width = LCD_WIDTH; + _lcd.lcd_info.bits_per_pixel = LCD_BITS_PER_PIXEL; + _lcd.lcd_info.pixel_format = LCD_PIXEL_FORMAT; + + /* malloc memory for Triple Buffering */ + _lcd.lcd_info.framebuffer = rt_malloc(LCD_BUF_SIZE); + _lcd.back_buf = rt_malloc(LCD_BUF_SIZE); + _lcd.front_buf = rt_malloc(LCD_BUF_SIZE); + if (_lcd.lcd_info.framebuffer == RT_NULL || _lcd.back_buf == RT_NULL || _lcd.front_buf == RT_NULL) + { + LOG_E("init frame buffer failed!\n"); + result = -RT_ENOMEM; + goto __exit; + } + + /* memset buff to 0xFF */ + memset(_lcd.lcd_info.framebuffer, 0xFF, LCD_BUF_SIZE); + memset(_lcd.back_buf, 0xFF, LCD_BUF_SIZE); + memset(_lcd.front_buf, 0xFF, LCD_BUF_SIZE); + + device->type = RT_Device_Class_Graphic; +#ifdef RT_USING_DEVICE_OPS + device->ops = &lcd_ops; +#else + device->init = drv_lcd_init; + device->control = drv_lcd_control; +#endif + + /* register lcd device */ + rt_device_register(device, "lcd", RT_DEVICE_FLAG_RDWR); + + /* init stm32 LTDC */ + if (stm32_lcd_init(&_lcd) != RT_EOK) + { + result = -RT_ERROR; + goto __exit; + } + else + { + turn_on_lcd_backlight(); + } + +__exit: + if (result != RT_EOK) + { + rt_sem_delete(&_lcd.lcd_lock); + + if (_lcd.lcd_info.framebuffer) + { + rt_free(_lcd.lcd_info.framebuffer); + } + + if (_lcd.back_buf) + { + rt_free(_lcd.back_buf); + } + + if (_lcd.front_buf) + { + rt_free(_lcd.front_buf); + } + } + return result; +} +INIT_DEVICE_EXPORT(drv_lcd_hw_init); + +#ifdef DRV_DEBUG +#ifdef FINSH_USING_MSH +int lcd_test() +{ + struct drv_lcd_device *lcd; + lcd = (struct drv_lcd_device *)rt_device_find("lcd"); + + while (1) + { + /* red */ + for (int i = 0; i < LCD_BUF_SIZE / 2; i++) + { + lcd->lcd_info.framebuffer[2 * i] = 0x00; + lcd->lcd_info.framebuffer[2 * i + 1] = 0xF8; + } + lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL); + rt_thread_mdelay(1000); + /* green */ + for (int i = 0; i < LCD_BUF_SIZE / 2; i++) + { + lcd->lcd_info.framebuffer[2 * i] = 0xE0; + lcd->lcd_info.framebuffer[2 * i + 1] = 0x07; + } + lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL); + rt_thread_mdelay(1000); + /* blue */ + for (int i = 0; i < LCD_BUF_SIZE / 2; i++) + { + lcd->lcd_info.framebuffer[2 * i] = 0x1F; + lcd->lcd_info.framebuffer[2 * i + 1] = 0x00; + } + lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL); + rt_thread_mdelay(1000); + } +} +MSH_CMD_EXPORT(lcd_test, lcd_test); +#endif /* FINSH_USING_MSH */ +#endif /* DRV_DEBUG */ +#endif /* BSP_USING_LCD */ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_sdram.c b/bsp/stm32/libraries/HAL_Drivers/drv_sdram.c index 76f6fe8fbf..c5964a3fe0 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_sdram.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_sdram.c @@ -5,7 +5,7 @@ * * Change Logs: * Date Author Notes - * 2018-12-04 zylx The first version for STM32F4xx + * 2018-12-04 zylx first version */ #include diff --git a/bsp/stm32/libraries/STM32F4xx_HAL/SConscript b/bsp/stm32/libraries/STM32F4xx_HAL/SConscript index 0cdbe9b3b0..3c42547759 100644 --- a/bsp/stm32/libraries/STM32F4xx_HAL/SConscript +++ b/bsp/stm32/libraries/STM32F4xx_HAL/SConscript @@ -84,13 +84,14 @@ if GetDepend(['RT_USING_MTD_NOR']): if GetDepend(['RT_USING_MTD_NAND']): src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_nand.c'] -if GetDepend(['BSP_USING_SDRAM']): +if GetDepend(['BSP_USING_FMC']): src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c'] src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c'] + +if GetDepend(['BSP_USING_SDRAM']): src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c'] if GetDepend(['BSP_USING_EXT_FMC_IO']): - src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c'] src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c'] if GetDepend(['BSP_USING_ON_CHIP_FLASH']): @@ -98,6 +99,12 @@ if GetDepend(['BSP_USING_ON_CHIP_FLASH']): src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c'] src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c'] +if GetDepend(['BSP_USING_LTDC']): + src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c'] + src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c'] + src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c'] + src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma2d.c'] + path = [cwd + '/STM32F4xx_HAL_Driver/Inc', cwd + '/CMSIS/Device/ST/STM32F4xx/Include', cwd + '/CMSIS/Include'] From 1264fec1f96582056c7ef69b9ce9b55a3c939ef8 Mon Sep 17 00:00:00 2001 From: SummerGift Date: Mon, 14 Jan 2019 16:39:52 +0800 Subject: [PATCH 14/26] [bsp][stm32] add lcd drivers for f4 series bsp --- bsp/stm32/stm32f429-armfly-v6/.config | 3 + .../board/CubeMX_Config/.mxproject | 8 +- .../board/CubeMX_Config/CubeMX_Config.ioc | 343 ++++++++++++------ .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 6 +- .../board/CubeMX_Config/Src/main.c | 144 +++++++- .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 195 ++++++++++ bsp/stm32/stm32f429-armfly-v6/board/Kconfig | 23 +- bsp/stm32/stm32f429-armfly-v6/board/board.c | 105 +++--- .../board/ports/lcd_port.h | 33 ++ bsp/stm32/stm32f429-armfly-v6/rtconfig.h | 1 + bsp/stm32/stm32f429-atk-apollo/board/Kconfig | 4 + bsp/stm32/stm32f429-fire-challenger/.config | 3 + .../board/CubeMX_Config/.mxproject | 8 +- .../board/CubeMX_Config/CubeMX_Config.ioc | 308 ++++++++++------ .../CubeMX_Config/Inc/stm32f4xx_hal_conf.h | 6 +- .../board/CubeMX_Config/Src/main.c | 173 +++++++-- .../CubeMX_Config/Src/stm32f4xx_hal_msp.c | 308 +++++++++++++--- .../stm32f429-fire-challenger/board/Kconfig | 14 + .../stm32f429-fire-challenger/board/board.c | 99 ++--- .../board/ports/lcd_port.h | 33 ++ 20 files changed, 1385 insertions(+), 432 deletions(-) create mode 100644 bsp/stm32/stm32f429-armfly-v6/board/ports/lcd_port.h create mode 100644 bsp/stm32/stm32f429-fire-challenger/board/ports/lcd_port.h diff --git a/bsp/stm32/stm32f429-armfly-v6/.config b/bsp/stm32/stm32f429-armfly-v6/.config index e3045b305e..3169a6cb0f 100644 --- a/bsp/stm32/stm32f429-armfly-v6/.config +++ b/bsp/stm32/stm32f429-armfly-v6/.config @@ -340,6 +340,7 @@ CONFIG_BSP_USING_EXT_FMC_IO=y # CONFIG_BSP_USING_SPI_FLASH is not set # CONFIG_BSP_USING_SDCARD is not set # CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_LCD is not set # CONFIG_BSP_USING_MPU6050 is not set # @@ -358,6 +359,8 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_ONCHIP_RTC is not set # CONFIG_BSP_USING_WDT is not set # CONFIG_BSP_USING_SDIO is not set +CONFIG_BSP_USING_FMC=y +# CONFIG_BSP_USING_LTDC is not set # # Board extended module Drivers diff --git a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/.mxproject index e5ef8935b0..ce234b09a9 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/.mxproject +++ b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/.mxproject @@ -1,14 +1,14 @@ [PreviousGenFiles] -HeaderPath=E:/BspFramework/rt-thread/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc +HeaderPath=D:/BspFramework/rt-thread/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h; -SourcePath=E:/BspFramework/rt-thread/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src +SourcePath=D:/BspFramework/rt-thread/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src SourceFiles=stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c; [PreviousLibFiles] -LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.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/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; +LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma2d.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dsi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.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/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma2d.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dsi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; [PreviousUsedIarFiles] -SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; [PreviousUsedKeilFiles] diff --git a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/CubeMX_Config.ioc index 79261adf8a..713e78f639 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/CubeMX_Config.ioc +++ b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/CubeMX_Config.ioc @@ -11,120 +11,151 @@ File.Version=6 KeepUserPlacement=false Mcu.Family=STM32F4 Mcu.IP0=ADC1 -Mcu.IP1=ETH -Mcu.IP10=TIM2 -Mcu.IP11=TIM11 -Mcu.IP12=TIM13 -Mcu.IP13=TIM14 -Mcu.IP14=USART1 -Mcu.IP2=FMC -Mcu.IP3=IWDG -Mcu.IP4=NVIC -Mcu.IP5=RCC -Mcu.IP6=RTC -Mcu.IP7=SDIO -Mcu.IP8=SPI3 -Mcu.IP9=SYS -Mcu.IPNb=15 +Mcu.IP1=DMA2D +Mcu.IP10=SPI3 +Mcu.IP11=SYS +Mcu.IP12=TIM2 +Mcu.IP13=TIM11 +Mcu.IP14=TIM13 +Mcu.IP15=TIM14 +Mcu.IP16=USART1 +Mcu.IP2=ETH +Mcu.IP3=FMC +Mcu.IP4=IWDG +Mcu.IP5=LTDC +Mcu.IP6=NVIC +Mcu.IP7=RCC +Mcu.IP8=RTC +Mcu.IP9=SDIO +Mcu.IPNb=17 Mcu.Name=STM32F429B(E-G-I)Tx Mcu.Package=LQFP208 Mcu.Pin0=PE2 Mcu.Pin1=PC14/OSC32_IN -Mcu.Pin10=PF5 -Mcu.Pin11=PH0/OSC_IN -Mcu.Pin12=PH1/OSC_OUT -Mcu.Pin13=PC0 -Mcu.Pin14=PC1 -Mcu.Pin15=PC3 -Mcu.Pin16=PA0/WKUP -Mcu.Pin17=PA1 -Mcu.Pin18=PA2 -Mcu.Pin19=PH2 +Mcu.Pin10=PI14 +Mcu.Pin100=PG11 +Mcu.Pin101=PG13 +Mcu.Pin102=PK3 +Mcu.Pin103=PK4 +Mcu.Pin104=PK5 +Mcu.Pin105=PK6 +Mcu.Pin106=PK7 +Mcu.Pin107=PG15 +Mcu.Pin108=PB3 +Mcu.Pin109=PB4 +Mcu.Pin11=PF3 +Mcu.Pin110=PB5 +Mcu.Pin111=PE0 +Mcu.Pin112=PE1 +Mcu.Pin113=PI4 +Mcu.Pin114=PI5 +Mcu.Pin115=PI6 +Mcu.Pin116=PI7 +Mcu.Pin117=VP_DMA2D_VS_DMA2D +Mcu.Pin118=VP_IWDG_VS_IWDG +Mcu.Pin119=VP_RTC_VS_RTC_Activate +Mcu.Pin12=PF4 +Mcu.Pin120=VP_SYS_VS_Systick +Mcu.Pin121=VP_TIM2_VS_ClockSourceINT +Mcu.Pin122=VP_TIM11_VS_ClockSourceINT +Mcu.Pin123=VP_TIM13_VS_ClockSourceINT +Mcu.Pin124=VP_TIM14_VS_ClockSourceINT +Mcu.Pin13=PF5 +Mcu.Pin14=PH0/OSC_IN +Mcu.Pin15=PH1/OSC_OUT +Mcu.Pin16=PC0 +Mcu.Pin17=PC1 +Mcu.Pin18=PC3 +Mcu.Pin19=PA0/WKUP Mcu.Pin2=PC15/OSC32_OUT -Mcu.Pin20=PH3 -Mcu.Pin21=PH5 -Mcu.Pin22=PA7 -Mcu.Pin23=PC4 -Mcu.Pin24=PC5 -Mcu.Pin25=PF11 -Mcu.Pin26=PF12 -Mcu.Pin27=PF13 -Mcu.Pin28=PF14 -Mcu.Pin29=PF15 +Mcu.Pin20=PA1 +Mcu.Pin21=PA2 +Mcu.Pin22=PH2 +Mcu.Pin23=PH3 +Mcu.Pin24=PH5 +Mcu.Pin25=PA7 +Mcu.Pin26=PC4 +Mcu.Pin27=PC5 +Mcu.Pin28=PI15 +Mcu.Pin29=PJ0 Mcu.Pin3=PI9 -Mcu.Pin30=PG0 -Mcu.Pin31=PG1 -Mcu.Pin32=PE7 -Mcu.Pin33=PE8 -Mcu.Pin34=PE9 -Mcu.Pin35=PE10 -Mcu.Pin36=PE11 -Mcu.Pin37=PE12 -Mcu.Pin38=PE13 -Mcu.Pin39=PE14 +Mcu.Pin30=PJ1 +Mcu.Pin31=PJ2 +Mcu.Pin32=PJ3 +Mcu.Pin33=PJ4 +Mcu.Pin34=PF11 +Mcu.Pin35=PF12 +Mcu.Pin36=PF13 +Mcu.Pin37=PF14 +Mcu.Pin38=PF15 +Mcu.Pin39=PG0 Mcu.Pin4=PI10 -Mcu.Pin40=PE15 -Mcu.Pin41=PH8 -Mcu.Pin42=PH9 -Mcu.Pin43=PH10 -Mcu.Pin44=PH11 -Mcu.Pin45=PH12 -Mcu.Pin46=PB13 -Mcu.Pin47=PD8 -Mcu.Pin48=PD9 -Mcu.Pin49=PD10 +Mcu.Pin40=PG1 +Mcu.Pin41=PE7 +Mcu.Pin42=PE8 +Mcu.Pin43=PE9 +Mcu.Pin44=PE10 +Mcu.Pin45=PE11 +Mcu.Pin46=PE12 +Mcu.Pin47=PE13 +Mcu.Pin48=PE14 +Mcu.Pin49=PE15 Mcu.Pin5=PF0 -Mcu.Pin50=PD14 -Mcu.Pin51=PD15 -Mcu.Pin52=PG4 -Mcu.Pin53=PG5 -Mcu.Pin54=PG8 -Mcu.Pin55=PC8 -Mcu.Pin56=PC9 -Mcu.Pin57=PA9 -Mcu.Pin58=PA10 -Mcu.Pin59=PA13 +Mcu.Pin50=PJ5 +Mcu.Pin51=PH8 +Mcu.Pin52=PH9 +Mcu.Pin53=PH10 +Mcu.Pin54=PH11 +Mcu.Pin55=PH12 +Mcu.Pin56=PB13 +Mcu.Pin57=PD8 +Mcu.Pin58=PD9 +Mcu.Pin59=PD10 Mcu.Pin6=PF1 -Mcu.Pin60=PH13 -Mcu.Pin61=PH14 -Mcu.Pin62=PH15 -Mcu.Pin63=PI0 -Mcu.Pin64=PI1 -Mcu.Pin65=PI2 -Mcu.Pin66=PI3 -Mcu.Pin67=PA14 -Mcu.Pin68=PC10 -Mcu.Pin69=PC11 +Mcu.Pin60=PD14 +Mcu.Pin61=PD15 +Mcu.Pin62=PJ6 +Mcu.Pin63=PJ7 +Mcu.Pin64=PJ8 +Mcu.Pin65=PJ9 +Mcu.Pin66=PJ10 +Mcu.Pin67=PJ11 +Mcu.Pin68=PK0 +Mcu.Pin69=PK1 Mcu.Pin7=PF2 -Mcu.Pin70=PC12 -Mcu.Pin71=PD0 -Mcu.Pin72=PD1 -Mcu.Pin73=PD2 -Mcu.Pin74=PD4 -Mcu.Pin75=PD5 -Mcu.Pin76=PG9 -Mcu.Pin77=PG11 -Mcu.Pin78=PG13 -Mcu.Pin79=PG15 -Mcu.Pin8=PF3 -Mcu.Pin80=PB3 -Mcu.Pin81=PB4 -Mcu.Pin82=PB5 -Mcu.Pin83=PE0 -Mcu.Pin84=PE1 -Mcu.Pin85=PI4 -Mcu.Pin86=PI5 -Mcu.Pin87=PI6 -Mcu.Pin88=PI7 -Mcu.Pin89=VP_IWDG_VS_IWDG -Mcu.Pin9=PF4 -Mcu.Pin90=VP_RTC_VS_RTC_Activate -Mcu.Pin91=VP_SYS_VS_Systick -Mcu.Pin92=VP_TIM2_VS_ClockSourceINT -Mcu.Pin93=VP_TIM11_VS_ClockSourceINT -Mcu.Pin94=VP_TIM13_VS_ClockSourceINT -Mcu.Pin95=VP_TIM14_VS_ClockSourceINT -Mcu.PinsNb=96 +Mcu.Pin70=PK2 +Mcu.Pin71=PG4 +Mcu.Pin72=PG5 +Mcu.Pin73=PG8 +Mcu.Pin74=PC8 +Mcu.Pin75=PC9 +Mcu.Pin76=PA9 +Mcu.Pin77=PA10 +Mcu.Pin78=PA13 +Mcu.Pin79=PH13 +Mcu.Pin8=PI12 +Mcu.Pin80=PH14 +Mcu.Pin81=PH15 +Mcu.Pin82=PI0 +Mcu.Pin83=PI1 +Mcu.Pin84=PI2 +Mcu.Pin85=PI3 +Mcu.Pin86=PA14 +Mcu.Pin87=PC10 +Mcu.Pin88=PC11 +Mcu.Pin89=PC12 +Mcu.Pin9=PI13 +Mcu.Pin90=PD0 +Mcu.Pin91=PD1 +Mcu.Pin92=PD2 +Mcu.Pin93=PD4 +Mcu.Pin94=PD5 +Mcu.Pin95=PJ12 +Mcu.Pin96=PJ13 +Mcu.Pin97=PJ14 +Mcu.Pin98=PJ15 +Mcu.Pin99=PG9 +Mcu.PinsNb=125 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F429BITx @@ -272,6 +303,14 @@ PH9.Signal=FMC_D17 PI0.Signal=FMC_D24 PI1.Signal=FMC_D25 PI10.Signal=FMC_D31 +PI12.Mode=RGB888 +PI12.Signal=LTDC_HSYNC +PI13.Mode=RGB888 +PI13.Signal=LTDC_VSYNC +PI14.Mode=RGB888 +PI14.Signal=LTDC_CLK +PI15.Mode=RGB888 +PI15.Signal=LTDC_R0 PI2.Signal=FMC_D26 PI3.Signal=FMC_D27 PI4.Signal=FMC_NBL2 @@ -279,6 +318,66 @@ PI5.Signal=FMC_NBL3 PI6.Signal=FMC_D28 PI7.Signal=FMC_D29 PI9.Signal=FMC_D30 +PJ0.Mode=RGB888 +PJ0.Signal=LTDC_R1 +PJ1.Mode=RGB888 +PJ1.Signal=LTDC_R2 +PJ10.Mode=RGB888 +PJ10.Signal=LTDC_G3 +PJ11.Locked=true +PJ11.Mode=RGB888 +PJ11.Signal=LTDC_G4 +PJ12.Locked=true +PJ12.Mode=RGB888 +PJ12.Signal=LTDC_B0 +PJ13.Mode=RGB888 +PJ13.Signal=LTDC_B1 +PJ14.Locked=true +PJ14.Mode=RGB888 +PJ14.Signal=LTDC_B2 +PJ15.Mode=RGB888 +PJ15.Signal=LTDC_B3 +PJ2.Locked=true +PJ2.Mode=RGB888 +PJ2.Signal=LTDC_R3 +PJ3.Mode=RGB888 +PJ3.Signal=LTDC_R4 +PJ4.Mode=RGB888 +PJ4.Signal=LTDC_R5 +PJ5.Locked=true +PJ5.Mode=RGB888 +PJ5.Signal=LTDC_R6 +PJ6.Mode=RGB888 +PJ6.Signal=LTDC_R7 +PJ7.Locked=true +PJ7.Mode=RGB888 +PJ7.Signal=LTDC_G0 +PJ8.Locked=true +PJ8.Mode=RGB888 +PJ8.Signal=LTDC_G1 +PJ9.Locked=true +PJ9.Mode=RGB888 +PJ9.Signal=LTDC_G2 +PK0.Locked=true +PK0.Mode=RGB888 +PK0.Signal=LTDC_G5 +PK1.Mode=RGB888 +PK1.Signal=LTDC_G6 +PK2.Mode=RGB888 +PK2.Signal=LTDC_G7 +PK3.Locked=true +PK3.Mode=RGB888 +PK3.Signal=LTDC_B4 +PK4.Locked=true +PK4.Mode=RGB888 +PK4.Signal=LTDC_B5 +PK5.Mode=RGB888 +PK5.Signal=LTDC_B6 +PK6.Mode=RGB888 +PK6.Signal=LTDC_B7 +PK7.Locked=true +PK7.Mode=RGB888 +PK7.Signal=LTDC_DE PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false @@ -306,7 +405,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=EWARM V8 ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_FMC_Init-FMC-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_SDIO_SD_Init-SDIO-false-HAL-true,8-MX_IWDG_Init-IWDG-false-HAL-true,9-MX_ADC1_Init-ADC1-false-HAL-true,10-MX_RTC_Init-RTC-false-HAL-true,11-MX_TIM14_Init-TIM14-false-HAL-true,12-MX_TIM13_Init-TIM13-false-HAL-true,13-MX_TIM11_Init-TIM11-false-HAL-true,14-MX_ETH_Init-ETH-false-HAL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_FMC_Init-FMC-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_SDIO_SD_Init-SDIO-false-HAL-true,8-MX_IWDG_Init-IWDG-false-HAL-true,9-MX_ADC1_Init-ADC1-false-HAL-true,10-MX_RTC_Init-RTC-false-HAL-true,11-MX_TIM14_Init-TIM14-false-HAL-true,12-MX_TIM13_Init-TIM13-false-HAL-true,13-MX_TIM11_Init-TIM11-false-HAL-true,14-MX_ETH_Init-ETH-false-HAL-true,15-MX_LTDC_Init-LTDC-false-HAL-true,16-MX_DMA2D_Init-DMA2D-false-HAL-true RCC.48MHZClocksFreq_Value=45000000 RCC.AHBFreq_Value=180000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 @@ -322,31 +421,33 @@ RCC.FamilyName=M RCC.HCLKFreq_Value=180000000 RCC.HSE_VALUE=8000000 RCC.HSI_VALUE=16000000 -RCC.I2SClocksFreq_Value=153600000 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ -RCC.LCDTFTFreq_Value=19600000 +RCC.I2SClocksFreq_Value=192000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSAIN,PLLSourceVirtual,RCC_RTC_Clock_Source,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ +RCC.LCDTFTFreq_Value=25000000 RCC.LSI_VALUE=32000 RCC.MCO2PinFreq_Value=180000000 RCC.PLLCLKFreq_Value=180000000 -RCC.PLLM=5 -RCC.PLLN=225 +RCC.PLLM=4 +RCC.PLLN=180 RCC.PLLQ=8 RCC.PLLQCLKFreq_Value=45000000 +RCC.PLLSAIN=50 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.RTCFreq_Value=32000 +RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE +RCC.RTCFreq_Value=32768 RCC.RTCHSEDivFreq_Value=4000000 -RCC.SAI_AClocksFreq_Value=19600000 -RCC.SAI_BClocksFreq_Value=19600000 +RCC.SAI_AClocksFreq_Value=25000000 +RCC.SAI_BClocksFreq_Value=25000000 RCC.SYSCLKFreq_VALUE=180000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.VCOI2SOutputFreq_Value=307200000 -RCC.VCOInputFreq_Value=1600000 +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 RCC.VCOOutputFreq_Value=360000000 -RCC.VCOSAIOutputFreq_Value=78400000 -RCC.VCOSAIOutputFreq_ValueQ=19600000 -RCC.VCOSAIOutputFreq_ValueR=39200000 -RCC.VcooutputI2S=153600000 -RCC.VcooutputI2SQ=153600000 +RCC.VCOSAIOutputFreq_Value=100000000 +RCC.VCOSAIOutputFreq_ValueQ=25000000 +RCC.VCOSAIOutputFreq_ValueR=50000000 +RCC.VcooutputI2S=192000000 +RCC.VcooutputI2SQ=192000000 SH.ADCx_IN10.0=ADC1_IN10,IN10 SH.ADCx_IN10.ConfNb=1 SH.ADCx_IN13.0=ADC1_IN13,IN13 @@ -512,6 +613,8 @@ TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM2.IPParameters=Channel-PWM Generation1 CH1 USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC +VP_DMA2D_VS_DMA2D.Mode=DMA2D_Activate +VP_DMA2D_VS_DMA2D.Signal=DMA2D_VS_DMA2D VP_IWDG_VS_IWDG.Mode=IWDG_Activate VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled diff --git a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h index 533f66559c..4c3a0a08df 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h +++ b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© 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: @@ -56,7 +56,7 @@ /* #define HAL_CRYP_MODULE_ENABLED */ /* #define HAL_DAC_MODULE_ENABLED */ /* #define HAL_DCMI_MODULE_ENABLED */ -/* #define HAL_DMA2D_MODULE_ENABLED */ +#define HAL_DMA2D_MODULE_ENABLED #define HAL_ETH_MODULE_ENABLED /* #define HAL_NAND_MODULE_ENABLED */ /* #define HAL_NOR_MODULE_ENABLED */ @@ -67,7 +67,7 @@ /* #define HAL_I2C_MODULE_ENABLED */ /* #define HAL_I2S_MODULE_ENABLED */ #define HAL_IWDG_MODULE_ENABLED -/* #define HAL_LTDC_MODULE_ENABLED */ +#define HAL_LTDC_MODULE_ENABLED /* #define HAL_RNG_MODULE_ENABLED */ #define HAL_RTC_MODULE_ENABLED /* #define HAL_SAI_MODULE_ENABLED */ diff --git a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/main.c index 6f3f1fffa8..0806027072 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/main.c +++ b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/main.c @@ -64,10 +64,14 @@ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; +DMA2D_HandleTypeDef hdma2d; + ETH_HandleTypeDef heth; IWDG_HandleTypeDef hiwdg; +LTDC_HandleTypeDef hltdc; + RTC_HandleTypeDef hrtc; SD_HandleTypeDef hsd; @@ -103,6 +107,8 @@ static void MX_TIM14_Init(void); static void MX_TIM13_Init(void); static void MX_TIM11_Init(void); static void MX_ETH_Init(void); +static void MX_LTDC_Init(void); +static void MX_DMA2D_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -152,6 +158,8 @@ int main(void) MX_TIM13_Init(); MX_TIM11_Init(); MX_ETH_Init(); + MX_LTDC_Init(); + MX_DMA2D_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -183,13 +191,15 @@ void SystemClock_Config(void) __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /**Initializes the CPU, AHB and APB busses clocks */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE + |RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLM = 5; - RCC_OscInitStruct.PLL.PLLN = 225; + RCC_OscInitStruct.PLL.PLLM = 4; + RCC_OscInitStruct.PLL.PLLN = 180; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 8; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) @@ -215,8 +225,11 @@ void SystemClock_Config(void) { Error_Handler(); } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 50; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); @@ -273,6 +286,43 @@ static void MX_ADC1_Init(void) } +/** + * @brief DMA2D Initialization Function + * @param None + * @retval None + */ +static void MX_DMA2D_Init(void) +{ + + /* USER CODE BEGIN DMA2D_Init 0 */ + + /* USER CODE END DMA2D_Init 0 */ + + /* USER CODE BEGIN DMA2D_Init 1 */ + + /* USER CODE END DMA2D_Init 1 */ + hdma2d.Instance = DMA2D; + hdma2d.Init.Mode = DMA2D_M2M; + hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888; + hdma2d.Init.OutputOffset = 0; + hdma2d.LayerCfg[1].InputOffset = 0; + hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; + hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; + hdma2d.LayerCfg[1].InputAlpha = 0; + if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) + { + Error_Handler(); + } + if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN DMA2D_Init 2 */ + + /* USER CODE END DMA2D_Init 2 */ + +} + /** * @brief ETH Initialization Function * @param None @@ -346,6 +396,88 @@ static void MX_IWDG_Init(void) } +/** + * @brief LTDC Initialization Function + * @param None + * @retval None + */ +static void MX_LTDC_Init(void) +{ + + /* USER CODE BEGIN LTDC_Init 0 */ + + /* USER CODE END LTDC_Init 0 */ + + LTDC_LayerCfgTypeDef pLayerCfg = {0}; + LTDC_LayerCfgTypeDef pLayerCfg1 = {0}; + + /* USER CODE BEGIN LTDC_Init 1 */ + + /* USER CODE END LTDC_Init 1 */ + hltdc.Instance = LTDC; + hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; + hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; + hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; + hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + hltdc.Init.HorizontalSync = 7; + hltdc.Init.VerticalSync = 3; + hltdc.Init.AccumulatedHBP = 14; + hltdc.Init.AccumulatedVBP = 5; + hltdc.Init.AccumulatedActiveW = 654; + hltdc.Init.AccumulatedActiveH = 485; + hltdc.Init.TotalWidth = 660; + hltdc.Init.TotalHeigh = 487; + hltdc.Init.Backcolor.Blue = 0; + hltdc.Init.Backcolor.Green = 0; + hltdc.Init.Backcolor.Red = 0; + if (HAL_LTDC_Init(&hltdc) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg.WindowX0 = 0; + pLayerCfg.WindowX1 = 0; + pLayerCfg.WindowY0 = 0; + pLayerCfg.WindowY1 = 0; + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg.Alpha = 0; + pLayerCfg.Alpha0 = 0; + pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg.FBStartAdress = 0; + pLayerCfg.ImageWidth = 0; + pLayerCfg.ImageHeight = 0; + pLayerCfg.Backcolor.Blue = 0; + pLayerCfg.Backcolor.Green = 0; + pLayerCfg.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg1.WindowX0 = 0; + pLayerCfg1.WindowX1 = 0; + pLayerCfg1.WindowY0 = 0; + pLayerCfg1.WindowY1 = 0; + pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg1.Alpha = 0; + pLayerCfg1.Alpha0 = 0; + pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg1.FBStartAdress = 0; + pLayerCfg1.ImageWidth = 0; + pLayerCfg1.ImageHeight = 0; + pLayerCfg1.Backcolor.Blue = 0; + pLayerCfg1.Backcolor.Green = 0; + pLayerCfg1.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LTDC_Init 2 */ + + /* USER CODE END LTDC_Init 2 */ + +} + /** * @brief RTC Initialization Function * @param None @@ -722,9 +854,11 @@ static void MX_GPIO_Init(void) __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOJ_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOK_CLK_ENABLE(); /*Configure GPIO pin : PE2 */ GPIO_InitStruct.Pin = GPIO_PIN_2; diff --git a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c index f874c7a8d6..5e0a3aac30 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c +++ b/bsp/stm32/stm32f429-armfly-v6/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -165,6 +165,53 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) } +/** +* @brief DMA2D MSP Initialization +* This function configures the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ +void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspInit 0 */ + + /* USER CODE END DMA2D_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_DMA2D_CLK_ENABLE(); + /* USER CODE BEGIN DMA2D_MspInit 1 */ + + /* USER CODE END DMA2D_MspInit 1 */ + } + +} + +/** +* @brief DMA2D MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ + +void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspDeInit 0 */ + + /* USER CODE END DMA2D_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_DMA2D_CLK_DISABLE(); + /* USER CODE BEGIN DMA2D_MspDeInit 1 */ + + /* USER CODE END DMA2D_MspDeInit 1 */ + } + +} + /** * @brief ETH MSP Initialization * This function configures the hardware resources used in this example @@ -277,6 +324,154 @@ void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth) } +/** +* @brief LTDC MSP Initialization +* This function configures the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ +void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspInit 0 */ + + /* USER CODE END LTDC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_LTDC_CLK_ENABLE(); + + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOJ_CLK_ENABLE(); + __HAL_RCC_GPIOK_CLK_ENABLE(); + /**LTDC GPIO Configuration + PI12 ------> LTDC_HSYNC + PI13 ------> LTDC_VSYNC + PI14 ------> LTDC_CLK + PI15 ------> LTDC_R0 + PJ0 ------> LTDC_R1 + PJ1 ------> LTDC_R2 + PJ2 ------> LTDC_R3 + PJ3 ------> LTDC_R4 + PJ4 ------> LTDC_R5 + PJ5 ------> LTDC_R6 + PJ6 ------> LTDC_R7 + PJ7 ------> LTDC_G0 + PJ8 ------> LTDC_G1 + PJ9 ------> LTDC_G2 + PJ10 ------> LTDC_G3 + PJ11 ------> LTDC_G4 + PK0 ------> LTDC_G5 + PK1 ------> LTDC_G6 + PK2 ------> LTDC_G7 + PJ12 ------> LTDC_B0 + PJ13 ------> LTDC_B1 + PJ14 ------> LTDC_B2 + PJ15 ------> LTDC_B3 + PK3 ------> LTDC_B4 + PK4 ------> LTDC_B5 + PK5 ------> LTDC_B6 + PK6 ------> LTDC_B7 + PK7 ------> LTDC_DE + */ + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 + |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOK, &GPIO_InitStruct); + + /* USER CODE BEGIN LTDC_MspInit 1 */ + + /* USER CODE END LTDC_MspInit 1 */ + } + +} + +/** +* @brief LTDC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ + +void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) +{ + + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspDeInit 0 */ + + /* USER CODE END LTDC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LTDC_CLK_DISABLE(); + + /**LTDC GPIO Configuration + PI12 ------> LTDC_HSYNC + PI13 ------> LTDC_VSYNC + PI14 ------> LTDC_CLK + PI15 ------> LTDC_R0 + PJ0 ------> LTDC_R1 + PJ1 ------> LTDC_R2 + PJ2 ------> LTDC_R3 + PJ3 ------> LTDC_R4 + PJ4 ------> LTDC_R5 + PJ5 ------> LTDC_R6 + PJ6 ------> LTDC_R7 + PJ7 ------> LTDC_G0 + PJ8 ------> LTDC_G1 + PJ9 ------> LTDC_G2 + PJ10 ------> LTDC_G3 + PJ11 ------> LTDC_G4 + PK0 ------> LTDC_G5 + PK1 ------> LTDC_G6 + PK2 ------> LTDC_G7 + PJ12 ------> LTDC_B0 + PJ13 ------> LTDC_B1 + PJ14 ------> LTDC_B2 + PJ15 ------> LTDC_B3 + PK3 ------> LTDC_B4 + PK4 ------> LTDC_B5 + PK5 ------> LTDC_B6 + PK6 ------> LTDC_B7 + PK7 ------> LTDC_DE + */ + HAL_GPIO_DeInit(GPIOI, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOJ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 + |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOK, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN LTDC_MspDeInit 1 */ + + /* USER CODE END LTDC_MspDeInit 1 */ + } + +} + /** * @brief RTC MSP Initialization * This function configures the hardware resources used in this example diff --git a/bsp/stm32/stm32f429-armfly-v6/board/Kconfig b/bsp/stm32/stm32f429-armfly-v6/board/Kconfig index ae6e2de2fd..e169c1a8ac 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/Kconfig +++ b/bsp/stm32/stm32f429-armfly-v6/board/Kconfig @@ -15,10 +15,12 @@ menu "Onboard Peripheral Drivers" config BSP_USING_EXT_FMC_IO bool "Enable extend gpio" + select BSP_USING_FMC default y config BSP_USING_SDRAM bool "Enable SDRAM" + select BSP_USING_FMC default n config BSP_USING_SPI_FLASH @@ -38,9 +40,7 @@ menu "Onboard Peripheral Drivers" config PHY_USING_DM9161CEP bool - - menuconfig BSP_USING_ETH bool "Enable Ethernet" select RT_USING_LWIP @@ -57,14 +57,22 @@ menu "Onboard Peripheral Drivers" default 118 endif + config BSP_USING_LCD + bool "Enable LCD" + select BSP_USING_LTDC + select BSP_USING_SDRAM + select BSP_USING_PWM + select BSP_USING_PWM2 + select BSP_USING_PWM2_CH1 + default n + config BSP_USING_MPU6050 bool "Enable MPU6050(i2c1)" select BSP_USING_I2C1 select PKG_USING_MPU6XXX select PKG_USING_MPU6XXX_SAMPLE select PKG_USING_MPU6XXX_LATEST_VERSION - default n - + default n endmenu menu "On-chip Peripheral Drivers" @@ -191,6 +199,13 @@ menu "On-chip Peripheral Drivers" select RT_USING_DFS default n + config BSP_USING_FMC + bool + default n + + config BSP_USING_LTDC + bool + default n endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f429-armfly-v6/board/board.c b/bsp/stm32/stm32f429-armfly-v6/board/board.c index 79c7289b8a..f314b7c45a 100644 --- a/bsp/stm32/stm32f429-armfly-v6/board/board.c +++ b/bsp/stm32/stm32f429-armfly-v6/board/board.c @@ -5,7 +5,7 @@ * * Change Logs: * Date Author Notes - * 2018-11-7 zylx first version + * 2018-11-7 zylx first version */ #include "board.h" @@ -14,54 +14,57 @@ */ void SystemClock_Config(void) { - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {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_LSI|RCC_OSCILLATORTYPE_HSE - |RCC_OSCILLATORTYPE_LSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.LSIState = RCC_LSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLM = 5; - RCC_OscInitStruct.PLL.PLLN = 225; - RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - RCC_OscInitStruct.PLL.PLLQ = 8; - 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(); - } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {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_LSI|RCC_OSCILLATORTYPE_HSE + |RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.LSIState = RCC_LSI_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 = 8; + 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(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 50; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } } diff --git a/bsp/stm32/stm32f429-armfly-v6/board/ports/lcd_port.h b/bsp/stm32/stm32f429-armfly-v6/board/ports/lcd_port.h new file mode 100644 index 0000000000..31e2b9a392 --- /dev/null +++ b/bsp/stm32/stm32f429-armfly-v6/board/ports/lcd_port.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-08 zylx first version + */ + +#ifndef __LCD_PORT_H__ +#define __LCD_PORT_H__ + +/* armfly 5 inch screen, 800 * 480 */ +#define LCD_WIDTH 800 +#define LCD_HEIGHT 480 +#define LCD_BITS_PER_PIXEL 16 +#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) +#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 + +#define LCD_HSYNC_WIDTH 96 +#define LCD_VSYNC_HEIGHT 2 +#define LCD_HBP 10 +#define LCD_VBP 10 +#define LCD_HFP 10 +#define LCD_VFP 10 + +#define LCD_BACKLIGHT_USING_PWM +#define LCD_PWM_DEV_NAME "pwm2" +#define LCD_PWM_DEV_CHANNEL 1 +/* armfly 5 inch screen, 800 * 480 */ + +#endif /* __LCD_PORT_H__ */ diff --git a/bsp/stm32/stm32f429-armfly-v6/rtconfig.h b/bsp/stm32/stm32f429-armfly-v6/rtconfig.h index eb2f4e408c..7d6c12513e 100644 --- a/bsp/stm32/stm32f429-armfly-v6/rtconfig.h +++ b/bsp/stm32/stm32f429-armfly-v6/rtconfig.h @@ -169,6 +169,7 @@ #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART1 +#define BSP_USING_FMC /* Board extended module Drivers */ diff --git a/bsp/stm32/stm32f429-atk-apollo/board/Kconfig b/bsp/stm32/stm32f429-atk-apollo/board/Kconfig index 916e0844a4..a38ce45a8b 100644 --- a/bsp/stm32/stm32f429-atk-apollo/board/Kconfig +++ b/bsp/stm32/stm32f429-atk-apollo/board/Kconfig @@ -26,6 +26,7 @@ menu "Onboard Peripheral Drivers" config BSP_USING_SDRAM bool "Enable SDRAM" + select BSP_USING_FMC default n config BSP_USING_SPI_FLASH @@ -235,6 +236,9 @@ menu "On-chip Peripheral Drivers" select RT_USING_DFS default n + config BSP_USING_FMC + bool + default n endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f429-fire-challenger/.config b/bsp/stm32/stm32f429-fire-challenger/.config index c12660c8fe..ddd5f2950f 100644 --- a/bsp/stm32/stm32f429-fire-challenger/.config +++ b/bsp/stm32/stm32f429-fire-challenger/.config @@ -338,6 +338,7 @@ CONFIG_BSP_USING_USB_TO_USART=y # CONFIG_BSP_USING_RS232 is not set # CONFIG_BSP_USING_SDRAM is not set # CONFIG_BSP_USING_SPI_FLASH is not set +# CONFIG_BSP_USING_LCD is not set # CONFIG_BSP_USING_MPU6050 is not set # CONFIG_BSP_USING_ETH is not set # CONFIG_BSP_USING_RGB is not set @@ -361,6 +362,8 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_ONCHIP_RTC is not set # CONFIG_BSP_USING_WDT is not set # CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_FMC is not set +# CONFIG_BSP_USING_LTDC is not set # # Board extended module Drivers diff --git a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/.mxproject index 4a6a8d2ff1..cc05cfeba9 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/.mxproject +++ b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/.mxproject @@ -1,13 +1,13 @@ [PreviousGenFiles] -HeaderPath=D:/BspFramework2/rt-thread/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc +HeaderPath=D:/BspFramework/rt-thread/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc HeaderFiles=stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h; -SourcePath=D:/BspFramework2/rt-thread/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src +SourcePath=D:/BspFramework/rt-thread/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src SourceFiles=stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c; [PreviousLibFiles] -LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.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/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; +LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma2d.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dsi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.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/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma2d.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_eth.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_fmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sdram.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_iwdg.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_ltdc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dsi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rtc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_sdmmc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_sd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; [PreviousUsedKeilFiles] -SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; +SourceFiles=..\Src\main.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null; HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc; diff --git a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc index 17bc659ed8..b23d058006 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc +++ b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc @@ -11,102 +11,130 @@ File.Version=6 KeepUserPlacement=false Mcu.Family=STM32F4 Mcu.IP0=ADC1 -Mcu.IP1=ETH -Mcu.IP10=TIM5 -Mcu.IP11=TIM11 -Mcu.IP12=TIM13 -Mcu.IP13=TIM14 -Mcu.IP14=USART1 -Mcu.IP15=USART2 -Mcu.IP2=FMC -Mcu.IP3=IWDG -Mcu.IP4=NVIC -Mcu.IP5=RCC -Mcu.IP6=RTC -Mcu.IP7=SDIO -Mcu.IP8=SPI5 -Mcu.IP9=SYS -Mcu.IPNb=16 +Mcu.IP1=DMA2D +Mcu.IP10=SPI5 +Mcu.IP11=SYS +Mcu.IP12=TIM5 +Mcu.IP13=TIM11 +Mcu.IP14=TIM13 +Mcu.IP15=TIM14 +Mcu.IP16=USART1 +Mcu.IP2=ETH +Mcu.IP3=FMC +Mcu.IP4=IWDG +Mcu.IP5=LTDC +Mcu.IP6=NVIC +Mcu.IP7=RCC +Mcu.IP8=RTC +Mcu.IP9=SDIO +Mcu.IPNb=17 Mcu.Name=STM32F429I(E-G)Tx Mcu.Package=LQFP176 -Mcu.Pin0=PC14/OSC32_IN -Mcu.Pin1=PC15/OSC32_OUT -Mcu.Pin10=PF9 -Mcu.Pin11=PH0/OSC_IN -Mcu.Pin12=PH1/OSC_OUT -Mcu.Pin13=PC0 -Mcu.Pin14=PC1 -Mcu.Pin15=PC3 -Mcu.Pin16=PA1 -Mcu.Pin17=PA2 -Mcu.Pin18=PA7 -Mcu.Pin19=PC4 -Mcu.Pin2=PF0 -Mcu.Pin20=PC5 -Mcu.Pin21=PF11 -Mcu.Pin22=PF12 -Mcu.Pin23=PF13 -Mcu.Pin24=PF14 -Mcu.Pin25=PF15 -Mcu.Pin26=PG0 -Mcu.Pin27=PG1 -Mcu.Pin28=PE7 -Mcu.Pin29=PE8 -Mcu.Pin3=PF1 -Mcu.Pin30=PE9 -Mcu.Pin31=PE10 -Mcu.Pin32=PE11 -Mcu.Pin33=PE12 -Mcu.Pin34=PE13 -Mcu.Pin35=PE14 -Mcu.Pin36=PE15 -Mcu.Pin37=PB11 -Mcu.Pin38=PH6 -Mcu.Pin39=PH7 -Mcu.Pin4=PF2 -Mcu.Pin40=PH10 -Mcu.Pin41=PH11 -Mcu.Pin42=PH12 -Mcu.Pin43=PD8 -Mcu.Pin44=PD9 -Mcu.Pin45=PD10 -Mcu.Pin46=PD14 -Mcu.Pin47=PD15 -Mcu.Pin48=PG4 -Mcu.Pin49=PG5 -Mcu.Pin5=PF3 -Mcu.Pin50=PG8 -Mcu.Pin51=PC8 -Mcu.Pin52=PC9 -Mcu.Pin53=PA9 -Mcu.Pin54=PA10 -Mcu.Pin55=PA13 -Mcu.Pin56=PA14 -Mcu.Pin57=PC10 -Mcu.Pin58=PC11 -Mcu.Pin59=PC12 -Mcu.Pin6=PF4 -Mcu.Pin60=PD0 -Mcu.Pin61=PD1 -Mcu.Pin62=PD2 -Mcu.Pin63=PD5 -Mcu.Pin64=PD6 -Mcu.Pin65=PG13 -Mcu.Pin66=PG14 -Mcu.Pin67=PG15 -Mcu.Pin68=PE0 -Mcu.Pin69=PE1 -Mcu.Pin7=PF5 -Mcu.Pin70=VP_IWDG_VS_IWDG -Mcu.Pin71=VP_RTC_VS_RTC_Activate -Mcu.Pin72=VP_SYS_VS_Systick -Mcu.Pin73=VP_TIM5_VS_ClockSourceINT -Mcu.Pin74=VP_TIM11_VS_ClockSourceINT -Mcu.Pin75=VP_TIM13_VS_ClockSourceINT -Mcu.Pin76=VP_TIM14_VS_ClockSourceINT -Mcu.Pin8=PF7 -Mcu.Pin9=PF8 -Mcu.PinsNb=77 +Mcu.Pin0=PE4 +Mcu.Pin1=PE5 +Mcu.Pin10=PF3 +Mcu.Pin100=VP_TIM5_VS_ClockSourceINT +Mcu.Pin101=VP_TIM11_VS_ClockSourceINT +Mcu.Pin102=VP_TIM13_VS_ClockSourceINT +Mcu.Pin103=VP_TIM14_VS_ClockSourceINT +Mcu.Pin11=PF4 +Mcu.Pin12=PF5 +Mcu.Pin13=PF7 +Mcu.Pin14=PF8 +Mcu.Pin15=PF9 +Mcu.Pin16=PF10 +Mcu.Pin17=PH0/OSC_IN +Mcu.Pin18=PH1/OSC_OUT +Mcu.Pin19=PC0 +Mcu.Pin2=PE6 +Mcu.Pin20=PC1 +Mcu.Pin21=PC3 +Mcu.Pin22=PA1 +Mcu.Pin23=PA2 +Mcu.Pin24=PH2 +Mcu.Pin25=PH3 +Mcu.Pin26=PA3 +Mcu.Pin27=PA7 +Mcu.Pin28=PC4 +Mcu.Pin29=PC5 +Mcu.Pin3=PC14/OSC32_IN +Mcu.Pin30=PB0 +Mcu.Pin31=PB1 +Mcu.Pin32=PF11 +Mcu.Pin33=PF12 +Mcu.Pin34=PF13 +Mcu.Pin35=PF14 +Mcu.Pin36=PF15 +Mcu.Pin37=PG0 +Mcu.Pin38=PG1 +Mcu.Pin39=PE7 +Mcu.Pin4=PC15/OSC32_OUT +Mcu.Pin40=PE8 +Mcu.Pin41=PE9 +Mcu.Pin42=PE10 +Mcu.Pin43=PE11 +Mcu.Pin44=PE12 +Mcu.Pin45=PE13 +Mcu.Pin46=PE14 +Mcu.Pin47=PE15 +Mcu.Pin48=PB11 +Mcu.Pin49=PH6 +Mcu.Pin5=PI9 +Mcu.Pin50=PH7 +Mcu.Pin51=PH8 +Mcu.Pin52=PH10 +Mcu.Pin53=PH11 +Mcu.Pin54=PH12 +Mcu.Pin55=PD8 +Mcu.Pin56=PD9 +Mcu.Pin57=PD10 +Mcu.Pin58=PD14 +Mcu.Pin59=PD15 +Mcu.Pin6=PI10 +Mcu.Pin60=PG4 +Mcu.Pin61=PG5 +Mcu.Pin62=PG6 +Mcu.Pin63=PG7 +Mcu.Pin64=PG8 +Mcu.Pin65=PC7 +Mcu.Pin66=PC8 +Mcu.Pin67=PC9 +Mcu.Pin68=PA9 +Mcu.Pin69=PA10 +Mcu.Pin7=PF0 +Mcu.Pin70=PA11 +Mcu.Pin71=PA12 +Mcu.Pin72=PA13 +Mcu.Pin73=PH13 +Mcu.Pin74=PH15 +Mcu.Pin75=PI0 +Mcu.Pin76=PI2 +Mcu.Pin77=PA14 +Mcu.Pin78=PC10 +Mcu.Pin79=PC11 +Mcu.Pin8=PF1 +Mcu.Pin80=PC12 +Mcu.Pin81=PD0 +Mcu.Pin82=PD1 +Mcu.Pin83=PD2 +Mcu.Pin84=PD6 +Mcu.Pin85=PG10 +Mcu.Pin86=PG11 +Mcu.Pin87=PG12 +Mcu.Pin88=PG13 +Mcu.Pin89=PG14 +Mcu.Pin9=PF2 +Mcu.Pin90=PG15 +Mcu.Pin91=PB8 +Mcu.Pin92=PB9 +Mcu.Pin93=PE0 +Mcu.Pin94=PE1 +Mcu.Pin95=PI4 +Mcu.Pin96=VP_DMA2D_VS_DMA2D +Mcu.Pin97=VP_IWDG_VS_IWDG +Mcu.Pin98=VP_RTC_VS_RTC_Activate +Mcu.Pin99=VP_SYS_VS_Systick +Mcu.PinsNb=104 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F429IGTx @@ -127,18 +155,37 @@ PA1.Mode=RMII PA1.Signal=ETH_REF_CLK PA10.Mode=Asynchronous PA10.Signal=USART1_RX +PA11.Mode=RGB888 +PA11.Signal=LTDC_R4 +PA12.Mode=RGB888 +PA12.Signal=LTDC_R5 PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK PA2.Mode=RMII PA2.Signal=ETH_MDIO +PA3.Locked=true +PA3.Mode=RGB888 +PA3.Signal=LTDC_B5 PA7.Mode=RMII PA7.Signal=ETH_CRS_DV PA9.Mode=Asynchronous PA9.Signal=USART1_TX +PB0.Locked=true +PB0.Mode=RGB888 +PB0.Signal=LTDC_R3 +PB1.Locked=true +PB1.Mode=RGB888 +PB1.Signal=LTDC_R6 PB11.Mode=RMII PB11.Signal=ETH_TX_EN +PB8.Locked=true +PB8.Mode=RGB888 +PB8.Signal=LTDC_B6 +PB9.Locked=true +PB9.Mode=RGB888 +PB9.Signal=LTDC_B7 PC0.Signal=FMC_SDNWE PC1.Mode=RMII PC1.Signal=ETH_MDC @@ -158,6 +205,9 @@ PC4.Mode=RMII PC4.Signal=ETH_RXD0 PC5.Mode=RMII PC5.Signal=ETH_RXD1 +PC7.Locked=true +PC7.Mode=RGB888 +PC7.Signal=LTDC_G6 PC8.Mode=SD_4_bits_Wide_bus PC8.Signal=SDIO_D0 PC9.Mode=SD_4_bits_Wide_bus @@ -177,11 +227,9 @@ PD14.Signal=FMC_D0_DA0 PD15.Signal=FMC_D1_DA1 PD2.Mode=SD_4_bits_Wide_bus PD2.Signal=SDIO_CMD -PD5.Mode=Asynchronous -PD5.Signal=USART2_TX PD6.Locked=true -PD6.Mode=Asynchronous -PD6.Signal=USART2_RX +PD6.Mode=RGB888 +PD6.Signal=LTDC_B2 PD8.Signal=FMC_D13_DA13 PD9.Signal=FMC_D14_DA14 PE0.Signal=FMC_NBL0 @@ -192,11 +240,19 @@ PE12.Signal=FMC_D9_DA9 PE13.Signal=FMC_D10_DA10 PE14.Signal=FMC_D11_DA11 PE15.Signal=FMC_D12_DA12 +PE4.Mode=RGB888 +PE4.Signal=LTDC_B0 +PE5.Mode=RGB888 +PE5.Signal=LTDC_G0 +PE6.Mode=RGB888 +PE6.Signal=LTDC_G1 PE7.Signal=FMC_D4_DA4 PE8.Signal=FMC_D5_DA5 PE9.Signal=FMC_D6_DA6 PF0.Signal=FMC_A0 PF1.Signal=FMC_A1 +PF10.Mode=RGB888 +PF10.Signal=LTDC_DE PF11.Signal=FMC_SDNRAS PF12.Signal=FMC_A6 PF13.Signal=FMC_A7 @@ -216,6 +272,13 @@ PF9.Mode=Full_Duplex_Master PF9.Signal=SPI5_MOSI PG0.Signal=FMC_A10 PG1.Signal=FMC_A11 +PG10.Locked=true +PG10.Mode=RGB888 +PG10.Signal=LTDC_G3 +PG11.Mode=RGB888 +PG11.Signal=LTDC_B3 +PG12.Mode=RGB888 +PG12.Signal=LTDC_B1 PG13.Locked=true PG13.Mode=RMII PG13.Signal=ETH_TXD0 @@ -225,6 +288,10 @@ PG14.Signal=ETH_TXD1 PG15.Signal=FMC_SDNCAS PG4.Signal=FMC_A14_BA0 PG5.Signal=FMC_A15_BA1 +PG6.Mode=RGB888 +PG6.Signal=LTDC_R7 +PG7.Mode=RGB888 +PG7.Signal=LTDC_CLK PG8.Signal=FMC_SDCLK PH0/OSC_IN.Mode=HSE-External-Oscillator PH0/OSC_IN.Signal=RCC_OSC_IN @@ -234,10 +301,31 @@ PH10.Locked=true PH10.Signal=S_TIM5_CH1 PH11.Signal=S_TIM5_CH2 PH12.Signal=S_TIM5_CH3 +PH13.Mode=RGB888 +PH13.Signal=LTDC_G2 +PH15.Mode=RGB888 +PH15.Signal=LTDC_G4 +PH2.Locked=true +PH2.Mode=RGB888 +PH2.Signal=LTDC_R0 +PH3.Mode=RGB888 +PH3.Signal=LTDC_R1 PH6.Mode=SdramChipSelect2_1 PH6.Signal=FMC_SDNE1 PH7.Mode=SdramChipSelect2_1 PH7.Signal=FMC_SDCKE1 +PH8.Mode=RGB888 +PH8.Signal=LTDC_R2 +PI0.Mode=RGB888 +PI0.Signal=LTDC_G5 +PI10.Mode=RGB888 +PI10.Signal=LTDC_HSYNC +PI2.Mode=RGB888 +PI2.Signal=LTDC_G7 +PI4.Mode=RGB888 +PI4.Signal=LTDC_B4 +PI9.Mode=RGB888 +PI9.Signal=LTDC_VSYNC PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false @@ -265,7 +353,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=MDK-ARM V5 ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ETH_Init-ETH-false-HAL-true,5-MX_SPI5_Init-SPI5-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_IWDG_Init-IWDG-false-HAL-true,10-MX_TIM14_Init-TIM14-false-HAL-true,11-MX_TIM13_Init-TIM13-false-HAL-true,12-MX_TIM11_Init-TIM11-false-HAL-true,13-MX_SDIO_SD_Init-SDIO-false-HAL-true,14-MX_TIM5_Init-TIM5-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ETH_Init-ETH-false-HAL-true,5-MX_SPI5_Init-SPI5-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_IWDG_Init-IWDG-false-HAL-true,10-MX_TIM14_Init-TIM14-false-HAL-true,11-MX_TIM13_Init-TIM13-false-HAL-true,12-MX_TIM11_Init-TIM11-false-HAL-true,13-MX_SDIO_SD_Init-SDIO-false-HAL-true,14-MX_TIM5_Init-TIM5-false-HAL-true,15-MX_LTDC_Init-LTDC-false-HAL-true,16-MX_DMA2D_Init-DMA2D-false-HAL-true RCC.48MHZClocksFreq_Value=45000000 RCC.AHBFreq_Value=180000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 @@ -282,8 +370,8 @@ RCC.HCLKFreq_Value=180000000 RCC.HSE_VALUE=25000000 RCC.HSI_VALUE=16000000 RCC.I2SClocksFreq_Value=160000000 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ -RCC.LCDTFTFreq_Value=20416666.666666668 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSAIN,PLLSourceVirtual,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ +RCC.LCDTFTFreq_Value=25000000 RCC.LSI_VALUE=32000 RCC.MCO2PinFreq_Value=180000000 RCC.PLLCLKFreq_Value=180000000 @@ -291,21 +379,22 @@ RCC.PLLM=15 RCC.PLLN=216 RCC.PLLQ=8 RCC.PLLQCLKFreq_Value=45000000 +RCC.PLLSAIN=60 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE RCC.RCC_RTC_Clock_SourceVirtual=RCC_RTCCLKSOURCE_LSE RCC.RTCFreq_Value=32768 RCC.RTCHSEDivFreq_Value=12500000 -RCC.SAI_AClocksFreq_Value=20416666.666666668 -RCC.SAI_BClocksFreq_Value=20416666.666666668 +RCC.SAI_AClocksFreq_Value=25000000 +RCC.SAI_BClocksFreq_Value=25000000 RCC.SYSCLKFreq_VALUE=180000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.VCOI2SOutputFreq_Value=320000000 RCC.VCOInputFreq_Value=1666666.6666666667 RCC.VCOOutputFreq_Value=360000000 -RCC.VCOSAIOutputFreq_Value=81666666.66666667 -RCC.VCOSAIOutputFreq_ValueQ=20416666.666666668 -RCC.VCOSAIOutputFreq_ValueR=40833333.333333336 +RCC.VCOSAIOutputFreq_Value=100000000 +RCC.VCOSAIOutputFreq_ValueQ=25000000 +RCC.VCOSAIOutputFreq_ValueR=50000000 RCC.VcooutputI2S=160000000 RCC.VcooutputI2SQ=160000000 SH.ADCx_IN13.0=ADC1_IN13,IN13 @@ -388,9 +477,10 @@ SH.S_TIM5_CH2.0=TIM5_CH2,PWM Generation2 CH2 SH.S_TIM5_CH2.ConfNb=1 SH.S_TIM5_CH3.0=TIM5_CH3,PWM Generation3 CH3 SH.S_TIM5_CH3.ConfNb=1 +SPI5.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2 SPI5.CalculateBaudRate=45.0 MBits/s SPI5.Direction=SPI_DIRECTION_2LINES -SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI5.Mode=SPI_MODE_MASTER SPI5.VirtualType=VM_MASTER TIM5.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 @@ -399,8 +489,8 @@ TIM5.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM5.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3 USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC -USART2.IPParameters=VirtualMode -USART2.VirtualMode=VM_ASYNC +VP_DMA2D_VS_DMA2D.Mode=DMA2D_Activate +VP_DMA2D_VS_DMA2D.Signal=DMA2D_VS_DMA2D VP_IWDG_VS_IWDG.Mode=IWDG_Activate VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled diff --git a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h index eb06eacdbb..ae8de6dc4d 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h +++ b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© 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: @@ -56,7 +56,7 @@ /* #define HAL_CRYP_MODULE_ENABLED */ /* #define HAL_DAC_MODULE_ENABLED */ /* #define HAL_DCMI_MODULE_ENABLED */ -/* #define HAL_DMA2D_MODULE_ENABLED */ +#define HAL_DMA2D_MODULE_ENABLED #define HAL_ETH_MODULE_ENABLED /* #define HAL_NAND_MODULE_ENABLED */ /* #define HAL_NOR_MODULE_ENABLED */ @@ -67,7 +67,7 @@ /* #define HAL_I2C_MODULE_ENABLED */ /* #define HAL_I2S_MODULE_ENABLED */ #define HAL_IWDG_MODULE_ENABLED -/* #define HAL_LTDC_MODULE_ENABLED */ +#define HAL_LTDC_MODULE_ENABLED /* #define HAL_RNG_MODULE_ENABLED */ #define HAL_RTC_MODULE_ENABLED /* #define HAL_SAI_MODULE_ENABLED */ diff --git a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/main.c index 2c8df9fe2e..687ab16c5d 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/main.c +++ b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/main.c @@ -64,10 +64,14 @@ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; +DMA2D_HandleTypeDef hdma2d; + ETH_HandleTypeDef heth; IWDG_HandleTypeDef hiwdg; +LTDC_HandleTypeDef hltdc; + RTC_HandleTypeDef hrtc; SD_HandleTypeDef hsd; @@ -80,7 +84,6 @@ TIM_HandleTypeDef htim13; TIM_HandleTypeDef htim14; UART_HandleTypeDef huart1; -UART_HandleTypeDef huart2; SDRAM_HandleTypeDef hsdram1; @@ -103,7 +106,8 @@ static void MX_TIM13_Init(void); static void MX_TIM11_Init(void); static void MX_SDIO_SD_Init(void); static void MX_TIM5_Init(void); -static void MX_USART2_UART_Init(void); +static void MX_LTDC_Init(void); +static void MX_DMA2D_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -153,7 +157,8 @@ int main(void) MX_TIM11_Init(); MX_SDIO_SD_Init(); MX_TIM5_Init(); - MX_USART2_UART_Init(); + MX_LTDC_Init(); + MX_DMA2D_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -219,7 +224,10 @@ void SystemClock_Config(void) { Error_Handler(); } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 60; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { @@ -277,6 +285,43 @@ static void MX_ADC1_Init(void) } +/** + * @brief DMA2D Initialization Function + * @param None + * @retval None + */ +static void MX_DMA2D_Init(void) +{ + + /* USER CODE BEGIN DMA2D_Init 0 */ + + /* USER CODE END DMA2D_Init 0 */ + + /* USER CODE BEGIN DMA2D_Init 1 */ + + /* USER CODE END DMA2D_Init 1 */ + hdma2d.Instance = DMA2D; + hdma2d.Init.Mode = DMA2D_M2M; + hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888; + hdma2d.Init.OutputOffset = 0; + hdma2d.LayerCfg[1].InputOffset = 0; + hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; + hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; + hdma2d.LayerCfg[1].InputAlpha = 0; + if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) + { + Error_Handler(); + } + if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN DMA2D_Init 2 */ + + /* USER CODE END DMA2D_Init 2 */ + +} + /** * @brief ETH Initialization Function * @param None @@ -350,6 +395,88 @@ static void MX_IWDG_Init(void) } +/** + * @brief LTDC Initialization Function + * @param None + * @retval None + */ +static void MX_LTDC_Init(void) +{ + + /* USER CODE BEGIN LTDC_Init 0 */ + + /* USER CODE END LTDC_Init 0 */ + + LTDC_LayerCfgTypeDef pLayerCfg = {0}; + LTDC_LayerCfgTypeDef pLayerCfg1 = {0}; + + /* USER CODE BEGIN LTDC_Init 1 */ + + /* USER CODE END LTDC_Init 1 */ + hltdc.Instance = LTDC; + hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; + hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; + hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; + hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + hltdc.Init.HorizontalSync = 7; + hltdc.Init.VerticalSync = 3; + hltdc.Init.AccumulatedHBP = 14; + hltdc.Init.AccumulatedVBP = 5; + hltdc.Init.AccumulatedActiveW = 654; + hltdc.Init.AccumulatedActiveH = 485; + hltdc.Init.TotalWidth = 660; + hltdc.Init.TotalHeigh = 487; + hltdc.Init.Backcolor.Blue = 0; + hltdc.Init.Backcolor.Green = 0; + hltdc.Init.Backcolor.Red = 0; + if (HAL_LTDC_Init(&hltdc) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg.WindowX0 = 0; + pLayerCfg.WindowX1 = 0; + pLayerCfg.WindowY0 = 0; + pLayerCfg.WindowY1 = 0; + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg.Alpha = 0; + pLayerCfg.Alpha0 = 0; + pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg.FBStartAdress = 0; + pLayerCfg.ImageWidth = 0; + pLayerCfg.ImageHeight = 0; + pLayerCfg.Backcolor.Blue = 0; + pLayerCfg.Backcolor.Green = 0; + pLayerCfg.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg1.WindowX0 = 0; + pLayerCfg1.WindowX1 = 0; + pLayerCfg1.WindowY0 = 0; + pLayerCfg1.WindowY1 = 0; + pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg1.Alpha = 0; + pLayerCfg1.Alpha0 = 0; + pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg1.FBStartAdress = 0; + pLayerCfg1.ImageWidth = 0; + pLayerCfg1.ImageHeight = 0; + pLayerCfg1.Backcolor.Blue = 0; + pLayerCfg1.Backcolor.Green = 0; + pLayerCfg1.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LTDC_Init 2 */ + + /* USER CODE END LTDC_Init 2 */ + +} + /** * @brief RTC Initialization Function * @param None @@ -647,39 +774,6 @@ static void MX_USART1_UART_Init(void) } -/** - * @brief USART2 Initialization Function - * @param None - * @retval None - */ -static void MX_USART2_UART_Init(void) -{ - - /* USER CODE BEGIN USART2_Init 0 */ - - /* USER CODE END USART2_Init 0 */ - - /* USER CODE BEGIN USART2_Init 1 */ - - /* USER CODE END USART2_Init 1 */ - huart2.Instance = USART2; - huart2.Init.BaudRate = 115200; - huart2.Init.WordLength = UART_WORDLENGTH_8B; - huart2.Init.StopBits = UART_STOPBITS_1; - huart2.Init.Parity = UART_PARITY_NONE; - huart2.Init.Mode = UART_MODE_TX_RX; - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart2) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART2_Init 2 */ - - /* USER CODE END USART2_Init 2 */ - -} - /* FMC initialization function */ static void MX_FMC_Init(void) { @@ -724,13 +818,14 @@ static void MX_GPIO_Init(void) { /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); } diff --git a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c index 21c1ce4d48..380fd93b83 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c +++ b/bsp/stm32/stm32f429-fire-challenger/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -163,6 +163,53 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) } +/** +* @brief DMA2D MSP Initialization +* This function configures the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ +void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspInit 0 */ + + /* USER CODE END DMA2D_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_DMA2D_CLK_ENABLE(); + /* USER CODE BEGIN DMA2D_MspInit 1 */ + + /* USER CODE END DMA2D_MspInit 1 */ + } + +} + +/** +* @brief DMA2D MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ + +void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspDeInit 0 */ + + /* USER CODE END DMA2D_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_DMA2D_CLK_DISABLE(); + /* USER CODE BEGIN DMA2D_MspDeInit 1 */ + + /* USER CODE END DMA2D_MspDeInit 1 */ + } + +} + /** * @brief ETH MSP Initialization * This function configures the hardware resources used in this example @@ -275,6 +322,225 @@ void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth) } +/** +* @brief LTDC MSP Initialization +* This function configures the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ +void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspInit 0 */ + + /* USER CODE END LTDC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_LTDC_CLK_ENABLE(); + + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**LTDC GPIO Configuration + PE4 ------> LTDC_B0 + PE5 ------> LTDC_G0 + PE6 ------> LTDC_G1 + PI9 ------> LTDC_VSYNC + PI10 ------> LTDC_HSYNC + PF10 ------> LTDC_DE + PH2 ------> LTDC_R0 + PH3 ------> LTDC_R1 + PA3 ------> LTDC_B5 + PB0 ------> LTDC_R3 + PB1 ------> LTDC_R6 + PH8 ------> LTDC_R2 + PG6 ------> LTDC_R7 + PG7 ------> LTDC_CLK + PC7 ------> LTDC_G6 + PA11 ------> LTDC_R4 + PA12 ------> LTDC_R5 + PH13 ------> LTDC_G2 + PH15 ------> LTDC_G4 + PI0 ------> LTDC_G5 + PI2 ------> LTDC_G7 + PD6 ------> LTDC_B2 + PG10 ------> LTDC_G3 + PG11 ------> LTDC_B3 + PG12 ------> LTDC_B1 + PB8 ------> LTDC_B6 + PB9 ------> LTDC_B7 + PI4 ------> LTDC_B4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_2 + |GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PIN_13 + |GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN LTDC_MspInit 1 */ + + /* USER CODE END LTDC_MspInit 1 */ + } + +} + +/** +* @brief LTDC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ + +void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) +{ + + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspDeInit 0 */ + + /* USER CODE END LTDC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LTDC_CLK_DISABLE(); + + /**LTDC GPIO Configuration + PE4 ------> LTDC_B0 + PE5 ------> LTDC_G0 + PE6 ------> LTDC_G1 + PI9 ------> LTDC_VSYNC + PI10 ------> LTDC_HSYNC + PF10 ------> LTDC_DE + PH2 ------> LTDC_R0 + PH3 ------> LTDC_R1 + PA3 ------> LTDC_B5 + PB0 ------> LTDC_R3 + PB1 ------> LTDC_R6 + PH8 ------> LTDC_R2 + PG6 ------> LTDC_R7 + PG7 ------> LTDC_CLK + PC7 ------> LTDC_G6 + PA11 ------> LTDC_R4 + PA12 ------> LTDC_R5 + PH13 ------> LTDC_G2 + PH15 ------> LTDC_G4 + PI0 ------> LTDC_G5 + PI2 ------> LTDC_G7 + PD6 ------> LTDC_B2 + PG10 ------> LTDC_G3 + PG11 ------> LTDC_B3 + PG12 ------> LTDC_B1 + PB8 ------> LTDC_B6 + PB9 ------> LTDC_B7 + PI4 ------> LTDC_B4 + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6); + + HAL_GPIO_DeInit(GPIOI, GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_2 + |GPIO_PIN_4); + + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_10); + + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PIN_13 + |GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_11|GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8|GPIO_PIN_9); + + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_6); + + /* USER CODE BEGIN LTDC_MspDeInit 1 */ + + /* USER CODE END LTDC_MspDeInit 1 */ + } + +} + /** * @brief RTC MSP Initialization * This function configures the hardware resources used in this example @@ -659,30 +925,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) /* USER CODE END USART1_MspInit 1 */ } - else if(huart->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspInit 0 */ - - /* USER CODE END USART2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_USART2_CLK_ENABLE(); - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN USART2_MspInit 1 */ - - /* USER CODE END USART2_MspInit 1 */ - } } @@ -716,24 +958,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) /* USER CODE END USART1_MspDeInit 1 */ } - else if(huart->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspDeInit 0 */ - - /* USER CODE END USART2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART2_CLK_DISABLE(); - - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6); - - /* USER CODE BEGIN USART2_MspDeInit 1 */ - - /* USER CODE END USART2_MspDeInit 1 */ - } } diff --git a/bsp/stm32/stm32f429-fire-challenger/board/Kconfig b/bsp/stm32/stm32f429-fire-challenger/board/Kconfig index 252f188c27..4e8b545302 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/Kconfig +++ b/bsp/stm32/stm32f429-fire-challenger/board/Kconfig @@ -21,6 +21,7 @@ menu "Onboard Peripheral Drivers" config BSP_USING_SDRAM bool "Enable SDRAM" + select BSP_USING_FMC default n config BSP_USING_SPI_FLASH @@ -30,6 +31,12 @@ menu "Onboard Peripheral Drivers" select RT_USING_SFUD select RT_SFUD_USING_SFDP default n + + config BSP_USING_LCD + bool "Enable LCD" + select BSP_USING_LTDC + select BSP_USING_SDRAM + default n config BSP_USING_MPU6050 bool "Enable MPU6050 (i2c1)" @@ -214,6 +221,13 @@ menu "On-chip Peripheral Drivers" select RT_USING_DFS default n + config BSP_USING_FMC + bool + default n + + config BSP_USING_LTDC + bool + default n endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f429-fire-challenger/board/board.c b/bsp/stm32/stm32f429-fire-challenger/board/board.c index 5318a52390..2ba9e9a7a2 100644 --- a/bsp/stm32/stm32f429-fire-challenger/board/board.c +++ b/bsp/stm32/stm32f429-fire-challenger/board/board.c @@ -12,54 +12,57 @@ void SystemClock_Config(void) { - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {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_LSI|RCC_OSCILLATORTYPE_HSE - |RCC_OSCILLATORTYPE_LSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.LSIState = RCC_LSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLM = 15; - RCC_OscInitStruct.PLL.PLLN = 216; - RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - RCC_OscInitStruct.PLL.PLLQ = 8; - 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; + /**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_LSI | RCC_OSCILLATORTYPE_HSE + | RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.LSIState = RCC_LSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 15; + RCC_OscInitStruct.PLL.PLLN = 216; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 8; + 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(); - } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_RTC; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 60; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; + PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } } diff --git a/bsp/stm32/stm32f429-fire-challenger/board/ports/lcd_port.h b/bsp/stm32/stm32f429-fire-challenger/board/ports/lcd_port.h new file mode 100644 index 0000000000..fc01e6f4ae --- /dev/null +++ b/bsp/stm32/stm32f429-fire-challenger/board/ports/lcd_port.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-08 zylx first version + */ + +#ifndef __LCD_PORT_H__ +#define __LCD_PORT_H__ + +/* fire 5 inch screen, 800 * 480 */ +#define LCD_WIDTH 800 +#define LCD_HEIGHT 480 +#define LCD_BITS_PER_PIXEL 16 +#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * BITS_PER_PIXEL / 8) +#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 + +#define LCD_HSYNC_WIDTH 2 +#define LCD_VSYNC_HEIGHT 2 +#define LCD_HBP 46 +#define LCD_VBP 23 +#define LCD_HFP 22 +#define LCD_VFP 22 + +#define LCD_BACKLIGHT_USING_GPIO +#define LCD_BL_GPIO_NUM GET_PIN(D, 7) +#define LCD_DISP_GPIO_NUM GET_PIN(D, 4) +/* fire 5 inch screen, 800 * 480 */ + +#endif /* __LCD_PORT_H__ */ From 4b517c4c533bb9428d35f7fbe6f0cb54de5e9f9c Mon Sep 17 00:00:00 2001 From: SummerGift Date: Mon, 14 Jan 2019 18:29:20 +0800 Subject: [PATCH 15/26] [bsp][stm32] add new bsp ci --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index fde8606ac3..f00daccfca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -90,6 +90,7 @@ env: - RTT_BSP='stm32/stm32f429-armfly-v6' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32f429-atk-apollo' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32f429-fire-challenger' RTT_TOOL_CHAIN='sourcery-arm' + - RTT_BSP='stm32/stm32f446-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32f767-atk-apollo' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32f767-fire-challenger' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l475-atk-pandora' RTT_TOOL_CHAIN='sourcery-arm' From 67c41b3d923954de7707edd50f9553014390af01 Mon Sep 17 00:00:00 2001 From: jinsheng Date: Mon, 14 Jan 2019 21:28:34 +0800 Subject: [PATCH 16/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f746-st-disco/README.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/bsp/stm32/stm32f746-st-disco/README.md b/bsp/stm32/stm32f746-st-disco/README.md index 1d9ad2f316..0177bce226 100644 --- a/bsp/stm32/stm32f746-st-disco/README.md +++ b/bsp/stm32/stm32f746-st-disco/README.md @@ -35,13 +35,28 @@ STM32F746-disco 是 ST 推出的一款基于 ARM Cortex-M7 内核的开发板, ## 外设支持 本 BSP 目前对外设的支持情况如下: - +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 板载 ST-LINK 转串口 | 支持 | UART1 | +| QSPI Flash | 暂不支持 | | +| 以太网 | 暂不支持 | | +| SDRAM | 暂不支持 | | +| SD卡 | 暂不支持 | | +| 4.3寸电容屏 | 暂不支持 | | +| MEMS麦克风 | 暂不支持 | | | **片上外设** | **支持情况** | **备注** | | :------------ | :----------: | :-----------------------------------: | -| GPIO | 支持 | PI1 | -| UART | 支持 | UART1 | -| SD卡 | 暂不支持 | 即将支持 | -| 以太网 | 暂不支持 | 即将支持 | +| GPIO | 支持 | PA0, PA1... PK7 ---> PIN: 0, 1...168 | +| UART | 支持 | UART1 | +| SPI | 暂不支持 | 即将支持 | +| QSPI | 暂不支持 | 即将支持 | +| I2C | 暂不支持 | 即将支持 | +| FLASH | 暂不支持 | 即将支持 | +| WDT | 暂不支持 | 即将支持 | +| SDIO | 暂不支持 | 即将支持 | +| USB Device | 暂不支持 | 即将支持 | +| USB Host | 暂不支持 | 即将支持 | +| SAI | 暂不支持 | 即将支持 | ## 使用说明 From ae84c617e2db80da9d02e14c61241ab268d7b5a2 Mon Sep 17 00:00:00 2001 From: "dingo1688@126.com" Date: Mon, 14 Jan 2019 23:24:24 +0800 Subject: [PATCH 17/26] Add stm32f103-hw100k-ibox. --- bsp/stm32/stm32f103-hw100k-ibox/.config | 347 ++ bsp/stm32/stm32f103-hw100k-ibox/.gitignore | 42 + bsp/stm32/stm32f103-hw100k-ibox/Kconfig | 22 + bsp/stm32/stm32f103-hw100k-ibox/README.md | 119 + bsp/stm32/stm32f103-hw100k-ibox/SConscript | 14 + bsp/stm32/stm32f103-hw100k-ibox/SConstruct | 58 + .../applications/SConscript | 11 + .../stm32f103-hw100k-ibox/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 12 + .../board/CubeMX_Config/CubeMX_Config.ioc | 120 + .../board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 370 +++ .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 245 ++ .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 179 ++ .../board/CubeMX_Config/Src/stm32f1xx_it.c | 217 ++ bsp/stm32/stm32f103-hw100k-ibox/board/Kconfig | 41 + .../stm32f103-hw100k-ibox/board/SConscript | 35 + bsp/stm32/stm32f103-hw100k-ibox/board/board.c | 44 + bsp/stm32/stm32f103-hw100k-ibox/board/board.h | 49 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 143 + .../board/linker_scripts/link.sct | 15 + .../stm32f103-hw100k-ibox/figures/board.png | Bin 0 -> 645349 bytes bsp/stm32/stm32f103-hw100k-ibox/project.ewd | 2810 +++++++++++++++++ bsp/stm32/stm32f103-hw100k-ibox/project.ewp | 2244 +++++++++++++ bsp/stm32/stm32f103-hw100k-ibox/project.eww | 10 + bsp/stm32/stm32f103-hw100k-ibox/project.uvopt | 194 ++ .../stm32f103-hw100k-ibox/project.uvoptx | 191 ++ .../stm32f103-hw100k-ibox/project.uvproj | 832 +++++ .../stm32f103-hw100k-ibox/project.uvprojx | 799 +++++ bsp/stm32/stm32f103-hw100k-ibox/rtconfig.h | 172 + bsp/stm32/stm32f103-hw100k-ibox/rtconfig.py | 134 + bsp/stm32/stm32f103-hw100k-ibox/template.ewp | 2024 ++++++++++++ bsp/stm32/stm32f103-hw100k-ibox/template.eww | 7 + .../stm32f103-hw100k-ibox/template.uvopt | 194 ++ .../stm32f103-hw100k-ibox/template.uvoptx | 191 ++ .../stm32f103-hw100k-ibox/template.uvproj | 421 +++ .../stm32f103-hw100k-ibox/template.uvprojx | 394 +++ 39 files changed, 12936 insertions(+) create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/.config create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/.gitignore create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/Kconfig create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/README.md create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/SConscript create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/SConstruct create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/applications/SConscript create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/applications/main.c create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_it.h create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_it.c create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/Kconfig create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/SConscript create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/board.c create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/board.h create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/figures/board.png create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.ewd create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.ewp create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.eww create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.uvopt create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.uvoptx create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.uvproj create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/project.uvprojx create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/rtconfig.h create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/rtconfig.py create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.ewp create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.eww create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.uvopt create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.uvoptx create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.uvproj create mode 100644 bsp/stm32/stm32f103-hw100k-ibox/template.uvprojx diff --git a/bsp/stm32/stm32f103-hw100k-ibox/.config b/bsp/stm32/stm32f103-hw100k-ibox/.config new file mode 100644 index 0000000000..0cc491bbf1 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/.config @@ -0,0 +1,347 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40000 +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M3=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# ARM CMSIS +# +# CONFIG_RT_USING_CMSIS_OS is not set +# CONFIG_RT_USING_RTT_CMSIS is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F103ZE=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 + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f103-hw100k-ibox/.gitignore b/bsp/stm32/stm32f103-hw100k-ibox/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32f103-hw100k-ibox/Kconfig b/bsp/stm32/stm32f103-hw100k-ibox/Kconfig new file mode 100644 index 0000000000..2b30840a3e --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +config $BSP_DIR + string + option env="BSP_ROOT" + default "." + +config $RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config $PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/README.md b/bsp/stm32/stm32f103-hw100k-ibox/README.md new file mode 100644 index 0000000000..99e81b38ad --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/README.md @@ -0,0 +1,119 @@ +# STM32F103 硬十 iBox BSP 说明 + +## 简介 + +本文档为 STM32F103 硬件十万个为什么 iBox 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +硬十的iBox开发板是一款基于 ARM Cortex-M3 内核的开发板,是一群硬件匠人潜心打造的物联网开源硬件,最高主频 72MHz,含有丰富的板载资源,可以充分发挥 STM32F103 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F103ZE,主频 72MHz,512KB FLASH ,64KB RAM +- 外部 RAM:无 +- 外部 FLASH:无 +- 常用外设 + - LED:3个,D7(黄色,PE10),D6(绿色,PE9),D43(白色,PE12) + - 按键:1个,sw1(PE15) + - 外部看门狗 1个 U5 (PG6) +- 常用接口:串口、SPI接口等 +- 调试接口,标准 JTAG/SWD + +开发板更多详细信息请参考【硬十】 [ iBox 开发板介绍 ] (http://www.hw100k.com/forum.php?mod=viewthread&tid=3441&extra=page%3D2)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 以太网 | 暂不支持 | 即将支持 使用 W5500 | +| RS485 | 暂不支持 | 即将支持 使用 UART4 | +| LoRa | 暂不支持 | 即将支持 使用 SPI1 LSD4RF | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PG15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART1 | +| SPI | 暂不支持 | | +| I2C | 暂不支持 | 即将支持 软件 I2C | +| RTC | 暂不支持 | 即将支持 | +| PWM | 暂不支持 | 即将支持 | +| IWG | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | +| WIFI ESP8266 | 暂不支持 | 即将支持 使用 UART3 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用USB转串口线,其中开发板上 Tx 接 串口线 TXD, 开发板 Rx 接 串口线 RXD ,再将串口线接到 PC,接通12V外接电源,接上 Jlink 仿真器。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 JLink 仿真器下载程序,在通过 JLink连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,其中一个电源指示灯红灯常亮,绿色 LED 会周期性闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Jan 11 2019 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用以太网、WIFI 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 此开发板外部高速晶振是 12MHz。 + +## 联系人信息 + +维护人: + +- [XiaojieFan](https://github.com/XiaojieFan), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f103-hw100k-ibox/SConscript b/bsp/stm32/stm32f103-hw100k-ibox/SConscript new file mode 100644 index 0000000000..fe0ae941ae --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f103-hw100k-ibox/SConstruct b/bsp/stm32/stm32f103-hw100k-ibox/SConstruct new file mode 100644 index 0000000000..c28354a99d --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/SConstruct @@ -0,0 +1,58 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32F1xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f103-hw100k-ibox/applications/SConscript b/bsp/stm32/stm32f103-hw100k-ibox/applications/SConscript new file mode 100644 index 0000000000..04f04dd543 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f103-hw100k-ibox/applications/main.c b/bsp/stm32/stm32f103-hw100k-ibox/applications/main.c new file mode 100644 index 0000000000..78265f712e --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + */ + +#include +#include +#include +#include "drv_gpio.h" +/* defined the LED0 pin: PE9 */ +#define LED0_PIN GET_PIN(E, 9) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..6bde7bd277 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/.mxproject @@ -0,0 +1,12 @@ +[PreviousGenFiles] +HeaderPath=D:/rt-thread/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=D:/rt-thread/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c; + +[] +SourceFiles=;; + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..cf520d7f25 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,120 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F1 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32F103Z(C-D-E)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=OSC_IN +Mcu.Pin3=OSC_OUT +Mcu.Pin4=PA9 +Mcu.Pin5=PA10 +Mcu.Pin6=PA13 +Mcu.Pin7=PA14 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103ZETx +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +OSC_IN.Mode=HSE-External-Oscillator +OSC_IN.Signal=RCC_OSC_IN +OSC_OUT.Mode=HSE-External-Oscillator +OSC_OUT.Signal=RCC_OSC_OUT +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F103 +PCC.MCU=STM32F103Z(C-D-E)Tx +PCC.PartNumber=STM32F103ZETx +PCC.Seq0=0 +PCC.Series=STM32F1 +PCC.Temperature=25 +PCC.Vdd=3.3 +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=STM32F103ZETx +ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.7.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.ADCFreqValue=36000000 +RCC.AHBFreq_Value=72000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 +RCC.FSMCFreq_Value=72000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.HSE_VALUE=12000000 +RCC.I2S2Freq_Value=72000000 +RCC.I2S3Freq_Value=72000000 +RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLMCOFreq_Value=36000000 +RCC.PLLMUL=RCC_PLL_MUL6 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SDIOFreq_Value=72000000 +RCC.SDIOHCLKDiv2FreqValue=36000000 +RCC.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=12000000 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..f5223c28c5 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,91 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 0000000000..a73bfac831 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h @@ -0,0 +1,370 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2019 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DMA_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2 +#define MAC_ADDR1 0 +#define MAC_ADDR2 0 +#define MAC_ADDR3 0 +#define MAC_ADDR4 0 +#define MAC_ADDR5 0 + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FF) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) + +#define PHY_READ_TO ((uint32_t)0x0000FFFF) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f1xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_it.h new file mode 100644 index 0000000000..3e7d92a704 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Inc/stm32f1xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..8ddca40198 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/main.c @@ -0,0 +1,245 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c new file mode 100644 index 0000000000..b22009fcdb --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -0,0 +1,179 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /**NOJTAG: JTAG-DP Disabled and SW-DP Enabled + */ + __HAL_AFIO_REMAP_SWJ_NOJTAG(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ + +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_it.c new file mode 100644 index 0000000000..14903b5134 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/CubeMX_Config/Src/stm32f1xx_it.c @@ -0,0 +1,217 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f1xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F1xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/Kconfig b/bsp/stm32/stm32f103-hw100k-ibox/board/Kconfig new file mode 100644 index 0000000000..32083b55d9 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/Kconfig @@ -0,0 +1,41 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F103ZE + bool + select SOC_SERIES_STM32F1 + default y + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + 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 + + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/SConscript b/bsp/stm32/stm32f103-hw100k-ibox/board/SConscript new file mode 100644 index 0000000000..0f7ccb024c --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/SConscript @@ -0,0 +1,35 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f1xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xe.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/arm/startup_stm32f103xe.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xe.s'] + +# STM32F100xB || STM32F100xE || STM32F101x6 +# STM32F101xB || STM32F101xE || STM32F101xG +# STM32F102x6 || STM32F102xB || STM32F103x6 +# STM32F103xB || STM32F103xE || STM32F103xG +# STM32F105xC || STM32F107xC) +# You can select chips from the list above +CPPDEFINES = ['STM32F103xE'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/board.c b/bsp/stm32/stm32f103-hw100k-ibox/board/board.c new file mode 100644 index 0000000000..d29afeb4a5 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/board.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/board.h b/bsp/stm32/stm32f103-hw100k-ibox/board/board.h new file mode 100644 index 0000000000..10cf07b635 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/board.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift change to new framework + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (512 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 64 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.icf new file mode 100644 index 0000000000..c61b82bd39 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/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__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-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/stm32f103-hw100k-ibox/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.lds new file mode 100644 index 0000000000..52ffe5e459 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.lds @@ -0,0 +1,143 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0835abf43e --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00010000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/figures/board.png b/bsp/stm32/stm32f103-hw100k-ibox/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..4da0a7c61298f3ad078f2424c6e67f632d72fb78 GIT binary patch literal 645349 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
^9YEIcU##0k84PdI_u+}4Uo_3sX9^-(#X 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
  • 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
    &AL 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 l+f>388vQgL0ev}kKrc24LGld>m_>QS!n+lzW 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�<}ycqRs#1-hez? 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%0A(A0|UTes`5 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%0A?K1%pNqn6fx*;NX-8qd%B0bKGnrXs8Kh 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 aUjG&QY6|EwDRck;0000 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 28 + 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\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 28 + 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\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.ewp b/bsp/stm32/stm32f103-hw100k-ibox/project.ewp new file mode 100644 index 0000000000..71f9f53ba5 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.ewp @@ -0,0 +1,2244 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 28 + 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 + + 28 + 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\stm32f1xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar\startup_stm32f103xe.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-m3\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\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\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.eww b/bsp/stm32/stm32f103-hw100k-ibox/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.uvopt b/bsp/stm32/stm32f103-hw100k-ibox/project.uvopt new file mode 100644 index 0000000000..609be69d10 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.uvopt @@ -0,0 +1,194 @@ + + + + 1.0 + +

    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + + 0 + Reference Manual + DATASHTS\ST\STM32F10xxx.PDF + + + 1 + Technical Reference Manual + datashts\arm\cortex_m3\r1p1\DDI0337E_CORTEX_M3_R1P1_TRM.PDF + + + 2 + Generic User Guide + datashts\arm\cortex_m3\r2p1\DUI0552A_CORTEX_M3_DGUG.PDF + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.uvoptx b/bsp/stm32/stm32f103-hw100k-ibox/project.uvoptx new file mode 100644 index 0000000000..eccd61de78 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.uvoptx @@ -0,0 +1,191 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.uvproj b/bsp/stm32/stm32f103-hw100k-ibox/project.uvproj new file mode 100644 index 0000000000..d84400e179 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.uvproj @@ -0,0 +1,832 @@ + + + 1.1 +
    ### uVision Project, (C) Keil Software
    + + + rt-thread + 0x4 + ARM-ADS + 0 + + + STM32F103ZE + STMicroelectronics + IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_hd.s" ("STM32 High Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) + 4216 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103ZE + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103ZE + + + + 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 + 4 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32F103xE + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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 + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.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-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\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_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/project.uvprojx b/bsp/stm32/stm32f103-hw100k-ibox/project.uvprojx new file mode 100644 index 0000000000..db1cb69fcf --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/project.uvprojx @@ -0,0 +1,799 @@ + + + 2.1 +
    ### uVision Project, (C) Keil Software
    + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.2.2.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x10000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 4216 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103ZE + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103ZE + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 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, STM32F103xE + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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 + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.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-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\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_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_sram.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_sram.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.h b/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.h new file mode 100644 index 0000000000..91a1e20bcc --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.h @@ -0,0 +1,172 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40000 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M3 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* ARM CMSIS */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F1 + +/* Hardware Drivers Config */ + +#define SOC_STM32F103ZE + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.py b/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.py new file mode 100644 index 0000000000..40826ac99e --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/rtconfig.py @@ -0,0 +1,134 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M3 ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M3' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32f103-hw100k-ibox/template.ewp b/bsp/stm32/stm32f103-hw100k-ibox/template.ewp new file mode 100644 index 0000000000..79d3843edd --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.ewp @@ -0,0 +1,2024 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 28 + 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 + + 28 + 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/stm32f103-hw100k-ibox/template.eww b/bsp/stm32/stm32f103-hw100k-ibox/template.eww new file mode 100644 index 0000000000..f698346f0c --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.eww @@ -0,0 +1,7 @@ + + + + $WS_DIR$\template.ewp + + + diff --git a/bsp/stm32/stm32f103-hw100k-ibox/template.uvopt b/bsp/stm32/stm32f103-hw100k-ibox/template.uvopt new file mode 100644 index 0000000000..609be69d10 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.uvopt @@ -0,0 +1,194 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + + 0 + Reference Manual + DATASHTS\ST\STM32F10xxx.PDF + + + 1 + Technical Reference Manual + datashts\arm\cortex_m3\r1p1\DDI0337E_CORTEX_M3_R1P1_TRM.PDF + + + 2 + Generic User Guide + datashts\arm\cortex_m3\r2p1\DUI0552A_CORTEX_M3_DGUG.PDF + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/template.uvoptx b/bsp/stm32/stm32f103-hw100k-ibox/template.uvoptx new file mode 100644 index 0000000000..eccd61de78 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.uvoptx @@ -0,0 +1,191 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/template.uvproj b/bsp/stm32/stm32f103-hw100k-ibox/template.uvproj new file mode 100644 index 0000000000..bf6b81229a --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.uvproj @@ -0,0 +1,421 @@ + + + + 1.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 0 + + + STM32F103ZE + STMicroelectronics + IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_hd.s" ("STM32 High Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000) + 4216 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103ZE + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103ZE + + + + 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 + 4 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f103-hw100k-ibox/template.uvprojx b/bsp/stm32/stm32f103-hw100k-ibox/template.uvprojx new file mode 100644 index 0000000000..dd848e0b02 --- /dev/null +++ b/bsp/stm32/stm32f103-hw100k-ibox/template.uvprojx @@ -0,0 +1,394 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.2.2.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x10000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 4216 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103ZE + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103ZE + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 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 77a31a78d8a371ab4dc69ad0f28fdfaf54762d9b Mon Sep 17 00:00:00 2001 From: SummerGift Date: Tue, 15 Jan 2019 09:41:15 +0800 Subject: [PATCH 18/26] [tools][dist] Fix syntax errors --- tools/mkdist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mkdist.py b/tools/mkdist.py index cf30e95284..9d90e95e55 100644 --- a/tools/mkdist.py +++ b/tools/mkdist.py @@ -119,7 +119,7 @@ def bsp_update_kconfig(dist_dir): found = 1 if line.find('default') != -1 and found: position = line.find('default') - line = line[0:position] + 'default: "rt-thread"\n' + line = line[0:position] + 'default "rt-thread"\n' found = 0 f.write(line) From e489c75347563d48c8873943d3d51fc3d398d654 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 15 Jan 2019 16:17:01 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9lcd=E5=92=8Csd?= =?UTF-8?q?=E9=A9=B1=E5=8A=A8=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f767-fire-challenger/.config | 10 + bsp/stm32/stm32f767-fire-challenger/README.md | 55 +- .../board/CubeMX_Config/.mxproject | 4 +- .../board/CubeMX_Config/CubeMX_Config.ioc | 400 ++- .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 25 +- .../MDK-ARM/CubeMX_Config.uvoptx | 133 + .../MDK-ARM/CubeMX_Config.uvprojx | 435 +++ .../MDK-ARM/startup_stm32f767xx.s | 517 ++++ .../board/CubeMX_Config/Src/main.c | 316 +- .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 766 +++++ .../stm32f767-fire-challenger/board/Kconfig | 35 + .../board/SConscript | 3 + .../stm32f767-fire-challenger/board/board.c | 13 +- .../board/linker_scripts/link.icf | 2 +- .../board/linker_scripts/link.lds | 2 +- .../board/linker_scripts/link.sct | 2 +- .../board/ports/lcd_port.h | 33 + .../board/ports/sdcard_port.c | 76 + .../board/ports/sdram_port.h | 2 +- .../stm32f767-fire-challenger/project.uvoptx | 2656 +++++++++++++++++ .../stm32f767-fire-challenger/project.uvprojx | 1580 ++++++++++ .../template.uvprojx | 2 +- 22 files changed, 6995 insertions(+), 72 deletions(-) create mode 100644 bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvoptx create mode 100644 bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvprojx create mode 100644 bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/startup_stm32f767xx.s create mode 100644 bsp/stm32/stm32f767-fire-challenger/board/ports/lcd_port.h create mode 100644 bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c create mode 100644 bsp/stm32/stm32f767-fire-challenger/project.uvoptx create mode 100644 bsp/stm32/stm32f767-fire-challenger/project.uvprojx diff --git a/bsp/stm32/stm32f767-fire-challenger/.config b/bsp/stm32/stm32f767-fire-challenger/.config index 7d506e7350..ef2f4a0c70 100644 --- a/bsp/stm32/stm32f767-fire-challenger/.config +++ b/bsp/stm32/stm32f767-fire-challenger/.config @@ -104,6 +104,10 @@ CONFIG_FINSH_ARG_MAX=10 # Device virtual file system # # CONFIG_RT_USING_DFS is not set +# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_3 is not set # # Device Drivers @@ -338,7 +342,10 @@ CONFIG_BSP_USING_USB_TO_USART=y # CONFIG_BSP_USING_RS232 is not set # CONFIG_BSP_USING_SDRAM is not set # CONFIG_BSP_USING_QSPI_FLASH is not set +# CONFIG_BSP_USING_LCD is not set # CONFIG_BSP_USING_MPU6050 is not set +# CONFIG_BSP_USING_POT is not set +# CONFIG_BSP_USING_SDCARD is not set # # On-chip Peripheral Drivers @@ -355,6 +362,9 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_I2C1 is not set # CONFIG_BSP_USING_ONCHIP_RTC is not set # CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_FMC is not set +# CONFIG_BSP_USING_LTDC is not set # # Board extended module Drivers diff --git a/bsp/stm32/stm32f767-fire-challenger/README.md b/bsp/stm32/stm32f767-fire-challenger/README.md index 0298bb3fe7..b2779ad8e4 100644 --- a/bsp/stm32/stm32f767-fire-challenger/README.md +++ b/bsp/stm32/stm32f767-fire-challenger/README.md @@ -37,33 +37,34 @@ 本 BSP 目前对外设的支持情况如下: -| **板载外设** | **支持情况** | **备注** | -| :----------------- | :----------: | :------------------------------------- | -| USB 转串口 | 支持 | | -| RS232 | 支持 | 与以太网有引脚冲突 | -| QSPI Flash | 支持 | | -| 电位器 | 支持 | 使用 ADC1 | -| 以太网 | 暂不支持 | 移植中 | -| MPU6050六轴传感器 | 支持 | | -| SDRAM | 支持 | | -| SD卡 | 即将支持 | | -| CAN | 即将支持 | | -| EMW1062 | 暂不支持 | | -| **片上外设** | **支持情况** | **备注** | -| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 | -| UART | 支持 | UART1/x/x | -| SPI | 支持 | SPI1/x/x | -| I2C | 支持 | 软件 I2C | -| ADC | 支持 | | -| RTC | 支持 | | -| WDT | 支持 | | -| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | -| SDIO | 暂不支持 | 即将支持 | -| PWM | 暂不支持 | 即将支持 | -| USB Device | 暂不支持 | 即将支持 | -| USB Host | 暂不支持 | 即将支持 | -| **扩展模块** | **支持情况** | **备注** | -| 暂无 | 暂不支持 | 暂不支持 | +| **板载外设** | **支持情况** | **备注** | +| :---------------- | :----------: | :------------------------------------------------------ | +| USB 转串口 | 支持 | | +| RS232 | 支持 | 与以太网有引脚冲突 | +| QSPI Flash | 支持 | | +| 电位器 | 支持 | 使用 ADC1 | +| 以太网 | 暂不支持 | 移植中 | +| MPU6050六轴传感器 | 支持 | | +| SDRAM | 支持 | | +| LCD | 支持 | | +| SD卡 | 支持 | | +| CAN | 即将支持 | | +| EMW1062 | 暂不支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 | +| UART | 支持 | UART1/x/x | +| SPI | 支持 | SPI1/x/x | +| I2C | 支持 | 软件 I2C | +| ADC | 支持 | | +| RTC | 支持 | | +| WDT | 支持 | | +| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | +| SDIO | 支持 | | +| PWM | 暂不支持 | 即将支持 | +| USB Device | 暂不支持 | 即将支持 | +| USB Host | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | ## 使用说明 diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/.mxproject index 086ecbff2d..9d08ad544a 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/.mxproject +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/.mxproject @@ -5,9 +5,9 @@ SourcePath=D:/Files/github/rt-thread-master/bsp/stm32/stm32f767-fire-challenger/ SourceFiles=stm32f7xx_it.c;stm32f7xx_hal_msp.c;main.c; [PreviousLibFiles] -LibFiles=Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f767xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/system_stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; +LibFiles=Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_fmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sdram.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dsi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_sdmmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sd.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_fmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sdram.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dsi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_sdmmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sd.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f767xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/system_stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; [PreviousUsedKeilFiles] -SourceFiles=..\Src\main.c;..\Src\stm32f7xx_it.c;..\Src\stm32f7xx_hal_msp.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;null; +SourceFiles=..\Src\main.c;..\Src\stm32f7xx_it.c;..\Src\stm32f7xx_hal_msp.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;../\Src/system_stm32f7xx.c;../Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;null; HeaderPath=..\Drivers\STM32F7xx_HAL_Driver\Inc;..\Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F7xx\Include;..\Drivers\CMSIS\Include;..\Inc; diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc index f448b00af0..5a0ed50a53 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/CubeMX_Config.ioc @@ -1,27 +1,123 @@ #MicroXplorer Configuration settings - do not modify +ETH.IPParameters=MediaInterface +ETH.MediaInterface=ETH_MEDIA_INTERFACE_RMII File.Version=6 KeepUserPlacement=false Mcu.Family=STM32F7 Mcu.IP0=CORTEX_M7 -Mcu.IP1=NVIC -Mcu.IP2=RCC -Mcu.IP3=SYS -Mcu.IP4=USART1 -Mcu.IPNb=5 +Mcu.IP1=DMA2D +Mcu.IP10=USART1 +Mcu.IP2=ETH +Mcu.IP3=FMC +Mcu.IP4=LTDC +Mcu.IP5=NVIC +Mcu.IP6=QUADSPI +Mcu.IP7=RCC +Mcu.IP8=SDMMC1 +Mcu.IP9=SYS +Mcu.IPNb=11 Mcu.Name=STM32F767I(G-I)Tx Mcu.Package=LQFP176 -Mcu.Pin0=PH0/OSC_IN -Mcu.Pin1=PH1/OSC_OUT -Mcu.Pin2=PH10 -Mcu.Pin3=PA9 -Mcu.Pin4=PA10 -Mcu.Pin5=VP_SYS_VS_Systick -Mcu.PinsNb=6 +Mcu.Pin0=PE4 +Mcu.Pin1=PE5 +Mcu.Pin10=PF5 +Mcu.Pin11=PF6 +Mcu.Pin12=PF7 +Mcu.Pin13=PF8 +Mcu.Pin14=PF9 +Mcu.Pin15=PF10 +Mcu.Pin16=PH0/OSC_IN +Mcu.Pin17=PH1/OSC_OUT +Mcu.Pin18=PC0 +Mcu.Pin19=PC1 +Mcu.Pin2=PE6 +Mcu.Pin20=PA1 +Mcu.Pin21=PA2 +Mcu.Pin22=PH2 +Mcu.Pin23=PH3 +Mcu.Pin24=PA3 +Mcu.Pin25=PA7 +Mcu.Pin26=PC4 +Mcu.Pin27=PC5 +Mcu.Pin28=PB0 +Mcu.Pin29=PB1 +Mcu.Pin3=PI9 +Mcu.Pin30=PB2 +Mcu.Pin31=PF11 +Mcu.Pin32=PF12 +Mcu.Pin33=PF13 +Mcu.Pin34=PF14 +Mcu.Pin35=PF15 +Mcu.Pin36=PG0 +Mcu.Pin37=PG1 +Mcu.Pin38=PE7 +Mcu.Pin39=PE8 +Mcu.Pin4=PI10 +Mcu.Pin40=PE9 +Mcu.Pin41=PE10 +Mcu.Pin42=PE11 +Mcu.Pin43=PE12 +Mcu.Pin44=PE13 +Mcu.Pin45=PE14 +Mcu.Pin46=PE15 +Mcu.Pin47=PB11 +Mcu.Pin48=PH6 +Mcu.Pin49=PH7 +Mcu.Pin5=PF0 +Mcu.Pin50=PH8 +Mcu.Pin51=PH10 +Mcu.Pin52=PB12 +Mcu.Pin53=PB13 +Mcu.Pin54=PD8 +Mcu.Pin55=PD9 +Mcu.Pin56=PD10 +Mcu.Pin57=PD14 +Mcu.Pin58=PD15 +Mcu.Pin59=PG4 +Mcu.Pin6=PF1 +Mcu.Pin60=PG5 +Mcu.Pin61=PG6 +Mcu.Pin62=PG7 +Mcu.Pin63=PG8 +Mcu.Pin64=PC7 +Mcu.Pin65=PC8 +Mcu.Pin66=PC9 +Mcu.Pin67=PA9 +Mcu.Pin68=PA10 +Mcu.Pin69=PA11 +Mcu.Pin7=PF2 +Mcu.Pin70=PA12 +Mcu.Pin71=PH13 +Mcu.Pin72=PH15 +Mcu.Pin73=PI0 +Mcu.Pin74=PI2 +Mcu.Pin75=PC10 +Mcu.Pin76=PC11 +Mcu.Pin77=PC12 +Mcu.Pin78=PD0 +Mcu.Pin79=PD1 +Mcu.Pin8=PF3 +Mcu.Pin80=PD2 +Mcu.Pin81=PD6 +Mcu.Pin82=PG10 +Mcu.Pin83=PG11 +Mcu.Pin84=PG12 +Mcu.Pin85=PG15 +Mcu.Pin86=PB6 +Mcu.Pin87=PB8 +Mcu.Pin88=PB9 +Mcu.Pin89=PE0 +Mcu.Pin9=PF4 +Mcu.Pin90=PE1 +Mcu.Pin91=PI4 +Mcu.Pin92=VP_DMA2D_VS_DMA2D +Mcu.Pin93=VP_SYS_VS_Systick +Mcu.PinsNb=94 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F767IGTx -MxCube.Version=5.0.0 -MxDb.Version=DB.5.0.0 +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false @@ -32,12 +128,81 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK PA10.Locked=true PA10.Mode=Asynchronous PA10.Signal=USART1_RX +PA11.GPIOParameters=GPIO_Speed +PA11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA11.Locked=true +PA11.Mode=RGB888 +PA11.Signal=LTDC_R4 +PA12.GPIOParameters=GPIO_Speed +PA12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA12.Locked=true +PA12.Mode=RGB888 +PA12.Signal=LTDC_R5 +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA3.GPIOParameters=GPIO_Speed +PA3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA3.Mode=RGB888 +PA3.Signal=LTDC_B5 +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV PA9.Locked=true PA9.Mode=Asynchronous PA9.Signal=USART1_TX +PB0.GPIOParameters=GPIO_Speed +PB0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB0.Mode=RGB888 +PB0.Signal=LTDC_R3 +PB1.GPIOParameters=GPIO_Speed +PB1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB1.Mode=RGB888 +PB1.Signal=LTDC_R6 +PB11.Mode=RMII +PB11.Signal=ETH_TX_EN +PB12.Mode=RMII +PB12.Signal=ETH_TXD0 +PB13.Mode=RMII +PB13.Signal=ETH_TXD1 +PB2.Mode=Single Bank 1 +PB2.Signal=QUADSPI_CLK +PB6.Locked=true +PB6.Mode=Single Bank 1 +PB6.Signal=QUADSPI_BK1_NCS +PB8.GPIOParameters=GPIO_Speed +PB8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB8.Mode=RGB888 +PB8.Signal=LTDC_B6 +PB9.GPIOParameters=GPIO_Speed +PB9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB9.Mode=RGB888 +PB9.Signal=LTDC_B7 +PC0.Signal=FMC_SDNWE +PC1.Mode=RMII +PC1.Signal=ETH_MDC +PC10.Mode=SD_4_bits_Wide_bus +PC10.Signal=SDMMC1_D2 +PC11.Mode=SD_4_bits_Wide_bus +PC11.Signal=SDMMC1_D3 +PC12.Mode=SD_4_bits_Wide_bus +PC12.Signal=SDMMC1_CK +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 +PC7.GPIOParameters=GPIO_Speed +PC7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC7.Locked=true +PC7.Mode=RGB888 +PC7.Signal=LTDC_G6 +PC8.Mode=SD_4_bits_Wide_bus +PC8.Signal=SDMMC1_D0 +PC9.Mode=SD_4_bits_Wide_bus +PC9.Signal=SDMMC1_D1 PCC.Checker=false PCC.Line=STM32F7x7 PCC.MCU=STM32F767I(G-I)Tx @@ -46,12 +211,124 @@ PCC.Seq0=0 PCC.Series=STM32F7 PCC.Temperature=25 PCC.Vdd=3.3 +PD0.Signal=FMC_D2_DA2 +PD1.Signal=FMC_D3_DA3 +PD10.Signal=FMC_D15_DA15 +PD14.Signal=FMC_D0_DA0 +PD15.Signal=FMC_D1_DA1 +PD2.Mode=SD_4_bits_Wide_bus +PD2.Signal=SDMMC1_CMD +PD6.GPIOParameters=GPIO_Speed +PD6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD6.Mode=RGB888 +PD6.Signal=LTDC_B2 +PD8.Signal=FMC_D13_DA13 +PD9.Signal=FMC_D14_DA14 +PE0.Signal=FMC_NBL0 +PE1.Signal=FMC_NBL1 +PE10.Signal=FMC_D7_DA7 +PE11.Signal=FMC_D8_DA8 +PE12.Signal=FMC_D9_DA9 +PE13.Signal=FMC_D10_DA10 +PE14.Signal=FMC_D11_DA11 +PE15.Signal=FMC_D12_DA12 +PE4.GPIOParameters=GPIO_Speed +PE4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PE4.Mode=RGB888 +PE4.Signal=LTDC_B0 +PE5.GPIOParameters=GPIO_Speed +PE5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PE5.Mode=RGB888 +PE5.Signal=LTDC_G0 +PE6.GPIOParameters=GPIO_Speed +PE6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PE6.Mode=RGB888 +PE6.Signal=LTDC_G1 +PE7.Signal=FMC_D4_DA4 +PE8.Signal=FMC_D5_DA5 +PE9.Signal=FMC_D6_DA6 +PF0.Signal=FMC_A0 +PF1.Signal=FMC_A1 +PF10.GPIOParameters=GPIO_Speed +PF10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PF10.Mode=RGB888 +PF10.Signal=LTDC_DE +PF11.Signal=FMC_SDNRAS +PF12.Signal=FMC_A6 +PF13.Signal=FMC_A7 +PF14.Signal=FMC_A8 +PF15.Signal=FMC_A9 +PF2.Signal=FMC_A2 +PF3.Signal=FMC_A3 +PF4.Signal=FMC_A4 +PF5.Signal=FMC_A5 +PF6.Mode=Single Bank 1 +PF6.Signal=QUADSPI_BK1_IO3 +PF7.Locked=true +PF7.Mode=Single Bank 1 +PF7.Signal=QUADSPI_BK1_IO2 +PF8.Mode=Single Bank 1 +PF8.Signal=QUADSPI_BK1_IO0 +PF9.Mode=Single Bank 1 +PF9.Signal=QUADSPI_BK1_IO1 +PG0.Signal=FMC_A10 +PG1.Signal=FMC_A11 +PG10.GPIOParameters=GPIO_Speed +PG10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PG10.Locked=true +PG10.Mode=RGB888 +PG10.Signal=LTDC_G3 +PG11.GPIOParameters=GPIO_Speed +PG11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PG11.Locked=true +PG11.Mode=RGB888 +PG11.Signal=LTDC_B3 +PG12.Mode=RGB888 +PG12.Signal=LTDC_B1 +PG15.Signal=FMC_SDNCAS +PG4.Signal=FMC_A14_BA0 +PG5.Signal=FMC_A15_BA1 +PG6.GPIOParameters=GPIO_Speed +PG6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PG6.Mode=RGB888 +PG6.Signal=LTDC_R7 +PG7.GPIOParameters=GPIO_Speed +PG7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PG7.Mode=RGB888 +PG7.Signal=LTDC_CLK +PG8.Signal=FMC_SDCLK 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 PH10.Locked=true PH10.Signal=GPIO_Output +PH13.Locked=true +PH13.Mode=RGB888 +PH13.Signal=LTDC_G2 +PH15.Mode=RGB888 +PH15.Signal=LTDC_G4 +PH2.Mode=RGB888 +PH2.Signal=LTDC_R0 +PH3.Mode=RGB888 +PH3.Signal=LTDC_R1 +PH6.Mode=SdramChipSelect2_1 +PH6.Signal=FMC_SDNE1 +PH7.Mode=SdramChipSelect2_1 +PH7.Signal=FMC_SDCKE1 +PH8.Mode=RGB888 +PH8.Signal=LTDC_R2 +PI0.Locked=true +PI0.Mode=RGB888 +PI0.Signal=LTDC_G5 +PI10.Mode=RGB888 +PI10.Signal=LTDC_HSYNC +PI2.Mode=RGB888 +PI2.Signal=LTDC_G7 +PI4.Mode=RGB888 +PI4.Signal=LTDC_B4 +PI9.Mode=RGB888 +PI9.Signal=LTDC_VSYNC PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false @@ -79,7 +356,7 @@ 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_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ETH_Init-ETH-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_QUADSPI_Init-QUADSPI-false-HAL-true,8-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,9-MX_DMA2D_Init-DMA2D-false-HAL-true,10-MX_LTDC_Init-LTDC-false-HAL-true RCC.AHBFreq_Value=216000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 RCC.APB1Freq_Value=54000000 @@ -102,8 +379,8 @@ RCC.I2C2Freq_Value=54000000 RCC.I2C3Freq_Value=54000000 RCC.I2C4Freq_Value=54000000 RCC.I2SFreq_Value=96000000 -RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LCDTFTFreq_Value,LPTIM1Freq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PLLSourceVirtual,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value -RCC.LCDTFTFreq_Value=48000000 +RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LCDTFTFreq_Value,LPTIM1Freq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIR,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PLLSourceVirtual,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCClockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value +RCC.LCDTFTFreq_Value=32000000 RCC.LPTIM1Freq_Value=54000000 RCC.LSE_VALUE=32768 RCC.LSI_VALUE=32000 @@ -115,19 +392,22 @@ RCC.PLLI2SRCLKFreq_Value=96000000 RCC.PLLI2SRoutputFreq_Value=96000000 RCC.PLLM=25 RCC.PLLN=432 -RCC.PLLQCLKFreq_Value=216000000 -RCC.PLLQoutputFreq_Value=216000000 +RCC.PLLQ=9 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLQoutputFreq_Value=48000000 RCC.PLLRFreq_Value=216000000 RCC.PLLSAIPCLKFreq_Value=96000000 RCC.PLLSAIQCLKFreq_Value=96000000 -RCC.PLLSAIRCLKFreq_Value=96000000 +RCC.PLLSAIR=3 +RCC.PLLSAIRCLKFreq_Value=64000000 RCC.PLLSAIoutputFreq_Value=96000000 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.RNGFreq_Value=216000000 +RCC.RNGFreq_Value=48000000 RCC.SAI1Freq_Value=96000000 RCC.SAI2Freq_Value=96000000 RCC.SDMMC2Freq_Value=216000000 -RCC.SDMMCFreq_Value=216000000 +RCC.SDMMCClockSelection=RCC_SDMMC1CLKSOURCE_CLK48 +RCC.SDMMCFreq_Value=48000000 RCC.SPDIFRXFreq_Value=96000000 RCC.SYSCLKFreq_VALUE=216000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK @@ -139,13 +419,87 @@ RCC.USART1Freq_Value=108000000 RCC.USART2Freq_Value=54000000 RCC.USART3Freq_Value=54000000 RCC.USART6Freq_Value=108000000 -RCC.USBFreq_Value=216000000 +RCC.USBFreq_Value=48000000 RCC.VCOI2SOutputFreq_Value=192000000 RCC.VCOInputFreq_Value=1000000 RCC.VCOOutputFreq_Value=432000000 RCC.VCOSAIOutputFreq_Value=192000000 +SH.FMC_A0.0=FMC_A0,12b-sda1 +SH.FMC_A0.ConfNb=1 +SH.FMC_A1.0=FMC_A1,12b-sda1 +SH.FMC_A1.ConfNb=1 +SH.FMC_A10.0=FMC_A10,12b-sda1 +SH.FMC_A10.ConfNb=1 +SH.FMC_A11.0=FMC_A11,12b-sda1 +SH.FMC_A11.ConfNb=1 +SH.FMC_A14_BA0.0=FMC_BA0,FourSdramBanks1 +SH.FMC_A14_BA0.ConfNb=1 +SH.FMC_A15_BA1.0=FMC_BA1,FourSdramBanks1 +SH.FMC_A15_BA1.ConfNb=1 +SH.FMC_A2.0=FMC_A2,12b-sda1 +SH.FMC_A2.ConfNb=1 +SH.FMC_A3.0=FMC_A3,12b-sda1 +SH.FMC_A3.ConfNb=1 +SH.FMC_A4.0=FMC_A4,12b-sda1 +SH.FMC_A4.ConfNb=1 +SH.FMC_A5.0=FMC_A5,12b-sda1 +SH.FMC_A5.ConfNb=1 +SH.FMC_A6.0=FMC_A6,12b-sda1 +SH.FMC_A6.ConfNb=1 +SH.FMC_A7.0=FMC_A7,12b-sda1 +SH.FMC_A7.ConfNb=1 +SH.FMC_A8.0=FMC_A8,12b-sda1 +SH.FMC_A8.ConfNb=1 +SH.FMC_A9.0=FMC_A9,12b-sda1 +SH.FMC_A9.ConfNb=1 +SH.FMC_D0_DA0.0=FMC_D0,sd-16b-d1 +SH.FMC_D0_DA0.ConfNb=1 +SH.FMC_D10_DA10.0=FMC_D10,sd-16b-d1 +SH.FMC_D10_DA10.ConfNb=1 +SH.FMC_D11_DA11.0=FMC_D11,sd-16b-d1 +SH.FMC_D11_DA11.ConfNb=1 +SH.FMC_D12_DA12.0=FMC_D12,sd-16b-d1 +SH.FMC_D12_DA12.ConfNb=1 +SH.FMC_D13_DA13.0=FMC_D13,sd-16b-d1 +SH.FMC_D13_DA13.ConfNb=1 +SH.FMC_D14_DA14.0=FMC_D14,sd-16b-d1 +SH.FMC_D14_DA14.ConfNb=1 +SH.FMC_D15_DA15.0=FMC_D15,sd-16b-d1 +SH.FMC_D15_DA15.ConfNb=1 +SH.FMC_D1_DA1.0=FMC_D1,sd-16b-d1 +SH.FMC_D1_DA1.ConfNb=1 +SH.FMC_D2_DA2.0=FMC_D2,sd-16b-d1 +SH.FMC_D2_DA2.ConfNb=1 +SH.FMC_D3_DA3.0=FMC_D3,sd-16b-d1 +SH.FMC_D3_DA3.ConfNb=1 +SH.FMC_D4_DA4.0=FMC_D4,sd-16b-d1 +SH.FMC_D4_DA4.ConfNb=1 +SH.FMC_D5_DA5.0=FMC_D5,sd-16b-d1 +SH.FMC_D5_DA5.ConfNb=1 +SH.FMC_D6_DA6.0=FMC_D6,sd-16b-d1 +SH.FMC_D6_DA6.ConfNb=1 +SH.FMC_D7_DA7.0=FMC_D7,sd-16b-d1 +SH.FMC_D7_DA7.ConfNb=1 +SH.FMC_D8_DA8.0=FMC_D8,sd-16b-d1 +SH.FMC_D8_DA8.ConfNb=1 +SH.FMC_D9_DA9.0=FMC_D9,sd-16b-d1 +SH.FMC_D9_DA9.ConfNb=1 +SH.FMC_NBL0.0=FMC_NBL0,Sd2ByteEnable1 +SH.FMC_NBL0.ConfNb=1 +SH.FMC_NBL1.0=FMC_NBL1,Sd2ByteEnable1 +SH.FMC_NBL1.ConfNb=1 +SH.FMC_SDCLK.0=FMC_SDCLK,12b-sda1 +SH.FMC_SDCLK.ConfNb=1 +SH.FMC_SDNCAS.0=FMC_SDNCAS,12b-sda1 +SH.FMC_SDNCAS.ConfNb=1 +SH.FMC_SDNRAS.0=FMC_SDNRAS,12b-sda1 +SH.FMC_SDNRAS.ConfNb=1 +SH.FMC_SDNWE.0=FMC_SDNWE,12b-sda1 +SH.FMC_SDNWE.ConfNb=1 USART1.IPParameters=VirtualMode-Asynchronous USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_DMA2D_VS_DMA2D.Mode=DMA2D_Activate +VP_DMA2D_VS_DMA2D.Signal=DMA2D_VS_DMA2D VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h index af010242fc..63251e169e 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © 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: @@ -57,22 +57,22 @@ /* #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_DMA2D_MODULE_ENABLED +#define HAL_ETH_MODULE_ENABLED /* #define HAL_NAND_MODULE_ENABLED */ /* #define HAL_NOR_MODULE_ENABLED */ /* #define HAL_SRAM_MODULE_ENABLED */ -/* #define HAL_SDRAM_MODULE_ENABLED */ +#define HAL_SDRAM_MODULE_ENABLED /* #define HAL_HASH_MODULE_ENABLED */ /* #define HAL_I2S_MODULE_ENABLED */ /* #define HAL_IWDG_MODULE_ENABLED */ /* #define HAL_LPTIM_MODULE_ENABLED */ -/* #define HAL_LTDC_MODULE_ENABLED */ -/* #define HAL_QSPI_MODULE_ENABLED */ +#define HAL_LTDC_MODULE_ENABLED +#define HAL_QSPI_MODULE_ENABLED /* #define HAL_RNG_MODULE_ENABLED */ /* #define HAL_RTC_MODULE_ENABLED */ /* #define HAL_SAI_MODULE_ENABLED */ -/* #define HAL_SD_MODULE_ENABLED */ +#define HAL_SD_MODULE_ENABLED /* #define HAL_MMC_MODULE_ENABLED */ /* #define HAL_SPDIFRX_MODULE_ENABLED */ /* #define HAL_SPI_MODULE_ENABLED */ @@ -190,8 +190,8 @@ /* Section 2: PHY configuration section */ -/* DP83848_PHY_ADDRESS Address*/ -#define DP83848_PHY_ADDRESS 0x01U +/* LAN8742A_PHY_ADDRESS Address*/ +#define LAN8742A_PHY_ADDRESS 1 /* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ #define PHY_RESET_DELAY ((uint32_t)0x000000FFU) /* PHY Configuration delay */ @@ -202,8 +202,8 @@ /* 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_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */ #define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ #define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ @@ -226,6 +226,9 @@ #define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ #define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ +#define PHY_ISFR ((uint16_t)0x000BU) /*!< PHY Interrupt Source Flag register Offset */ +#define PHY_ISFR_INT4 ((uint16_t)0x000BU) /*!< PHY Link down inturrupt */ + /* ################## SPI peripheral configuration ########################## */ /* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvoptx b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvoptx new file mode 100644 index 0000000000..565b317696 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvoptx @@ -0,0 +1,133 @@ + + + + CubeMX_Config + 0x4 + ARM-ADS + + 216000000 + + 1 + 1 + 0 + 1 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 13 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F7x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F767IG$Flash\STM32F7x_1024.FLM) -FF1STM32F7x_TCM -FS1200000 -FL1100000 -FP1($$Device:STM32F767IG$Flash\STM32F7x_TCM.FLM) + + + 0 + + -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F7x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F767IG$Flash\STM32F7x_1024.FLM) -FF1STM32F7x_TCM -FS1200000 -FL1100000 -FP1($$Device:STM32F767IG$Flash\STM32F7x_TCM.FLM) + + + + 0 + 1 + 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/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvprojx b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvprojx new file mode 100644 index 0000000000..4b8ae1e625 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/CubeMX_Config.uvprojx @@ -0,0 +1,435 @@ + + + + 1.1 + +
    ### uVision Project, (C) Keil Software
    + + + + CubeMX_Config + 0x4 + ARM-ADS + + + STM32F767IGTx + STMicroelectronics + IRAM(0x20000000-0x2007FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE + + + + + + + + + + + + + + + + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + CubeMX_Config\ + CubeMX_Config + 1 + 0 + 1 + 1 + 1 + ./CubeMX_Config/ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 13 + + + + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4107 + + 1 + STLink\ST-LINKIII-KEIL_SWO.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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 8 + 1 + 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 + + + + + 1 + + + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + + + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + + + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + + + USE_HAL_DRIVER,STM32F767xx + + ../Inc; ../Drivers/STM32F7xx_HAL_Driver/Inc; ../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy; ../Drivers/CMSIS/Device/ST/STM32F7xx/Include; ../Drivers/CMSIS/Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application/MDK-ARM + + + startup_stm32f767xx.s + 2 + startup_stm32f767xx.s + + + + + + ::CMSIS + + Application/Usermain.c1../Src/main.cstm32f7xx_it.c1../Src/stm32f7xx_it.cstm32f7xx_hal_msp.c1../Src/stm32f7xx_hal_msp.c + Drivers/STM32F7xx_HAL_Driverstm32f7xx_hal_cortex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.cstm32f7xx_hal_dma2d.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.cstm32f7xx_hal_eth.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.cstm32f7xx_ll_fmc.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.cstm32f7xx_hal_sdram.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.cstm32f7xx_hal_ltdc.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.cstm32f7xx_hal_ltdc_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.cstm32f7xx_hal_dsi.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.cstm32f7xx_hal_qspi.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.cstm32f7xx_ll_sdmmc.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.cstm32f7xx_hal_sd.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.cstm32f7xx_hal_tim.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.cstm32f7xx_hal_tim_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.cstm32f7xx_hal_uart.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.cstm32f7xx_hal_rcc.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.cstm32f7xx_hal_rcc_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.cstm32f7xx_hal_flash.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.cstm32f7xx_hal_flash_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.cstm32f7xx_hal_gpio.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.cstm32f7xx_hal_dma.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.cstm32f7xx_hal_dma_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.cstm32f7xx_hal_pwr.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.cstm32f7xx_hal_pwr_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.cstm32f7xx_hal.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.cstm32f7xx_hal_i2c.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.cstm32f7xx_hal_i2c_ex.c1../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c + Drivers/CMSISsystem_stm32f7xx.c1../Src/system_stm32f7xx.c + + + + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/startup_stm32f767xx.s b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/startup_stm32f767xx.s new file mode 100644 index 0000000000..332954ec76 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/MDK-ARM/startup_stm32f767xx.s @@ -0,0 +1,517 @@ +;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** +;* File Name : startup_stm32f767xx.s +;* Author : MCD Application Team +;* Description : STM32F767xx devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM7 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +;* 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FMC_IRQHandler ; FMC + DCD SDMMC1_IRQHandler ; SDMMC1 + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD 0 ; Reserved + DCD RNG_IRQHandler ; Rng + DCD FPU_IRQHandler ; FPU + DCD UART7_IRQHandler ; UART7 + DCD UART8_IRQHandler ; UART8 + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + DCD SPI6_IRQHandler ; SPI6 + DCD SAI1_IRQHandler ; SAI1 + DCD LTDC_IRQHandler ; LTDC + DCD LTDC_ER_IRQHandler ; LTDC error + DCD DMA2D_IRQHandler ; DMA2D + DCD SAI2_IRQHandler ; SAI2 + DCD QUADSPI_IRQHandler ; QUADSPI + DCD LPTIM1_IRQHandler ; LPTIM1 + DCD CEC_IRQHandler ; HDMI_CEC + DCD I2C4_EV_IRQHandler ; I2C4 Event + DCD I2C4_ER_IRQHandler ; I2C4 Error + DCD SPDIF_RX_IRQHandler ; SPDIF_RX + DCD 0 ; Reserved + DCD DFSDM1_FLT0_IRQHandler ; DFSDM1 Filter 0 global Interrupt + DCD DFSDM1_FLT1_IRQHandler ; DFSDM1 Filter 1 global Interrupt + DCD DFSDM1_FLT2_IRQHandler ; DFSDM1 Filter 2 global Interrupt + DCD DFSDM1_FLT3_IRQHandler ; DFSDM1 Filter 3 global Interrupt + DCD SDMMC2_IRQHandler ; SDMMC2 + DCD CAN3_TX_IRQHandler ; CAN3 TX + DCD CAN3_RX0_IRQHandler ; CAN3 RX0 + DCD CAN3_RX1_IRQHandler ; CAN3 RX1 + DCD CAN3_SCE_IRQHandler ; CAN3 SCE + DCD JPEG_IRQHandler ; JPEG + DCD MDIOS_IRQHandler ; MDIOS +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT SDMMC1_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT UART7_IRQHandler [WEAK] + EXPORT UART8_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + EXPORT SPI6_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT LTDC_IRQHandler [WEAK] + EXPORT LTDC_ER_IRQHandler [WEAK] + EXPORT DMA2D_IRQHandler [WEAK] + EXPORT SAI2_IRQHandler [WEAK] + EXPORT QUADSPI_IRQHandler [WEAK] + EXPORT LPTIM1_IRQHandler [WEAK] + EXPORT CEC_IRQHandler [WEAK] + EXPORT I2C4_EV_IRQHandler [WEAK] + EXPORT I2C4_ER_IRQHandler [WEAK] + EXPORT SPDIF_RX_IRQHandler [WEAK] + EXPORT DFSDM1_FLT0_IRQHandler [WEAK] + EXPORT DFSDM1_FLT1_IRQHandler [WEAK] + EXPORT DFSDM1_FLT2_IRQHandler [WEAK] + EXPORT DFSDM1_FLT3_IRQHandler [WEAK] + EXPORT SDMMC2_IRQHandler [WEAK] + EXPORT CAN3_TX_IRQHandler [WEAK] + EXPORT CAN3_RX0_IRQHandler [WEAK] + EXPORT CAN3_RX1_IRQHandler [WEAK] + EXPORT CAN3_SCE_IRQHandler [WEAK] + EXPORT JPEG_IRQHandler [WEAK] + EXPORT MDIOS_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FMC_IRQHandler +SDMMC1_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +RNG_IRQHandler +FPU_IRQHandler +UART7_IRQHandler +UART8_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler +SPI6_IRQHandler +SAI1_IRQHandler +LTDC_IRQHandler +LTDC_ER_IRQHandler +DMA2D_IRQHandler +SAI2_IRQHandler +QUADSPI_IRQHandler +LPTIM1_IRQHandler +CEC_IRQHandler +I2C4_EV_IRQHandler +I2C4_ER_IRQHandler +SPDIF_RX_IRQHandler +DFSDM1_FLT0_IRQHandler +DFSDM1_FLT1_IRQHandler +DFSDM1_FLT2_IRQHandler +DFSDM1_FLT3_IRQHandler +SDMMC2_IRQHandler +CAN3_TX_IRQHandler +CAN3_RX0_IRQHandler +CAN3_RX1_IRQHandler +CAN3_SCE_IRQHandler +JPEG_IRQHandler +MDIOS_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/main.c index 6cbba8d4d7..de4360e181 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/main.c +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/main.c @@ -63,8 +63,20 @@ /* Private variables ---------------------------------------------------------*/ +DMA2D_HandleTypeDef hdma2d; + +ETH_HandleTypeDef heth; + +LTDC_HandleTypeDef hltdc; + +QSPI_HandleTypeDef hqspi; + +SD_HandleTypeDef hsd1; + UART_HandleTypeDef huart1; +SDRAM_HandleTypeDef hsdram1; + /* USER CODE BEGIN PV */ /* USER CODE END PV */ @@ -73,6 +85,12 @@ UART_HandleTypeDef huart1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); +static void MX_ETH_Init(void); +static void MX_FMC_Init(void); +static void MX_QUADSPI_Init(void); +static void MX_SDMMC1_SD_Init(void); +static void MX_DMA2D_Init(void); +static void MX_LTDC_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -111,6 +129,12 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); + MX_ETH_Init(); + MX_FMC_Init(); + MX_QUADSPI_Init(); + MX_SDMMC1_SD_Init(); + MX_DMA2D_Init(); + MX_LTDC_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -149,7 +173,7 @@ void SystemClock_Config(void) RCC_OscInitStruct.PLL.PLLM = 25; RCC_OscInitStruct.PLL.PLLN = 432; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - RCC_OscInitStruct.PLL.PLLQ = 2; + RCC_OscInitStruct.PLL.PLLQ = 9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); @@ -173,14 +197,260 @@ void SystemClock_Config(void) { Error_Handler(); } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_USART1 + |RCC_PERIPHCLK_SDMMC1|RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 3; + PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2; + PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV2; + PeriphClkInitStruct.PLLSAIDivQ = 1; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + PeriphClkInitStruct.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_CLK48; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } } +/** + * @brief DMA2D Initialization Function + * @param None + * @retval None + */ +static void MX_DMA2D_Init(void) +{ + + /* USER CODE BEGIN DMA2D_Init 0 */ + + /* USER CODE END DMA2D_Init 0 */ + + /* USER CODE BEGIN DMA2D_Init 1 */ + + /* USER CODE END DMA2D_Init 1 */ + hdma2d.Instance = DMA2D; + hdma2d.Init.Mode = DMA2D_M2M; + hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888; + hdma2d.Init.OutputOffset = 0; + hdma2d.LayerCfg[1].InputOffset = 0; + hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; + hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; + hdma2d.LayerCfg[1].InputAlpha = 0; + hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA; + hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR; + if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) + { + Error_Handler(); + } + if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN DMA2D_Init 2 */ + + /* USER CODE END DMA2D_Init 2 */ + +} + +/** + * @brief ETH Initialization Function + * @param None + * @retval None + */ +static void MX_ETH_Init(void) +{ + + /* USER CODE BEGIN ETH_Init 0 */ + + /* USER CODE END ETH_Init 0 */ + + uint8_t MACAddr[6] ; + + /* USER CODE BEGIN ETH_Init 1 */ + + /* USER CODE END ETH_Init 1 */ + heth.Instance = ETH; + heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; + heth.Init.PhyAddress = LAN8742A_PHY_ADDRESS; + MACAddr[0] = 0x00; + MACAddr[1] = 0x80; + MACAddr[2] = 0xE1; + MACAddr[3] = 0x00; + MACAddr[4] = 0x00; + MACAddr[5] = 0x00; + heth.Init.MACAddr = &MACAddr[0]; + heth.Init.RxMode = ETH_RXPOLLING_MODE; + heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE; + heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII; + + /* USER CODE BEGIN MACADDRESS */ + + /* USER CODE END MACADDRESS */ + + if (HAL_ETH_Init(&heth) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ETH_Init 2 */ + + /* USER CODE END ETH_Init 2 */ + +} + +/** + * @brief LTDC Initialization Function + * @param None + * @retval None + */ +static void MX_LTDC_Init(void) +{ + + /* USER CODE BEGIN LTDC_Init 0 */ + + /* USER CODE END LTDC_Init 0 */ + + LTDC_LayerCfgTypeDef pLayerCfg = {0}; + LTDC_LayerCfgTypeDef pLayerCfg1 = {0}; + + /* USER CODE BEGIN LTDC_Init 1 */ + + /* USER CODE END LTDC_Init 1 */ + hltdc.Instance = LTDC; + hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; + hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; + hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; + hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + hltdc.Init.HorizontalSync = 7; + hltdc.Init.VerticalSync = 3; + hltdc.Init.AccumulatedHBP = 14; + hltdc.Init.AccumulatedVBP = 5; + hltdc.Init.AccumulatedActiveW = 654; + hltdc.Init.AccumulatedActiveH = 485; + hltdc.Init.TotalWidth = 660; + hltdc.Init.TotalHeigh = 487; + hltdc.Init.Backcolor.Blue = 0; + hltdc.Init.Backcolor.Green = 0; + hltdc.Init.Backcolor.Red = 0; + if (HAL_LTDC_Init(&hltdc) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg.WindowX0 = 0; + pLayerCfg.WindowX1 = 0; + pLayerCfg.WindowY0 = 0; + pLayerCfg.WindowY1 = 0; + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg.Alpha = 0; + pLayerCfg.Alpha0 = 0; + pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg.FBStartAdress = 0; + pLayerCfg.ImageWidth = 0; + pLayerCfg.ImageHeight = 0; + pLayerCfg.Backcolor.Blue = 0; + pLayerCfg.Backcolor.Green = 0; + pLayerCfg.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) + { + Error_Handler(); + } + pLayerCfg1.WindowX0 = 0; + pLayerCfg1.WindowX1 = 0; + pLayerCfg1.WindowY0 = 0; + pLayerCfg1.WindowY1 = 0; + pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + pLayerCfg1.Alpha = 0; + pLayerCfg1.Alpha0 = 0; + pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; + pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + pLayerCfg1.FBStartAdress = 0; + pLayerCfg1.ImageWidth = 0; + pLayerCfg1.ImageHeight = 0; + pLayerCfg1.Backcolor.Blue = 0; + pLayerCfg1.Backcolor.Green = 0; + pLayerCfg1.Backcolor.Red = 0; + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LTDC_Init 2 */ + + /* USER CODE END LTDC_Init 2 */ + +} + +/** + * @brief QUADSPI Initialization Function + * @param None + * @retval None + */ +static void MX_QUADSPI_Init(void) +{ + + /* USER CODE BEGIN QUADSPI_Init 0 */ + + /* USER CODE END QUADSPI_Init 0 */ + + /* USER CODE BEGIN QUADSPI_Init 1 */ + + /* USER CODE END QUADSPI_Init 1 */ + /* QUADSPI parameter configuration*/ + hqspi.Instance = QUADSPI; + hqspi.Init.ClockPrescaler = 255; + hqspi.Init.FifoThreshold = 1; + hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE; + hqspi.Init.FlashSize = 1; + hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE; + hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0; + hqspi.Init.FlashID = QSPI_FLASH_ID_1; + hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE; + if (HAL_QSPI_Init(&hqspi) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN QUADSPI_Init 2 */ + + /* USER CODE END QUADSPI_Init 2 */ + +} + +/** + * @brief SDMMC1 Initialization Function + * @param None + * @retval None + */ +static void MX_SDMMC1_SD_Init(void) +{ + + /* USER CODE BEGIN SDMMC1_Init 0 */ + + /* USER CODE END SDMMC1_Init 0 */ + + /* USER CODE BEGIN SDMMC1_Init 1 */ + + /* USER CODE END SDMMC1_Init 1 */ + hsd1.Instance = SDMMC1; + hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; + hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE; + hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; + hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B; + hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; + hsd1.Init.ClockDiv = 0; + if (HAL_SD_Init(&hsd1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SDMMC1_Init 2 */ + + /* USER CODE END SDMMC1_Init 2 */ + +} + /** * @brief USART1 Initialization Function * @param None @@ -216,6 +486,41 @@ static void MX_USART1_UART_Init(void) } +/* FMC initialization function */ +static void MX_FMC_Init(void) +{ + FMC_SDRAM_TimingTypeDef SdramTiming; + + /** Perform the SDRAM1 memory initialization sequence + */ + hsdram1.Instance = FMC_SDRAM_DEVICE; + /* hsdram1.Init */ + hsdram1.Init.SDBank = FMC_SDRAM_BANK2; + hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; + hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; + hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16; + hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; + hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1; + hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; + hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE; + hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE; + hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; + /* SdramTiming */ + SdramTiming.LoadToActiveDelay = 16; + SdramTiming.ExitSelfRefreshDelay = 16; + SdramTiming.SelfRefreshTime = 16; + SdramTiming.RowCycleDelay = 16; + SdramTiming.WriteRecoveryTime = 16; + SdramTiming.RPDelay = 16; + SdramTiming.RCDDelay = 16; + + if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) + { + Error_Handler( ); + } + +} + /** * @brief GPIO Initialization Function * @param None @@ -226,8 +531,15 @@ static void MX_GPIO_Init(void) GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_RESET); diff --git a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c index 14389e19c8..24c2ee217b 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c +++ b/bsp/stm32/stm32f767-fire-challenger/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -97,6 +97,569 @@ void HAL_MspInit(void) /* USER CODE END MspInit 1 */ } +/** +* @brief DMA2D MSP Initialization +* This function configures the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ +void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspInit 0 */ + + /* USER CODE END DMA2D_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_DMA2D_CLK_ENABLE(); + /* USER CODE BEGIN DMA2D_MspInit 1 */ + + /* USER CODE END DMA2D_MspInit 1 */ + } + +} + +/** +* @brief DMA2D MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ + +void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d) +{ + + if(hdma2d->Instance==DMA2D) + { + /* USER CODE BEGIN DMA2D_MspDeInit 0 */ + + /* USER CODE END DMA2D_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_DMA2D_CLK_DISABLE(); + /* USER CODE BEGIN DMA2D_MspDeInit 1 */ + + /* USER CODE END DMA2D_MspDeInit 1 */ + } + +} + +/** +* @brief ETH MSP Initialization +* This function configures the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ +void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspInit 0 */ + + /* USER CODE END ETH_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ETH_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB11 ------> ETH_TX_EN + PB12 ------> ETH_TXD0 + PB13 ------> ETH_TXD1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN ETH_MspInit 1 */ + + /* USER CODE END ETH_MspInit 1 */ + } + +} + +/** +* @brief ETH MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ + +void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth) +{ + + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspDeInit 0 */ + + /* USER CODE END ETH_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ETH_CLK_DISABLE(); + + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB11 ------> ETH_TX_EN + PB12 ------> ETH_TXD0 + PB13 ------> ETH_TXD1 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13); + + /* USER CODE BEGIN ETH_MspDeInit 1 */ + + /* USER CODE END ETH_MspDeInit 1 */ + } + +} + +/** +* @brief LTDC MSP Initialization +* This function configures the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ +void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspInit 0 */ + + /* USER CODE END LTDC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_LTDC_CLK_ENABLE(); + + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**LTDC GPIO Configuration + PE4 ------> LTDC_B0 + PE5 ------> LTDC_G0 + PE6 ------> LTDC_G1 + PI9 ------> LTDC_VSYNC + PI10 ------> LTDC_HSYNC + PF10 ------> LTDC_DE + PH2 ------> LTDC_R0 + PH3 ------> LTDC_R1 + PA3 ------> LTDC_B5 + PB0 ------> LTDC_R3 + PB1 ------> LTDC_R6 + PH8 ------> LTDC_R2 + PG6 ------> LTDC_R7 + PG7 ------> LTDC_CLK + PC7 ------> LTDC_G6 + PA11 ------> LTDC_R4 + PA12 ------> LTDC_R5 + PH13 ------> LTDC_G2 + PH15 ------> LTDC_G4 + PI0 ------> LTDC_G5 + PI2 ------> LTDC_G7 + PD6 ------> LTDC_B2 + PG10 ------> LTDC_G3 + PG11 ------> LTDC_B3 + PG12 ------> LTDC_B1 + PB8 ------> LTDC_B6 + PB9 ------> LTDC_B7 + PI4 ------> LTDC_B4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_2 + |GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PIN_13 + |GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN LTDC_MspInit 1 */ + + /* USER CODE END LTDC_MspInit 1 */ + } + +} + +/** +* @brief LTDC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ + +void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) +{ + + if(hltdc->Instance==LTDC) + { + /* USER CODE BEGIN LTDC_MspDeInit 0 */ + + /* USER CODE END LTDC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LTDC_CLK_DISABLE(); + + /**LTDC GPIO Configuration + PE4 ------> LTDC_B0 + PE5 ------> LTDC_G0 + PE6 ------> LTDC_G1 + PI9 ------> LTDC_VSYNC + PI10 ------> LTDC_HSYNC + PF10 ------> LTDC_DE + PH2 ------> LTDC_R0 + PH3 ------> LTDC_R1 + PA3 ------> LTDC_B5 + PB0 ------> LTDC_R3 + PB1 ------> LTDC_R6 + PH8 ------> LTDC_R2 + PG6 ------> LTDC_R7 + PG7 ------> LTDC_CLK + PC7 ------> LTDC_G6 + PA11 ------> LTDC_R4 + PA12 ------> LTDC_R5 + PH13 ------> LTDC_G2 + PH15 ------> LTDC_G4 + PI0 ------> LTDC_G5 + PI2 ------> LTDC_G7 + PD6 ------> LTDC_B2 + PG10 ------> LTDC_G3 + PG11 ------> LTDC_B3 + PG12 ------> LTDC_B1 + PB8 ------> LTDC_B6 + PB9 ------> LTDC_B7 + PI4 ------> LTDC_B4 + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6); + + HAL_GPIO_DeInit(GPIOI, GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_2 + |GPIO_PIN_4); + + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_10); + + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PIN_13 + |GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_11|GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8|GPIO_PIN_9); + + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_6); + + /* USER CODE BEGIN LTDC_MspDeInit 1 */ + + /* USER CODE END LTDC_MspDeInit 1 */ + } + +} + +/** +* @brief QSPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hqspi: QSPI handle pointer +* @retval None +*/ +void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hqspi->Instance==QUADSPI) + { + /* USER CODE BEGIN QUADSPI_MspInit 0 */ + + /* USER CODE END QUADSPI_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_QSPI_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**QUADSPI GPIO Configuration + PF6 ------> QUADSPI_BK1_IO3 + PF7 ------> QUADSPI_BK1_IO2 + PF8 ------> QUADSPI_BK1_IO0 + PF9 ------> QUADSPI_BK1_IO1 + PB2 ------> QUADSPI_CLK + PB6 ------> QUADSPI_BK1_NCS + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN QUADSPI_MspInit 1 */ + + /* USER CODE END QUADSPI_MspInit 1 */ + } + +} + +/** +* @brief QSPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hqspi: QSPI handle pointer +* @retval None +*/ + +void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi) +{ + + if(hqspi->Instance==QUADSPI) + { + /* USER CODE BEGIN QUADSPI_MspDeInit 0 */ + + /* USER CODE END QUADSPI_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_QSPI_CLK_DISABLE(); + + /**QUADSPI GPIO Configuration + PF6 ------> QUADSPI_BK1_IO3 + PF7 ------> QUADSPI_BK1_IO2 + PF8 ------> QUADSPI_BK1_IO0 + PF9 ------> QUADSPI_BK1_IO1 + PB2 ------> QUADSPI_CLK + PB6 ------> QUADSPI_BK1_NCS + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_2|GPIO_PIN_6); + + /* USER CODE BEGIN QUADSPI_MspDeInit 1 */ + + /* USER CODE END QUADSPI_MspDeInit 1 */ + } + +} + +/** +* @brief SD MSP Initialization +* This function configures the hardware resources used in this example +* @param hsd: SD handle pointer +* @retval None +*/ +void HAL_SD_MspInit(SD_HandleTypeDef* hsd) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hsd->Instance==SDMMC1) + { + /* USER CODE BEGIN SDMMC1_MspInit 0 */ + + /* USER CODE END SDMMC1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SDMMC1_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**SDMMC1 GPIO Configuration + PC8 ------> SDMMC1_D0 + PC9 ------> SDMMC1_D1 + PC10 ------> SDMMC1_D2 + PC11 ------> SDMMC1_D3 + PC12 ------> SDMMC1_CK + PD2 ------> SDMMC1_CMD + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN SDMMC1_MspInit 1 */ + + /* USER CODE END SDMMC1_MspInit 1 */ + } + +} + +/** +* @brief SD MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hsd: SD handle pointer +* @retval None +*/ + +void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd) +{ + + if(hsd->Instance==SDMMC1) + { + /* USER CODE BEGIN SDMMC1_MspDeInit 0 */ + + /* USER CODE END SDMMC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SDMMC1_CLK_DISABLE(); + + /**SDMMC1 GPIO Configuration + PC8 ------> SDMMC1_D0 + PC9 ------> SDMMC1_D1 + PC10 ------> SDMMC1_D2 + PC11 ------> SDMMC1_D3 + PC12 ------> SDMMC1_CK + PD2 ------> SDMMC1_CMD + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); + + /* USER CODE BEGIN SDMMC1_MspDeInit 1 */ + + /* USER CODE END SDMMC1_MspDeInit 1 */ + } + +} + /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example @@ -165,6 +728,209 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) } +static uint32_t FMC_Initialized = 0; + +static void HAL_FMC_MspInit(void){ + /* USER CODE BEGIN FMC_MspInit 0 */ + + /* USER CODE END FMC_MspInit 0 */ + GPIO_InitTypeDef GPIO_InitStruct; + if (FMC_Initialized) { + return; + } + FMC_Initialized = 1; + /* Peripheral clock enable */ + __HAL_RCC_FMC_CLK_ENABLE(); + + /** FMC GPIO Configuration + PF0 ------> FMC_A0 + PF1 ------> FMC_A1 + PF2 ------> FMC_A2 + PF3 ------> FMC_A3 + PF4 ------> FMC_A4 + PF5 ------> FMC_A5 + PC0 ------> FMC_SDNWE + PF11 ------> FMC_SDNRAS + PF12 ------> FMC_A6 + PF13 ------> FMC_A7 + PF14 ------> FMC_A8 + PF15 ------> FMC_A9 + PG0 ------> FMC_A10 + PG1 ------> FMC_A11 + PE7 ------> FMC_D4 + PE8 ------> FMC_D5 + PE9 ------> FMC_D6 + PE10 ------> FMC_D7 + PE11 ------> FMC_D8 + PE12 ------> FMC_D9 + PE13 ------> FMC_D10 + PE14 ------> FMC_D11 + PE15 ------> FMC_D12 + PH6 ------> FMC_SDNE1 + PH7 ------> FMC_SDCKE1 + PD8 ------> FMC_D13 + PD9 ------> FMC_D14 + PD10 ------> FMC_D15 + PD14 ------> FMC_D0 + PD15 ------> FMC_D1 + PG4 ------> FMC_BA0 + PG5 ------> FMC_BA1 + PG8 ------> FMC_SDCLK + PD0 ------> FMC_D2 + PD1 ------> FMC_D3 + PG15 ------> FMC_SDNCAS + PE0 ------> FMC_NBL0 + PE1 ------> FMC_NBL1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12 + |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5 + |GPIO_PIN_8|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 + |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 + |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 + |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN FMC_MspInit 1 */ + + /* USER CODE END FMC_MspInit 1 */ +} + +void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* hsdram){ + /* USER CODE BEGIN SDRAM_MspInit 0 */ + + /* USER CODE END SDRAM_MspInit 0 */ + HAL_FMC_MspInit(); + /* USER CODE BEGIN SDRAM_MspInit 1 */ + + /* USER CODE END SDRAM_MspInit 1 */ +} + +static uint32_t FMC_DeInitialized = 0; + +static void HAL_FMC_MspDeInit(void){ + /* USER CODE BEGIN FMC_MspDeInit 0 */ + + /* USER CODE END FMC_MspDeInit 0 */ + if (FMC_DeInitialized) { + return; + } + FMC_DeInitialized = 1; + /* Peripheral clock enable */ + __HAL_RCC_FMC_CLK_DISABLE(); + + /** FMC GPIO Configuration + PF0 ------> FMC_A0 + PF1 ------> FMC_A1 + PF2 ------> FMC_A2 + PF3 ------> FMC_A3 + PF4 ------> FMC_A4 + PF5 ------> FMC_A5 + PC0 ------> FMC_SDNWE + PF11 ------> FMC_SDNRAS + PF12 ------> FMC_A6 + PF13 ------> FMC_A7 + PF14 ------> FMC_A8 + PF15 ------> FMC_A9 + PG0 ------> FMC_A10 + PG1 ------> FMC_A11 + PE7 ------> FMC_D4 + PE8 ------> FMC_D5 + PE9 ------> FMC_D6 + PE10 ------> FMC_D7 + PE11 ------> FMC_D8 + PE12 ------> FMC_D9 + PE13 ------> FMC_D10 + PE14 ------> FMC_D11 + PE15 ------> FMC_D12 + PH6 ------> FMC_SDNE1 + PH7 ------> FMC_SDCKE1 + PD8 ------> FMC_D13 + PD9 ------> FMC_D14 + PD10 ------> FMC_D15 + PD14 ------> FMC_D0 + PD15 ------> FMC_D1 + PG4 ------> FMC_BA0 + PG5 ------> FMC_BA1 + PG8 ------> FMC_SDCLK + PD0 ------> FMC_D2 + PD1 ------> FMC_D3 + PG15 ------> FMC_SDNCAS + PE0 ------> FMC_NBL0 + PE1 ------> FMC_NBL1 + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12 + |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0); + + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5 + |GPIO_PIN_8|GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 + |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 + |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1); + + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_6|GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 + |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1); + + /* USER CODE BEGIN FMC_MspDeInit 1 */ + + /* USER CODE END FMC_MspDeInit 1 */ +} + +void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef* hsdram){ + /* USER CODE BEGIN SDRAM_MspDeInit 0 */ + + /* USER CODE END SDRAM_MspDeInit 0 */ + HAL_FMC_MspDeInit(); + /* USER CODE BEGIN SDRAM_MspDeInit 1 */ + + /* USER CODE END SDRAM_MspDeInit 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f767-fire-challenger/board/Kconfig b/bsp/stm32/stm32f767-fire-challenger/board/Kconfig index 707a0a4746..2e941dbb62 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/Kconfig +++ b/bsp/stm32/stm32f767-fire-challenger/board/Kconfig @@ -21,6 +21,7 @@ menu "Onboard Peripheral Drivers" config BSP_USING_SDRAM bool "Enable SDRAM" + select BSP_USING_FMC default n config BSP_USING_QSPI_FLASH @@ -30,12 +31,32 @@ menu "Onboard Peripheral Drivers" select RT_SFUD_USING_QSPI default n + config BSP_USING_LCD + bool "Enable LCD" + select BSP_USING_LTDC + select BSP_USING_SDRAM + default n + config BSP_USING_MPU6050 bool "Enable MPU6050 (i2c4)" select BSP_USING_I2C4 select PKG_USING_MPU6XXX default n + config BSP_USING_POT + bool "Enable potentiometer" + select BSP_USING_ADC + select BSP_USING_ADC1 + default n + + config BSP_USING_SDCARD + bool "Enable SDCARD (sdio)" + select BSP_USING_SDIO + select RT_USING_DFS + select RT_USING_DFS_ELMFAT + select RT_USING_PIN + default n + endmenu menu "On-chip Peripheral Drivers" @@ -178,6 +199,20 @@ menuconfig BSP_USING_SPI select RT_USING_WDT default n + config BSP_USING_SDIO + bool "Enable SDIO" + select RT_USING_SDIO + select RT_USING_DFS + default n + + config BSP_USING_FMC + bool + default n + + config BSP_USING_LTDC + bool + default n + endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f767-fire-challenger/board/SConscript b/bsp/stm32/stm32f767-fire-challenger/board/SConscript index c7dba39f6c..6dd2b9f997 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/SConscript +++ b/bsp/stm32/stm32f767-fire-challenger/board/SConscript @@ -18,6 +18,9 @@ if GetDepend(['BSP_USING_ETH']): if GetDepend(['BSP_USING_QSPI_FLASH']): src += Glob('ports/drv_qspi_flash.c') +if GetDepend(['BSP_USING_SDCARD']): + src += Glob('ports/sdcard_port.c') + path = [cwd] path += [cwd + '/CubeMX_Config/Inc'] path += [cwd + '/ports'] diff --git a/bsp/stm32/stm32f767-fire-challenger/board/board.c b/bsp/stm32/stm32f767-fire-challenger/board/board.c index 8b918e7d69..6b9cace190 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/board.c +++ b/bsp/stm32/stm32f767-fire-challenger/board/board.c @@ -29,7 +29,7 @@ void SystemClock_Config(void) RCC_OscInitStruct.PLL.PLLM = 25; RCC_OscInitStruct.PLL.PLLN = 432; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - RCC_OscInitStruct.PLL.PLLQ = 2; + RCC_OscInitStruct.PLL.PLLQ = 9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); @@ -53,8 +53,17 @@ void SystemClock_Config(void) { Error_Handler(); } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_USART1 + |RCC_PERIPHCLK_SDMMC1|RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 3; + PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2; + PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV2; + PeriphClkInitStruct.PLLSAIDivQ = 1; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + PeriphClkInitStruct.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_CLK48; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf index f7c9751cd6..9dc3dbbcd4 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf @@ -7,7 +7,7 @@ define symbol __ICFEDIT_intvec_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; +define symbol __ICFEDIT_region_RAM_end__ = 0x2007FFFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x0400; define symbol __ICFEDIT_size_heap__ = 0x0000; diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds index c6fe92740e..565f5f1643 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds @@ -7,7 +7,7 @@ MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ - RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 512k /* 512K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x200; diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct index e0bd37ed5e..b9f8110cc6 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct @@ -8,7 +8,7 @@ LR_IROM1 0x08000000 0x00100000 { ; load region size_region *(InRoot$$Sections) .ANY (+RO) } - RW_IRAM1 0x20020000 0x00060000 { ; RW data + RW_IRAM1 0x2000000 0x00080000 { ; RW data .ANY (+RW +ZI) } } diff --git a/bsp/stm32/stm32f767-fire-challenger/board/ports/lcd_port.h b/bsp/stm32/stm32f767-fire-challenger/board/ports/lcd_port.h new file mode 100644 index 0000000000..2660f3931b --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/ports/lcd_port.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-08 zylx first version + */ + +#ifndef __LCD_PORT_H__ +#define __LCD_PORT_H__ + +/* fire 5 inch screen, 800 * 480 */ +#define LCD_WIDTH 800 +#define LCD_HEIGHT 480 +#define LCD_BITS_PER_PIXEL 16 +#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) +#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 + +#define LCD_HSYNC_WIDTH 2 +#define LCD_VSYNC_HEIGHT 2 +#define LCD_HBP 46 +#define LCD_VBP 23 +#define LCD_HFP 22 +#define LCD_VFP 22 + +#define LCD_BACKLIGHT_USING_GPIO +#define LCD_BL_GPIO_NUM GET_PIN(D, 7) +#define LCD_DISP_GPIO_NUM GET_PIN(D, 4) +/* fire 5 inch screen, 800 * 480 */ + +#endif /* __LCD_PORT_H__ */ diff --git a/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c new file mode 100644 index 0000000000..035d3357d1 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-13 balanceTWK add sdcard port file + */ + +#include + +#ifdef BSP_USING_SDCARD + +#include +#include +#include +#include "drv_gpio.h" + +// #define DBG_ENABLE +#define DBG_SECTION_NAME "app.card" +#define DBG_COLOR + +#define DBG_LEVEL DBG_INFO +#include + +#define WIFI_RESET_PIN GET_PIN(G, 9) + +int ewm1062_disable(void) +{ + rt_pin_mode(WIFI_RESET_PIN, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_RESET_PIN,PIN_LOW); + return RT_EOK; +} +INIT_BOARD_EXPORT(ewm1062_disable); + +void sd_mount(void *parameter) +{ + while (1) + { + rt_thread_mdelay(500); + if(rt_device_find("sd0") != RT_NULL) + { + if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK) + { + LOG_I("sd card mount to '/'"); + break; + } + else + { + LOG_W("sd card mount to '/' failed!"); + } + } + } +} + +int stm32_sdcard_mount(void) +{ + rt_thread_t tid; + + tid = rt_thread_create("sd_mount", sd_mount, RT_NULL, + 1024, RT_THREAD_PRIORITY_MAX - 2, 20); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create sd_mount thread err!"); + } + return RT_EOK; +} +INIT_ENV_EXPORT(stm32_sdcard_mount); + +#endif /* BSP_USING_SDCARD */ + diff --git a/bsp/stm32/stm32f767-fire-challenger/board/ports/sdram_port.h b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdram_port.h index 8d22b23f00..0d9c7e6918 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/ports/sdram_port.h +++ b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdram_port.h @@ -14,7 +14,7 @@ /* parameters for sdram peripheral */ /* Bank1 or Bank2 */ #define SDRAM_TARGET_BANK 2 -/* stm32f4 Bank1:0XC0000000 Bank2:0XD0000000 */ +/* stm32f7 Bank1:0XC0000000 Bank2:0XD0000000 */ #define SDRAM_BANK_ADDR ((uint32_t)0XD0000000) /* data width: 8, 16, 32 */ #define SDRAM_DATA_WIDTH 16 diff --git a/bsp/stm32/stm32f767-fire-challenger/project.uvoptx b/bsp/stm32/stm32f767-fire-challenger/project.uvoptx new file mode 100644 index 0000000000..1059300c11 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/project.uvoptx @@ -0,0 +1,2656 @@ + + + + 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 + 3 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U59400616 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(5BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06451041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20020000 -FC1000 -FN1 -FF0STM32F7x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F767IGTx$CMSIS\Flash\STM32F7x_1024.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20020000 -FF0STM32F7x_1024 -FF1STM32F7x_1024dual -FL0100000 -FL1100000 -FS08000000 -FS18000000 -FP0($$Device:STM32F767IGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F767IGTx$CMSIS\Flash\STM32F7x_1024dual.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + 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\memheap.c + memheap.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 + 0 + 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\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + board\ports\sdcard_port.c + sdcard_port.c + 0 + 0 + + + 3 + 20 + 2 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + startup_stm32f767xx.s + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_sdram.c + drv_sdram.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_lcd.c + drv_lcd.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_sdio.c + drv_sdio.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + LittlevGL2RTT + 0 + 0 + 0 + 0 + + 4 + 27 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\littlevgl2rtt.c + littlevgl2rtt.c + 0 + 0 + + + 4 + 28 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_group.c + lv_group.c + 0 + 0 + + + 4 + 29 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_indev.c + lv_indev.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_obj.c + lv_obj.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_refr.c + lv_refr.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_style.c + lv_style.c + 0 + 0 + + + 4 + 33 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_vdb.c + lv_vdb.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw.c + lv_draw.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_arc.c + lv_draw_arc.c + 0 + 0 + + + 4 + 36 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_img.c + lv_draw_img.c + 0 + 0 + + + 4 + 37 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_label.c + lv_draw_label.c + 0 + 0 + + + 4 + 38 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_line.c + lv_draw_line.c + 0 + 0 + + + 4 + 39 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_rbasic.c + lv_draw_rbasic.c + 0 + 0 + + + 4 + 40 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_rect.c + lv_draw_rect.c + 0 + 0 + + + 4 + 41 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_triangle.c + lv_draw_triangle.c + 0 + 0 + + + 4 + 42 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_vbasic.c + lv_draw_vbasic.c + 0 + 0 + + + 4 + 43 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_disp.c + lv_hal_disp.c + 0 + 0 + + + 4 + 44 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_indev.c + lv_hal_indev.c + 0 + 0 + + + 4 + 45 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_tick.c + lv_hal_tick.c + 0 + 0 + + + 4 + 46 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_anim.c + lv_anim.c + 0 + 0 + + + 4 + 47 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_area.c + lv_area.c + 0 + 0 + + + 4 + 48 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_circ.c + lv_circ.c + 0 + 0 + + + 4 + 49 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_color.c + lv_color.c + 0 + 0 + + + 4 + 50 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_font.c + lv_font.c + 0 + 0 + + + 4 + 51 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_fs.c + lv_fs.c + 0 + 0 + + + 4 + 52 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_ll.c + lv_ll.c + 0 + 0 + + + 4 + 53 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_log.c + lv_log.c + 0 + 0 + + + 4 + 54 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_math.c + lv_math.c + 0 + 0 + + + 4 + 55 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_mem.c + lv_mem.c + 0 + 0 + + + 4 + 56 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_task.c + lv_task.c + 0 + 0 + + + 4 + 57 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_templ.c + lv_templ.c + 0 + 0 + + + 4 + 58 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_txt.c + lv_txt.c + 0 + 0 + + + 4 + 59 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_ufs.c + lv_ufs.c + 0 + 0 + + + 4 + 60 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_builtin.c + lv_font_builtin.c + 0 + 0 + + + 4 + 61 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10.c + lv_font_dejavu_10.c + 0 + 0 + + + 4 + 62 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10_cyrillic.c + lv_font_dejavu_10_cyrillic.c + 0 + 0 + + + 4 + 63 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10_latin_sup.c + lv_font_dejavu_10_latin_sup.c + 0 + 0 + + + 4 + 64 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20.c + lv_font_dejavu_20.c + 0 + 0 + + + 4 + 65 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20_cyrillic.c + lv_font_dejavu_20_cyrillic.c + 0 + 0 + + + 4 + 66 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20_latin_sup.c + lv_font_dejavu_20_latin_sup.c + 0 + 0 + + + 4 + 67 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30.c + lv_font_dejavu_30.c + 0 + 0 + + + 4 + 68 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30_cyrillic.c + lv_font_dejavu_30_cyrillic.c + 0 + 0 + + + 4 + 69 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30_latin_sup.c + lv_font_dejavu_30_latin_sup.c + 0 + 0 + + + 4 + 70 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40.c + lv_font_dejavu_40.c + 0 + 0 + + + 4 + 71 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40_cyrillic.c + lv_font_dejavu_40_cyrillic.c + 0 + 0 + + + 4 + 72 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40_latin_sup.c + lv_font_dejavu_40_latin_sup.c + 0 + 0 + + + 4 + 73 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_monospace_8.c + lv_font_monospace_8.c + 0 + 0 + + + 4 + 74 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_10.c + lv_font_symbol_10.c + 0 + 0 + + + 4 + 75 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_20.c + lv_font_symbol_20.c + 0 + 0 + + + 4 + 76 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_30.c + lv_font_symbol_30.c + 0 + 0 + + + 4 + 77 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_40.c + lv_font_symbol_40.c + 0 + 0 + + + 4 + 78 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_arc.c + lv_arc.c + 0 + 0 + + + 4 + 79 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_bar.c + lv_bar.c + 0 + 0 + + + 4 + 80 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_btn.c + lv_btn.c + 0 + 0 + + + 4 + 81 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_btnm.c + lv_btnm.c + 0 + 0 + + + 4 + 82 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_calendar.c + lv_calendar.c + 0 + 0 + + + 4 + 83 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_cb.c + lv_cb.c + 0 + 0 + + + 4 + 84 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_chart.c + lv_chart.c + 0 + 0 + + + 4 + 85 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_cont.c + lv_cont.c + 0 + 0 + + + 4 + 86 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_ddlist.c + lv_ddlist.c + 0 + 0 + + + 4 + 87 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_gauge.c + lv_gauge.c + 0 + 0 + + + 4 + 88 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_img.c + lv_img.c + 0 + 0 + + + 4 + 89 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_imgbtn.c + lv_imgbtn.c + 0 + 0 + + + 4 + 90 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_kb.c + lv_kb.c + 0 + 0 + + + 4 + 91 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_label.c + lv_label.c + 0 + 0 + + + 4 + 92 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_led.c + lv_led.c + 0 + 0 + + + 4 + 93 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_line.c + lv_line.c + 0 + 0 + + + 4 + 94 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_list.c + lv_list.c + 0 + 0 + + + 4 + 95 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_lmeter.c + lv_lmeter.c + 0 + 0 + + + 4 + 96 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_mbox.c + lv_mbox.c + 0 + 0 + + + 4 + 97 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_objx_templ.c + lv_objx_templ.c + 0 + 0 + + + 4 + 98 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_page.c + lv_page.c + 0 + 0 + + + 4 + 99 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_preload.c + lv_preload.c + 0 + 0 + + + 4 + 100 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_roller.c + lv_roller.c + 0 + 0 + + + 4 + 101 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_slider.c + lv_slider.c + 0 + 0 + + + 4 + 102 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_sw.c + lv_sw.c + 0 + 0 + + + 4 + 103 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_ta.c + lv_ta.c + 0 + 0 + + + 4 + 104 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_tabview.c + lv_tabview.c + 0 + 0 + + + 4 + 105 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_win.c + lv_win.c + 0 + 0 + + + 4 + 106 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme.c + lv_theme.c + 0 + 0 + + + 4 + 107 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_alien.c + lv_theme_alien.c + 0 + 0 + + + 4 + 108 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_default.c + lv_theme_default.c + 0 + 0 + + + 4 + 109 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_material.c + lv_theme_material.c + 0 + 0 + + + 4 + 110 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_mono.c + lv_theme_mono.c + 0 + 0 + + + 4 + 111 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_nemo.c + lv_theme_nemo.c + 0 + 0 + + + 4 + 112 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_night.c + lv_theme_night.c + 0 + 0 + + + 4 + 113 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_templ.c + lv_theme_templ.c + 0 + 0 + + + 4 + 114 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_zen.c + lv_theme_zen.c + 0 + 0 + + + + + LittlevGL2RTT_Demo + 0 + 0 + 0 + 0 + + 5 + 115 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\example\littlevgl2rtt_demo.c + littlevgl2rtt_demo.c + 0 + 0 + + + 5 + 116 + 1 + 0 + 0 + 0 + packages\LittlevGL2RTT-test\example\lv_test_theme.c + lv_test_theme.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 6 + 117 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 6 + 118 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 6 + 119 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 6 + 120 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + 6 + 121 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + + + Filesystem + 0 + 0 + 0 + 0 + + 7 + 122 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs.c + dfs.c + 0 + 0 + + + 7 + 123 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_file.c + dfs_file.c + 0 + 0 + + + 7 + 124 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_fs.c + dfs_fs.c + 0 + 0 + + + 7 + 125 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_posix.c + dfs_posix.c + 0 + 0 + + + 7 + 126 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\poll.c + poll.c + 0 + 0 + + + 7 + 127 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\select.c + select.c + 0 + 0 + + + 7 + 128 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + devfs.c + 0 + 0 + + + 7 + 129 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\elmfat\dfs_elm.c + dfs_elm.c + 0 + 0 + + + 7 + 130 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\elmfat\ff.c + ff.c + 0 + 0 + + + 7 + 131 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\elmfat\option\ccsbcs.c + ccsbcs.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 8 + 132 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 8 + 133 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\sdio\block_dev.c + block_dev.c + 0 + 0 + + + 8 + 134 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\sdio\mmcsd_core.c + mmcsd_core.c + 0 + 0 + + + 8 + 135 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\sdio\sd.c + sd.c + 0 + 0 + + + 8 + 136 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\sdio\sdio.c + sdio.c + 0 + 0 + + + 8 + 137 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\sdio\mmc.c + mmc.c + 0 + 0 + + + 8 + 138 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 8 + 139 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 8 + 140 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 8 + 141 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 8 + 142 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 8 + 143 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 8 + 144 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 8 + 145 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 9 + 146 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 9 + 147 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 9 + 148 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 9 + 149 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 9 + 150 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 9 + 151 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 10 + 152 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 10 + 153 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 10 + 154 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stdio.c + stdio.c + 0 + 0 + + + 10 + 155 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 10 + 156 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\time.c + time.c + 0 + 0 + + + 10 + 157 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\gmtime_r.c + gmtime_r.c + 0 + 0 + + + 10 + 158 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\mmap\posix_mmap.c + posix_mmap.c + 0 + 0 + + + + + pthreads + 0 + 0 + 0 + 0 + + 11 + 159 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\mqueue.c + mqueue.c + 0 + 0 + + + 11 + 160 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread.c + pthread.c + 0 + 0 + + + 11 + 161 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_attr.c + pthread_attr.c + 0 + 0 + + + 11 + 162 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_barrier.c + pthread_barrier.c + 0 + 0 + + + 11 + 163 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_cond.c + pthread_cond.c + 0 + 0 + + + 11 + 164 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_mutex.c + pthread_mutex.c + 0 + 0 + + + 11 + 165 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_rwlock.c + pthread_rwlock.c + 0 + 0 + + + 11 + 166 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_spin.c + pthread_spin.c + 0 + 0 + + + 11 + 167 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\pthread_tls.c + pthread_tls.c + 0 + 0 + + + 11 + 168 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\sched.c + sched.c + 0 + 0 + + + 11 + 169 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\pthreads\semaphore.c + semaphore.c + 0 + 0 + + + 11 + 170 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\time\clock_time.c + clock_time.c + 0 + 0 + + + 11 + 171 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\time\posix_sleep.c + posix_sleep.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 12 + 172 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 0 + 0 + + + 12 + 173 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + stm32f7xx_hal.c + 0 + 0 + + + 12 + 174 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 12 + 175 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 12 + 176 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 12 + 177 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 12 + 178 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 12 + 179 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 12 + 180 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 12 + 181 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 12 + 182 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 12 + 183 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 12 + 184 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 12 + 185 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 12 + 186 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 12 + 187 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 12 + 188 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 12 + 189 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + 12 + 190 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c + stm32f7xx_ll_sdmmc.c + 0 + 0 + + + 12 + 191 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c + stm32f7xx_hal_sd.c + 0 + 0 + + + 12 + 192 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c + stm32f7xx_ll_fmc.c + 0 + 0 + + + 12 + 193 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c + stm32f7xx_hal_sdram.c + 0 + 0 + + + 12 + 194 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c + stm32f7xx_hal_dma2d.c + 0 + 0 + + + 12 + 195 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c + stm32f7xx_hal_ltdc_ex.c + 0 + 0 + + + 12 + 196 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c + stm32f7xx_hal_ltdc.c + 0 + 0 + + + 12 + 197 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c + stm32f7xx_ll_dma.c + 0 + 0 + + + 12 + 198 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c + stm32f7xx_ll_dma2d.c + 0 + 0 + + + +
    diff --git a/bsp/stm32/stm32f767-fire-challenger/project.uvprojx b/bsp/stm32/stm32f767-fire-challenger/project.uvprojx new file mode 100644 index 0000000000..4a1cdf4ed7 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/project.uvprojx @@ -0,0 +1,1580 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F767IGTx + STMicroelectronics + Keil.STM32F7xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20020000,0x60000) IRAM2(0x20000000,0x20000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FF1STM32F7x_1024dual -FS18000000 -FL1100000 -FP0($$Device:STM32F767IGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F767IGTx$CMSIS\Flash\STM32F7x_1024dual.FLM)) + 0 + $$Device:STM32F767IGTx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F767IGTx$CMSIS\SVD\STM32F7x7_v1r2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 0 + 0x20000000 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + STM32F767xx, USE_HAL_DRIVER, RT_USING_ARM_LIBC + + .;..\..\..\include;applications;.;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;packages\LittlevGL2RTT-test;packages\LittlevGL2RTT-test\lvgl;packages\LittlevGL2RTT-test\lvgl\lv_core;packages\LittlevGL2RTT-test\lvgl\lv_draw;packages\LittlevGL2RTT-test\lvgl\lv_hal;packages\LittlevGL2RTT-test\lvgl\lv_misc;packages\LittlevGL2RTT-test\lvgl\lv_fonts;packages\LittlevGL2RTT-test\lvgl\lv_objx;packages\LittlevGL2RTT-test\lvgl\lv_themes;packages\LittlevGL2RTT-test\example;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m7;..\..\..\components\dfs\include;..\..\..\components\dfs\filesystems\devfs;..\..\..\components\dfs\filesystems\elmfat;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common;..\..\..\components\libc\mmap;..\..\..\components\libc\pthreads;..\..\..\components\libc\time;..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Inc;..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Include;..\libraries\STM32F7xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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 + + + memheap.c + 1 + ..\..\..\src\memheap.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 + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + sdcard_port.c + 1 + board\ports\sdcard_port.c + + + startup_stm32f767xx.s + 2 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_sdram.c + 1 + ..\libraries\HAL_Drivers\drv_sdram.c + + + drv_lcd.c + 1 + ..\libraries\HAL_Drivers\drv_lcd.c + + + drv_sdio.c + 1 + ..\libraries\HAL_Drivers\drv_sdio.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + LittlevGL2RTT + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + --c99 --gnu -g -W + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + littlevgl2rtt.c + 1 + packages\LittlevGL2RTT-test\littlevgl2rtt.c + + + lv_group.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_group.c + + + lv_indev.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_indev.c + + + lv_obj.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_obj.c + + + lv_refr.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_refr.c + + + lv_style.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_style.c + + + lv_vdb.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_core\lv_vdb.c + + + lv_draw.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw.c + + + lv_draw_arc.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_arc.c + + + lv_draw_img.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_img.c + + + lv_draw_label.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_label.c + + + lv_draw_line.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_line.c + + + lv_draw_rbasic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_rbasic.c + + + lv_draw_rect.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_rect.c + + + lv_draw_triangle.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_triangle.c + + + lv_draw_vbasic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_draw\lv_draw_vbasic.c + + + lv_hal_disp.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_disp.c + + + lv_hal_indev.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_indev.c + + + lv_hal_tick.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_hal\lv_hal_tick.c + + + lv_anim.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_anim.c + + + lv_area.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_area.c + + + lv_circ.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_circ.c + + + lv_color.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_color.c + + + lv_font.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_font.c + + + lv_fs.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_fs.c + + + lv_ll.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_ll.c + + + lv_log.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_log.c + + + lv_math.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_math.c + + + lv_mem.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_mem.c + + + lv_task.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_task.c + + + lv_templ.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_templ.c + + + lv_txt.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_txt.c + + + lv_ufs.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_misc\lv_ufs.c + + + lv_font_builtin.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_builtin.c + + + lv_font_dejavu_10.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10.c + + + lv_font_dejavu_10_cyrillic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10_cyrillic.c + + + lv_font_dejavu_10_latin_sup.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_10_latin_sup.c + + + lv_font_dejavu_20.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20.c + + + lv_font_dejavu_20_cyrillic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20_cyrillic.c + + + lv_font_dejavu_20_latin_sup.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_20_latin_sup.c + + + lv_font_dejavu_30.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30.c + + + lv_font_dejavu_30_cyrillic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30_cyrillic.c + + + lv_font_dejavu_30_latin_sup.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_30_latin_sup.c + + + lv_font_dejavu_40.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40.c + + + lv_font_dejavu_40_cyrillic.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40_cyrillic.c + + + lv_font_dejavu_40_latin_sup.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_dejavu_40_latin_sup.c + + + lv_font_monospace_8.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_monospace_8.c + + + lv_font_symbol_10.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_10.c + + + lv_font_symbol_20.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_20.c + + + lv_font_symbol_30.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_30.c + + + lv_font_symbol_40.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_fonts\lv_font_symbol_40.c + + + lv_arc.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_arc.c + + + lv_bar.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_bar.c + + + lv_btn.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_btn.c + + + lv_btnm.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_btnm.c + + + lv_calendar.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_calendar.c + + + lv_cb.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_cb.c + + + lv_chart.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_chart.c + + + lv_cont.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_cont.c + + + lv_ddlist.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_ddlist.c + + + lv_gauge.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_gauge.c + + + lv_img.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_img.c + + + lv_imgbtn.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_imgbtn.c + + + lv_kb.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_kb.c + + + lv_label.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_label.c + + + lv_led.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_led.c + + + lv_line.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_line.c + + + lv_list.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_list.c + + + lv_lmeter.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_lmeter.c + + + lv_mbox.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_mbox.c + + + lv_objx_templ.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_objx_templ.c + + + lv_page.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_page.c + + + lv_preload.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_preload.c + + + lv_roller.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_roller.c + + + lv_slider.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_slider.c + + + lv_sw.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_sw.c + + + lv_ta.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_ta.c + + + lv_tabview.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_tabview.c + + + lv_win.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_objx\lv_win.c + + + lv_theme.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme.c + + + lv_theme_alien.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_alien.c + + + lv_theme_default.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_default.c + + + lv_theme_material.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_material.c + + + lv_theme_mono.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_mono.c + + + lv_theme_nemo.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_nemo.c + + + lv_theme_night.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_night.c + + + lv_theme_templ.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_templ.c + + + lv_theme_zen.c + 1 + packages\LittlevGL2RTT-test\lvgl\lv_themes\lv_theme_zen.c + + + + + LittlevGL2RTT_Demo + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + --c99 --gnu -g -W + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + littlevgl2rtt_demo.c + 1 + packages\LittlevGL2RTT-test\example\littlevgl2rtt_demo.c + + + lv_test_theme.c + 1 + packages\LittlevGL2RTT-test\example\lv_test_theme.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-m7\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + + + Filesystem + + + dfs.c + 1 + ..\..\..\components\dfs\src\dfs.c + + + dfs_file.c + 1 + ..\..\..\components\dfs\src\dfs_file.c + + + dfs_fs.c + 1 + ..\..\..\components\dfs\src\dfs_fs.c + + + dfs_posix.c + 1 + ..\..\..\components\dfs\src\dfs_posix.c + + + poll.c + 1 + ..\..\..\components\dfs\src\poll.c + + + select.c + 1 + ..\..\..\components\dfs\src\select.c + + + devfs.c + 1 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + + + dfs_elm.c + 1 + ..\..\..\components\dfs\filesystems\elmfat\dfs_elm.c + + + ff.c + 1 + ..\..\..\components\dfs\filesystems\elmfat\ff.c + + + ccsbcs.c + 1 + ..\..\..\components\dfs\filesystems\elmfat\option\ccsbcs.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + block_dev.c + 1 + ..\..\..\components\drivers\sdio\block_dev.c + + + mmcsd_core.c + 1 + ..\..\..\components\drivers\sdio\mmcsd_core.c + + + sd.c + 1 + ..\..\..\components\drivers\sdio\sd.c + + + sdio.c + 1 + ..\..\..\components\drivers\sdio\sdio.c + + + mmc.c + 1 + ..\..\..\components\drivers\sdio\mmc.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 + + + + + libc + + + libc.c + 1 + ..\..\..\components\libc\compilers\armlibc\libc.c + + + mem_std.c + 1 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + + + stdio.c + 1 + ..\..\..\components\libc\compilers\armlibc\stdio.c + + + stubs.c + 1 + ..\..\..\components\libc\compilers\armlibc\stubs.c + + + time.c + 1 + ..\..\..\components\libc\compilers\armlibc\time.c + + + gmtime_r.c + 1 + ..\..\..\components\libc\compilers\common\gmtime_r.c + + + posix_mmap.c + 1 + ..\..\..\components\libc\mmap\posix_mmap.c + + + + + pthreads + + + mqueue.c + 1 + ..\..\..\components\libc\pthreads\mqueue.c + + + pthread.c + 1 + ..\..\..\components\libc\pthreads\pthread.c + + + pthread_attr.c + 1 + ..\..\..\components\libc\pthreads\pthread_attr.c + + + pthread_barrier.c + 1 + ..\..\..\components\libc\pthreads\pthread_barrier.c + + + pthread_cond.c + 1 + ..\..\..\components\libc\pthreads\pthread_cond.c + + + pthread_mutex.c + 1 + ..\..\..\components\libc\pthreads\pthread_mutex.c + + + pthread_rwlock.c + 1 + ..\..\..\components\libc\pthreads\pthread_rwlock.c + + + pthread_spin.c + 1 + ..\..\..\components\libc\pthreads\pthread_spin.c + + + pthread_tls.c + 1 + ..\..\..\components\libc\pthreads\pthread_tls.c + + + sched.c + 1 + ..\..\..\components\libc\pthreads\sched.c + + + semaphore.c + 1 + ..\..\..\components\libc\pthreads\semaphore.c + + + clock_time.c + 1 + ..\..\..\components\libc\time\clock_time.c + + + posix_sleep.c + 1 + ..\..\..\components\libc\time\posix_sleep.c + + + + + STM32_HAL + + + system_stm32f7xx.c + 1 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_cec.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cortex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_crc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_cryp.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_dma_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_pwr.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rcc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_rng.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_sram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_gpio.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_uart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_usart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + stm32f7xx_ll_sdmmc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c + + + stm32f7xx_hal_sd.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c + + + stm32f7xx_ll_fmc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c + + + stm32f7xx_hal_sdram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c + + + stm32f7xx_hal_dma2d.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c + + + stm32f7xx_hal_ltdc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c + + + stm32f7xx_hal_ltdc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c + + + stm32f7xx_ll_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c + + + stm32f7xx_ll_dma2d.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f767-fire-challenger/template.uvprojx b/bsp/stm32/stm32f767-fire-challenger/template.uvprojx index 351954faf4..559eb8a0bd 100644 --- a/bsp/stm32/stm32f767-fire-challenger/template.uvprojx +++ b/bsp/stm32/stm32f767-fire-challenger/template.uvprojx @@ -54,7 +54,7 @@ 0 0 1 - 1 + 0 .\build\keil\List\ 1 0 From 9e7254ef59408c21a9ab1481a117c41573f97796 Mon Sep 17 00:00:00 2001 From: armink Date: Tue, 15 Jan 2019 20:13:49 +0800 Subject: [PATCH 20/26] [DeviceDriver][SFUD] Change the rt_sfud_flash_find() function position. --- components/drivers/spi/spi_flash_sfud.c | 59 ++++++++++++------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/components/drivers/spi/spi_flash_sfud.c b/components/drivers/spi/spi_flash_sfud.c index c8ff8f1b3b..fb18b820c0 100644 --- a/components/drivers/spi/spi_flash_sfud.c +++ b/components/drivers/spi/spi_flash_sfud.c @@ -455,6 +455,35 @@ rt_err_t rt_sfud_flash_delete(rt_spi_flash_device_t spi_flash_dev) { return RT_EOK; } +sfud_flash_t rt_sfud_flash_find(const char *spi_dev_name) +{ + rt_spi_flash_device_t rtt_dev = RT_NULL; + struct rt_spi_device *rt_spi_device = RT_NULL; + sfud_flash_t sfud_dev = RT_NULL; + + rt_spi_device = (struct rt_spi_device *) rt_device_find(spi_dev_name); + if (rt_spi_device == RT_NULL || rt_spi_device->parent.type != RT_Device_Class_SPIDevice) + { + rt_kprintf("ERROR: SPI device %s not found!\n", spi_dev_name); + goto error; + } + + rtt_dev = (rt_spi_flash_device_t)(rt_spi_device->user_data); + if (rtt_dev && rtt_dev->user_data) + { + sfud_dev = (sfud_flash_t)(rtt_dev->user_data); + return sfud_dev; + } + else + { + rt_kprintf("ERROR: SFUD flash device not found!\n"); + goto error; + } + +error: + return RT_NULL; +} + #if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) #include @@ -698,36 +727,6 @@ static void sf(uint8_t argc, char **argv) { } } MSH_CMD_EXPORT(sf, SPI Flash operate.); - -sfud_flash_t rt_sfud_flash_find(const char *spi_dev_name) -{ - rt_spi_flash_device_t rtt_dev = RT_NULL; - struct rt_spi_device *rt_spi_device = RT_NULL; - sfud_flash_t sfud_dev = RT_NULL; - - rt_spi_device = (struct rt_spi_device *) rt_device_find(spi_dev_name); - if (rt_spi_device == RT_NULL || rt_spi_device->parent.type != RT_Device_Class_SPIDevice) - { - rt_kprintf("ERROR: SPI device %s not found!\n", spi_dev_name); - goto error; - } - - rtt_dev = (rt_spi_flash_device_t)(rt_spi_device->user_data); - if (rtt_dev && rtt_dev->user_data) - { - sfud_dev = (sfud_flash_t)(rtt_dev->user_data); - return sfud_dev; - } - else - { - rt_kprintf("ERROR: SFUD flash device not found!\n"); - goto error; - } - -error: - return RT_NULL; -} - #endif /* defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) */ #endif /* RT_USING_SFUD */ From c2c2b89f6b1aef6576824673f33df90c4bda71bc Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 15 Jan 2019 23:04:27 +0800 Subject: [PATCH 21/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在更改后系统无法正常运行,现恢复到之前版本 --- .../stm32f767-fire-challenger/board/linker_scripts/link.icf | 2 +- .../stm32f767-fire-challenger/board/linker_scripts/link.lds | 2 +- .../stm32f767-fire-challenger/board/linker_scripts/link.sct | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf index 9dc3dbbcd4..f7c9751cd6 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.icf @@ -7,7 +7,7 @@ define symbol __ICFEDIT_intvec_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x2007FFFF; +define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x0400; define symbol __ICFEDIT_size_heap__ = 0x0000; diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds index 565f5f1643..c6fe92740e 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.lds @@ -7,7 +7,7 @@ MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ - RAM (rw) : ORIGIN = 0x20000000, LENGTH = 512k /* 512K sram */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x200; diff --git a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct index b9f8110cc6..e0bd37ed5e 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct +++ b/bsp/stm32/stm32f767-fire-challenger/board/linker_scripts/link.sct @@ -8,7 +8,7 @@ LR_IROM1 0x08000000 0x00100000 { ; load region size_region *(InRoot$$Sections) .ANY (+RO) } - RW_IRAM1 0x2000000 0x00080000 { ; RW data + RW_IRAM1 0x20020000 0x00060000 { ; RW data .ANY (+RW +ZI) } } From 9b88b4c04c4ffc5a45dcbbaeb5660528e4d2da59 Mon Sep 17 00:00:00 2001 From: e31207077 <46383712+e31207077@users.noreply.github.com> Date: Wed, 16 Jan 2019 12:31:16 +0800 Subject: [PATCH 22/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20ST=20=E5=AE=98?= =?UTF-8?q?=E6=96=B9=20stm32f767-nucleo=20=E5=BC=80=E5=8F=91=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f767-st-nucleo/Kconfig | 21 + bsp/stm32/stm32f767-st-nucleo/README.md | 110 + bsp/stm32/stm32f767-st-nucleo/SConscript | 14 + bsp/stm32/stm32f767-st-nucleo/SConstruct | 47 + .../applications/SConscript | 12 + .../stm32f767-st-nucleo/applications/main.c | 35 + .../board/CubeMX_Config/CubeMX_Config.ioc | 324 ++ .../board/CubeMX_Config/Inc/main.h | 141 + .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 458 +++ .../board/CubeMX_Config/Inc/stm32f7xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 396 +++ .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 364 ++ .../board/CubeMX_Config/Src/stm32f7xx_it.c | 217 ++ .../CubeMX_Config/Src/system_stm32f7xx.c | 278 ++ bsp/stm32/stm32f767-st-nucleo/board/Kconfig | 46 + .../stm32f767-st-nucleo/board/SConscript | 26 + bsp/stm32/stm32f767-st-nucleo/board/board.c | 72 + bsp/stm32/stm32f767-st-nucleo/board/board.h | 41 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 144 + .../board/linker_scripts/link.sct | 15 + .../figures/en.high-perf_nucleo-144_mbed.jpg | Bin 0 -> 217664 bytes bsp/stm32/stm32f767-st-nucleo/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f767-st-nucleo/project.ewp | 2419 ++++++++++++++ bsp/stm32/stm32f767-st-nucleo/project.eww | 10 + bsp/stm32/stm32f767-st-nucleo/project.uvoptx | 1256 +++++++ bsp/stm32/stm32f767-st-nucleo/project.uvprojx | 851 +++++ bsp/stm32/stm32f767-st-nucleo/rtconfig.h | 186 ++ bsp/stm32/stm32f767-st-nucleo/rtconfig.py | 144 + bsp/stm32/stm32f767-st-nucleo/template.ewp | 2074 ++++++++++++ bsp/stm32/stm32f767-st-nucleo/template.eww | 10 + bsp/stm32/stm32f767-st-nucleo/template.uvoptx | 196 ++ .../stm32f767-st-nucleo/template.uvprojx | 394 +++ 33 files changed, 13379 insertions(+) create mode 100644 bsp/stm32/stm32f767-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32f767-st-nucleo/README.md create mode 100644 bsp/stm32/stm32f767-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32f767-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32f767-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32f767-st-nucleo/Kconfig b/bsp/stm32/stm32f767-st-nucleo/Kconfig new file mode 100644 index 0000000000..768b68bb13 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/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/stm32f767-st-nucleo/README.md b/bsp/stm32/stm32f767-st-nucleo/README.md new file mode 100644 index 0000000000..04ea43cdd3 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/README.md @@ -0,0 +1,110 @@ +# STM32F767 NUCLEO-F767ZI开发板 BSP 说明 +## 简介 + +本文档为 NUCLEO-F767ZI 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +NUCLEO-F767ZI 是st推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为 216Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F767 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/en.high-perf_nucleo-144_mbed.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f767,主频 216MHz,2MB FLASH ,512KB RAM ,16K CACHE + +- 常用外设 + - LED :3个,LED1 (绿色,PB0),LED2(蓝色,PB7),LED3(红色,PB14) + - 按键:2个,B1(用户按键,PC13),B2(复位引脚) +- 常用接口:USB 转串口3、以太网接口 +- 调试接口:ST-LINK + +开发板更多详细信息请参考ST [NUCLEO-F767ZI开发板介绍](https://www.st.com/en/evaluation-tools/nucleo-f767zi.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :-----------------| :----------: | :-------------------------------------| +| USB 转串口3 | 支持 | | +| 以太网 | 暂不支持 | 即将支持 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART3 | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 ST-LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Jan 9 2019 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口3 的功能,如果需使用 Ethernet 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [e31207077](https://github.com/e31207077), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f767-st-nucleo/SConscript b/bsp/stm32/stm32f767-st-nucleo/SConscript new file mode 100644 index 0000000000..a425264923 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f767-st-nucleo/SConstruct b/bsp/stm32/stm32f767-st-nucleo/SConstruct new file mode 100644 index 0000000000..c84dbe3bdd --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/SConstruct @@ -0,0 +1,47 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +SDK_ROOT = os.path.abspath('./') + +# include drivers +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/STM32F7xx_HAL/SConscript')) + +# include libraries +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/HAL_Drivers/SConscript')) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f767-st-nucleo/applications/SConscript b/bsp/stm32/stm32f767-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..25102afc7e --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/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/stm32f767-st-nucleo/applications/main.c b/bsp/stm32/stm32f767-st-nucleo/applications/main.c new file mode 100644 index 0000000000..b627e5440c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#include +#include +#include +#include "drv_gpio.h" + +/* defined the LED1 pin: PB0 */ +#define LED1_PIN GET_PIN(B, 0) + +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/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..1283dfa88f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,324 @@ +#MicroXplorer Configuration settings - do not modify +ETH.IPParameters=MediaInterface,PHY_Name,PHY_Value,PhyAddress +ETH.MediaInterface=ETH_MEDIA_INTERFACE_RMII +ETH.PHY_Name=LAN8742A_PHY_ADDRESS +ETH.PHY_Value=0 +ETH.PhyAddress=0 +File.Version=6 +KeepUserPlacement=true +Mcu.Family=STM32F7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=ETH +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SYS +Mcu.IP5=USART3 +Mcu.IP6=USB_OTG_FS +Mcu.IPNb=7 +Mcu.Name=STM32F767ZITx +Mcu.Package=LQFP144 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14/OSC32_IN +Mcu.Pin10=PC5 +Mcu.Pin11=PB13 +Mcu.Pin12=PB14 +Mcu.Pin13=PD8 +Mcu.Pin14=PD9 +Mcu.Pin15=PG6 +Mcu.Pin16=PG7 +Mcu.Pin17=PA8 +Mcu.Pin18=PA9 +Mcu.Pin19=PA10 +Mcu.Pin2=PC15/OSC32_OUT +Mcu.Pin20=PA11 +Mcu.Pin21=PA12 +Mcu.Pin22=PA13 +Mcu.Pin23=PA14 +Mcu.Pin24=PG11 +Mcu.Pin25=PG13 +Mcu.Pin26=PB3 +Mcu.Pin27=PB7 +Mcu.Pin28=VP_SYS_VS_Systick +Mcu.Pin3=PH0/OSC_IN +Mcu.Pin4=PH1/OSC_OUT +Mcu.Pin5=PC1 +Mcu.Pin6=PA1 +Mcu.Pin7=PA2 +Mcu.Pin8=PA7 +Mcu.Pin9=PC4 +Mcu.PinsNb=29 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F767ZITx +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true +PA1.GPIOParameters=GPIO_Label +PA1.GPIO_Label=RMII_REF_CLK [LAN8742A-CZ-TR_REFCLK0] +PA1.Locked=true +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=USB_ID +PA10.Locked=true +PA10.Signal=USB_OTG_FS_ID +PA11.GPIOParameters=GPIO_Label +PA11.GPIO_Label=USB_DM +PA11.Locked=true +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.GPIOParameters=GPIO_Label +PA12.GPIO_Label=USB_DP +PA12.Locked=true +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=TMS +PA13.Locked=true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=TCK +PA14.Locked=true +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=RMII_MDIO [LAN8742A-CZ-TR_MDIO] +PA2.Locked=true +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=RMII_CRS_DV [LAN8742A-CZ-TR_CRS_DV] +PA7.Locked=true +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV +PA8.GPIOParameters=GPIO_Label +PA8.GPIO_Label=USB_SOF [TP1] +PA8.Locked=true +PA8.Mode=Activate_SOF_FS +PA8.Signal=USB_OTG_FS_SOF +PA9.GPIOParameters=GPIO_Label +PA9.GPIO_Label=USB_VBUS +PA9.Locked=true +PA9.Mode=Activate_VBUS +PA9.Signal=USB_OTG_FS_VBUS +PB13.GPIOParameters=GPIO_Label +PB13.GPIO_Label=RMII_TXD1 [LAN8742A-CZ-TR_TXD1] +PB13.Locked=true +PB13.Mode=RMII +PB13.Signal=ETH_TXD1 +PB14.GPIOParameters=GPIO_Label +PB14.GPIO_Label=LD3 [Red] +PB14.Locked=true +PB14.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=SWO +PB3.Locked=true +PB3.Signal=SYS_JTDO-SWO +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=LD2 [Blue] +PB7.Locked=true +PB7.Signal=GPIO_Output +PC1.GPIOParameters=GPIO_Label +PC1.GPIO_Label=RMII_MDC [LAN8742A-CZ-TR_MDC] +PC1.Locked=true +PC1.Mode=RMII +PC1.Signal=ETH_MDC +PC13.GPIOParameters=GPIO_Label +PC13.GPIO_Label=USER_Btn [B1] +PC13.Locked=true +PC13.Signal=GPXTI13 +PC14/OSC32_IN.Locked=true +PC14/OSC32_IN.Mode=LSE-External-Oscillator +PC14/OSC32_IN.Signal=RCC_OSC32_IN +PC15/OSC32_OUT.Locked=true +PC15/OSC32_OUT.Mode=LSE-External-Oscillator +PC15/OSC32_OUT.Signal=RCC_OSC32_OUT +PC4.GPIOParameters=GPIO_Label +PC4.GPIO_Label=RMII_RXD0 [LAN8742A-CZ-TR_RXD0] +PC4.Locked=true +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.GPIOParameters=GPIO_Label +PC5.GPIO_Label=RMII_RXD1 [LAN8742A-CZ-TR_RXD1] +PC5.Locked=true +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 +PCC.Checker=false +PCC.Line=STM32F7x7 +PCC.MCU=STM32F767ZITx +PCC.PartNumber=STM32F767ZITx +PCC.Seq0=0 +PCC.Series=STM32F7 +PCC.Temperature=25 +PCC.Vdd=3.6 +PD8.GPIOParameters=GPIO_Label +PD8.GPIO_Label=STLK_RX [STM32F103CBT6_PA3] +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.GPIOParameters=GPIO_Label +PD9.GPIO_Label=STLK_TX [STM32F103CBT6_PA2] +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +PG11.GPIOParameters=GPIO_Label +PG11.GPIO_Label=RMII_TX_EN [LAN8742A-CZ-TR_TXEN] +PG11.Locked=true +PG11.Mode=RMII +PG11.Signal=ETH_TX_EN +PG13.GPIOParameters=GPIO_Label +PG13.GPIO_Label=RMII_TXD0 [LAN8742A-CZ-TR_TXD0] +PG13.Locked=true +PG13.Mode=RMII +PG13.Signal=ETH_TXD0 +PG6.GPIOParameters=GPIO_Label +PG6.GPIO_Label=USB_PowerSwitchOn [STMPS2151STR_EN] +PG6.Locked=true +PG6.Signal=GPIO_Output +PG7.GPIOParameters=GPIO_Label +PG7.GPIO_Label=USB_OverCurrent [STMPS2151STR_FAULT] +PG7.Locked=true +PG7.Signal=GPIO_Input +PH0/OSC_IN.GPIOParameters=GPIO_Label +PH0/OSC_IN.GPIO_Label=MCO [STM32F103CBT6_PA8] +PH0/OSC_IN.Locked=true +PH0/OSC_IN.Mode=HSE-External-Clock-Source +PH0/OSC_IN.Signal=RCC_OSC_IN +PH1/OSC_OUT.Locked=true +PH1/OSC_OUT.Mode=HSE-External-Clock-Source +PH1/OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F767ZITx +ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.14.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V8 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_ETH_Init-ETH-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true +RCC.48MHZClocksFreq_Value=24000000 +RCC.ADC12outputFreq_Value=72000000 +RCC.ADC34outputFreq_Value=72000000 +RCC.AHBFreq_Value=216000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=54000000 +RCC.APB1TimFreq_Value=108000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=108000000 +RCC.APB2TimFreq_Value=216000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=216000000 +RCC.DFSDMAudioFreq_Value=96000000 +RCC.DFSDMFreq_Value=108000000 +RCC.EthernetFreq_Value=216000000 +RCC.FCLKCortexFreq_Value=216000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=216000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=54000000 +RCC.I2C2Freq_Value=54000000 +RCC.I2C3Freq_Value=54000000 +RCC.I2C4Freq_Value=54000000 +RCC.I2SClocksFreq_Value=48000000 +RCC.I2SFreq_Value=96000000 +RCC.IPParameters=48MHZClocksFreq_Value,ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SClocksFreq_Value,I2SFreq_Value,LCDTFTFreq_Value,LCDTFToutputFreq_Value,LPTIM1Freq_Value,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLQ,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PRESCALERUSB,RNGFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutput2Freq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VcooutputI2S,WatchDogFreq_Value +RCC.LCDTFTFreq_Value=48000000 +RCC.LCDTFToutputFreq_Value=96000000 +RCC.LPTIM1Freq_Value=54000000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=16000000 +RCC.MCO2PinFreq_Value=216000000 +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=216000000 +RCC.PLLI2SPCLKFreq_Value=96000000 +RCC.PLLI2SQCLKFreq_Value=96000000 +RCC.PLLI2SRCLKFreq_Value=96000000 +RCC.PLLI2SRoutputFreq_Value=96000000 +RCC.PLLM=8 +RCC.PLLMCOFreq_Value=72000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLN=432 +RCC.PLLQ=9 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLQoutputFreq_Value=48000000 +RCC.PLLRFreq_Value=216000000 +RCC.PLLSAIPCLKFreq_Value=96000000 +RCC.PLLSAIQCLKFreq_Value=96000000 +RCC.PLLSAIRCLKFreq_Value=96000000 +RCC.PLLSAIoutputFreq_Value=96000000 +RCC.PRESCALERUSB=RCC_USBCLKSOURCE_PLL_DIV1_5 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SAI1Freq_Value=96000000 +RCC.SAI2Freq_Value=96000000 +RCC.SDMMC2Freq_Value=216000000 +RCC.SDMMCFreq_Value=216000000 +RCC.SPDIFRXFreq_Value=96000000 +RCC.SYSCLKFreq_VALUE=216000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.SYSCLKSourceVirtual=RCC_SYSCLKSOURCE_PLLCLK +RCC.TIM15Freq_Value=72000000 +RCC.TIM16Freq_Value=72000000 +RCC.TIM17Freq_Value=72000000 +RCC.TIM1Freq_Value=72000000 +RCC.TIM20Freq_Value=72000000 +RCC.TIM2Freq_Value=72000000 +RCC.TIM3Freq_Value=72000000 +RCC.TIM8Freq_Value=72000000 +RCC.UART4Freq_Value=54000000 +RCC.UART5Freq_Value=54000000 +RCC.UART7Freq_Value=54000000 +RCC.UART8Freq_Value=54000000 +RCC.USART1Freq_Value=108000000 +RCC.USART2Freq_Value=54000000 +RCC.USART3Freq_Value=54000000 +RCC.USART6Freq_Value=108000000 +RCC.USBFreq_Value=48000000 +RCC.VCOI2SOutputFreq_Value=192000000 +RCC.VCOInputFreq_Value=1000000 +RCC.VCOOutput2Freq_Value=8000000 +RCC.VCOOutputFreq_Value=432000000 +RCC.VCOSAIOutputFreq_Value=192000000 +RCC.VcooutputI2S=48000000 +RCC.WatchDogFreq_Value=32000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +USART3.IPParameters=VirtualMode-Asynchronous +USART3.VirtualMode-Asynchronous=VM_ASYNC +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-F767ZI +boardIOC=true diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..1165a7bf80 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,141 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define USER_Btn_Pin GPIO_PIN_13 +#define USER_Btn_GPIO_Port GPIOC +#define MCO_Pin GPIO_PIN_0 +#define MCO_GPIO_Port GPIOH +#define RMII_MDC_Pin GPIO_PIN_1 +#define RMII_MDC_GPIO_Port GPIOC +#define RMII_REF_CLK_Pin GPIO_PIN_1 +#define RMII_REF_CLK_GPIO_Port GPIOA +#define RMII_MDIO_Pin GPIO_PIN_2 +#define RMII_MDIO_GPIO_Port GPIOA +#define RMII_CRS_DV_Pin GPIO_PIN_7 +#define RMII_CRS_DV_GPIO_Port GPIOA +#define RMII_RXD0_Pin GPIO_PIN_4 +#define RMII_RXD0_GPIO_Port GPIOC +#define RMII_RXD1_Pin GPIO_PIN_5 +#define RMII_RXD1_GPIO_Port GPIOC +#define RMII_TXD1_Pin GPIO_PIN_13 +#define RMII_TXD1_GPIO_Port GPIOB +#define LD3_Pin GPIO_PIN_14 +#define LD3_GPIO_Port GPIOB +#define STLK_RX_Pin GPIO_PIN_8 +#define STLK_RX_GPIO_Port GPIOD +#define STLK_TX_Pin GPIO_PIN_9 +#define STLK_TX_GPIO_Port GPIOD +#define USB_PowerSwitchOn_Pin GPIO_PIN_6 +#define USB_PowerSwitchOn_GPIO_Port GPIOG +#define USB_OverCurrent_Pin GPIO_PIN_7 +#define USB_OverCurrent_GPIO_Port GPIOG +#define USB_SOF_Pin GPIO_PIN_8 +#define USB_SOF_GPIO_Port GPIOA +#define USB_VBUS_Pin GPIO_PIN_9 +#define USB_VBUS_GPIO_Port GPIOA +#define USB_ID_Pin GPIO_PIN_10 +#define USB_ID_GPIO_Port GPIOA +#define USB_DM_Pin GPIO_PIN_11 +#define USB_DM_GPIO_Port GPIOA +#define USB_DP_Pin GPIO_PIN_12 +#define USB_DP_GPIO_Port GPIOA +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +#define RMII_TX_EN_Pin GPIO_PIN_11 +#define RMII_TX_EN_GPIO_Port GPIOG +#define RMII_TXD0_Pin GPIO_PIN_13 +#define RMII_TXD0_GPIO_Port GPIOG +#define SWO_Pin GPIO_PIN_3 +#define SWO_GPIO_Port GPIOB +#define LD2_Pin GPIO_PIN_7 +#define LD2_GPIO_Port GPIOB +/* 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/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h new file mode 100644 index 0000000000..378b819dd7 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -0,0 +1,458 @@ +/** + ****************************************************************************** + * @file stm32f7xx_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 __STM32F7xx_HAL_CONF_H +#define __STM32F7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_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_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_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_SPDIFRX_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_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_I2C_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 Internal oscillator 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 0U +#define ART_ACCLERATOR_ENABLE 0U /* To enable instruction cache and prefetch */ + +/* ########################## 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 */ + +/* LAN8742A_PHY_ADDRESS Address*/ +#define LAN8742A_PHY_ADDRESS 0 +/* 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)0x00U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01U) /*!< 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 */ + +#define PHY_ISFR ((uint16_t)0x000BU) /*!< PHY Interrupt Source Flag register Offset */ +#define PHY_ISFR_INT4 ((uint16_t)0x000BU) /*!< PHY Link down inturrupt */ + +/* ################## 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 "stm32f7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f7xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32f7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32f7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f7xx_hal_smbus.h" +#endif /* HAL_SMBUS_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 /* __STM32F7xx_HAL_CONF_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h new file mode 100644 index 0000000000..4a24ec5be5 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F7xx_IT_H +#define __STM32F7xx_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 /* __STM32F7xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..a7c557876c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,396 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +ETH_HandleTypeDef heth; + +UART_HandleTypeDef huart3; + +PCD_HandleTypeDef hpcd_USB_OTG_FS; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_ETH_Init(void); +static void MX_USART3_UART_Init(void); +static void MX_USB_OTG_FS_PCD_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_ETH_Init(); + MX_USART3_UART_Init(); + MX_USB_OTG_FS_PCD_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + /**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_BYPASS; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 9; + 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_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ETH Initialization Function + * @param None + * @retval None + */ +static void MX_ETH_Init(void) +{ + + /* USER CODE BEGIN ETH_Init 0 */ + + /* USER CODE END ETH_Init 0 */ + + uint8_t MACAddr[6] ; + + /* USER CODE BEGIN ETH_Init 1 */ + + /* USER CODE END ETH_Init 1 */ + heth.Instance = ETH; + heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; + heth.Init.PhyAddress = LAN8742A_PHY_ADDRESS; + MACAddr[0] = 0x00; + MACAddr[1] = 0x80; + MACAddr[2] = 0xE1; + MACAddr[3] = 0x00; + MACAddr[4] = 0x00; + MACAddr[5] = 0x00; + heth.Init.MACAddr = &MACAddr[0]; + heth.Init.RxMode = ETH_RXPOLLING_MODE; + heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE; + heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII; + + /* USER CODE BEGIN MACADDRESS */ + + /* USER CODE END MACADDRESS */ + + if (HAL_ETH_Init(&heth) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ETH_Init 2 */ + + /* USER CODE END ETH_Init 2 */ + +} + +/** + * @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; + huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + +/** + * @brief USB_OTG_FS Initialization Function + * @param None + * @retval None + */ +static void MX_USB_OTG_FS_PCD_Init(void) +{ + + /* USER CODE BEGIN USB_OTG_FS_Init 0 */ + + /* USER CODE END USB_OTG_FS_Init 0 */ + + /* USER CODE BEGIN USB_OTG_FS_Init 1 */ + + /* USER CODE END USB_OTG_FS_Init 1 */ + hpcd_USB_OTG_FS.Instance = USB_OTG_FS; + hpcd_USB_OTG_FS.Init.dev_endpoints = 6; + hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; + hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; + hpcd_USB_OTG_FS.Init.ep0_mps = DEP0CTL_MPS_64; + hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; + hpcd_USB_OTG_FS.Init.Sof_enable = ENABLE; + hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; + hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE; + hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE; + hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE; + if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USB_OTG_FS_Init 2 */ + + /* USER CODE END USB_OTG_FS_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : USER_Btn_Pin */ + GPIO_InitStruct.Pin = USER_Btn_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pins : LD3_Pin LD2_Pin */ + GPIO_InitStruct.Pin = LD3_Pin|LD2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pin : USB_PowerSwitchOn_Pin */ + GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(USB_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : USB_OverCurrent_Pin */ + GPIO_InitStruct.Pin = USB_OverCurrent_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USB_OverCurrent_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* 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/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c new file mode 100644 index 0000000000..7786126b0a --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -0,0 +1,364 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f7xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief ETH MSP Initialization +* This function configures the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ +void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspInit 0 */ + + /* USER CODE END ETH_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ETH_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB13 ------> ETH_TXD1 + PG11 ------> ETH_TX_EN + PG13 ------> ETH_TXD0 + */ + GPIO_InitStruct.Pin = RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = RMII_TXD1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(RMII_TXD1_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = RMII_TX_EN_Pin|RMII_TXD0_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /* USER CODE BEGIN ETH_MspInit 1 */ + + /* USER CODE END ETH_MspInit 1 */ + } + +} + +/** +* @brief ETH MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ + +void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth) +{ + + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspDeInit 0 */ + + /* USER CODE END ETH_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ETH_CLK_DISABLE(); + + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB13 ------> ETH_TXD1 + PG11 ------> ETH_TX_EN + PG13 ------> ETH_TXD0 + */ + HAL_GPIO_DeInit(GPIOC, RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin); + + HAL_GPIO_DeInit(GPIOA, RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin); + + HAL_GPIO_DeInit(RMII_TXD1_GPIO_Port, RMII_TXD1_Pin); + + HAL_GPIO_DeInit(GPIOG, RMII_TX_EN_Pin|RMII_TXD0_Pin); + + /* USER CODE BEGIN ETH_MspDeInit 1 */ + + /* USER CODE END ETH_MspDeInit 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_GPIOD_CLK_ENABLE(); + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + GPIO_InitStruct.Pin = STLK_RX_Pin|STLK_TX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOD, &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 + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOD, STLK_RX_Pin|STLK_TX_Pin); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/** +* @brief PCD MSP Initialization +* This function configures the hardware resources used in this example +* @param hpcd: PCD handle pointer +* @retval None +*/ +void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hpcd->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ + + /* USER CODE END USB_OTG_FS_MspInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USB_OTG_FS GPIO Configuration + PA8 ------> USB_OTG_FS_SOF + PA9 ------> USB_OTG_FS_VBUS + PA10 ------> USB_OTG_FS_ID + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + GPIO_InitStruct.Pin = USB_SOF_Pin|USB_ID_Pin|USB_DM_Pin|USB_DP_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = USB_VBUS_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USB_VBUS_GPIO_Port, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */ + + /* USER CODE END USB_OTG_FS_MspInit 1 */ + } + +} + +/** +* @brief PCD MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hpcd: PCD handle pointer +* @retval None +*/ + +void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) +{ + + if(hpcd->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); + + /**USB_OTG_FS GPIO Configuration + PA8 ------> USB_OTG_FS_SOF + PA9 ------> USB_OTG_FS_VBUS + PA10 ------> USB_OTG_FS_ID + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + HAL_GPIO_DeInit(GPIOA, USB_SOF_Pin|USB_VBUS_Pin|USB_ID_Pin|USB_DM_Pin + |USB_DP_Pin); + + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c new file mode 100644 index 0000000000..ea6a0c5cbb --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c @@ -0,0 +1,217 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f7xx_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-M7 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 */ +} + +/******************************************************************************/ +/* STM32F7xx 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_stm32f7xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c new file mode 100644 index 0000000000..1a362bdf61 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c @@ -0,0 +1,278 @@ +/** + ****************************************************************************** + * @file system_stm32f7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M7 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_stm32f7xx.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 2016 STMicroelectronics

    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f7xx_system + * @{ + */ + +/** @addtogroup STM32F7xx_System_Private_Includes + * @{ + */ + +#include "stm32f7xx.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 STM32F7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ + +/*!< 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 STM32F7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_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 STM32F7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @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; + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = RAMDTCM_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 stm32f7xx_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 stm32f7xx_hal_conf.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, 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; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/Kconfig b/bsp/stm32/stm32f767-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..cc3f71fb5d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/Kconfig @@ -0,0 +1,46 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F767ZI + bool + select SOC_SERIES_STM32F7 + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_USB_TO_USART + bool "Enable USB TO USART (uart3)" + select BSP_USING_UART3 + default y + + +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 UART3" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART3 + bool "Enable UART3" + default y + + config BSP_UART3_RX_USING_DMA + bool "Enable UART3 RX DMA" + depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA + default n + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f767-st-nucleo/board/SConscript b/bsp/stm32/stm32f767-st-nucleo/board/SConscript new file mode 100644 index 0000000000..77deba2ad2 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/SConscript @@ -0,0 +1,26 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32f7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +if rtconfig.CROSS_TOOL == 'gcc': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/gcc/startup_stm32f767xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/arm/startup_stm32f767xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/iar/startup_stm32f767xx.s'] + +# STM32F756xx || STM32F746xx || STM32F745xx || STM32F767xx || +# STM32F769xx || STM32F777xx || STM32F779xx || STM32F722xx || +# STM32F723xx || STM32F732xx || STM32F733xx || STM32F730xx || STM32F750xx +# You can select chips from the list above +CPPDEFINES = ['STM32F767xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f767-st-nucleo/board/board.c b/bsp/stm32/stm32f767-st-nucleo/board/board.c new file mode 100644 index 0000000000..e5a5d7b32c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/board.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + /**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_BYPASS; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 9; + 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_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + diff --git a/bsp/stm32/stm32f767-st-nucleo/board/board.h b/bsp/stm32/stm32f767-st-nucleo/board/board.h new file mode 100644 index 0000000000..6ac957bc8d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (2048 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (512) +#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); + +#endif diff --git a/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..438cd8eab3 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2007FFFF; +/*-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/stm32f767-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..f3b6fd534b --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,144 @@ +/* + * 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 = 512k /* 512K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..e4ae202302 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/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 0x20020000 0x00080000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg b/bsp/stm32/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f2f9b3e72d5e8cbd625f226341e104865a812e0 GIT binary patch literal 217664 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
    (to+0kvFLi46hU1cVxFh66?3}2)(*Ay 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
  • D;?oOR=^wxla~v^l#5dh)d)8G$JSHYR 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 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/project.ewp b/bsp/stm32/stm32f767-st-nucleo/project.ewp new file mode 100644 index 0000000000..14af8ab58f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.ewp @@ -0,0 +1,2419 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\iar\startup_stm32f767xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + CORTEX-M7 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + Filesystem + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_file.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_fs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_posix.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\poll.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\select.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\devfs\devfs.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\gmtime_r.c + + + + dlib + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\libc.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\rmtx.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\stdio.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\time.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/project.eww b/bsp/stm32/stm32f767-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/project.uvoptx b/bsp/stm32/stm32f767-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..78f59e4f8f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.uvoptx @@ -0,0 +1,1256 @@ + + + + 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 + -U066FFF544852707267192022 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FF1STM32F7xTCM_2048.FLM -FS1200000 -FL1200000 -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20020000 -FF0STM32F7x_2048 -FF1STM32F7xTCM_2048 -FL0200000 -FL1200000 -FS08000000 -FS1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -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 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 2 + 4 + 2 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + startup_stm32f767xx.s + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + CORTEX-M7 + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + + + Filesystem + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs.c + dfs.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_file.c + dfs_file.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_fs.c + dfs_fs.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_posix.c + dfs_posix.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\poll.c + poll.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\select.c + select.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + devfs.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 7 + 44 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 8 + 60 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stdio.c + stdio.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\time.c + time.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\gmtime_r.c + gmtime_r.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 9 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + stm32f7xx_hal.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 79 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 9 + 80 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 9 + 81 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 9 + 82 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 9 + 83 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/project.uvprojx b/bsp/stm32/stm32f767-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..8db03bc8a2 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.uvprojx @@ -0,0 +1,851 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F767ZITx + STMicroelectronics + Keil.STM32F7xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20020000,0x60000) IRAM2(0x20000000,0x20000) IROM(0x08000000,0x200000) IROM2(0x00200000,0x200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048 -FS08000000 -FL0200000 -FF1STM32F7xTCM_2048 -FS1200000 -FL1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM)) + 0 + $$Device:STM32F767ZITx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F767ZITx$CMSIS\SVD\STM32F7x7_v1r2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 0 + 0x20000000 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + STM32F767xx, USE_HAL_DRIVER, RT_USING_ARM_LIBC + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m7;..\..\..\libcpu\arm\common;..\..\..\components\dfs\include;..\..\..\components\dfs\filesystems\devfs;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common;..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Inc;..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Include;..\libraries\STM32F7xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + startup_stm32f767xx.s + 2 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M7 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + Filesystem + + + dfs.c + 1 + ..\..\..\components\dfs\src\dfs.c + + + dfs_file.c + 1 + ..\..\..\components\dfs\src\dfs_file.c + + + dfs_fs.c + 1 + ..\..\..\components\dfs\src\dfs_fs.c + + + dfs_posix.c + 1 + ..\..\..\components\dfs\src\dfs_posix.c + + + poll.c + 1 + ..\..\..\components\dfs\src\poll.c + + + select.c + 1 + ..\..\..\components\dfs\src\select.c + + + devfs.c + 1 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + finsh_compiler.c + 1 + ..\..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\..\components\finsh\finsh_token.c + + + + + libc + + + libc.c + 1 + ..\..\..\components\libc\compilers\armlibc\libc.c + + + mem_std.c + 1 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + + + stdio.c + 1 + ..\..\..\components\libc\compilers\armlibc\stdio.c + + + stubs.c + 1 + ..\..\..\components\libc\compilers\armlibc\stubs.c + + + time.c + 1 + ..\..\..\components\libc\compilers\armlibc\time.c + + + gmtime_r.c + 1 + ..\..\..\components\libc\compilers\common\gmtime_r.c + + + + + STM32_HAL + + + system_stm32f7xx.c + 1 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_cec.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cortex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_crc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_cryp.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_dma_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_pwr.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rcc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_rng.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_sram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_gpio.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_uart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_usart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/rtconfig.h b/bsp/stm32/stm32f767-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..d560f27b6d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/rtconfig.h @@ -0,0 +1,186 @@ +#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 100 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_VER_NUM 0x40000 +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + +#define RT_USING_DFS +#define DFS_USING_WORKDIR +#define DFS_FILESYSTEMS_MAX 2 +#define DFS_FILESYSTEM_TYPES_MAX 2 +#define DFS_FD_MAX 16 +#define RT_USING_DFS_DEVFS + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC +#define RT_USING_POSIX + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* ARM CMSIS */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* sample package */ + +/* samples: kernel and components samples */ + + +/* example package: hello */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F7 + +/* Hardware Drivers Config */ + +#define SOC_STM32F767ZI + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART + +/* 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/stm32f767-st-nucleo/rtconfig.py b/bsp/stm32/stm32f767-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..0f98bde4bd --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/rtconfig.py @@ -0,0 +1,144 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +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 = '/usr/local/Cellar/arm-none-eabi-gcc/7-2017-q4-major/gcc/bin/' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + STRIP = PREFIX + 'strip' + + DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -std=c99 -g -Wall' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2 -Os' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + + # module setting + CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti ' + M_CFLAGS = CFLAGS + ' -mlong-calls -fPIC ' + M_CXXFLAGS = CXXFLAGS + ' -mlong-calls -fPIC' + M_LFLAGS = DEVICE + CXXFLAGS + ' -Wl,--gc-sections,-z,max-page-size=0x4' +\ + ' -shared -fPIC -nostartfiles -static-libgcc' + M_POST_ACTION = STRIP + ' -R .hash $TARGET\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp --fpu=FPv4-SP' + CFLAGS = DEVICE + ' --apcs=interwork ' + AFLAGS = DEVICE + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread.map --scatter rtthread.sct' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/INC' + LFLAGS += ' --libpath "' + EXEC_PATH + '/ARM/ARMCC/lib"' + + EXEC_PATH += '/arm/bin40/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2 -Otime' + + CXXFLAGS = CFLAGS + 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 = '' + + 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 += ' --debug' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' -Ol' + CFLAGS += ' --use_c++_inline' + CFLAGS += ' --silent' + + AFLAGS = '' + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + LFLAGS = ' --config rtthread.icf' + LFLAGS += ' --redirect _Printf=_PrintfTiny' + LFLAGS += ' --redirect _Scanf=_ScanfSmall' + LFLAGS += ' --entry __iar_program_start' + LFLAGS += ' --silent' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = '' diff --git a/bsp/stm32/stm32f767-st-nucleo/template.ewp b/bsp/stm32/stm32f767-st-nucleo/template.ewp new file mode 100644 index 0000000000..30ef393336 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.ewp @@ -0,0 +1,2074 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/template.eww b/bsp/stm32/stm32f767-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/template.uvoptx b/bsp/stm32/stm32f767-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..3a69aeeb1d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.uvoptx @@ -0,0 +1,196 @@ + + + + 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 + -U066FFF544852707267192022 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FF1STM32F7xTCM_2048.FLM -FS1200000 -FL1200000 -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20020000 -FF0STM32F7x_2048 -FF1STM32F7xTCM_2048 -FL0200000 -FL1200000 -FS08000000 -FS1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -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 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/template.uvprojx b/bsp/stm32/stm32f767-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..d6426c3ad7 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.uvprojx @@ -0,0 +1,394 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F767ZITx + STMicroelectronics + Keil.STM32F7xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20020000,0x60000) IRAM2(0x20000000,0x20000) IROM(0x08000000,0x200000) IROM2(0x00200000,0x200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048 -FS08000000 -FL0200000 -FF1STM32F7xTCM_2048 -FS1200000 -FL1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM)) + 0 + $$Device:STM32F767ZITx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F767ZITx$CMSIS\SVD\STM32F7x7_v1r2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 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-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 0 + 0x20000000 + 0x20000 + + + + + + 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 36c4abe1f95d7d4e5f7ac0a49c95868515d359d2 Mon Sep 17 00:00:00 2001 From: sun_shine Date: Tue, 15 Jan 2019 13:39:25 +0800 Subject: [PATCH 23/26] [bsp][stm32] add bsp stm32l432-st-nucleo --- bsp/stm32/stm32l432-st-nucleo/.config | 350 ++ bsp/stm32/stm32l432-st-nucleo/.gitignore | 42 + bsp/stm32/stm32l432-st-nucleo/Kconfig | 21 + bsp/stm32/stm32l432-st-nucleo/README.md | 116 + bsp/stm32/stm32l432-st-nucleo/SConscript | 14 + bsp/stm32/stm32l432-st-nucleo/SConstruct | 58 + .../applications/SConscript | 9 + .../stm32l432-st-nucleo/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 13 + .../board/CubeMX_Config/CubeMX_Config.ioc | 169 + .../board/CubeMX_Config/Inc/main.h | 88 + .../CubeMX_Config/Inc/stm32l4xx_hal_conf.h | 435 +++ .../board/CubeMX_Config/Inc/stm32l4xx_it.h | 66 + .../board/CubeMX_Config/Src/main.c | 292 ++ .../CubeMX_Config/Src/stm32l4xx_hal_msp.c | 153 + .../board/CubeMX_Config/Src/stm32l4xx_it.c | 197 ++ .../CubeMX_Config/Src/system_stm32l4xx.c | 353 ++ bsp/stm32/stm32l432-st-nucleo/board/Kconfig | 45 + .../stm32l432-st-nucleo/board/SConscript | 39 + bsp/stm32/stm32l432-st-nucleo/board/board.c | 87 + bsp/stm32/stm32l432-st-nucleo/board/board.h | 40 + .../board/linker_scripts/link.icf | 33 + .../board/linker_scripts/link.lds | 144 + .../board/linker_scripts/link.sct | 15 + .../stm32l432-st-nucleo/figures/board.jpg | Bin 0 -> 118884 bytes bsp/stm32/stm32l432-st-nucleo/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32l432-st-nucleo/project.ewp | 2275 +++++++++++++ bsp/stm32/stm32l432-st-nucleo/project.eww | 10 + bsp/stm32/stm32l432-st-nucleo/project.uvoptx | 1002 ++++++ bsp/stm32/stm32l432-st-nucleo/project.uvprojx | 738 +++++ bsp/stm32/stm32l432-st-nucleo/rtconfig.h | 179 ++ bsp/stm32/stm32l432-st-nucleo/rtconfig.py | 134 + bsp/stm32/stm32l432-st-nucleo/template.ewp | 2031 ++++++++++++ bsp/stm32/stm32l432-st-nucleo/template.eww | 10 + bsp/stm32/stm32l432-st-nucleo/template.uvoptx | 186 ++ .../stm32l432-st-nucleo/template.uvprojx | 386 +++ 36 files changed, 12597 insertions(+) create mode 100644 bsp/stm32/stm32l432-st-nucleo/.config create mode 100644 bsp/stm32/stm32l432-st-nucleo/.gitignore create mode 100644 bsp/stm32/stm32l432-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32l432-st-nucleo/README.md create mode 100644 bsp/stm32/stm32l432-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32l432-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32l432-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32l432-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32l432-st-nucleo/figures/board.jpg create mode 100644 bsp/stm32/stm32l432-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32l432-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32l432-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32l432-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32l432-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32l432-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32l432-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32l432-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32l432-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32l432-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32l432-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32l432-st-nucleo/.config b/bsp/stm32/stm32l432-st-nucleo/.config new file mode 100644 index 0000000000..8af7c5464c --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/.config @@ -0,0 +1,350 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +CONFIG_RT_VER_NUM=0x40000 +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# ARM CMSIS +# +# CONFIG_RT_USING_CMSIS_OS is not set +# CONFIG_RT_USING_RTT_CMSIS is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# 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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_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 + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_MPU6XXX is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set + +# +# sample package +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# example package: hello +# +# CONFIG_PKG_USING_HELLO is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32L4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32L432KC=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_STLINK_TO_USART=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART2=y +# CONFIG_BSP_UART2_RX_USING_DMA is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32l432-st-nucleo/.gitignore b/bsp/stm32/stm32l432-st-nucleo/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32l432-st-nucleo/Kconfig b/bsp/stm32/stm32l432-st-nucleo/Kconfig new file mode 100644 index 0000000000..d174bcc585 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/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/stm32l432-st-nucleo/README.md b/bsp/stm32/stm32l432-st-nucleo/README.md new file mode 100644 index 0000000000..dc1755da3b --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/README.md @@ -0,0 +1,116 @@ +# NUCLEO32-L432 开发板的 BSP 说明 + +## 简介 + +本文档为ST官方 NUCLEO32-L432 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +对于 NUCLEO32-L432,内核是 Cortex-M4,绿色的 Nucleo 标志显示了这款芯片是低功耗系列,板载 ST-LINK/V2-1 调试器/编程器,迷你尺寸,mirco USB 接口,可数的外设,Arduino™ nano 兼容的接口。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32L432KC,主频 80MHz,256KB FLASH ,64KB RAM。 +- 常用外设 + - LED:3个,USB communication(LD1 双色),power LED(LD2 红色),user LED(LD3 黄色) + - 按键:1个,复位按键(B1)。 +- 常用接口:USB 支持 3 种不同接口:虚拟 COM 端口、大容量存储和调试端口。 +- 调试接口:板载 ST-LINK/V2-1 调试器。 + +开发板更多详细信息请参考【STMicroelectronics】 [NUCLEO-L432KC](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-nucleo/nucleo-l432kc.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 板载 ST-LINK 转串口 | 支持 | UART2 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PC15 ---> PIN: 0, 1...47 | +| UART | 支持 | UART2 | +| SPI | 暂不支持 | SPI1 即将支持 | +| I2C | 暂不支持 | 软件 I2C 即将支持 | +| RTC | 暂不支持 | 即将支持 | +| PWM | 暂不支持 | 即将支持 | +| USB Device | 暂不支持 | 即将支持 | +| IWG | 暂不支持 | 即将支持 | +| **扩展模块** | **支持情况** | **备注** | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 microUSB 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LD1 和 LD2 常亮、黄色色 LD3 会周期性闪烁。 + +USB 虚拟 COM 端口默认连接串口 2,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Jan 9 2019 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口2 的功能,如果需使用更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 开机时如果不能打印 RT-Thread 版本信息,请将BSP中串口 GPIO 速率调低 +- 开机时如果不能打印 RT-Thread 版本信息,请重新选择 PC 端串口调试软件的串口号 + +## 联系人信息 + +维护人: + +- [sun_shine](https://github.com/sunshine0824), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32l432-st-nucleo/SConscript b/bsp/stm32/stm32l432-st-nucleo/SConscript new file mode 100644 index 0000000000..fe0ae941ae --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32l432-st-nucleo/SConstruct b/bsp/stm32/stm32l432-st-nucleo/SConstruct new file mode 100644 index 0000000000..f28e552248 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/SConstruct @@ -0,0 +1,58 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32L4xx_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/stm32l432-st-nucleo/applications/SConscript b/bsp/stm32/stm32l432-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..4939638d41 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/applications/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [str(Dir('#')), cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32l432-st-nucleo/applications/main.c b/bsp/stm32/stm32l432-st-nucleo/applications/main.c new file mode 100644 index 0000000000..50f76b2e87 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-11 sun_shine first edition + */ + +#include +#include +#include +#include "drv_gpio.h" +/* defined the LED0 pin: PB3 */ +#define LED0_PIN GET_PIN(B, 3) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..8f1d011016 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/.mxproject @@ -0,0 +1,13 @@ +[PreviousGenFiles] +HeaderPath=D:/rtt/rt-thread/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc +HeaderFiles=stm32l4xx_it.h;stm32l4xx_hal_conf.h;main.h; +SourcePath=D:/rtt/rt-thread/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src +SourceFiles=stm32l4xx_it.c;stm32l4xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h;Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l432xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/system_stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32l4xx_it.c;..\Src\stm32l4xx_hal_msp.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;../\Src/system_stm32l4xx.c;../Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;null; +HeaderPath=..\Drivers\STM32L4xx_HAL_Driver\Inc;..\Drivers\STM32L4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32L4xx\Include;..\Drivers\CMSIS\Include;..\Inc; + diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..2d6b3677c5 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,169 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=true +Mcu.Family=STM32L4 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART2 +Mcu.IPNb=4 +Mcu.Name=STM32L432K(B-C)Ux +Mcu.Package=UFQFPN32 +Mcu.Pin0=PC14-OSC32_IN (PC14) +Mcu.Pin1=PC15-OSC32_OUT (PC15) +Mcu.Pin2=PA0 +Mcu.Pin3=PA2 +Mcu.Pin4=PA13 (JTMS-SWDIO) +Mcu.Pin5=PA14 (JTCK-SWCLK) +Mcu.Pin6=PA15 (JTDI) +Mcu.Pin7=PB3 (JTDO-TRACESWO) +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32L432KCUx +MxCube.Version=4.27.0 +MxDb.Version=DB.4.0.270 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false +PA0.GPIOParameters=GPIO_Label +PA0.GPIO_Label=MCO [High speed clock in] +PA0.Locked=true +PA0.Mode=HSE-External-Clock-Source-for-LittleOrca +PA0.Signal=RCC_CK_IN +PA13\ (JTMS-SWDIO).GPIOParameters=GPIO_Label +PA13\ (JTMS-SWDIO).GPIO_Label=SWDIO +PA13\ (JTMS-SWDIO).Locked=true +PA13\ (JTMS-SWDIO).Mode=Serial_Wire +PA13\ (JTMS-SWDIO).Signal=SYS_JTMS-SWDIO +PA14\ (JTCK-SWCLK).GPIOParameters=GPIO_Label +PA14\ (JTCK-SWCLK).GPIO_Label=SWCLK +PA14\ (JTCK-SWCLK).Locked=true +PA14\ (JTCK-SWCLK).Mode=Serial_Wire +PA14\ (JTCK-SWCLK).Signal=SYS_JTCK-SWCLK +PA15\ (JTDI).GPIOParameters=GPIO_Speed,GPIO_Label +PA15\ (JTDI).GPIO_Label=VCP_RX +PA15\ (JTDI).GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PA15\ (JTDI).Locked=true +PA15\ (JTDI).Mode=Asynchronous +PA15\ (JTDI).Signal=USART2_RX +PA2.GPIOParameters=GPIO_Speed,GPIO_Label +PA2.GPIO_Label=VCP_TX +PA2.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PB3\ (JTDO-TRACESWO).GPIOParameters=GPIO_Label +PB3\ (JTDO-TRACESWO).GPIO_Label=LD3 [Green] +PB3\ (JTDO-TRACESWO).Locked=true +PB3\ (JTDO-TRACESWO).Signal=GPIO_Output +PC14-OSC32_IN\ (PC14).Locked=true +PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator +PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN +PC15-OSC32_OUT\ (PC15).Locked=true +PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator +PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT +PCC.Checker=true +PCC.Line=STM32L4x2 +PCC.MCU=STM32L432K(B-C)Ux +PCC.PartNumber=STM32L432KCUx +PCC.Seq0=0 +PCC.Series=STM32L4 +PCC.Temperature=25 +PCC.Vdd=null +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=STM32L432KCUx +ProjectManager.FirmwarePackage=STM32Cube FW_L4 V1.13.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true +RCC.48CLKFreq_Value=24000000 +RCC.AHBFreq_Value=32000000 +RCC.APB1Freq_Value=32000000 +RCC.APB1TimFreq_Value=32000000 +RCC.APB2Freq_Value=32000000 +RCC.APB2TimFreq_Value=32000000 +RCC.CortexFreq_Value=32000000 +RCC.FCLKCortexFreq_Value=32000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=32000000 +RCC.HSE_VALUE=8000000 +RCC.HSI16_VALUE=16000000 +RCC.HSI48_VALUE=48000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=32000000 +RCC.I2C2Freq_Value=16000000 +RCC.I2C3Freq_Value=32000000 +RCC.IPParameters=48CLKFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI16_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,LCDFreq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIMFreq_Value,LPUART1Freq_Value,LPUARTFreq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MCOPinFreq_Value,MSI_VALUE,PLLCLKFreq_Value,PLLMUL,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PWRFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SAI1Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,TIMFreq_Value,TimerFreq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,WatchDogFreq_Value +RCC.LCDFreq_Value=37000 +RCC.LPTIM1Freq_Value=32000000 +RCC.LPTIM2Freq_Value=32000000 +RCC.LPTIMFreq_Value=32000000 +RCC.LPUART1Freq_Value=32000000 +RCC.LPUARTFreq_Value=32000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=32000000 +RCC.MCOPinFreq_Value=32000000 +RCC.MSI_VALUE=4000000 +RCC.PLLCLKFreq_Value=32000000 +RCC.PLLMUL=RCC_PLLMUL_4 +RCC.PLLN=16 +RCC.PLLPoutputFreq_Value=9142857.142857144 +RCC.PLLQoutputFreq_Value=32000000 +RCC.PLLRCLKFreq_Value=32000000 +RCC.PLLSAI1PoutputFreq_Value=4571428.571428572 +RCC.PLLSAI1QoutputFreq_Value=16000000 +RCC.PLLSAI1RoutputFreq_Value=16000000 +RCC.PWRFreq_Value=32000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SAI1Freq_Value=4571428.571428572 +RCC.SWPMI1Freq_Value=32000000 +RCC.SYSCLKFreq_VALUE=32000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TIMFreq_Value=32000000 +RCC.TimerFreq_Value=32000000 +RCC.USART1Freq_Value=32000000 +RCC.USART2Freq_Value=32000000 +RCC.USART3Freq_Value=16000000 +RCC.VCOInputFreq_Value=4000000 +RCC.VCOOutputFreq_Value=64000000 +RCC.VCOSAI1OutputFreq_Value=32000000 +RCC.WatchDogFreq_Value=32000 +USART2.IPParameters=VirtualMode-Asynchronous +USART2.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-L432KC +boardIOC=true diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..85abbc2bea --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,88 @@ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H__ +#define __MAIN_H__ + +/* Includes ------------------------------------------------------------------*/ + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private define ------------------------------------------------------------*/ + +#define MCO_Pin GPIO_PIN_0 +#define MCO_GPIO_Port GPIOA +#define VCP_TX_Pin GPIO_PIN_2 +#define VCP_TX_GPIO_Port GPIOA +#define SWDIO_Pin GPIO_PIN_13 +#define SWDIO_GPIO_Port GPIOA +#define SWCLK_Pin GPIO_PIN_14 +#define SWCLK_GPIO_Port GPIOA +#define VCP_RX_Pin GPIO_PIN_15 +#define VCP_RX_GPIO_Port GPIOA +#define LD3_Pin GPIO_PIN_3 +#define LD3_GPIO_Port GPIOB + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus + extern "C" { +#endif +void _Error_Handler(char *, int); + +#define Error_Handler() _Error_Handler(__FILE__, __LINE__) +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H__ */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h new file mode 100644 index 0000000000..ca4919858d --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h @@ -0,0 +1,435 @@ +/** + ****************************************************************************** + * @file stm32l4xx_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 __STM32L4xx_HAL_CONF_H +#define __STM32L4xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "main.h" +/* 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_COMP_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_DFSDM_MODULE_ENABLED */ +/*#define HAL_DSI_MODULE_ENABLED */ +/*#define HAL_FIREWALL_MODULE_ENABLED */ +/*#define HAL_GFXMMU_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_HASH_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LTDC_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_OPAMP_MODULE_ENABLED */ +/*#define HAL_OSPI_MODULE_ENABLED */ +/*#define HAL_OSPI_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_QSPI_MODULE_ENABLED */ +/*#define HAL_QSPI_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SAI_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_SWPMI_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +/*#define HAL_TSC_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_I2C_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 + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)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 Multiple Speed oscillator (MSI) default value. + * This value is the default MSI range value after Reset. + */ +#if !defined (MSI_VALUE) + #define MSI_VALUE ((uint32_t)4000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ +/** + * @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 High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. + * This internal oscillator is mainly dedicated to provide a high precision clock to + * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. + * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency + * which is subject to manufacturing process variations. + */ +#if !defined (HSI48_VALUE) + #define HSI48_VALUE ((uint32_t)48000000U) /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. + The real value my vary depending on manufacturing process variations.*/ +#endif /* HSI48_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. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External 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 /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for SAI1 peripheral + * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source + * frequency. + */ +#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) + #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000U) /*!< Value of the SAI1 External clock source in Hz*/ +#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ + +/** + * @brief External clock source for SAI2 peripheral + * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source + * frequency. + */ +#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) + #define EXTERNAL_SAI2_CLOCK_VALUE ((uint32_t)48000U) /*!< Value of the SAI2 External clock source in Hz*/ +#endif /* EXTERNAL_SAI2_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 0U +#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 */ + +/* ################## 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 "stm32l4xx_hal_rcc.h" + #include "stm32l4xx_hal_rcc_ex.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32l4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32l4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32l4xx_hal_dma.h" + #include "stm32l4xx_hal_dma_ex.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32l4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32l4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32l4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32l4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32l4xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32l4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32l4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32l4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32l4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32l4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32l4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_FIREWALL_MODULE_ENABLED + #include "stm32l4xx_hal_firewall.h" +#endif /* HAL_FIREWALL_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32l4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32l4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32l4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32l4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32l4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32l4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32l4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LCD_MODULE_ENABLED + #include "stm32l4xx_hal_lcd.h" +#endif /* HAL_LCD_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32l4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32l4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED + #include "stm32l4xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_OSPI_MODULE_ENABLED + #include "stm32l4xx_hal_ospi.h" +#endif /* HAL_OSPI_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32l4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32l4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32l4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32l4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32l4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32l4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32l4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32l4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SWPMI_MODULE_ENABLED + #include "stm32l4xx_hal_swpmi.h" +#endif /* HAL_SWPMI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32l4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED + #include "stm32l4xx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32l4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32l4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32l4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32l4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32l4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32l4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32l4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_GFXMMU_MODULE_ENABLED + #include "stm32l4xx_hal_gfxmmu.h" +#endif /* HAL_GFXMMU_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 /* __STM32L4xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h new file mode 100644 index 0000000000..d5ad144aff --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file stm32l4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_IT_H +#define __STM32L4xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" +#include "main.h" +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +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); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..f96948047a --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,292 @@ + +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32l4xx_hal.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart2; + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART2_UART_Init(void); + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ + +/* USER CODE END PFP */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * + * @retval None + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration----------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART2_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + + } + /* USER CODE END 3 */ + +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInit; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = 0; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 16; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7; + RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**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_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the Systick interrupt time + */ + HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); + + /**Configure the Systick + */ + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); + + /**Enable MSI Auto calibration + */ + HAL_RCCEx_EnableMSIPLLMode(); + + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +} + +/* USART2 init function */ +static void MX_USART2_UART_Init(void) +{ + + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + +} + +/** Configure pins as + * Analog + * Input + * Output + * EVENT_OUT + * EXTI +*/ +static void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : LD3_Pin */ + GPIO_InitStruct.Pin = LD3_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @param file: The file name as string. + * @param line: The line in file as a number. + * @retval None + */ +void _Error_Handler(char *file, int line) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + while(1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(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/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c new file mode 100644 index 0000000000..154dd3ca55 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c @@ -0,0 +1,153 @@ +/** + ****************************************************************************** + * File Name : stm32l4xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" +extern void _Error_Handler(char *, int); +/* 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(); + + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* System interrupt init*/ + /* MemoryManagement_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0); + /* BusFault_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0); + /* UsageFault_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0); + /* SVCall_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0); + /* DebugMonitor_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0); + /* PendSV_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(PendSV_IRQn, 0, 0); + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + + GPIO_InitTypeDef GPIO_InitStruct; + if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA15 (JTDI) ------> USART2_RX + */ + GPIO_InitStruct.Pin = VCP_TX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(VCP_TX_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = VCP_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; + GPIO_InitStruct.Alternate = GPIO_AF3_USART2; + HAL_GPIO_Init(VCP_RX_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + + if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA15 (JTDI) ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, VCP_TX_Pin|VCP_RX_Pin); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c new file mode 100644 index 0000000000..b938e6265a --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c @@ -0,0 +1,197 @@ +/** + ****************************************************************************** + * @file stm32l4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2019 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" +#include "stm32l4xx.h" +#include "stm32l4xx_it.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/******************************************************************************/ +/* 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 */ + } + /* USER CODE BEGIN HardFault_IRQn 1 */ + + /* USER CODE END HardFault_IRQn 1 */ +} + +/** +* @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 */ + } + /* USER CODE BEGIN MemoryManagement_IRQn 1 */ + + /* USER CODE END MemoryManagement_IRQn 1 */ +} + +/** +* @brief This function handles Prefetch fault, memory access fault. +*/ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } + /* USER CODE BEGIN BusFault_IRQn 1 */ + + /* USER CODE END BusFault_IRQn 1 */ +} + +/** +* @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 */ + } + /* USER CODE BEGIN UsageFault_IRQn 1 */ + + /* USER CODE END UsageFault_IRQn 1 */ +} + +/** +* @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(); + HAL_SYSTICK_IRQHandler(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32L4xx 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_stm32l4xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c new file mode 100644 index 0000000000..c76fe45ee1 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c @@ -0,0 +1,353 @@ +/** + ****************************************************************************** + * @file system_stm32l4xx.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_stm32l4xx.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. + * + * After each device reset the MSI (4 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32l4xx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | MSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 1 + *----------------------------------------------------------------------------- + * PLL_M | 1 + *----------------------------------------------------------------------------- + * PLL_N | 8 + *----------------------------------------------------------------------------- + * PLL_P | 7 + *----------------------------------------------------------------------------- + * PLL_Q | 2 + *----------------------------------------------------------------------------- + * PLL_R | 2 + *----------------------------------------------------------------------------- + * PLLSAI1_P | NA + *----------------------------------------------------------------------------- + * PLLSAI1_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI1_R | NA + *----------------------------------------------------------------------------- + * PLLSAI2_P | NA + *----------------------------------------------------------------------------- + * PLLSAI2_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI2_R | NA + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Disabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2017 STMicroelectronics

    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32l4xx_system + * @{ + */ + +/** @addtogroup STM32L4xx_System_Private_Includes + * @{ + */ + +#include "stm32l4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (MSI_VALUE) + #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< 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 STM32L4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock 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 = 4000000U; + + const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U}; + const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint32_t MSIRangeTable[12] = {100000U, 200000U, 400000U, 800000U, 1000000U, 2000000U, \ + 4000000U, 8000000U, 16000000U, 24000000U, 32000000U, 48000000U}; +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @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 MSION bit */ + RCC->CR |= RCC_CR_MSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000U; + + /* Reset HSEON, CSSON , HSION, and PLLON bits */ + RCC->CR &= 0xEAF6FFFFU; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x00001000U; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000U; + + /* 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 MSI, SystemCoreClock will contain the MSI_VALUE(*) + * + * - 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(*) or MSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) MSI_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSI_VALUE is a constant defined in stm32l4xx_hal.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 stm32l4xx_hal.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0U, msirange = 0U, pllvco = 0U, pllr = 2U, pllsource = 0U, pllm = 2U; + + /* Get MSI Range frequency--------------------------------------------------*/ + if((RCC->CR & RCC_CR_MSIRGSEL) == RESET) + { /* MSISRANGE from RCC_CSR applies */ + msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> 8U; + } + else + { /* MSIRANGE from RCC_CR applies */ + msirange = (RCC->CR & RCC_CR_MSIRANGE) >> 4U; + } + /*MSI frequency range in HZ*/ + msirange = MSIRangeTable[msirange]; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case 0x00: /* MSI used as system clock source */ + SystemCoreClock = msirange; + break; + + case 0x04: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + + case 0x08: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + + case 0x0C: /* PLL used as system clock source */ + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4U) + 1U ; + + switch (pllsource) + { + case 0x02: /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm); + break; + + case 0x03: /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm); + break; + + default: /* MSI used as PLL clock source */ + pllvco = (msirange / pllm); + break; + } + pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8U); + pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25U) + 1U) * 2U; + SystemCoreClock = pllvco/pllr; + break; + + default: + SystemCoreClock = msirange; + break; + } + /* Compute HCLK clock frequency --------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l432-st-nucleo/board/Kconfig b/bsp/stm32/stm32l432-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..d5aca8b2de --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/Kconfig @@ -0,0 +1,45 @@ +menu "Hardware Drivers Config" + +config SOC_STM32L432KC + bool + select SOC_SERIES_STM32L4 + default y + +menu "Onboard Peripheral Drivers" + config BSP_USING_STLINK_TO_USART + bool "Enable STLINK TO USART (uart2)" + select BSP_USING_UART + select BSP_USING_UART2 + default y +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART2 + bool "Enable UART2" + default n + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + endif + + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32l432-st-nucleo/board/SConscript b/bsp/stm32/stm32l432-st-nucleo/board/SConscript new file mode 100644 index 0000000000..95e0d8ecc4 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/SConscript @@ -0,0 +1,39 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32l4xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l432xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/arm/startup_stm32l432xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/iar/startup_stm32l432xx.s'] + +# STM32L412xx || STM32L422xx || STM32L431xx +# STM32L432xx || STM32L433xx || STM32L442xx +# STM32L443xx || STM32L451xx || STM32L452xx +# STM32L462xx || STM32L471xx || STM32L475xx +# STM32L476xx || STM32L485xx || STM32L486xx +# STM32L496xx || STM32L4A6xx || STM32L4R5xx +# STM32L4R7xx || STM32L4R9xx || STM32L4S5xx +# STM32L4S7xx || STM32L4S9xx +# You can select chips from the list above +CPPDEFINES = ['STM32L432xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32l432-st-nucleo/board/board.c b/bsp/stm32/stm32l432-st-nucleo/board/board.c new file mode 100644 index 0000000000..924350eaa0 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/board.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInit; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = 0; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 16; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7; + RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**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_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the Systick interrupt time + */ + HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); + + /**Configure the Systick + */ + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); + + /**Enable MSI Auto calibration + */ + HAL_RCCEx_EnableMSIPLLMode(); + + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +} diff --git a/bsp/stm32/stm32l432-st-nucleo/board/board.h b/bsp/stm32/stm32l432-st-nucleo/board/board.h new file mode 100644 index 0000000000..e2f50c33d8 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/board.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift change to new framework + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (256 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM1_SIZE (48) +#define STM32_SRAM1_START (0x20000000) +#define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024) + +#define HEAP_BEGIN STM32_SRAM1_START +#define HEAP_END STM32_SRAM1_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..384efc347d --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.icf @@ -0,0 +1,33 @@ +/*###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__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM1_end__ = 0x2000BFFF; +define symbol __ICFEDIT_region_RAM2_start__ = 0x10000000; +define symbol __ICFEDIT_region_RAM2_end__ = 0x10003FFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__]; +define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM1_region { section .sram }; +place in RAM2_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..82a4371c68 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,144 @@ +/* + * linker script for STM32L4XX with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 256k /* 256KB flash */ + RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 48k /* 48K sram */ + RAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16k /* 16K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM2 + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM2 + + __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) + } > RAM2 + __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/stm32l432-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..ed86f920e0 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM2 0x10000000 0x00004000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32l432-st-nucleo/figures/board.jpg b/bsp/stm32/stm32l432-st-nucleo/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae66ff86c32022ab3d98c21d5cd98cb501850ecd GIT binary patch literal 118884 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
    &&+Z1ZnDD`;k#g>R`sP(ASHTSfg*L8)fyo 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 literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32l432-st-nucleo/project.ewd b/bsp/stm32/stm32l432-st-nucleo/project.ewd new file mode 100644 index 0000000000..4b27053590 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/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/stm32l432-st-nucleo/project.ewp b/bsp/stm32/stm32l432-st-nucleo/project.ewp new file mode 100644 index 0000000000..669952b8e4 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/project.ewp @@ -0,0 +1,2275 @@ + + 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\stm32l4xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\iar\startup_stm32l432xx.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 + + + + CORTEX-M4 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + + + diff --git a/bsp/stm32/stm32l432-st-nucleo/project.eww b/bsp/stm32/stm32l432-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32l432-st-nucleo/project.uvoptx b/bsp/stm32/stm32l432-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..5b23b3917f --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/project.uvoptx @@ -0,0 +1,1002 @@ + + + + 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 + 5 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U066AFF534854845187093307 -O206 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + JL2CM3 + -U -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32L475VETx$CMSIS\Flash\STM32L4xx_512.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + 0 + + 1 + 0 + 2 + 10000000 + + + + + + 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 + 0 + 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\stm32l4xx_hal_msp.c + stm32l4xx_hal_msp.c + 0 + 0 + + + 3 + 19 + 2 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l432xx.s + startup_stm32l432xx.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\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + system_stm32l4xx.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + stm32l4xx_hal.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + stm32l4xx_hal_comp.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + stm32l4xx_hal_cortex.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + stm32l4xx_hal_crc.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + stm32l4xx_hal_crc_ex.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + stm32l4xx_hal_cryp.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + stm32l4xx_hal_cryp_ex.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + stm32l4xx_hal_dma.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + stm32l4xx_hal_dma_ex.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + stm32l4xx_hal_exti.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + stm32l4xx_hal_pwr.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + stm32l4xx_hal_pwr_ex.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + stm32l4xx_hal_rcc.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + stm32l4xx_hal_rcc_ex.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + stm32l4xx_hal_rng.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sram.c + stm32l4xx_hal_sram.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + stm32l4xx_hal_gpio.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + stm32l4xx_hal_uart.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + stm32l4xx_hal_uart_ex.c + 0 + 0 + + + 7 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + stm32l4xx_hal_usart.c + 0 + 0 + + + 7 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + stm32l4xx_hal_usart_ex.c + 0 + 0 + + + +
    diff --git a/bsp/stm32/stm32l432-st-nucleo/project.uvprojx b/bsp/stm32/stm32l432-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..8d3433961a --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/project.uvprojx @@ -0,0 +1,738 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060300::V5.06 update 3 (build 300)::ARMCC + + + STM32L432KCUx + STMicroelectronics + Keil.STM32L4xx_DFP.2.0.0 + http://www.keil.com/pack + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L432KCUx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L432KCUx$CMSIS\SVD\STM32L4x2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 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 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32L432xx + + .;..\..\..\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\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Inc;..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Include;..\libraries\STM32L4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) + + + + + + + + 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 + + + stm32l4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + + + startup_stm32l432xx.s + 2 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l432xx.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_stm32l4xx.c + 1 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + + + stm32l4xx_hal.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + stm32l4xx_hal_comp.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + + + stm32l4xx_hal_cortex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + stm32l4xx_hal_crc.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + + + stm32l4xx_hal_crc_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + + + stm32l4xx_hal_cryp.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + + + stm32l4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + + + stm32l4xx_hal_dma.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + stm32l4xx_hal_dma_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + stm32l4xx_hal_exti.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + + + stm32l4xx_hal_pwr.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + stm32l4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + stm32l4xx_hal_rcc.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + stm32l4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + stm32l4xx_hal_rng.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + + + stm32l4xx_hal_sram.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sram.c + + + stm32l4xx_hal_gpio.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + stm32l4xx_hal_uart.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + stm32l4xx_hal_uart_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + stm32l4xx_hal_usart.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + + + stm32l4xx_hal_usart_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + + + + + + + +
    diff --git a/bsp/stm32/stm32l432-st-nucleo/rtconfig.h b/bsp/stm32/stm32l432-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..3edb6a46c2 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/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 + +/* 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 256 +#define RT_CONSOLE_DEVICE_NAME "uart2" +#define RT_VER_NUM 0x40000 +#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_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* ARM CMSIS */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* sample package */ + +/* samples: kernel and components samples */ + + +/* example package: hello */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32L4 + +/* Hardware Drivers Config */ + +#define SOC_STM32L432KC + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_STLINK_TO_USART + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART2 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32l432-st-nucleo/rtconfig.py b/bsp/stm32/stm32l432-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..d632114e2d --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/rtconfig.py @@ -0,0 +1,134 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'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 + ' -std=c99 -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict --scatter "board\linker_scripts\link.sct"' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M4' + AFLAGS += ' --fpu VFPv4_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32l432-st-nucleo/template.ewp b/bsp/stm32/stm32l432-st-nucleo/template.ewp new file mode 100644 index 0000000000..f390ad7bc1 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/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/stm32l432-st-nucleo/template.eww b/bsp/stm32/stm32l432-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32l432-st-nucleo/template.uvoptx b/bsp/stm32/stm32l432-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..d18ee55260 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/template.uvoptx @@ -0,0 +1,186 @@ + + + + 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 + 5 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U066AFF534854845187093307 -O206 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + JL2CM3 + -U -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32L475VETx$CMSIS\Flash\STM32L4xx_512.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + 0 + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32l432-st-nucleo/template.uvprojx b/bsp/stm32/stm32l432-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..01e792faf7 --- /dev/null +++ b/bsp/stm32/stm32l432-st-nucleo/template.uvprojx @@ -0,0 +1,386 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060300::V5.06 update 3 (build 300)::ARMCC + + + STM32L432KCUx + STMicroelectronics + Keil.STM32L4xx_DFP.2.0.0 + http://www.keil.com/pack + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L432KCUx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L432KCUx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L432KCUx$CMSIS\SVD\STM32L4x2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 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 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 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 f4f81460cfcc65dbbdfac0a6b065a2653753e3f9 Mon Sep 17 00:00:00 2001 From: jinsheng <12907063+jinsheng20@users.noreply.github.com> Date: Wed, 16 Jan 2019 13:18:25 +0800 Subject: [PATCH 24/26] Update README.md --- bsp/stm32/stm32f746-st-disco/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/stm32/stm32f746-st-disco/README.md b/bsp/stm32/stm32f746-st-disco/README.md index 0177bce226..c725b207c5 100644 --- a/bsp/stm32/stm32f746-st-disco/README.md +++ b/bsp/stm32/stm32f746-st-disco/README.md @@ -37,7 +37,7 @@ STM32F746-disco 是 ST 推出的一款基于 ARM Cortex-M7 内核的开发板, 本 BSP 目前对外设的支持情况如下: | **板载外设** | **支持情况** | **备注** | | :----------------- | :----------: | :------------------------------------- | -| 板载 ST-LINK 转串口 | 支持 | UART1 | +| USB 转串口 | 支持 | UART1 | | QSPI Flash | 暂不支持 | | | 以太网 | 暂不支持 | | | SDRAM | 暂不支持 | | From e45d7da503c04e6a8b83079b474c222eadfa6818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=BF=8E=E6=98=A5?= <44871523+chenyingchun0312@users.noreply.github.com> Date: Wed, 16 Jan 2019 13:21:20 +0800 Subject: [PATCH 25/26] Update serial.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "remove #ifdef RT_SERIAL_USING_DMA in rt_serial_open, always check device open dma flag" --- components/drivers/serial/serial.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index c5932df7d9..77f2a645a1 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -566,13 +566,11 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) LOG_D("open serial device: 0x%08x with open flag: 0x%04x", dev, oflag); -#ifdef RT_SERIAL_USING_DMA /* check device flag with the open flag */ if ((oflag & RT_DEVICE_FLAG_DMA_RX) && !(dev->flag & RT_DEVICE_FLAG_DMA_RX)) return -RT_EIO; if ((oflag & RT_DEVICE_FLAG_DMA_TX) && !(dev->flag & RT_DEVICE_FLAG_DMA_TX)) return -RT_EIO; -#endif /* RT_SERIAL_USING_DMA */ if ((oflag & RT_DEVICE_FLAG_INT_RX) && !(dev->flag & RT_DEVICE_FLAG_INT_RX)) return -RT_EIO; if ((oflag & RT_DEVICE_FLAG_INT_TX) && !(dev->flag & RT_DEVICE_FLAG_INT_TX)) From ad7f6f3588e583c0597a2e0ef6ab1c474e2f7bc4 Mon Sep 17 00:00:00 2001 From: weety Date: Wed, 16 Jan 2019 14:56:42 +0800 Subject: [PATCH 26/26] [bsp][k210] Fixed Kconfig file Syntax error. --- bsp/k210/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/k210/Kconfig b/bsp/k210/Kconfig index ccb4adf6dc..3d1f1315f5 100644 --- a/bsp/k210/Kconfig +++ b/bsp/k210/Kconfig @@ -8,7 +8,7 @@ config $BSP_DIR config $RTT_DIR string option env="RTT_ROOT" - default: "../.." + default "../.." config $PKGS_DIR string
  • 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